// File: icemiliang[P]vot/src/vot/ot.cc
// Function: vot::OT::read_empirical_from_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void OT::read_empirical_from_file(std::string pFilename) {
        std::string line, temp, tempNumM;
        std::ifstream measureFile(pFilename);
        getline(measureFile, line);
        std::stringstream pLine(line);
        pLine >> temp >> tempNumM;
        int numM = stoi(tempNumM);
        // x, y, z, mass, diracIndex
        std::string x, y, z, m, dIdx;
        for (int i = 0; i < numM; i++) {
            getline(measureFile, line);
            std::stringstream pLine(line);
            pLine >> x >> y >> z >> m >> dIdx;
            if (dIdx.empty()) dIdx = "-1";
            // All measures are non-negative
            assert(stod(m) >= 0.0);

            // Add an empirical measure to mDiagram
            mDiagram->add_empirical(stod(x), stod(y), stod(z), stod(m), stoi(dIdx));
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6d0, %rsp            # imm = 0x6D0
movq %rsi, -0x650(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x658(%rbp)
leaq -0x30(%rbp), %rdi
callq 0xa700
leaq -0x50(%rbp), %rdi
callq 0xa700
leaq -0x70(%rbp), %rdi
callq 0xa700
movq -0x650(%rbp), %rsi
leaq -0x278(%rbp), %rdi
movl $0x8, %edx
callq 0xa880
jmp 0x4121a
leaq -0x278(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0e0
jmp 0x4122c
movl $0x10, %edi
movl $0x8, %esi
callq 0x41ab0
movl %eax, -0x65c(%rbp)
jmp 0x41243
movl -0x65c(%rbp), %edx
leaq -0x410(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa840
jmp 0x4125b
leaq -0x410(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0xa630
movq %rax, -0x668(%rbp)
jmp 0x41274
movq -0x668(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0xa630
jmp 0x41286
xorl %eax, %eax
movl %eax, %esi
leaq -0x70(%rbp), %rdi
movl $0xa, %edx
callq 0x41ad0
movl %eax, -0x66c(%rbp)
jmp 0x412a0
movl -0x66c(%rbp), %eax
movl %eax, -0x414(%rbp)
leaq -0x438(%rbp), %rdi
callq 0xa700
leaq -0x458(%rbp), %rdi
callq 0xa700
leaq -0x478(%rbp), %rdi
callq 0xa700
leaq -0x498(%rbp), %rdi
callq 0xa700
leaq -0x4b8(%rbp), %rdi
callq 0xa700
movl $0x0, -0x4bc(%rbp)
movl -0x4bc(%rbp), %eax
cmpl -0x414(%rbp), %eax
jge 0x415ab
leaq -0x278(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0e0
jmp 0x41316
movl $0x10, %edi
movl $0x8, %esi
callq 0x41ab0
movl %eax, -0x670(%rbp)
jmp 0x4132d
movl -0x670(%rbp), %edx
leaq -0x648(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa840
jmp 0x41345
leaq -0x648(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0xa630
movq %rax, -0x678(%rbp)
jmp 0x41361
movq -0x678(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0xa630
movq %rax, -0x680(%rbp)
jmp 0x4137d
movq -0x680(%rbp), %rdi
leaq -0x478(%rbp), %rsi
callq 0xa630
movq %rax, -0x688(%rbp)
jmp 0x41399
movq -0x688(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0xa630
movq %rax, -0x690(%rbp)
jmp 0x413b5
movq -0x690(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0xa630
jmp 0x413ca
leaq -0x4b8(%rbp), %rdi
callq 0xa8c0
testb $0x1, %al
jne 0x413df
jmp 0x41475
leaq 0x52b7e(%rip), %rsi     # 0x93f64
leaq -0x4b8(%rbp), %rdi
callq 0xa6d0
jmp 0x413f4
jmp 0x41475
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x280(%rbp)
movl %eax, -0x284(%rbp)
jmp 0x41677
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x280(%rbp)
movl %eax, -0x284(%rbp)
jmp 0x4166b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x280(%rbp)
movl %eax, -0x284(%rbp)
jmp 0x4165f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x280(%rbp)
movl %eax, -0x284(%rbp)
jmp 0x41623
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x280(%rbp)
movl %eax, -0x284(%rbp)
leaq -0x648(%rbp), %rdi
callq 0xa3a0
jmp 0x41623
xorl %eax, %eax
movl %eax, %esi
leaq -0x498(%rbp), %rdi
callq 0x41b10
movsd %xmm0, -0x698(%rbp)
jmp 0x4148f
movsd -0x698(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x414a2
jmp 0x414c1
leaq 0x52abe(%rip), %rdi     # 0x93f67
leaq 0x52a7e(%rip), %rsi     # 0x93f2e
movl $0x3e, %edx
leaq 0x52aba(%rip), %rcx     # 0x93f76
callq 0xa330
movq -0x658(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x6a8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x438(%rbp), %rdi
callq 0x41b10
movsd %xmm0, -0x6a0(%rbp)
jmp 0x414ec
xorl %eax, %eax
movl %eax, %esi
leaq -0x458(%rbp), %rdi
callq 0x41b10
movsd %xmm0, -0x6b0(%rbp)
jmp 0x41506
xorl %eax, %eax
movl %eax, %esi
leaq -0x478(%rbp), %rdi
callq 0x41b10
movsd %xmm0, -0x6b8(%rbp)
jmp 0x41520
xorl %eax, %eax
movl %eax, %esi
leaq -0x498(%rbp), %rdi
callq 0x41b10
movsd %xmm0, -0x6c0(%rbp)
jmp 0x4153a
xorl %eax, %eax
movl %eax, %esi
leaq -0x4b8(%rbp), %rdi
movl $0xa, %edx
callq 0x41ad0
movl %eax, -0x6c4(%rbp)
jmp 0x41557
movl -0x6c4(%rbp), %esi
movsd -0x6c0(%rbp), %xmm3
movsd -0x6b8(%rbp), %xmm2
movsd -0x6b0(%rbp), %xmm1
movsd -0x6a0(%rbp), %xmm0
movq -0x6a8(%rbp), %rdi
callq 0x1f120
jmp 0x4158b
leaq -0x648(%rbp), %rdi
callq 0xa3a0
movl -0x4bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4bc(%rbp)
jmp 0x412f2
leaq -0x4b8(%rbp), %rdi
callq 0xaaa8
leaq -0x498(%rbp), %rdi
callq 0xaaa8
leaq -0x478(%rbp), %rdi
callq 0xaaa8
leaq -0x458(%rbp), %rdi
callq 0xaaa8
leaq -0x438(%rbp), %rdi
callq 0xaaa8
leaq -0x410(%rbp), %rdi
callq 0xa3a0
leaq -0x278(%rbp), %rdi
callq 0xa140
leaq -0x70(%rbp), %rdi
callq 0xaaa8
leaq -0x50(%rbp), %rdi
callq 0xaaa8
leaq -0x30(%rbp), %rdi
callq 0xaaa8
addq $0x6d0, %rsp            # imm = 0x6D0
popq %rbp
retq
leaq -0x4b8(%rbp), %rdi
callq 0xaaa8
leaq -0x498(%rbp), %rdi
callq 0xaaa8
leaq -0x478(%rbp), %rdi
callq 0xaaa8
leaq -0x458(%rbp), %rdi
callq 0xaaa8
leaq -0x438(%rbp), %rdi
callq 0xaaa8
leaq -0x410(%rbp), %rdi
callq 0xa3a0
leaq -0x278(%rbp), %rdi
callq 0xa140
leaq -0x70(%rbp), %rdi
callq 0xaaa8
leaq -0x50(%rbp), %rdi
callq 0xaaa8
leaq -0x30(%rbp), %rdi
callq 0xaaa8
movq -0x280(%rbp), %rdi
callq 0xa950
nop