next                                                                                                                                                                                
 dogecoin/src/test/script_tests.cpp:479                                                  │ bitcoin/src/test/script_tests.cpp:457                                                    
                                                                                         │                                                                                          
    const KeyData keys;                                                                  │      const KeyData keys;                                                                 
                                                                                         │                                                                                          
    std::vector<TestBuilder> tests;                                                      │      std::vector<TestBuilder> tests;                                                     
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2PK", 0                                                │                                  "P2PK", 0                                               
                               ).PushSig(keys.key0));                                    │                                 ).PushSig(keys.key0));                                   
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2PK, bad sig", 0                                       │                                  "P2PK, bad sig", 0                                      
                               ).PushSig(keys.key0).DamagePush(10).ScriptError(SCRIPT_ER │                                 ).PushSig(keys.key0).DamagePush(10).ScriptError(SCRIPT_ER
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p │      tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p
                                "P2PKH", 0                                               │                                  "P2PKH", 0                                              
                               ).PushSig(keys.key1).Push(keys.pubkey1C));                │                                 ).PushSig(keys.key1).Push(keys.pubkey1C));               
    tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p │      tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p
                                "P2PKH, bad pubkey", 0                                   │                                  "P2PKH, bad pubkey", 0                                  
                               ).PushSig(keys.key2).Push(keys.pubkey2C).DamagePush(5).Sc │                                 ).PushSig(keys.key2).Push(keys.pubkey2C).DamagePush(5).Sc
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "P2PK anyonecanpay", 0                                   │                                  "P2PK anyonecanpay", 0                                  
                               ).PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY)) │                                 ).PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY))
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "P2PK anyonecanpay marked with normal hashtype", 0       │                                  "P2PK anyonecanpay marked with normal hashtype", 0      
                               ).PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY). │                                 ).PushSig(keys.key1, SIGHASH_ALL | SIGHASH_ANYONECANPAY).
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG,
                                "P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true                   │                                  "P2SH(P2PK)", SCRIPT_VERIFY_P2SH, true                  
                               ).PushSig(keys.key0).PushRedeem());                       │                                 ).PushSig(keys.key0).PushRedeem());                      
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG,
                                "P2SH(P2PK), bad redeemscript", SCRIPT_VERIFY_P2SH, true │                                  "P2SH(P2PK), bad redeemscript", SCRIPT_VERIFY_P2SH, true
                               ).PushSig(keys.key0).PushRedeem().DamagePush(10).ScriptEr │                                 ).PushSig(keys.key0).PushRedeem().DamagePush(10).ScriptEr
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p │      tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p
                                "P2SH(P2PKH)", SCRIPT_VERIFY_P2SH, true                  │                                  "P2SH(P2PKH)", SCRIPT_VERIFY_P2SH, true                 
                               ).PushSig(keys.key0).Push(keys.pubkey0).PushRedeem());    │                                 ).PushSig(keys.key0).Push(keys.pubkey0).PushRedeem());   
    tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p │      tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p
                                "P2SH(P2PKH), bad sig but no VERIFY_P2SH", 0, true       │                                  "P2SH(P2PKH), bad sig but no VERIFY_P2SH", 0, true      
                               ).PushSig(keys.key0).DamagePush(10).PushRedeem());        │                                 ).PushSig(keys.key0).DamagePush(10).PushRedeem());       
    tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p │      tests.push_back(TestBuilder(CScript() << OP_DUP << OP_HASH160 << ToByteVector(keys.p
                                "P2SH(P2PKH), bad sig", SCRIPT_VERIFY_P2SH, true         │                                  "P2SH(P2PKH), bad sig", SCRIPT_VERIFY_P2SH, true        
                               ).PushSig(keys.key0).DamagePush(10).PushRedeem().ScriptEr │                                 ).PushSig(keys.key0).DamagePush(10).PushRedeem().ScriptEr
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3", 0                                              │                                  "3-of-3", 0                                             
                               ).Num(0).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke │                                 ).Num(0).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3, 2 sigs", 0                                      │                                  "3-of-3, 2 sigs", 0                                     
                               ).Num(0).PushSig(keys.key0).PushSig(keys.key1).Num(0).Scr │                                 ).Num(0).PushSig(keys.key0).PushSig(keys.key1).Num(0).Scr
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) << ToBy
                                "P2SH(2-of-3)", SCRIPT_VERIFY_P2SH, true                 │                                  "P2SH(2-of-3)", SCRIPT_VERIFY_P2SH, true                
                               ).Num(0).PushSig(keys.key1).PushSig(keys.key2).PushRedeem │                                 ).Num(0).PushSig(keys.key1).PushSig(keys.key2).PushRedeem
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) << ToBy
                                "P2SH(2-of-3), 1 sig", SCRIPT_VERIFY_P2SH, true          │                                  "P2SH(2-of-3), 1 sig", SCRIPT_VERIFY_P2SH, true         
                               ).Num(0).PushSig(keys.key1).Num(0).PushRedeem().ScriptErr │                                 ).Num(0).PushSig(keys.key1).Num(0).PushRedeem().ScriptErr
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too much R padding but no DERSIG", 0          │                                  "P2PK with too much R padding but no DERSIG", 0         
                               ).PushSig(keys.key1, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 31, 32).EditPush(1, "43
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too much R padding", SCRIPT_VERIFY_DERSIG     │                                  "P2PK with too much R padding", SCRIPT_VERIFY_DERSIG    
                               ).PushSig(keys.key1, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 31, 32).EditPush(1, "43
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too much S padding but no DERSIG", 0          │                                  "P2PK with too much S padding but no DERSIG", 0         
                               ).PushSig(keys.key1, SIGHASH_ALL).EditPush(1, "44", "45") │                                 ).PushSig(keys.key1, SIGHASH_ALL).EditPush(1, "44", "45")
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too much S padding", SCRIPT_VERIFY_DERSIG     │                                  "P2PK with too much S padding", SCRIPT_VERIFY_DERSIG    
                               ).PushSig(keys.key1, SIGHASH_ALL).EditPush(1, "44", "45") │                                 ).PushSig(keys.key1, SIGHASH_ALL).EditPush(1, "44", "45")
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too little R padding but no DERSIG", 0        │                                  "P2PK with too little R padding but no DERSIG", 0       
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "P2PK with too little R padding", SCRIPT_VERIFY_DERSIG   │                                  "P2PK with too little R padding", SCRIPT_VERIFY_DERSIG  
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG 
                                "P2PK NOT with bad sig with too much R padding but no DE │                                  "P2PK NOT with bad sig with too much R padding but no DE
                               ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG 
                                "P2PK NOT with bad sig with too much R padding", SCRIPT_ │                                  "P2PK NOT with bad sig with too much R padding", SCRIPT_
                               ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG 
                                "P2PK NOT with too much R padding but no DERSIG", 0      │                                  "P2PK NOT with too much R padding but no DERSIG", 0     
                               ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG 
                                "P2PK NOT with too much R padding", SCRIPT_VERIFY_DERSIG │                                  "P2PK NOT with too much R padding", SCRIPT_VERIFY_DERSIG
                               ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43 │                                 ).PushSig(keys.key2, SIGHASH_ALL, 31, 32).EditPush(1, "43
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 1, without DERSIG", 0                     │                                  "BIP66 example 1, without DERSIG", 0                    
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 1, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 1, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 2, without DERSIG", 0                     │                                  "BIP66 example 2, without DERSIG", 0                    
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 2, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 2, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45 │                                 ).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush(1, "45
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 3, without DERSIG", 0                     │                                  "BIP66 example 3, without DERSIG", 0                    
                               ).Num(0).ScriptError(SCRIPT_ERR_EVAL_FALSE));             │                                 ).Num(0).ScriptError(SCRIPT_ERR_EVAL_FALSE));            
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 3, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 3, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(0).ScriptError(SCRIPT_ERR_EVAL_FALSE));             │                                 ).Num(0).ScriptError(SCRIPT_ERR_EVAL_FALSE));            
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 4, without DERSIG", 0                     │                                  "BIP66 example 4, without DERSIG", 0                    
                               ).Num(0));                                                │                                 ).Num(0));                                               
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 4, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 4, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(0));                                                │                                 ).Num(0));                                               
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 5, without DERSIG", 0                     │                                  "BIP66 example 5, without DERSIG", 0                    
                               ).Num(1).ScriptError(SCRIPT_ERR_EVAL_FALSE));             │                                 ).Num(1).ScriptError(SCRIPT_ERR_EVAL_FALSE));            
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG,
                                "BIP66 example 5, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 5, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(1).ScriptError(SCRIPT_ERR_SIG_DER));                │                                 ).Num(1).ScriptError(SCRIPT_ERR_SIG_DER));               
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 6, without DERSIG", 0                     │                                  "BIP66 example 6, without DERSIG", 0                    
                               ).Num(1));                                                │                                 ).Num(1));                                               
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1C) << OP_CHECKSIG 
                                "BIP66 example 6, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 6, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(1).ScriptError(SCRIPT_ERR_SIG_DER));                │                                 ).Num(1).ScriptError(SCRIPT_ERR_SIG_DER));               
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 7, without DERSIG", 0                     │                                  "BIP66 example 7, without DERSIG", 0                    
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 7, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 7, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 8, without DERSIG", 0                     │                                  "BIP66 example 8, without DERSIG", 0                    
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 8, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 8, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 9, without DERSIG", 0                     │                                  "BIP66 example 9, without DERSIG", 0                    
                               ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E │                                 ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 9, with DERSIG", SCRIPT_VERIFY_DERSIG     │                                  "BIP66 example 9, with DERSIG", SCRIPT_VERIFY_DERSIG    
                               ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E │                                 ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 10, without DERSIG", 0                    │                                  "BIP66 example 10, without DERSIG", 0                   
                               ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E │                                 ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 10, with DERSIG", SCRIPT_VERIFY_DERSIG    │                                  "BIP66 example 10, with DERSIG", SCRIPT_VERIFY_DERSIG   
                               ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E │                                 ).Num(0).Num(0).PushSig(keys.key2, SIGHASH_ALL, 33, 32).E
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 11, without DERSIG", 0                    │                                  "BIP66 example 11, without DERSIG", 0                   
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 11, with DERSIG", SCRIPT_VERIFY_DERSIG    │                                  "BIP66 example 11, with DERSIG", SCRIPT_VERIFY_DERSIG   
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 12, without DERSIG", 0                    │                                  "BIP66 example 12, without DERSIG", 0                   
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "BIP66 example 12, with DERSIG", SCRIPT_VERIFY_DERSIG    │                                  "BIP66 example 12, with DERSIG", SCRIPT_VERIFY_DERSIG   
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL, 33, 32).EditPush
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2PK with multi-byte hashtype, without DERSIG", 0       │                                  "P2PK with multi-byte hashtype, without DERSIG", 0      
                               ).PushSig(keys.key2, SIGHASH_ALL).EditPush(70, "01", "010 │                                 ).PushSig(keys.key2, SIGHASH_ALL).EditPush(70, "01", "010
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2PK with multi-byte hashtype, with DERSIG", SCRIPT_VER │                                  "P2PK with multi-byte hashtype, with DERSIG", SCRIPT_VER
                               ).PushSig(keys.key2, SIGHASH_ALL).EditPush(70, "01", "010 │                                 ).PushSig(keys.key2, SIGHASH_ALL).EditPush(70, "01", "010
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2PK with high S but no LOW_S", 0                       │                                  "P2PK with high S but no LOW_S", 0                      
                               ).PushSig(keys.key2, SIGHASH_ALL, 32, 33));               │                                 ).PushSig(keys.key2, SIGHASH_ALL, 32, 33));              
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2PK with high S", SCRIPT_VERIFY_LOW_S                  │                                  "P2PK with high S", SCRIPT_VERIFY_LOW_S                 
                               ).PushSig(keys.key2, SIGHASH_ALL, 32, 33).ScriptError(SCR │                                 ).PushSig(keys.key2, SIGHASH_ALL, 32, 33).ScriptError(SCR
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG,
                                "P2PK with hybrid pubkey but no STRICTENC", 0            │                                  "P2PK with hybrid pubkey but no STRICTENC", 0           
                               ).PushSig(keys.key0, SIGHASH_ALL));                       │                                 ).PushSig(keys.key0, SIGHASH_ALL));                      
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG,
                                "P2PK with hybrid pubkey", SCRIPT_VERIFY_STRICTENC       │                                  "P2PK with hybrid pubkey", SCRIPT_VERIFY_STRICTENC      
                               ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_ │                                 ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG 
                                "P2PK NOT with hybrid pubkey but no STRICTENC", 0        │                                  "P2PK NOT with hybrid pubkey but no STRICTENC", 0       
                               ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_ │                                 ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG 
                                "P2PK NOT with hybrid pubkey", SCRIPT_VERIFY_STRICTENC   │                                  "P2PK NOT with hybrid pubkey", SCRIPT_VERIFY_STRICTENC  
                               ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_ │                                 ).PushSig(keys.key0, SIGHASH_ALL).ScriptError(SCRIPT_ERR_
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG 
                                "P2PK NOT with invalid hybrid pubkey but no STRICTENC",  │                                  "P2PK NOT with invalid hybrid pubkey but no STRICTENC", 
                               ).PushSig(keys.key0, SIGHASH_ALL).DamagePush(10));        │                                 ).PushSig(keys.key0, SIGHASH_ALL).DamagePush(10));       
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0H) << OP_CHECKSIG 
                                "P2PK NOT with invalid hybrid pubkey", SCRIPT_VERIFY_STR │                                  "P2PK NOT with invalid hybrid pubkey", SCRIPT_VERIFY_STR
                               ).PushSig(keys.key0, SIGHASH_ALL).DamagePush(10).ScriptEr │                                 ).PushSig(keys.key0, SIGHASH_ALL).DamagePush(10).ScriptEr
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0H) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0H) << ToBy
                                "1-of-2 with the second 1 hybrid pubkey and no STRICTENC │                                  "1-of-2 with the second 1 hybrid pubkey and no STRICTENC
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL));                │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL));               
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0H) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0H) << ToBy
                                "1-of-2 with the second 1 hybrid pubkey", SCRIPT_VERIFY_ │                                  "1-of-2 with the second 1 hybrid pubkey", SCRIPT_VERIFY_
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL));                │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL));               
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "1-of-2 with the first 1 hybrid pubkey", SCRIPT_VERIFY_S │                                  "1-of-2 with the first 1 hybrid pubkey", SCRIPT_VERIFY_S
                               ).Num(0).PushSig(keys.key1, SIGHASH_ALL).ScriptError(SCRI │                                 ).Num(0).PushSig(keys.key1, SIGHASH_ALL).ScriptError(SCRI
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "P2PK with undefined hashtype but no STRICTENC", 0       │                                  "P2PK with undefined hashtype but no STRICTENC", 0      
                               ).PushSig(keys.key1, 5));                                 │                                 ).PushSig(keys.key1, 5));                                
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "P2PK with undefined hashtype", SCRIPT_VERIFY_STRICTENC  │                                  "P2PK with undefined hashtype", SCRIPT_VERIFY_STRICTENC 
                               ).PushSig(keys.key1, 5).ScriptError(SCRIPT_ERR_SIG_HASHTY │                                 ).PushSig(keys.key1, 5).ScriptError(SCRIPT_ERR_SIG_HASHTY
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG < │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG <
                                "P2PK NOT with invalid sig and undefined hashtype but no │                                  "P2PK NOT with invalid sig and undefined hashtype but no
                               ).PushSig(keys.key1, 5).DamagePush(10));                  │                                 ).PushSig(keys.key1, 5).DamagePush(10));                 
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG < │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG <
                                "P2PK NOT with invalid sig and undefined hashtype", SCRI │                                  "P2PK NOT with invalid sig and undefined hashtype", SCRI
                               ).PushSig(keys.key1, 5).DamagePush(10).ScriptError(SCRIPT │                                 ).PushSig(keys.key1, 5).DamagePush(10).ScriptError(SCRIPT
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3 with nonzero dummy but no NULLDUMMY", 0          │                                  "3-of-3 with nonzero dummy but no NULLDUMMY", 0         
                               ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke │                                 ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3 with nonzero dummy", SCRIPT_VERIFY_NULLDUMMY     │                                  "3-of-3 with nonzero dummy", SCRIPT_VERIFY_NULLDUMMY    
                               ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke │                                 ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3 NOT with invalid sig and nonzero dummy but no NU │                                  "3-of-3 NOT with invalid sig and nonzero dummy but no NU
                               ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke │                                 ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke
    tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) << ToBy
                                "3-of-3 NOT with invalid sig with nonzero dummy", SCRIPT │                                  "3-of-3 NOT with invalid sig with nonzero dummy", SCRIPT
                               ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke │                                 ).Num(1).PushSig(keys.key0).PushSig(keys.key1).PushSig(ke
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "2-of-2 with two identical keys and sigs pushed using OP │                                  "2-of-2 with two identical keys and sigs pushed using OP
                               ).Num(0).PushSig(keys.key1).Add(CScript() << OP_DUP));    │                                 ).Num(0).PushSig(keys.key1).Opcode(OP_DUP));             
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "2-of-2 with two identical keys and sigs pushed using OP │                                  "2-of-2 with two identical keys and sigs pushed using OP
                               ).Num(0).PushSig(keys.key1).Add(CScript() << OP_DUP).Scri │                                 ).Num(0).PushSig(keys.key1).Opcode(OP_DUP).ScriptError(SC
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2SH(P2PK) with non-push scriptSig but no P2SH or SIGPU │                                  "P2SH(P2PK) with non-push scriptSig but no P2SH or SIGPU
                               ).PushSig(keys.key2).Add(CScript() << OP_NOP8).PushRedeem │                                 ).PushSig(keys.key2).Opcode(OP_NOP8).PushRedeem());      
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2PK with non-push scriptSig but with P2SH validation", │                                  "P2PK with non-push scriptSig but with P2SH validation",
                               ).PushSig(keys.key2).Add(CScript() << OP_NOP8));          │                                 ).PushSig(keys.key2).Opcode(OP_NOP8));                   
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2SH(P2PK) with non-push scriptSig but no SIGPUSHONLY", │                                  "P2SH(P2PK) with non-push scriptSig but no SIGPUSHONLY",
                               ).PushSig(keys.key2).Add(CScript() << OP_NOP8).PushRedeem │                                 ).PushSig(keys.key2).Opcode(OP_NOP8).PushRedeem().ScriptE
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey2C) << OP_CHECKSIG,
                                "P2SH(P2PK) with non-push scriptSig but not P2SH", SCRIP │                                  "P2SH(P2PK) with non-push scriptSig but not P2SH", SCRIP
                               ).PushSig(keys.key2).Add(CScript() << OP_NOP8).PushRedeem │                                 ).PushSig(keys.key2).Opcode(OP_NOP8).PushRedeem().ScriptE
    tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey1C) << ToBy
                                "2-of-2 with two identical keys and sigs pushed", SCRIPT │                                  "2-of-2 with two identical keys and sigs pushed", SCRIPT
                               ).Num(0).PushSig(keys.key1).PushSig(keys.key1));          │                                 ).Num(0).PushSig(keys.key1).PushSig(keys.key1));         
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2PK with unnecessary input but no CLEANSTACK", SCRIPT_ │                                  "P2PK with unnecessary input but no CLEANSTACK", SCRIPT_
                               ).Num(11).PushSig(keys.key0));                            │                                 ).Num(11).PushSig(keys.key0));                           
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2PK with unnecessary input", SCRIPT_VERIFY_CLEANSTACK  │                                  "P2PK with unnecessary input", SCRIPT_VERIFY_CLEANSTACK 
                               ).Num(11).PushSig(keys.key0).ScriptError(SCRIPT_ERR_CLEAN │                                 ).Num(11).PushSig(keys.key0).ScriptError(SCRIPT_ERR_CLEAN
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2SH with unnecessary input but no CLEANSTACK", SCRIPT_ │                                  "P2SH with unnecessary input but no CLEANSTACK", SCRIPT_
                               ).Num(11).PushSig(keys.key0).PushRedeem());               │                                 ).Num(11).PushSig(keys.key0).PushRedeem());              
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2SH with unnecessary input", SCRIPT_VERIFY_CLEANSTACK  │                                  "P2SH with unnecessary input", SCRIPT_VERIFY_CLEANSTACK 
                               ).Num(11).PushSig(keys.key0).PushRedeem().ScriptError(SCR │                                 ).Num(11).PushSig(keys.key0).PushRedeem().ScriptError(SCR
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2SH with CLEANSTACK", SCRIPT_VERIFY_CLEANSTACK | SCRIP │                                  "P2SH with CLEANSTACK", SCRIPT_VERIFY_CLEANSTACK | SCRIP
                               ).PushSig(keys.key0).PushRedeem());                       │                                 ).PushSig(keys.key0).PushRedeem());                      
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2WSH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2S │                                  "Basic P2WSH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2S
                                0, 1).PushWitSig(keys.key0).PushWitRedeem());            │                                  0, 1).PushWitSig(keys.key0).PushWitRedeem());           
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2WPKH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2 │                                  "Basic P2WPKH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2
                                0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit()); │                                  0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit());
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2SH(P2WSH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI │                                  "Basic P2SH(P2WSH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI
                                0, 1).PushWitSig(keys.key0).PushWitRedeem().PushRedeem() │                                  0, 1).PushWitSig(keys.key0).PushWitRedeem().PushRedeem()
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2SH(P2WPKH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VER │                                  "Basic P2SH(P2WPKH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VER
                                0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().P │                                  0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().P
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "Basic P2WSH with the wrong key", SCRIPT_VERIFY_WITNESS  │                                  "Basic P2WSH with the wrong key", SCRIPT_VERIFY_WITNESS 
                               ).PushWitSig(keys.key0).PushWitRedeem().ScriptError(SCRIP │                                 ).PushWitSig(keys.key0).PushWitRedeem().ScriptError(SCRIP
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                
                                "Basic P2WPKH with the wrong key", SCRIPT_VERIFY_WITNESS │                                  "Basic P2WPKH with the wrong key", SCRIPT_VERIFY_WITNESS
                               ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().Script │                                 ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().Script
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "Basic P2SH(P2WSH) with the wrong key", SCRIPT_VERIFY_WI │                                  "Basic P2SH(P2WSH) with the wrong key", SCRIPT_VERIFY_WI
                               ).PushWitSig(keys.key0).PushWitRedeem().PushRedeem().Scri │                                 ).PushWitSig(keys.key0).PushWitRedeem().PushRedeem().Scri
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                
                                "Basic P2SH(P2WPKH) with the wrong key", SCRIPT_VERIFY_W │                                  "Basic P2SH(P2WPKH) with the wrong key", SCRIPT_VERIFY_W
                               ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().PushRe │                                 ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().PushRe
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "Basic P2WSH with the wrong key but no WITNESS", SCRIPT_ │                                  "Basic P2WSH with the wrong key but no WITNESS", SCRIPT_
                               ).PushWitSig(keys.key0).PushWitRedeem());                 │                                 ).PushWitSig(keys.key0).PushWitRedeem());                
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                
                                "Basic P2WPKH with the wrong key but no WITNESS", SCRIPT │                                  "Basic P2WPKH with the wrong key but no WITNESS", SCRIPT
                               ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit());      │                                 ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit());     
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1) << OP_CHECKSIG, 
                                "Basic P2SH(P2WSH) with the wrong key but no WITNESS", S │                                  "Basic P2SH(P2WSH) with the wrong key but no WITNESS", S
                               ).PushWitSig(keys.key0).PushWitRedeem().PushRedeem());    │                                 ).PushWitSig(keys.key0).PushWitRedeem().PushRedeem());   
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                
                                "Basic P2SH(P2WPKH) with the wrong key but no WITNESS",  │                                  "Basic P2SH(P2WPKH) with the wrong key but no WITNESS", 
                               ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().PushRe │                                 ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().PushRe
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2WSH with wrong value", SCRIPT_VERIFY_WITNESS |  │                                  "Basic P2WSH with wrong value", SCRIPT_VERIFY_WITNESS | 
                                0, 0).PushWitSig(keys.key0, 1).PushWitRedeem().ScriptErr │                                  0, 0).PushWitSig(keys.key0, 1).PushWitRedeem().ScriptErr
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2WPKH with wrong value", SCRIPT_VERIFY_WITNESS | │                                  "Basic P2WPKH with wrong value", SCRIPT_VERIFY_WITNESS |
                                0, 0).PushWitSig(keys.key0, 1).Push(keys.pubkey0).AsWit( │                                  0, 0).PushWitSig(keys.key0, 1).Push(keys.pubkey0).AsWit(
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2SH(P2WSH) with wrong value", SCRIPT_VERIFY_WITN │                                  "Basic P2SH(P2WSH) with wrong value", SCRIPT_VERIFY_WITN
                                0, 0).PushWitSig(keys.key0, 1).PushWitRedeem().PushRedee │                                  0, 0).PushWitSig(keys.key0, 1).PushWitRedeem().PushRedee
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2SH(P2WPKH) with wrong value", SCRIPT_VERIFY_WIT │                                  "Basic P2SH(P2WPKH) with wrong value", SCRIPT_VERIFY_WIT
                                0, 0).PushWitSig(keys.key0, 1).Push(keys.pubkey0).AsWit( │                                  0, 0).PushWitSig(keys.key0, 1).Push(keys.pubkey0).AsWit(
                                                                                         │                                                                                          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "P2WPKH with future witness version", SCRIPT_VERIFY_WITN │                                  "P2WPKH with future witness version", SCRIPT_VERIFY_WITN
                                SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM, fal │                                  SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM, fal
                               ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Script │                                 ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Script
    {                                                                                    │      {                                                                                   
        CScript witscript = CScript() << ToByteVector(keys.pubkey0);                     │          CScript witscript = CScript() << ToByteVector(keys.pubkey0);                    
        uint256 hash;                                                                    │          uint256 hash;                                                                   
        CSHA256().Write(&witscript[0], witscript.size()).Finalize(hash.begin());         │          CSHA256().Write(witscript.data(), witscript.size()).Finalize(hash.begin());     
        std::vector<unsigned char> hashBytes = ToByteVector(hash);                       │          std::vector<unsigned char> hashBytes = ToByteVector(hash);                      
        hashBytes.pop_back();                                                            │          hashBytes.pop_back();                                                           
        tests.push_back(TestBuilder(CScript() << OP_0 << hashBytes,                      │          tests.push_back(TestBuilder(CScript() << OP_0 << hashBytes,                     
                                    "P2WPKH with wrong witness program length", SCRIPT_V │                                      "P2WPKH with wrong witness program length", SCRIPT_V
                                   ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Sc │                                     ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Sc
    }                                                                                    │      }                                                                                   
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2WSH with empty witness", SCRIPT_VERIFY_WITNESS | SCRI │                                  "P2WSH with empty witness", SCRIPT_VERIFY_WITNESS | SCRI
                               ).ScriptError(SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY)); │                                 ).ScriptError(SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY));
    {                                                                                    │      {                                                                                   
        CScript witscript = CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG;      │          CScript witscript = CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG;     
        tests.push_back(TestBuilder(witscript,                                           │          tests.push_back(TestBuilder(witscript,                                          
                                    "P2WSH with witness program mismatch", SCRIPT_VERIFY │                                      "P2WSH with witness program mismatch", SCRIPT_VERIFY
                                   ).PushWitSig(keys.key0).Push(witscript).DamagePush(0) │                                     ).PushWitSig(keys.key0).Push(witscript).DamagePush(0)
    }                                                                                    │      }                                                                                   
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "P2WPKH with witness program mismatch", SCRIPT_VERIFY_WI │                                  "P2WPKH with witness program mismatch", SCRIPT_VERIFY_WI
                               ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Push(" │                                 ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Push("
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "P2WPKH with non-empty scriptSig", SCRIPT_VERIFY_WITNESS │                                  "P2WPKH with non-empty scriptSig", SCRIPT_VERIFY_WITNESS
                               ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Num(11 │                                 ).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().Num(11
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey1),                
                                "P2SH(P2WPKH) with superfluous push in scriptSig", SCRIP │                                  "P2SH(P2WPKH) with superfluous push in scriptSig", SCRIP
                               ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().Num(11 │                                 ).PushWitSig(keys.key0).Push(keys.pubkey1).AsWit().Num(11
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "P2PK with witness", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI │                                  "P2PK with witness", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI
                               ).PushSig(keys.key0).Push("0").AsWit().ScriptError(SCRIPT │                                 ).PushSig(keys.key0).Push("0").AsWit().ScriptError(SCRIPT
                                                                                         │                                                                                          
    // Compressed keys should pass SCRIPT_VERIFY_WITNESS_PUBKEYTYPE                      │      // Compressed keys should pass SCRIPT_VERIFY_WITNESS_PUBKEYTYPE                     
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG,
                                "Basic P2WSH with compressed key", SCRIPT_VERIFY_WITNESS │                                  "Basic P2WSH with compressed key", SCRIPT_VERIFY_WITNESS
                                0, 1).PushWitSig(keys.key0C).PushWitRedeem());           │                                  0, 1).PushWitSig(keys.key0C).PushWitRedeem());          
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C),                │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C),               
                                "Basic P2WPKH with compressed key", SCRIPT_VERIFY_WITNES │                                  "Basic P2WPKH with compressed key", SCRIPT_VERIFY_WITNES
                                0, 1).PushWitSig(keys.key0C).Push(keys.pubkey0C).AsWit() │                                  0, 1).PushWitSig(keys.key0C).Push(keys.pubkey0C).AsWit()
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG, │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C) << OP_CHECKSIG,
                                "Basic P2SH(P2WSH) with compressed key", SCRIPT_VERIFY_W │                                  "Basic P2SH(P2WSH) with compressed key", SCRIPT_VERIFY_W
                                0, 1).PushWitSig(keys.key0C).PushWitRedeem().PushRedeem( │                                  0, 1).PushWitSig(keys.key0C).PushWitRedeem().PushRedeem(
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C),                │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0C),               
                                "Basic P2SH(P2WPKH) with compressed key", SCRIPT_VERIFY_ │                                  "Basic P2SH(P2WPKH) with compressed key", SCRIPT_VERIFY_
                                0, 1).PushWitSig(keys.key0C).Push(keys.pubkey0C).AsWit() │                                  0, 1).PushWitSig(keys.key0C).Push(keys.pubkey0C).AsWit()
                                                                                         │                                                                                          
    // Testing uncompressed key in witness with SCRIPT_VERIFY_WITNESS_PUBKEYTYPE         │      // Testing uncompressed key in witness with SCRIPT_VERIFY_WITNESS_PUBKEYTYPE        
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2WSH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2S │                                  "Basic P2WSH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2S
                                0, 1).PushWitSig(keys.key0).PushWitRedeem().ScriptError( │                                  0, 1).PushWitSig(keys.key0).PushWitRedeem().ScriptError(
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2WPKH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2 │                                  "Basic P2WPKH", SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2
                                0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().S │                                  0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().S
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG,  │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0) << OP_CHECKSIG, 
                                "Basic P2SH(P2WSH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI │                                  "Basic P2SH(P2WSH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VERI
                                0, 1).PushWitSig(keys.key0).PushWitRedeem().PushRedeem() │                                  0, 1).PushWitSig(keys.key0).PushWitRedeem().PushRedeem()
    tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                 │      tests.push_back(TestBuilder(CScript() << ToByteVector(keys.pubkey0),                
                                "Basic P2SH(P2WPKH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VER │                                  "Basic P2SH(P2WPKH)", SCRIPT_VERIFY_WITNESS | SCRIPT_VER
                                0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().P │                                  0, 1).PushWitSig(keys.key0).Push(keys.pubkey0).AsWit().P
                                                                                         │                                                                                          
    // P2WSH 1-of-2 multisig with compressed keys                                        │      // P2WSH 1-of-2 multisig with compressed keys                                       
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with compressed keys", SCRIPT_VERIF │                                  "P2WSH CHECKMULTISIG with compressed keys", SCRIPT_VERIF
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG with compressed keys", SCRIPT │                                  "P2SH(P2WSH) CHECKMULTISIG with compressed keys", SCRIPT
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with compressed keys", SCRIPT_VERIF │                                  "P2WSH CHECKMULTISIG with compressed keys", SCRIPT_VERIF
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG with compressed keys", SCRIPT │                                  "P2SH(P2WSH) CHECKMULTISIG with compressed keys", SCRIPT
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
                                                                                         │                                                                                          
    // P2WSH 1-of-2 multisig with first key uncompressed                                 │      // P2WSH 1-of-2 multisig with first key uncompressed                                
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with first key uncompressed and sig │                                  "P2WSH CHECKMULTISIG with first key uncompressed and sig
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG first key uncompressed and si │                                  "P2SH(P2WSH) CHECKMULTISIG first key uncompressed and si
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with first key uncompressed and sig │                                  "P2WSH CHECKMULTISIG with first key uncompressed and sig
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a │                                  "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with first key uncompressed and sig │                                  "P2WSH CHECKMULTISIG with first key uncompressed and sig
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a │                                  "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2WSH CHECKMULTISIG with first key uncompressed and sig │                                  "P2WSH CHECKMULTISIG with first key uncompressed and sig
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1C) << ToBy
                                "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a │                                  "P2SH(P2WSH) CHECKMULTISIG with first key uncompressed a
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1C).Pus
    // P2WSH 1-of-2 multisig with second key uncompressed                                │      // P2WSH 1-of-2 multisig with second key uncompressed                               
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2WSH CHECKMULTISIG with second key uncompressed and si │                                  "P2WSH CHECKMULTISIG with second key uncompressed and si
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2SH(P2WSH) CHECKMULTISIG second key uncompressed and s │                                  "P2SH(P2WSH) CHECKMULTISIG second key uncompressed and s
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2WSH CHECKMULTISIG with second key uncompressed and si │                                  "P2WSH CHECKMULTISIG with second key uncompressed and si
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed  │                                  "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed 
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key0C).Pus
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2WSH CHECKMULTISIG with second key uncompressed and si │                                  "P2WSH CHECKMULTISIG with second key uncompressed and si
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed  │                                  "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed 
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2WSH CHECKMULTISIG with second key uncompressed and si │                                  "P2WSH CHECKMULTISIG with second key uncompressed and si
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push
    tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt │      tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey1) << ToByt
                                "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed  │                                  "P2SH(P2WSH) CHECKMULTISIG with second key uncompressed 
                                0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push │                                  0, 1).Push(CScript()).AsWit().PushWitSig(keys.key1).Push
                                                                                         │                                                                                          
    std::set<std::string> tests_set;                                                     │      std::set<std::string> tests_set;                                                    
                                                                                         │                                                                                          
    {                                                                                    │      {                                                                                   
        UniValue json_tests = read_json(std::string(json_tests::script_tests, json_tests │          UniValue json_tests = read_json(std::string(json_tests::script_tests, json_tests
                                                                                         │                                                                                          
        for (unsigned int idx = 0; idx < json_tests.size(); idx++) {                     │          for (unsigned int idx = 0; idx < json_tests.size(); idx++) {                    
            const UniValue& tv = json_tests[idx];                                        │              const UniValue& tv = json_tests[idx];                                       
            tests_set.insert(JSONPrettyPrint(tv.get_array()));                           │              tests_set.insert(JSONPrettyPrint(tv.get_array()));                          
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │  #ifdef UPDATE_JSON_TESTS                                                                
    std::string strGen;                                                                  │      std::string strGen;                                                                 
                                                                                         │  #endif                                                                                  
    BOOST_FOREACH(TestBuilder& test, tests) {                                            │      for (TestBuilder& test : tests) {                                                   
        test.Test();                                                                     │          test.Test();                                                                    
        std::string str = JSONPrettyPrint(test.GetJSON());                               │          std::string str = JSONPrettyPrint(test.GetJSON());                              
#ifndef UPDATE_JSON_TESTS                                                                │  #ifdef UPDATE_JSON_TESTS                                                                
                                                                                         │          strGen += str + ",\n";                                                          
                                                                                         │  #else                                                                                   
        if (tests_set.count(str) == 0) {                                                 │          if (tests_set.count(str) == 0) {                                                
            BOOST_CHECK_MESSAGE(false, "Missing auto script_valid test: " + test.GetComm │              BOOST_CHECK_MESSAGE(false, "Missing auto script_valid test: " + test.GetComm
        }                                                                                │          }                                                                               
#endif                                                                                   │  #endif                                                                                  
        strGen += str + ",\n";                                                           │                                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
#ifdef UPDATE_JSON_TESTS                                                                 │  #ifdef UPDATE_JSON_TESTS                                                                
    FILE* file = fopen("script_tests.json.gen", "w");                                    │      FILE* file = fsbridge::fopen("script_tests.json.gen", "w");                         
    fputs(strGen.c_str(), file);                                                         │      fputs(strGen.c_str(), file);                                                        
    fclose(file);                                                                        │      fclose(file);                                                                       
#endif                                                                                   │  #endif                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/crypto/sha256_sse41.cpp:68                                                  │ bitcoin/src/crypto/sha256_avx2.cpp:76                                                    
                                                                                         │                                                                                          
    // Transform 1                                                                       │      // Transform 1                                                                      
    __m128i a = K(0x6a09e667ul);                                                         │      __m256i a = K(0x6a09e667ul);                                                        
    __m128i b = K(0xbb67ae85ul);                                                         │      __m256i b = K(0xbb67ae85ul);                                                        
    __m128i c = K(0x3c6ef372ul);                                                         │      __m256i c = K(0x3c6ef372ul);                                                        
    __m128i d = K(0xa54ff53aul);                                                         │      __m256i d = K(0xa54ff53aul);                                                        
    __m128i e = K(0x510e527ful);                                                         │      __m256i e = K(0x510e527ful);                                                        
    __m128i f = K(0x9b05688cul);                                                         │      __m256i f = K(0x9b05688cul);                                                        
    __m128i g = K(0x1f83d9abul);                                                         │      __m256i g = K(0x1f83d9abul);                                                        
    __m128i h = K(0x5be0cd19ul);                                                         │      __m256i h = K(0x5be0cd19ul);                                                        
                                                                                         │                                                                                          
    __m128i w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;        │      __m256i w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;       
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, Add(K(0x428a2f98ul), w0 = Read4(in, 0)));              │      Round(a, b, c, d, e, f, g, h, Add(K(0x428a2f98ul), w0 = Read8(in, 0)));             
    Round(h, a, b, c, d, e, f, g, Add(K(0x71374491ul), w1 = Read4(in, 4)));              │      Round(h, a, b, c, d, e, f, g, Add(K(0x71374491ul), w1 = Read8(in, 4)));             
    Round(g, h, a, b, c, d, e, f, Add(K(0xb5c0fbcful), w2 = Read4(in, 8)));              │      Round(g, h, a, b, c, d, e, f, Add(K(0xb5c0fbcful), w2 = Read8(in, 8)));             
    Round(f, g, h, a, b, c, d, e, Add(K(0xe9b5dba5ul), w3 = Read4(in, 12)));             │      Round(f, g, h, a, b, c, d, e, Add(K(0xe9b5dba5ul), w3 = Read8(in, 12)));            
    Round(e, f, g, h, a, b, c, d, Add(K(0x3956c25bul), w4 = Read4(in, 16)));             │      Round(e, f, g, h, a, b, c, d, Add(K(0x3956c25bul), w4 = Read8(in, 16)));            
    Round(d, e, f, g, h, a, b, c, Add(K(0x59f111f1ul), w5 = Read4(in, 20)));             │      Round(d, e, f, g, h, a, b, c, Add(K(0x59f111f1ul), w5 = Read8(in, 20)));            
    Round(c, d, e, f, g, h, a, b, Add(K(0x923f82a4ul), w6 = Read4(in, 24)));             │      Round(c, d, e, f, g, h, a, b, Add(K(0x923f82a4ul), w6 = Read8(in, 24)));            
    Round(b, c, d, e, f, g, h, a, Add(K(0xab1c5ed5ul), w7 = Read4(in, 28)));             │      Round(b, c, d, e, f, g, h, a, Add(K(0xab1c5ed5ul), w7 = Read8(in, 28)));            
    Round(a, b, c, d, e, f, g, h, Add(K(0xd807aa98ul), w8 = Read4(in, 32)));             │      Round(a, b, c, d, e, f, g, h, Add(K(0xd807aa98ul), w8 = Read8(in, 32)));            
    Round(h, a, b, c, d, e, f, g, Add(K(0x12835b01ul), w9 = Read4(in, 36)));             │      Round(h, a, b, c, d, e, f, g, Add(K(0x12835b01ul), w9 = Read8(in, 36)));            
    Round(g, h, a, b, c, d, e, f, Add(K(0x243185beul), w10 = Read4(in, 40)));            │      Round(g, h, a, b, c, d, e, f, Add(K(0x243185beul), w10 = Read8(in, 40)));           
    Round(f, g, h, a, b, c, d, e, Add(K(0x550c7dc3ul), w11 = Read4(in, 44)));            │      Round(f, g, h, a, b, c, d, e, Add(K(0x550c7dc3ul), w11 = Read8(in, 44)));           
    Round(e, f, g, h, a, b, c, d, Add(K(0x72be5d74ul), w12 = Read4(in, 48)));            │      Round(e, f, g, h, a, b, c, d, Add(K(0x72be5d74ul), w12 = Read8(in, 48)));           
    Round(d, e, f, g, h, a, b, c, Add(K(0x80deb1feul), w13 = Read4(in, 52)));            │      Round(d, e, f, g, h, a, b, c, Add(K(0x80deb1feul), w13 = Read8(in, 52)));           
    Round(c, d, e, f, g, h, a, b, Add(K(0x9bdc06a7ul), w14 = Read4(in, 56)));            │      Round(c, d, e, f, g, h, a, b, Add(K(0x9bdc06a7ul), w14 = Read8(in, 56)));           
    Round(b, c, d, e, f, g, h, a, Add(K(0xc19bf174ul), w15 = Read4(in, 60)));            │      Round(b, c, d, e, f, g, h, a, Add(K(0xc19bf174ul), w15 = Read8(in, 60)));           
    Round(a, b, c, d, e, f, g, h, Add(K(0xe49b69c1ul), Inc(w0, sigma1(w14), w9, sigma0(w │      Round(a, b, c, d, e, f, g, h, Add(K(0xe49b69c1ul), Inc(w0, sigma1(w14), w9, sigma0(w
    Round(h, a, b, c, d, e, f, g, Add(K(0xefbe4786ul), Inc(w1, sigma1(w15), w10, sigma0( │      Round(h, a, b, c, d, e, f, g, Add(K(0xefbe4786ul), Inc(w1, sigma1(w15), w10, sigma0(
    Round(g, h, a, b, c, d, e, f, Add(K(0x0fc19dc6ul), Inc(w2, sigma1(w0), w11, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x0fc19dc6ul), Inc(w2, sigma1(w0), w11, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x240ca1ccul), Inc(w3, sigma1(w1), w12, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x240ca1ccul), Inc(w3, sigma1(w1), w12, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x2de92c6ful), Inc(w4, sigma1(w2), w13, sigma0(w │      Round(e, f, g, h, a, b, c, d, Add(K(0x2de92c6ful), Inc(w4, sigma1(w2), w13, sigma0(w
    Round(d, e, f, g, h, a, b, c, Add(K(0x4a7484aaul), Inc(w5, sigma1(w3), w14, sigma0(w │      Round(d, e, f, g, h, a, b, c, Add(K(0x4a7484aaul), Inc(w5, sigma1(w3), w14, sigma0(w
    Round(c, d, e, f, g, h, a, b, Add(K(0x5cb0a9dcul), Inc(w6, sigma1(w4), w15, sigma0(w │      Round(c, d, e, f, g, h, a, b, Add(K(0x5cb0a9dcul), Inc(w6, sigma1(w4), w15, sigma0(w
    Round(b, c, d, e, f, g, h, a, Add(K(0x76f988daul), Inc(w7, sigma1(w5), w0, sigma0(w8 │      Round(b, c, d, e, f, g, h, a, Add(K(0x76f988daul), Inc(w7, sigma1(w5), w0, sigma0(w8
    Round(a, b, c, d, e, f, g, h, Add(K(0x983e5152ul), Inc(w8, sigma1(w6), w1, sigma0(w9 │      Round(a, b, c, d, e, f, g, h, Add(K(0x983e5152ul), Inc(w8, sigma1(w6), w1, sigma0(w9
    Round(h, a, b, c, d, e, f, g, Add(K(0xa831c66dul), Inc(w9, sigma1(w7), w2, sigma0(w1 │      Round(h, a, b, c, d, e, f, g, Add(K(0xa831c66dul), Inc(w9, sigma1(w7), w2, sigma0(w1
    Round(g, h, a, b, c, d, e, f, Add(K(0xb00327c8ul), Inc(w10, sigma1(w8), w3, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0xb00327c8ul), Inc(w10, sigma1(w8), w3, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0xbf597fc7ul), Inc(w11, sigma1(w9), w4, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0xbf597fc7ul), Inc(w11, sigma1(w9), w4, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0xc6e00bf3ul), Inc(w12, sigma1(w10), w5, sigma0( │      Round(e, f, g, h, a, b, c, d, Add(K(0xc6e00bf3ul), Inc(w12, sigma1(w10), w5, sigma0(
    Round(d, e, f, g, h, a, b, c, Add(K(0xd5a79147ul), Inc(w13, sigma1(w11), w6, sigma0( │      Round(d, e, f, g, h, a, b, c, Add(K(0xd5a79147ul), Inc(w13, sigma1(w11), w6, sigma0(
    Round(c, d, e, f, g, h, a, b, Add(K(0x06ca6351ul), Inc(w14, sigma1(w12), w7, sigma0( │      Round(c, d, e, f, g, h, a, b, Add(K(0x06ca6351ul), Inc(w14, sigma1(w12), w7, sigma0(
    Round(b, c, d, e, f, g, h, a, Add(K(0x14292967ul), Inc(w15, sigma1(w13), w8, sigma0( │      Round(b, c, d, e, f, g, h, a, Add(K(0x14292967ul), Inc(w15, sigma1(w13), w8, sigma0(
    Round(a, b, c, d, e, f, g, h, Add(K(0x27b70a85ul), Inc(w0, sigma1(w14), w9, sigma0(w │      Round(a, b, c, d, e, f, g, h, Add(K(0x27b70a85ul), Inc(w0, sigma1(w14), w9, sigma0(w
    Round(h, a, b, c, d, e, f, g, Add(K(0x2e1b2138ul), Inc(w1, sigma1(w15), w10, sigma0( │      Round(h, a, b, c, d, e, f, g, Add(K(0x2e1b2138ul), Inc(w1, sigma1(w15), w10, sigma0(
    Round(g, h, a, b, c, d, e, f, Add(K(0x4d2c6dfcul), Inc(w2, sigma1(w0), w11, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x4d2c6dfcul), Inc(w2, sigma1(w0), w11, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x53380d13ul), Inc(w3, sigma1(w1), w12, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x53380d13ul), Inc(w3, sigma1(w1), w12, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x650a7354ul), Inc(w4, sigma1(w2), w13, sigma0(w │      Round(e, f, g, h, a, b, c, d, Add(K(0x650a7354ul), Inc(w4, sigma1(w2), w13, sigma0(w
    Round(d, e, f, g, h, a, b, c, Add(K(0x766a0abbul), Inc(w5, sigma1(w3), w14, sigma0(w │      Round(d, e, f, g, h, a, b, c, Add(K(0x766a0abbul), Inc(w5, sigma1(w3), w14, sigma0(w
    Round(c, d, e, f, g, h, a, b, Add(K(0x81c2c92eul), Inc(w6, sigma1(w4), w15, sigma0(w │      Round(c, d, e, f, g, h, a, b, Add(K(0x81c2c92eul), Inc(w6, sigma1(w4), w15, sigma0(w
    Round(b, c, d, e, f, g, h, a, Add(K(0x92722c85ul), Inc(w7, sigma1(w5), w0, sigma0(w8 │      Round(b, c, d, e, f, g, h, a, Add(K(0x92722c85ul), Inc(w7, sigma1(w5), w0, sigma0(w8
    Round(a, b, c, d, e, f, g, h, Add(K(0xa2bfe8a1ul), Inc(w8, sigma1(w6), w1, sigma0(w9 │      Round(a, b, c, d, e, f, g, h, Add(K(0xa2bfe8a1ul), Inc(w8, sigma1(w6), w1, sigma0(w9
    Round(h, a, b, c, d, e, f, g, Add(K(0xa81a664bul), Inc(w9, sigma1(w7), w2, sigma0(w1 │      Round(h, a, b, c, d, e, f, g, Add(K(0xa81a664bul), Inc(w9, sigma1(w7), w2, sigma0(w1
    Round(g, h, a, b, c, d, e, f, Add(K(0xc24b8b70ul), Inc(w10, sigma1(w8), w3, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0xc24b8b70ul), Inc(w10, sigma1(w8), w3, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0xc76c51a3ul), Inc(w11, sigma1(w9), w4, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0xc76c51a3ul), Inc(w11, sigma1(w9), w4, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0xd192e819ul), Inc(w12, sigma1(w10), w5, sigma0( │      Round(e, f, g, h, a, b, c, d, Add(K(0xd192e819ul), Inc(w12, sigma1(w10), w5, sigma0(
    Round(d, e, f, g, h, a, b, c, Add(K(0xd6990624ul), Inc(w13, sigma1(w11), w6, sigma0( │      Round(d, e, f, g, h, a, b, c, Add(K(0xd6990624ul), Inc(w13, sigma1(w11), w6, sigma0(
    Round(c, d, e, f, g, h, a, b, Add(K(0xf40e3585ul), Inc(w14, sigma1(w12), w7, sigma0( │      Round(c, d, e, f, g, h, a, b, Add(K(0xf40e3585ul), Inc(w14, sigma1(w12), w7, sigma0(
    Round(b, c, d, e, f, g, h, a, Add(K(0x106aa070ul), Inc(w15, sigma1(w13), w8, sigma0( │      Round(b, c, d, e, f, g, h, a, Add(K(0x106aa070ul), Inc(w15, sigma1(w13), w8, sigma0(
    Round(a, b, c, d, e, f, g, h, Add(K(0x19a4c116ul), Inc(w0, sigma1(w14), w9, sigma0(w │      Round(a, b, c, d, e, f, g, h, Add(K(0x19a4c116ul), Inc(w0, sigma1(w14), w9, sigma0(w
    Round(h, a, b, c, d, e, f, g, Add(K(0x1e376c08ul), Inc(w1, sigma1(w15), w10, sigma0( │      Round(h, a, b, c, d, e, f, g, Add(K(0x1e376c08ul), Inc(w1, sigma1(w15), w10, sigma0(
    Round(g, h, a, b, c, d, e, f, Add(K(0x2748774cul), Inc(w2, sigma1(w0), w11, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x2748774cul), Inc(w2, sigma1(w0), w11, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x34b0bcb5ul), Inc(w3, sigma1(w1), w12, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x34b0bcb5ul), Inc(w3, sigma1(w1), w12, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x391c0cb3ul), Inc(w4, sigma1(w2), w13, sigma0(w │      Round(e, f, g, h, a, b, c, d, Add(K(0x391c0cb3ul), Inc(w4, sigma1(w2), w13, sigma0(w
    Round(d, e, f, g, h, a, b, c, Add(K(0x4ed8aa4aul), Inc(w5, sigma1(w3), w14, sigma0(w │      Round(d, e, f, g, h, a, b, c, Add(K(0x4ed8aa4aul), Inc(w5, sigma1(w3), w14, sigma0(w
    Round(c, d, e, f, g, h, a, b, Add(K(0x5b9cca4ful), Inc(w6, sigma1(w4), w15, sigma0(w │      Round(c, d, e, f, g, h, a, b, Add(K(0x5b9cca4ful), Inc(w6, sigma1(w4), w15, sigma0(w
    Round(b, c, d, e, f, g, h, a, Add(K(0x682e6ff3ul), Inc(w7, sigma1(w5), w0, sigma0(w8 │      Round(b, c, d, e, f, g, h, a, Add(K(0x682e6ff3ul), Inc(w7, sigma1(w5), w0, sigma0(w8
    Round(a, b, c, d, e, f, g, h, Add(K(0x748f82eeul), Inc(w8, sigma1(w6), w1, sigma0(w9 │      Round(a, b, c, d, e, f, g, h, Add(K(0x748f82eeul), Inc(w8, sigma1(w6), w1, sigma0(w9
    Round(h, a, b, c, d, e, f, g, Add(K(0x78a5636ful), Inc(w9, sigma1(w7), w2, sigma0(w1 │      Round(h, a, b, c, d, e, f, g, Add(K(0x78a5636ful), Inc(w9, sigma1(w7), w2, sigma0(w1
    Round(g, h, a, b, c, d, e, f, Add(K(0x84c87814ul), Inc(w10, sigma1(w8), w3, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x84c87814ul), Inc(w10, sigma1(w8), w3, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x8cc70208ul), Inc(w11, sigma1(w9), w4, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x8cc70208ul), Inc(w11, sigma1(w9), w4, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x90befffaul), Inc(w12, sigma1(w10), w5, sigma0( │      Round(e, f, g, h, a, b, c, d, Add(K(0x90befffaul), Inc(w12, sigma1(w10), w5, sigma0(
    Round(d, e, f, g, h, a, b, c, Add(K(0xa4506cebul), Inc(w13, sigma1(w11), w6, sigma0( │      Round(d, e, f, g, h, a, b, c, Add(K(0xa4506cebul), Inc(w13, sigma1(w11), w6, sigma0(
    Round(c, d, e, f, g, h, a, b, Add(K(0xbef9a3f7ul), Inc(w14, sigma1(w12), w7, sigma0( │      Round(c, d, e, f, g, h, a, b, Add(K(0xbef9a3f7ul), Inc(w14, sigma1(w12), w7, sigma0(
    Round(b, c, d, e, f, g, h, a, Add(K(0xc67178f2ul), Inc(w15, sigma1(w13), w8, sigma0( │      Round(b, c, d, e, f, g, h, a, Add(K(0xc67178f2ul), Inc(w15, sigma1(w13), w8, sigma0(
                                                                                         │                                                                                          
    a = Add(a, K(0x6a09e667ul));                                                         │      a = Add(a, K(0x6a09e667ul));                                                        
    b = Add(b, K(0xbb67ae85ul));                                                         │      b = Add(b, K(0xbb67ae85ul));                                                        
    c = Add(c, K(0x3c6ef372ul));                                                         │      c = Add(c, K(0x3c6ef372ul));                                                        
    d = Add(d, K(0xa54ff53aul));                                                         │      d = Add(d, K(0xa54ff53aul));                                                        
    e = Add(e, K(0x510e527ful));                                                         │      e = Add(e, K(0x510e527ful));                                                        
    f = Add(f, K(0x9b05688cul));                                                         │      f = Add(f, K(0x9b05688cul));                                                        
    g = Add(g, K(0x1f83d9abul));                                                         │      g = Add(g, K(0x1f83d9abul));                                                        
    h = Add(h, K(0x5be0cd19ul));                                                         │      h = Add(h, K(0x5be0cd19ul));                                                        
                                                                                         │                                                                                          
    __m128i t0 = a, t1 = b, t2 = c, t3 = d, t4 = e, t5 = f, t6 = g, t7 = h;              │      __m256i t0 = a, t1 = b, t2 = c, t3 = d, t4 = e, t5 = f, t6 = g, t7 = h;             
                                                                                         │                                                                                          
    // Transform 2                                                                       │      // Transform 2                                                                      
    Round(a, b, c, d, e, f, g, h, K(0xc28a2f98ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0xc28a2f98ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0x71374491ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0x71374491ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0xb5c0fbcful));                                      │      Round(g, h, a, b, c, d, e, f, K(0xb5c0fbcful));                                     
    Round(f, g, h, a, b, c, d, e, K(0xe9b5dba5ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0xe9b5dba5ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x3956c25bul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x3956c25bul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x59f111f1ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x59f111f1ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x923f82a4ul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x923f82a4ul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xab1c5ed5ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xab1c5ed5ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0xd807aa98ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0xd807aa98ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0x12835b01ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0x12835b01ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0x243185beul));                                      │      Round(g, h, a, b, c, d, e, f, K(0x243185beul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x550c7dc3ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x550c7dc3ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x72be5d74ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x72be5d74ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x80deb1feul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x80deb1feul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x9bdc06a7ul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x9bdc06a7ul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xc19bf374ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xc19bf374ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0x649b69c1ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0x649b69c1ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0xf0fe4786ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0xf0fe4786ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0x0fe1edc6ul));                                      │      Round(g, h, a, b, c, d, e, f, K(0x0fe1edc6ul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x240cf254ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x240cf254ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x4fe9346ful));                                      │      Round(e, f, g, h, a, b, c, d, K(0x4fe9346ful));                                     
    Round(d, e, f, g, h, a, b, c, K(0x6cc984beul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x6cc984beul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x61b9411eul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x61b9411eul));                                     
    Round(b, c, d, e, f, g, h, a, K(0x16f988faul));                                      │      Round(b, c, d, e, f, g, h, a, K(0x16f988faul));                                     
    Round(a, b, c, d, e, f, g, h, K(0xf2c65152ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0xf2c65152ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0xa88e5a6dul));                                      │      Round(h, a, b, c, d, e, f, g, K(0xa88e5a6dul));                                     
    Round(g, h, a, b, c, d, e, f, K(0xb019fc65ul));                                      │      Round(g, h, a, b, c, d, e, f, K(0xb019fc65ul));                                     
    Round(f, g, h, a, b, c, d, e, K(0xb9d99ec7ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0xb9d99ec7ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x9a1231c3ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x9a1231c3ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0xe70eeaa0ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0xe70eeaa0ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0xfdb1232bul));                                      │      Round(c, d, e, f, g, h, a, b, K(0xfdb1232bul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xc7353eb0ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xc7353eb0ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0x3069bad5ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0x3069bad5ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0xcb976d5ful));                                      │      Round(h, a, b, c, d, e, f, g, K(0xcb976d5ful));                                     
    Round(g, h, a, b, c, d, e, f, K(0x5a0f118ful));                                      │      Round(g, h, a, b, c, d, e, f, K(0x5a0f118ful));                                     
    Round(f, g, h, a, b, c, d, e, K(0xdc1eeefdul));                                      │      Round(f, g, h, a, b, c, d, e, K(0xdc1eeefdul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x0a35b689ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x0a35b689ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0xde0b7a04ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0xde0b7a04ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x58f4ca9dul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x58f4ca9dul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xe15d5b16ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xe15d5b16ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0x007f3e86ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0x007f3e86ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0x37088980ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0x37088980ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0xa507ea32ul));                                      │      Round(g, h, a, b, c, d, e, f, K(0xa507ea32ul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x6fab9537ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x6fab9537ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x17406110ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x17406110ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x0d8cd6f1ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x0d8cd6f1ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0xcdaa3b6dul));                                      │      Round(c, d, e, f, g, h, a, b, K(0xcdaa3b6dul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xc0bbbe37ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xc0bbbe37ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0x83613bdaul));                                      │      Round(a, b, c, d, e, f, g, h, K(0x83613bdaul));                                     
    Round(h, a, b, c, d, e, f, g, K(0xdb48a363ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0xdb48a363ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0x0b02e931ul));                                      │      Round(g, h, a, b, c, d, e, f, K(0x0b02e931ul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x6fd15ca7ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x6fd15ca7ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x521afacaul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x521afacaul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x31338431ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x31338431ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x6ed41a95ul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x6ed41a95ul));                                     
    Round(b, c, d, e, f, g, h, a, K(0x6d437890ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0x6d437890ul));                                     
    Round(a, b, c, d, e, f, g, h, K(0xc39c91f2ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0xc39c91f2ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0x9eccabbdul));                                      │      Round(h, a, b, c, d, e, f, g, K(0x9eccabbdul));                                     
    Round(g, h, a, b, c, d, e, f, K(0xb5c9a0e6ul));                                      │      Round(g, h, a, b, c, d, e, f, K(0xb5c9a0e6ul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x532fb63cul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x532fb63cul));                                     
    Round(e, f, g, h, a, b, c, d, K(0xd2c741c6ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0xd2c741c6ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x07237ea3ul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x07237ea3ul));                                     
    Round(c, d, e, f, g, h, a, b, K(0xa4954b68ul));                                      │      Round(c, d, e, f, g, h, a, b, K(0xa4954b68ul));                                     
    Round(b, c, d, e, f, g, h, a, K(0x4c191d76ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0x4c191d76ul));                                     
                                                                                         │                                                                                          
    w0 = Add(t0, a);                                                                     │      w0 = Add(t0, a);                                                                    
    w1 = Add(t1, b);                                                                     │      w1 = Add(t1, b);                                                                    
    w2 = Add(t2, c);                                                                     │      w2 = Add(t2, c);                                                                    
    w3 = Add(t3, d);                                                                     │      w3 = Add(t3, d);                                                                    
    w4 = Add(t4, e);                                                                     │      w4 = Add(t4, e);                                                                    
    w5 = Add(t5, f);                                                                     │      w5 = Add(t5, f);                                                                    
    w6 = Add(t6, g);                                                                     │      w6 = Add(t6, g);                                                                    
    w7 = Add(t7, h);                                                                     │      w7 = Add(t7, h);                                                                    
                                                                                         │                                                                                          
    // Transform 3                                                                       │      // Transform 3                                                                      
    a = K(0x6a09e667ul);                                                                 │      a = K(0x6a09e667ul);                                                                
    b = K(0xbb67ae85ul);                                                                 │      b = K(0xbb67ae85ul);                                                                
    c = K(0x3c6ef372ul);                                                                 │      c = K(0x3c6ef372ul);                                                                
    d = K(0xa54ff53aul);                                                                 │      d = K(0xa54ff53aul);                                                                
    e = K(0x510e527ful);                                                                 │      e = K(0x510e527ful);                                                                
    f = K(0x9b05688cul);                                                                 │      f = K(0x9b05688cul);                                                                
    g = K(0x1f83d9abul);                                                                 │      g = K(0x1f83d9abul);                                                                
    h = K(0x5be0cd19ul);                                                                 │      h = K(0x5be0cd19ul);                                                                
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, Add(K(0x428a2f98ul), w0));                             │      Round(a, b, c, d, e, f, g, h, Add(K(0x428a2f98ul), w0));                            
    Round(h, a, b, c, d, e, f, g, Add(K(0x71374491ul), w1));                             │      Round(h, a, b, c, d, e, f, g, Add(K(0x71374491ul), w1));                            
    Round(g, h, a, b, c, d, e, f, Add(K(0xb5c0fbcful), w2));                             │      Round(g, h, a, b, c, d, e, f, Add(K(0xb5c0fbcful), w2));                            
    Round(f, g, h, a, b, c, d, e, Add(K(0xe9b5dba5ul), w3));                             │      Round(f, g, h, a, b, c, d, e, Add(K(0xe9b5dba5ul), w3));                            
    Round(e, f, g, h, a, b, c, d, Add(K(0x3956c25bul), w4));                             │      Round(e, f, g, h, a, b, c, d, Add(K(0x3956c25bul), w4));                            
    Round(d, e, f, g, h, a, b, c, Add(K(0x59f111f1ul), w5));                             │      Round(d, e, f, g, h, a, b, c, Add(K(0x59f111f1ul), w5));                            
    Round(c, d, e, f, g, h, a, b, Add(K(0x923f82a4ul), w6));                             │      Round(c, d, e, f, g, h, a, b, Add(K(0x923f82a4ul), w6));                            
    Round(b, c, d, e, f, g, h, a, Add(K(0xab1c5ed5ul), w7));                             │      Round(b, c, d, e, f, g, h, a, Add(K(0xab1c5ed5ul), w7));                            
    Round(a, b, c, d, e, f, g, h, K(0x5807aa98ul));                                      │      Round(a, b, c, d, e, f, g, h, K(0x5807aa98ul));                                     
    Round(h, a, b, c, d, e, f, g, K(0x12835b01ul));                                      │      Round(h, a, b, c, d, e, f, g, K(0x12835b01ul));                                     
    Round(g, h, a, b, c, d, e, f, K(0x243185beul));                                      │      Round(g, h, a, b, c, d, e, f, K(0x243185beul));                                     
    Round(f, g, h, a, b, c, d, e, K(0x550c7dc3ul));                                      │      Round(f, g, h, a, b, c, d, e, K(0x550c7dc3ul));                                     
    Round(e, f, g, h, a, b, c, d, K(0x72be5d74ul));                                      │      Round(e, f, g, h, a, b, c, d, K(0x72be5d74ul));                                     
    Round(d, e, f, g, h, a, b, c, K(0x80deb1feul));                                      │      Round(d, e, f, g, h, a, b, c, K(0x80deb1feul));                                     
    Round(c, d, e, f, g, h, a, b, K(0x9bdc06a7ul));                                      │      Round(c, d, e, f, g, h, a, b, K(0x9bdc06a7ul));                                     
    Round(b, c, d, e, f, g, h, a, K(0xc19bf274ul));                                      │      Round(b, c, d, e, f, g, h, a, K(0xc19bf274ul));                                     
    Round(a, b, c, d, e, f, g, h, Add(K(0xe49b69c1ul), Inc(w0, sigma0(w1))));            │      Round(a, b, c, d, e, f, g, h, Add(K(0xe49b69c1ul), Inc(w0, sigma0(w1))));           
    Round(h, a, b, c, d, e, f, g, Add(K(0xefbe4786ul), Inc(w1, K(0xa00000ul), sigma0(w2) │      Round(h, a, b, c, d, e, f, g, Add(K(0xefbe4786ul), Inc(w1, K(0xa00000ul), sigma0(w2)
    Round(g, h, a, b, c, d, e, f, Add(K(0x0fc19dc6ul), Inc(w2, sigma1(w0), sigma0(w3)))) │      Round(g, h, a, b, c, d, e, f, Add(K(0x0fc19dc6ul), Inc(w2, sigma1(w0), sigma0(w3))))
    Round(f, g, h, a, b, c, d, e, Add(K(0x240ca1ccul), Inc(w3, sigma1(w1), sigma0(w4)))) │      Round(f, g, h, a, b, c, d, e, Add(K(0x240ca1ccul), Inc(w3, sigma1(w1), sigma0(w4))))
    Round(e, f, g, h, a, b, c, d, Add(K(0x2de92c6ful), Inc(w4, sigma1(w2), sigma0(w5)))) │      Round(e, f, g, h, a, b, c, d, Add(K(0x2de92c6ful), Inc(w4, sigma1(w2), sigma0(w5))))
    Round(d, e, f, g, h, a, b, c, Add(K(0x4a7484aaul), Inc(w5, sigma1(w3), sigma0(w6)))) │      Round(d, e, f, g, h, a, b, c, Add(K(0x4a7484aaul), Inc(w5, sigma1(w3), sigma0(w6))))
    Round(c, d, e, f, g, h, a, b, Add(K(0x5cb0a9dcul), Inc(w6, sigma1(w4), K(0x100ul), s │      Round(c, d, e, f, g, h, a, b, Add(K(0x5cb0a9dcul), Inc(w6, sigma1(w4), K(0x100ul), s
    Round(b, c, d, e, f, g, h, a, Add(K(0x76f988daul), Inc(w7, sigma1(w5), w0, K(0x11002 │      Round(b, c, d, e, f, g, h, a, Add(K(0x76f988daul), Inc(w7, sigma1(w5), w0, K(0x11002
    Round(a, b, c, d, e, f, g, h, Add(K(0x983e5152ul), w8 = Add(K(0x80000000ul), sigma1( │      Round(a, b, c, d, e, f, g, h, Add(K(0x983e5152ul), w8 = Add(K(0x80000000ul), sigma1(
    Round(h, a, b, c, d, e, f, g, Add(K(0xa831c66dul), w9 = Add(sigma1(w7), w2)));       │      Round(h, a, b, c, d, e, f, g, Add(K(0xa831c66dul), w9 = Add(sigma1(w7), w2)));      
    Round(g, h, a, b, c, d, e, f, Add(K(0xb00327c8ul), w10 = Add(sigma1(w8), w3)));      │      Round(g, h, a, b, c, d, e, f, Add(K(0xb00327c8ul), w10 = Add(sigma1(w8), w3)));     
    Round(f, g, h, a, b, c, d, e, Add(K(0xbf597fc7ul), w11 = Add(sigma1(w9), w4)));      │      Round(f, g, h, a, b, c, d, e, Add(K(0xbf597fc7ul), w11 = Add(sigma1(w9), w4)));     
    Round(e, f, g, h, a, b, c, d, Add(K(0xc6e00bf3ul), w12 = Add(sigma1(w10), w5)));     │      Round(e, f, g, h, a, b, c, d, Add(K(0xc6e00bf3ul), w12 = Add(sigma1(w10), w5)));    
    Round(d, e, f, g, h, a, b, c, Add(K(0xd5a79147ul), w13 = Add(sigma1(w11), w6)));     │      Round(d, e, f, g, h, a, b, c, Add(K(0xd5a79147ul), w13 = Add(sigma1(w11), w6)));    
    Round(c, d, e, f, g, h, a, b, Add(K(0x06ca6351ul), w14 = Add(sigma1(w12), w7, K(0x40 │      Round(c, d, e, f, g, h, a, b, Add(K(0x06ca6351ul), w14 = Add(sigma1(w12), w7, K(0x40
    Round(b, c, d, e, f, g, h, a, Add(K(0x14292967ul), w15 = Add(K(0x100ul), sigma1(w13) │      Round(b, c, d, e, f, g, h, a, Add(K(0x14292967ul), w15 = Add(K(0x100ul), sigma1(w13)
    Round(a, b, c, d, e, f, g, h, Add(K(0x27b70a85ul), Inc(w0, sigma1(w14), w9, sigma0(w │      Round(a, b, c, d, e, f, g, h, Add(K(0x27b70a85ul), Inc(w0, sigma1(w14), w9, sigma0(w
    Round(h, a, b, c, d, e, f, g, Add(K(0x2e1b2138ul), Inc(w1, sigma1(w15), w10, sigma0( │      Round(h, a, b, c, d, e, f, g, Add(K(0x2e1b2138ul), Inc(w1, sigma1(w15), w10, sigma0(
    Round(g, h, a, b, c, d, e, f, Add(K(0x4d2c6dfcul), Inc(w2, sigma1(w0), w11, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x4d2c6dfcul), Inc(w2, sigma1(w0), w11, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x53380d13ul), Inc(w3, sigma1(w1), w12, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x53380d13ul), Inc(w3, sigma1(w1), w12, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x650a7354ul), Inc(w4, sigma1(w2), w13, sigma0(w │      Round(e, f, g, h, a, b, c, d, Add(K(0x650a7354ul), Inc(w4, sigma1(w2), w13, sigma0(w
    Round(d, e, f, g, h, a, b, c, Add(K(0x766a0abbul), Inc(w5, sigma1(w3), w14, sigma0(w │      Round(d, e, f, g, h, a, b, c, Add(K(0x766a0abbul), Inc(w5, sigma1(w3), w14, sigma0(w
    Round(c, d, e, f, g, h, a, b, Add(K(0x81c2c92eul), Inc(w6, sigma1(w4), w15, sigma0(w │      Round(c, d, e, f, g, h, a, b, Add(K(0x81c2c92eul), Inc(w6, sigma1(w4), w15, sigma0(w
    Round(b, c, d, e, f, g, h, a, Add(K(0x92722c85ul), Inc(w7, sigma1(w5), w0, sigma0(w8 │      Round(b, c, d, e, f, g, h, a, Add(K(0x92722c85ul), Inc(w7, sigma1(w5), w0, sigma0(w8
    Round(a, b, c, d, e, f, g, h, Add(K(0xa2bfe8a1ul), Inc(w8, sigma1(w6), w1, sigma0(w9 │      Round(a, b, c, d, e, f, g, h, Add(K(0xa2bfe8a1ul), Inc(w8, sigma1(w6), w1, sigma0(w9
    Round(h, a, b, c, d, e, f, g, Add(K(0xa81a664bul), Inc(w9, sigma1(w7), w2, sigma0(w1 │      Round(h, a, b, c, d, e, f, g, Add(K(0xa81a664bul), Inc(w9, sigma1(w7), w2, sigma0(w1
    Round(g, h, a, b, c, d, e, f, Add(K(0xc24b8b70ul), Inc(w10, sigma1(w8), w3, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0xc24b8b70ul), Inc(w10, sigma1(w8), w3, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0xc76c51a3ul), Inc(w11, sigma1(w9), w4, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0xc76c51a3ul), Inc(w11, sigma1(w9), w4, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0xd192e819ul), Inc(w12, sigma1(w10), w5, sigma0( │      Round(e, f, g, h, a, b, c, d, Add(K(0xd192e819ul), Inc(w12, sigma1(w10), w5, sigma0(
    Round(d, e, f, g, h, a, b, c, Add(K(0xd6990624ul), Inc(w13, sigma1(w11), w6, sigma0( │      Round(d, e, f, g, h, a, b, c, Add(K(0xd6990624ul), Inc(w13, sigma1(w11), w6, sigma0(
    Round(c, d, e, f, g, h, a, b, Add(K(0xf40e3585ul), Inc(w14, sigma1(w12), w7, sigma0( │      Round(c, d, e, f, g, h, a, b, Add(K(0xf40e3585ul), Inc(w14, sigma1(w12), w7, sigma0(
    Round(b, c, d, e, f, g, h, a, Add(K(0x106aa070ul), Inc(w15, sigma1(w13), w8, sigma0( │      Round(b, c, d, e, f, g, h, a, Add(K(0x106aa070ul), Inc(w15, sigma1(w13), w8, sigma0(
    Round(a, b, c, d, e, f, g, h, Add(K(0x19a4c116ul), Inc(w0, sigma1(w14), w9, sigma0(w │      Round(a, b, c, d, e, f, g, h, Add(K(0x19a4c116ul), Inc(w0, sigma1(w14), w9, sigma0(w
    Round(h, a, b, c, d, e, f, g, Add(K(0x1e376c08ul), Inc(w1, sigma1(w15), w10, sigma0( │      Round(h, a, b, c, d, e, f, g, Add(K(0x1e376c08ul), Inc(w1, sigma1(w15), w10, sigma0(
    Round(g, h, a, b, c, d, e, f, Add(K(0x2748774cul), Inc(w2, sigma1(w0), w11, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x2748774cul), Inc(w2, sigma1(w0), w11, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x34b0bcb5ul), Inc(w3, sigma1(w1), w12, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x34b0bcb5ul), Inc(w3, sigma1(w1), w12, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x391c0cb3ul), Inc(w4, sigma1(w2), w13, sigma0(w │      Round(e, f, g, h, a, b, c, d, Add(K(0x391c0cb3ul), Inc(w4, sigma1(w2), w13, sigma0(w
    Round(d, e, f, g, h, a, b, c, Add(K(0x4ed8aa4aul), Inc(w5, sigma1(w3), w14, sigma0(w │      Round(d, e, f, g, h, a, b, c, Add(K(0x4ed8aa4aul), Inc(w5, sigma1(w3), w14, sigma0(w
    Round(c, d, e, f, g, h, a, b, Add(K(0x5b9cca4ful), Inc(w6, sigma1(w4), w15, sigma0(w │      Round(c, d, e, f, g, h, a, b, Add(K(0x5b9cca4ful), Inc(w6, sigma1(w4), w15, sigma0(w
    Round(b, c, d, e, f, g, h, a, Add(K(0x682e6ff3ul), Inc(w7, sigma1(w5), w0, sigma0(w8 │      Round(b, c, d, e, f, g, h, a, Add(K(0x682e6ff3ul), Inc(w7, sigma1(w5), w0, sigma0(w8
    Round(a, b, c, d, e, f, g, h, Add(K(0x748f82eeul), Inc(w8, sigma1(w6), w1, sigma0(w9 │      Round(a, b, c, d, e, f, g, h, Add(K(0x748f82eeul), Inc(w8, sigma1(w6), w1, sigma0(w9
    Round(h, a, b, c, d, e, f, g, Add(K(0x78a5636ful), Inc(w9, sigma1(w7), w2, sigma0(w1 │      Round(h, a, b, c, d, e, f, g, Add(K(0x78a5636ful), Inc(w9, sigma1(w7), w2, sigma0(w1
    Round(g, h, a, b, c, d, e, f, Add(K(0x84c87814ul), Inc(w10, sigma1(w8), w3, sigma0(w │      Round(g, h, a, b, c, d, e, f, Add(K(0x84c87814ul), Inc(w10, sigma1(w8), w3, sigma0(w
    Round(f, g, h, a, b, c, d, e, Add(K(0x8cc70208ul), Inc(w11, sigma1(w9), w4, sigma0(w │      Round(f, g, h, a, b, c, d, e, Add(K(0x8cc70208ul), Inc(w11, sigma1(w9), w4, sigma0(w
    Round(e, f, g, h, a, b, c, d, Add(K(0x90befffaul), Inc(w12, sigma1(w10), w5, sigma0( │      Round(e, f, g, h, a, b, c, d, Add(K(0x90befffaul), Inc(w12, sigma1(w10), w5, sigma0(
    Round(d, e, f, g, h, a, b, c, Add(K(0xa4506cebul), Inc(w13, sigma1(w11), w6, sigma0( │      Round(d, e, f, g, h, a, b, c, Add(K(0xa4506cebul), Inc(w13, sigma1(w11), w6, sigma0(
    Round(c, d, e, f, g, h, a, b, Add(K(0xbef9a3f7ul), w14, sigma1(w12), w7, sigma0(w15) │      Round(c, d, e, f, g, h, a, b, Add(K(0xbef9a3f7ul), w14, sigma1(w12), w7, sigma0(w15)
    Round(b, c, d, e, f, g, h, a, Add(K(0xc67178f2ul), w15, sigma1(w13), w8, sigma0(w0)) │      Round(b, c, d, e, f, g, h, a, Add(K(0xc67178f2ul), w15, sigma1(w13), w8, sigma0(w0))
                                                                                         │                                                                                          
    // Output                                                                            │      // Output                                                                           
    Write4(out, 0, Add(a, K(0x6a09e667ul)));                                             │      Write8(out, 0, Add(a, K(0x6a09e667ul)));                                            
    Write4(out, 4, Add(b, K(0xbb67ae85ul)));                                             │      Write8(out, 4, Add(b, K(0xbb67ae85ul)));                                            
    Write4(out, 8, Add(c, K(0x3c6ef372ul)));                                             │      Write8(out, 8, Add(c, K(0x3c6ef372ul)));                                            
    Write4(out, 12, Add(d, K(0xa54ff53aul)));                                            │      Write8(out, 12, Add(d, K(0xa54ff53aul)));                                           
    Write4(out, 16, Add(e, K(0x510e527ful)));                                            │      Write8(out, 16, Add(e, K(0x510e527ful)));                                           
    Write4(out, 20, Add(f, K(0x9b05688cul)));                                            │      Write8(out, 20, Add(f, K(0x9b05688cul)));                                           
    Write4(out, 24, Add(g, K(0x1f83d9abul)));                                            │      Write8(out, 24, Add(g, K(0x1f83d9abul)));                                           
    Write4(out, 28, Add(h, K(0x5be0cd19ul)));                                            │      Write8(out, 28, Add(h, K(0x5be0cd19ul)));                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactiondesc.cpp:52                                                  │ bitcoin/src/qt/transactiondesc.cpp:79                                                    
                                                                                         │                                                                                          
                                                                                         │      int numBlocks;                                                                      
                                                                                         │      interfaces::WalletTxStatus status;                                                  
                                                                                         │      interfaces::WalletOrderForm orderForm;                                              
                                                                                         │      bool inMempool;                                                                     
                                                                                         │      interfaces::WalletTx wtx = wallet.getWalletTxDetails(rec->hash, status, orderForm, i
                                                                                         │                                                                                          
    QString strHTML;                                                                     │      QString strHTML;                                                                    
                                                                                         │                                                                                          
    LOCK2(cs_main, wallet->cs_wallet);                                                   │                                                                                          
    strHTML.reserve(4000);                                                               │      strHTML.reserve(4000);                                                              
    strHTML += "<html><font face='verdana, arial, helvetica, sans-serif'>";              │      strHTML += "<html><font face='verdana, arial, helvetica, sans-serif'>";             
                                                                                         │                                                                                          
    int64_t nTime = wtx.GetTxTime();                                                     │      int64_t nTime = wtx.time;                                                           
    CAmount nCredit = wtx.GetCredit(ISMINE_ALL);                                         │      CAmount nCredit = wtx.credit;                                                       
    CAmount nDebit = wtx.GetDebit(ISMINE_ALL);                                           │      CAmount nDebit = wtx.debit;                                                         
    CAmount nNet = nCredit - nDebit;                                                     │      CAmount nNet = nCredit - nDebit;                                                    
                                                                                         │                                                                                          
    strHTML += "<b>" + tr("Status") + ":</b> " + FormatTxStatus(wtx);                    │      strHTML += "<b>" + tr("Status") + ":</b> " + FormatTxStatus(status, inMempool);     
    int nRequests = wtx.GetRequestCount();                                               │                                                                                          
    if (nRequests != -1)                                                                 │                                                                                          
    {                                                                                    │                                                                                          
        if (nRequests == 0)                                                              │                                                                                          
            strHTML += tr(", has not been successfully broadcast yet");                  │                                                                                          
        else if (nRequests > 0)                                                          │                                                                                          
            strHTML += tr(", broadcast through %n node(s)", "", nRequests);              │                                                                                          
    }                                                                                    │                                                                                          
    strHTML += "<br>";                                                                   │      strHTML += "<br>";                                                                  
                                                                                         │                                                                                          
    strHTML += "<b>" + tr("Date") + ":</b> " + (nTime ? GUIUtil::dateTimeStr(nTime) : "" │      strHTML += "<b>" + tr("Date") + ":</b> " + (nTime ? GUIUtil::dateTimeStr(nTime) : ""
                                                                                         │                                                                                          
    //                                                                                   │      //                                                                                  
    // From                                                                              │      // From                                                                             
    //                                                                                   │      //                                                                                  
    if (wtx.IsCoinBase())                                                                │      if (wtx.is_coinbase)                                                                
    {                                                                                    │      {                                                                                   
        strHTML += "<b>" + tr("Source") + ":</b> " + tr("Generated") + "<br>";           │          strHTML += "<b>" + tr("Source") + ":</b> " + tr("Generated") + "<br>";          
    }                                                                                    │      }                                                                                   
    else if (wtx.mapValue.count("from") && !wtx.mapValue["from"].empty())                │      else if (wtx.value_map.count("from") && !wtx.value_map["from"].empty())             
    {                                                                                    │      {                                                                                   
        // Online transaction                                                            │          // Online transaction                                                           
        strHTML += "<b>" + tr("From") + ":</b> " + GUIUtil::HtmlEscape(wtx.mapValue["fro │          strHTML += "<b>" + tr("From") + ":</b> " + GUIUtil::HtmlEscape(wtx.value_map["fr
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        // Offline transaction                                                           │          // Offline transaction                                                          
        if (nNet > 0)                                                                    │          if (nNet > 0)                                                                   
        {                                                                                │          {                                                                               
            // Credit                                                                    │              // Credit                                                                   
            if (CBitcoinAddress(rec->address).IsValid())                                 │              CTxDestination address = DecodeDestination(rec->address);                   
            {                                                                            │              if (IsValidDestination(address)) {                                          
                CTxDestination address = CBitcoinAddress(rec->address).Get();            │                  std::string name;                                                       
                if (wallet->mapAddressBook.count(address))                               │                  isminetype ismine;                                                      
                                                                                         │                  if (wallet.getAddress(address, &name, &ismine, /* purpose= */ nullptr)) 
                {                                                                        │                  {                                                                       
                    strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>";   │                      strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>";  
                    strHTML += "<b>" + tr("To") + ":</b> ";                              │                      strHTML += "<b>" + tr("To") + ":</b> ";                             
                    strHTML += GUIUtil::HtmlEscape(rec->address);                        │                      strHTML += GUIUtil::HtmlEscape(rec->address);                       
                    QString addressOwned = (::IsMine(*wallet, address) == ISMINE_SPENDAB │                      QString addressOwned = ismine == ISMINE_SPENDABLE ? tr("own address"
                    if (!wallet->mapAddressBook[address].name.empty())                   │                      if (!name.empty())                                                  
                        strHTML += " (" + addressOwned + ", " + tr("label") + ": " + GUI │                          strHTML += " (" + addressOwned + ", " + tr("label") + ": " + GUI
                    else                                                                 │                      else                                                                
                        strHTML += " (" + addressOwned + ")";                            │                          strHTML += " (" + addressOwned + ")";                           
                    strHTML += "<br>";                                                   │                      strHTML += "<br>";                                                  
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    //                                                                                   │      //                                                                                  
    // To                                                                                │      // To                                                                               
    //                                                                                   │      //                                                                                  
    if (wtx.mapValue.count("to") && !wtx.mapValue["to"].empty())                         │      if (wtx.value_map.count("to") && !wtx.value_map["to"].empty())                      
    {                                                                                    │      {                                                                                   
        // Online transaction                                                            │          // Online transaction                                                           
        std::string strAddress = wtx.mapValue["to"];                                     │          std::string strAddress = wtx.value_map["to"];                                   
        strHTML += "<b>" + tr("To") + ":</b> ";                                          │          strHTML += "<b>" + tr("To") + ":</b> ";                                         
        CTxDestination dest = CBitcoinAddress(strAddress).Get();                         │          CTxDestination dest = DecodeDestination(strAddress);                            
        if (wallet->mapAddressBook.count(dest) && !wallet->mapAddressBook[dest].name.emp │          std::string name;                                                               
            strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[dest].name) + " ";     │          if (wallet.getAddress(                                                          
                                                                                         │                  dest, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr) && !name.em
                                                                                         │              strHTML += GUIUtil::HtmlEscape(name) + " ";                                 
        strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>";                             │          strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>";                            
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    //                                                                                   │      //                                                                                  
    // Amount                                                                            │      // Amount                                                                           
    //                                                                                   │      //                                                                                  
    if (wtx.IsCoinBase() && nCredit == 0)                                                │      if (wtx.is_coinbase && nCredit == 0)                                                
    {                                                                                    │      {                                                                                   
        //                                                                               │          //                                                                              
        // Coinbase                                                                      │          // Coinbase                                                                     
        //                                                                               │          //                                                                              
        CAmount nUnmatured = 0;                                                          │          CAmount nUnmatured = 0;                                                         
        BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                                 │          for (const CTxOut& txout : wtx.tx->vout)                                        
            nUnmatured += wallet->GetCredit(txout, ISMINE_ALL);                          │              nUnmatured += wallet.getCredit(txout, ISMINE_ALL);                          
        strHTML += "<b>" + tr("Credit") + ":</b> ";                                      │          strHTML += "<b>" + tr("Credit") + ":</b> ";                                     
        if (wtx.IsInMainChain())                                                         │          if (status.is_in_main_chain)                                                    
            strHTML += BitcoinUnits::formatHtmlWithUnit(unit, nUnmatured)+ " (" + tr("ma │              strHTML += BitcoinUnits::formatHtmlWithUnit(unit, nUnmatured)+ " (" + tr("ma
        else                                                                             │          else                                                                            
            strHTML += "(" + tr("not accepted") + ")";                                   │              strHTML += "(" + tr("not accepted") + ")";                                  
        strHTML += "<br>";                                                               │          strHTML += "<br>";                                                              
    }                                                                                    │      }                                                                                   
    else if (nNet > 0)                                                                   │      else if (nNet > 0)                                                                  
    {                                                                                    │      {                                                                                   
        //                                                                               │          //                                                                              
        // Credit                                                                        │          // Credit                                                                       
        //                                                                               │          //                                                                              
        strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(un │          strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(un
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        isminetype fAllFromMe = ISMINE_SPENDABLE;                                        │          isminetype fAllFromMe = ISMINE_SPENDABLE;                                       
        BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                    │          for (const isminetype mine : wtx.txin_is_mine)                                  
        {                                                                                │          {                                                                               
            isminetype mine = wallet->IsMine(txin);                                      │                                                                                          
            if(fAllFromMe > mine) fAllFromMe = mine;                                     │              if(fAllFromMe > mine) fAllFromMe = mine;                                    
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        isminetype fAllToMe = ISMINE_SPENDABLE;                                          │          isminetype fAllToMe = ISMINE_SPENDABLE;                                         
        BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                                 │          for (const isminetype mine : wtx.txout_is_mine)                                 
        {                                                                                │          {                                                                               
            isminetype mine = wallet->IsMine(txout);                                     │                                                                                          
            if(fAllToMe > mine) fAllToMe = mine;                                         │              if(fAllToMe > mine) fAllToMe = mine;                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (fAllFromMe)                                                                  │          if (fAllFromMe)                                                                 
        {                                                                                │          {                                                                               
            if(fAllFromMe & ISMINE_WATCH_ONLY)                                           │              if(fAllFromMe & ISMINE_WATCH_ONLY)                                          
                strHTML += "<b>" + tr("From") + ":</b> " + tr("watch-only") + "<br>";    │                  strHTML += "<b>" + tr("From") + ":</b> " + tr("watch-only") + "<br>";   
                                                                                         │                                                                                          
            //                                                                           │              //                                                                          
            // Debit                                                                     │              // Debit                                                                    
            //                                                                           │              //                                                                          
            BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                             │              auto mine = wtx.txout_is_mine.begin();                                      
                                                                                         │              for (const CTxOut& txout : wtx.tx->vout)                                    
            {                                                                            │              {                                                                           
                // Ignore change                                                         │                  // Ignore change                                                        
                isminetype toSelf = wallet->IsMine(txout);                               │                  isminetype toSelf = *(mine++);                                          
                if ((toSelf == ISMINE_SPENDABLE) && (fAllFromMe == ISMINE_SPENDABLE))    │                  if ((toSelf == ISMINE_SPENDABLE) && (fAllFromMe == ISMINE_SPENDABLE))   
                    continue;                                                            │                      continue;                                                           
                                                                                         │                                                                                          
                if (!wtx.mapValue.count("to") || wtx.mapValue["to"].empty())             │                  if (!wtx.value_map.count("to") || wtx.value_map["to"].empty())          
                {                                                                        │                  {                                                                       
                    // Offline transaction                                               │                      // Offline transaction                                              
                    CTxDestination address;                                              │                      CTxDestination address;                                             
                    if (ExtractDestination(txout.scriptPubKey, address))                 │                      if (ExtractDestination(txout.scriptPubKey, address))                
                    {                                                                    │                      {                                                                   
                        strHTML += "<b>" + tr("To") + ":</b> ";                          │                          strHTML += "<b>" + tr("To") + ":</b> ";                         
                        if (wallet->mapAddressBook.count(address) && !wallet->mapAddress │                          std::string name;                                               
                            strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[addres │                          if (wallet.getAddress(                                          
                        strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString │                                  address, &name, /* is_mine= */ nullptr, /* purpose= */ n
                                                                                         │                              strHTML += GUIUtil::HtmlEscape(name) + " ";                 
                                                                                         │                          strHTML += GUIUtil::HtmlEscape(EncodeDestination(address));     
                        if(toSelf == ISMINE_SPENDABLE)                                   │                          if(toSelf == ISMINE_SPENDABLE)                                  
                            strHTML += " (" + tr("own address") + ")";                   │                              strHTML += " (own address)";                                
                        else if(toSelf & ISMINE_WATCH_ONLY)                              │                          else if(toSelf & ISMINE_WATCH_ONLY)                             
                            strHTML += " (" + tr("watch-only") + ")";                    │                              strHTML += " (watch-only)";                                 
                        strHTML += "<br>";                                               │                          strHTML += "<br>";                                              
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWith │                  strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWith
                if(toSelf)                                                               │                  if(toSelf)                                                              
                    strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtm │                      strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtm
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            if (fAllToMe)                                                                │              if (fAllToMe)                                                               
            {                                                                            │              {                                                                           
                // Payment to self                                                       │                  // Payment to self                                                      
                CAmount nChange = wtx.GetChange();                                       │                  CAmount nChange = wtx.change;                                           
                CAmount nValue = nCredit - nChange;                                      │                  CAmount nValue = nCredit - nChange;                                     
                strHTML += "<b>" + tr("Total debit") + ":</b> " + BitcoinUnits::formatHt │                  strHTML += "<b>" + tr("Total debit") + ":</b> " + BitcoinUnits::formatHt
                strHTML += "<b>" + tr("Total credit") + ":</b> " + BitcoinUnits::formatH │                  strHTML += "<b>" + tr("Total credit") + ":</b> " + BitcoinUnits::formatH
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            CAmount nTxFee = nDebit - wtx.tx->GetValueOut();                             │              CAmount nTxFee = nDebit - wtx.tx->GetValueOut();                            
            if (nTxFee > 0)                                                              │              if (nTxFee > 0)                                                             
                strHTML += "<b>" + tr("Transaction fee") + ":</b> " + BitcoinUnits::form │                  strHTML += "<b>" + tr("Transaction fee") + ":</b> " + BitcoinUnits::form
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            //                                                                           │              //                                                                          
            // Mixed debit transaction                                                   │              // Mixed debit transaction                                                  
            //                                                                           │              //                                                                          
            BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                │              auto mine = wtx.txin_is_mine.begin();                                       
                if (wallet->IsMine(txin))                                                │              for (const CTxIn& txin : wtx.tx->vin) {                                     
                    strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtml │                  if (*(mine++)) {                                                        
            BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                             │                      strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtml
                if (wallet->IsMine(txout))                                               │                  }                                                                       
                    strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtm │              }                                                                           
                                                                                         │              mine = wtx.txout_is_mine.begin();                                           
                                                                                         │              for (const CTxOut& txout : wtx.tx->vout) {                                  
                                                                                         │                  if (*(mine++)) {                                                        
                                                                                         │                      strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtm
                                                                                         │                  }                                                                       
                                                                                         │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    strHTML += "<b>" + tr("Net amount") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(un │      strHTML += "<b>" + tr("Net amount") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(un
                                                                                         │                                                                                          
    //                                                                                   │      //                                                                                  
    // Message                                                                           │      // Message                                                                          
    //                                                                                   │      //                                                                                  
    if (wtx.mapValue.count("message") && !wtx.mapValue["message"].empty())               │      if (wtx.value_map.count("message") && !wtx.value_map["message"].empty())            
        strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.map │          strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.val
    if (wtx.mapValue.count("comment") && !wtx.mapValue["comment"].empty())               │      if (wtx.value_map.count("comment") && !wtx.value_map["comment"].empty())            
        strHTML += "<br><b>" + tr("Comment") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.map │          strHTML += "<br><b>" + tr("Comment") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.val
                                                                                         │                                                                                          
    strHTML += "<b>" + tr("Transaction ID") + ":</b> " + rec->getTxID() + "<br>";        │      strHTML += "<b>" + tr("Transaction ID") + ":</b> " + rec->getTxHash() + "<br>";     
    strHTML += "<b>" + tr("Transaction total size") + ":</b> " + QString::number(wtx.tx- │      strHTML += "<b>" + tr("Transaction total size") + ":</b> " + QString::number(wtx.tx-
                                                                                         │      strHTML += "<b>" + tr("Transaction virtual size") + ":</b> " + QString::number(GetVi
    strHTML += "<b>" + tr("Output index") + ":</b> " + QString::number(rec->getOutputInd │      strHTML += "<b>" + tr("Output index") + ":</b> " + QString::number(rec->getOutputInd
                                                                                         │                                                                                          
    // Message from normal bitcoin:URI (bitcoin:123...?message=example)                  │      // Message from normal bitcoin:URI (bitcoin:123...?message=example)                 
    Q_FOREACH (const PAIRTYPE(std::string, std::string)& r, wtx.vOrderForm)              │      for (const std::pair<std::string, std::string>& r : orderForm) {                    
        if (r.first == "Message")                                                        │          if (r.first == "Message")                                                       
            strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(r.s │              strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(r.s
                                                                                         │                                                                                          
    //                                                                                   │          //                                                                              
    // PaymentRequest info:                                                              │          // PaymentRequest info:                                                         
    //                                                                                   │          //                                                                              
    Q_FOREACH (const PAIRTYPE(std::string, std::string)& r, wtx.vOrderForm)              │                                                                                          
    {                                                                                    │                                                                                          
        if (r.first == "PaymentRequest")                                                 │          if (r.first == "PaymentRequest")                                                
        {                                                                                │          {                                                                               
            PaymentRequestPlus req;                                                      │                                                                                          
            req.parse(QByteArray::fromRawData(r.second.data(), r.second.size()));        │                                                                                          
            QString merchant;                                                            │              QString merchant;                                                           
            if (req.getMerchant(PaymentServer::getCertStore(), merchant))                │              if (!GetPaymentRequestMerchant(r.second, merchant)) {                       
                                                                                         │                  merchant.clear();                                                       
                                                                                         │              } else {                                                                    
                                                                                         │                  merchant += tr(" (Certificate was not verified)");                      
                                                                                         │              }                                                                           
                                                                                         │              if (!merchant.isNull()) {                                                   
                strHTML += "<b>" + tr("Merchant") + ":</b> " + GUIUtil::HtmlEscape(merch │                  strHTML += "<b>" + tr("Merchant") + ":</b> " + GUIUtil::HtmlEscape(merch
                                                                                         │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (wtx.IsCoinBase())                                                                │      if (wtx.is_coinbase)                                                                
    {                                                                                    │      {                                                                                   
        quint32 nCoinbaseMaturity = Params().GetConsensus(chainActive.Height()).nCoinbas │          quint32 numBlocksToMaturity = COINBASE_MATURITY +  1;                           
        strHTML += "<br>" + tr("Generated coins must mature %1 blocks before they can be │          strHTML += "<br>" + tr("Generated coins must mature %1 blocks before they can be
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    //                                                                                   │      //                                                                                  
    // Debug view                                                                        │      // Debug view                                                                       
    //                                                                                   │      //                                                                                  
    if (fDebug)                                                                          │      if (node.getLogCategories() != BCLog::NONE)                                         
    {                                                                                    │      {                                                                                   
        strHTML += "<hr><br>" + tr("Debug information") + "<br><br>";                    │          strHTML += "<hr><br>" + tr("Debug information") + "<br><br>";                   
        BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                    │          for (const CTxIn& txin : wtx.tx->vin)                                           
            if(wallet->IsMine(txin))                                                     │              if(wallet.txinIsMine(txin))                                                 
                strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWith │                  strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWith
        BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                                 │          for (const CTxOut& txout : wtx.tx->vout)                                        
            if(wallet->IsMine(txout))                                                    │              if(wallet.txoutIsMine(txout))                                               
                strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWit │                  strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWit
                                                                                         │                                                                                          
        strHTML += "<br><b>" + tr("Transaction") + ":</b><br>";                          │          strHTML += "<br><b>" + tr("Transaction") + ":</b><br>";                         
        strHTML += GUIUtil::HtmlEscape(wtx.tx->ToString(), true);                        │          strHTML += GUIUtil::HtmlEscape(wtx.tx->ToString(), true);                       
                                                                                         │                                                                                          
        strHTML += "<br><b>" + tr("Inputs") + ":</b>";                                   │          strHTML += "<br><b>" + tr("Inputs") + ":</b>";                                  
        strHTML += "<ul>";                                                               │          strHTML += "<ul>";                                                              
                                                                                         │                                                                                          
        BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                    │          for (const CTxIn& txin : wtx.tx->vin)                                           
        {                                                                                │          {                                                                               
            COutPoint prevout = txin.prevout;                                            │              COutPoint prevout = txin.prevout;                                           
                                                                                         │                                                                                          
            CCoins prev;                                                                 │              Coin prev;                                                                  
            if(pcoinsTip->GetCoins(prevout.hash, prev))                                  │              if(node.getUnspentOutput(prevout, prev))                                    
            {                                                                            │              {                                                                           
                if (prevout.n < prev.vout.size())                                        │                                                                                          
                {                                                                        │                  {                                                                       
                    strHTML += "<li>";                                                   │                      strHTML += "<li>";                                                  
                    const CTxOut &vout = prev.vout[prevout.n];                           │                      const CTxOut &vout = prev.out;                                      
                    CTxDestination address;                                              │                      CTxDestination address;                                             
                    if (ExtractDestination(vout.scriptPubKey, address))                  │                      if (ExtractDestination(vout.scriptPubKey, address))                 
                    {                                                                    │                      {                                                                   
                        if (wallet->mapAddressBook.count(address) && !wallet->mapAddress │                          std::string name;                                               
                            strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[addres │                          if (wallet.getAddress(address, &name, /* is_mine= */ nullptr, /*
                        strHTML += QString::fromStdString(CBitcoinAddress(address).ToStr │                              strHTML += GUIUtil::HtmlEscape(name) + " ";                 
                                                                                         │                          strHTML += QString::fromStdString(EncodeDestination(address));  
                    }                                                                    │                      }                                                                   
                    strHTML = strHTML + " " + tr("Amount") + "=" + BitcoinUnits::formatH │                      strHTML = strHTML + " " + tr("Amount") + "=" + BitcoinUnits::formatH
                    strHTML = strHTML + " IsMine=" + (wallet->IsMine(vout) & ISMINE_SPEN │                      strHTML = strHTML + " IsMine=" + (wallet.txoutIsMine(vout) & ISMINE_
                    strHTML = strHTML + " IsWatchOnly=" + (wallet->IsMine(vout) & ISMINE │                      strHTML = strHTML + " IsWatchOnly=" + (wallet.txoutIsMine(vout) & IS
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        strHTML += "</ul>";                                                              │          strHTML += "</ul>";                                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    strHTML += "</font></html>";                                                         │      strHTML += "</font></html>";                                                        
    return strHTML;                                                                      │      return strHTML;                                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/crypto/ripemd160.cpp:13                                                    │ bitcoin/src/crypto/ripemd160.cpp:13                                                      
                                                                                         │                                                                                          
/// Internal RIPEMD-160 implementation.                                                  │  /// Internal RIPEMD-160 implementation.                                                 
namespace ripemd160                                                                      │  namespace ripemd160                                                                     
{                                                                                        │  {                                                                                       
uint32_t inline f1(uint32_t x, uint32_t y, uint32_t z) { return x ^ y ^ z; }             │  uint32_t inline f1(uint32_t x, uint32_t y, uint32_t z) { return x ^ y ^ z; }            
uint32_t inline f2(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (~x & z); }    │  uint32_t inline f2(uint32_t x, uint32_t y, uint32_t z) { return (x & y) | (~x & z); }   
uint32_t inline f3(uint32_t x, uint32_t y, uint32_t z) { return (x | ~y) ^ z; }          │  uint32_t inline f3(uint32_t x, uint32_t y, uint32_t z) { return (x | ~y) ^ z; }         
uint32_t inline f4(uint32_t x, uint32_t y, uint32_t z) { return (x & z) | (y & ~z); }    │  uint32_t inline f4(uint32_t x, uint32_t y, uint32_t z) { return (x & z) | (y & ~z); }   
uint32_t inline f5(uint32_t x, uint32_t y, uint32_t z) { return x ^ (y | ~z); }          │  uint32_t inline f5(uint32_t x, uint32_t y, uint32_t z) { return x ^ (y | ~z); }         
                                                                                         │                                                                                          
/** Initialize RIPEMD-160 state. */                                                      │  /** Initialize RIPEMD-160 state. */                                                     
void inline Initialize(uint32_t* s)                                                      │  void inline Initialize(uint32_t* s)                                                     
{                                                                                        │  {                                                                                       
    s[0] = 0x67452301ul;                                                                 │      s[0] = 0x67452301ul;                                                                
    s[1] = 0xEFCDAB89ul;                                                                 │      s[1] = 0xEFCDAB89ul;                                                                
    s[2] = 0x98BADCFEul;                                                                 │      s[2] = 0x98BADCFEul;                                                                
    s[3] = 0x10325476ul;                                                                 │      s[3] = 0x10325476ul;                                                                
    s[4] = 0xC3D2E1F0ul;                                                                 │      s[4] = 0xC3D2E1F0ul;                                                                
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
uint32_t inline rol(uint32_t x, int i) { return (x << i) | (x >> (32 - i)); }            │  uint32_t inline rol(uint32_t x, int i) { return (x << i) | (x >> (32 - i)); }           
                                                                                         │                                                                                          
void inline Round(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t │  void inline Round(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t
{                                                                                        │  {                                                                                       
    a = rol(a + f + x + k, r) + e;                                                       │      a = rol(a + f + x + k, r) + e;                                                      
    c = rol(c, 10);                                                                      │      c = rol(c, 10);                                                                     
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
void inline R11(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R11(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R21(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R21(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R31(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R31(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R41(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R41(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R51(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R51(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
                                                                                         │                                                                                          
void inline R12(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R12(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R22(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R22(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R32(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R32(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R42(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R42(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
void inline R52(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x │  void inline R52(uint32_t& a, uint32_t b, uint32_t& c, uint32_t d, uint32_t e, uint32_t x
                                                                                         │                                                                                          
/** Perform a RIPEMD-160 transformation, processing a 64-byte chunk. */                  │  /** Perform a RIPEMD-160 transformation, processing a 64-byte chunk. */                 
void Transform(uint32_t* s, const unsigned char* chunk)                                  │  void Transform(uint32_t* s, const unsigned char* chunk)                                 
{                                                                                        │  {                                                                                       
    uint32_t a1 = s[0], b1 = s[1], c1 = s[2], d1 = s[3], e1 = s[4];                      │      uint32_t a1 = s[0], b1 = s[1], c1 = s[2], d1 = s[3], e1 = s[4];                     
    uint32_t a2 = a1, b2 = b1, c2 = c1, d2 = d1, e2 = e1;                                │      uint32_t a2 = a1, b2 = b1, c2 = c1, d2 = d1, e2 = e1;                               
    uint32_t w0 = ReadLE32(chunk + 0), w1 = ReadLE32(chunk + 4), w2 = ReadLE32(chunk + 8 │      uint32_t w0 = ReadLE32(chunk + 0), w1 = ReadLE32(chunk + 4), w2 = ReadLE32(chunk + 8
    uint32_t w4 = ReadLE32(chunk + 16), w5 = ReadLE32(chunk + 20), w6 = ReadLE32(chunk + │      uint32_t w4 = ReadLE32(chunk + 16), w5 = ReadLE32(chunk + 20), w6 = ReadLE32(chunk +
    uint32_t w8 = ReadLE32(chunk + 32), w9 = ReadLE32(chunk + 36), w10 = ReadLE32(chunk  │      uint32_t w8 = ReadLE32(chunk + 32), w9 = ReadLE32(chunk + 36), w10 = ReadLE32(chunk 
    uint32_t w12 = ReadLE32(chunk + 48), w13 = ReadLE32(chunk + 52), w14 = ReadLE32(chun │      uint32_t w12 = ReadLE32(chunk + 48), w13 = ReadLE32(chunk + 52), w14 = ReadLE32(chun
                                                                                         │                                                                                          
    R11(a1, b1, c1, d1, e1, w0, 11);                                                     │      R11(a1, b1, c1, d1, e1, w0, 11);                                                    
    R12(a2, b2, c2, d2, e2, w5, 8);                                                      │      R12(a2, b2, c2, d2, e2, w5, 8);                                                     
    R11(e1, a1, b1, c1, d1, w1, 14);                                                     │      R11(e1, a1, b1, c1, d1, w1, 14);                                                    
    R12(e2, a2, b2, c2, d2, w14, 9);                                                     │      R12(e2, a2, b2, c2, d2, w14, 9);                                                    
    R11(d1, e1, a1, b1, c1, w2, 15);                                                     │      R11(d1, e1, a1, b1, c1, w2, 15);                                                    
    R12(d2, e2, a2, b2, c2, w7, 9);                                                      │      R12(d2, e2, a2, b2, c2, w7, 9);                                                     
    R11(c1, d1, e1, a1, b1, w3, 12);                                                     │      R11(c1, d1, e1, a1, b1, w3, 12);                                                    
    R12(c2, d2, e2, a2, b2, w0, 11);                                                     │      R12(c2, d2, e2, a2, b2, w0, 11);                                                    
    R11(b1, c1, d1, e1, a1, w4, 5);                                                      │      R11(b1, c1, d1, e1, a1, w4, 5);                                                     
    R12(b2, c2, d2, e2, a2, w9, 13);                                                     │      R12(b2, c2, d2, e2, a2, w9, 13);                                                    
    R11(a1, b1, c1, d1, e1, w5, 8);                                                      │      R11(a1, b1, c1, d1, e1, w5, 8);                                                     
    R12(a2, b2, c2, d2, e2, w2, 15);                                                     │      R12(a2, b2, c2, d2, e2, w2, 15);                                                    
    R11(e1, a1, b1, c1, d1, w6, 7);                                                      │      R11(e1, a1, b1, c1, d1, w6, 7);                                                     
    R12(e2, a2, b2, c2, d2, w11, 15);                                                    │      R12(e2, a2, b2, c2, d2, w11, 15);                                                   
    R11(d1, e1, a1, b1, c1, w7, 9);                                                      │      R11(d1, e1, a1, b1, c1, w7, 9);                                                     
    R12(d2, e2, a2, b2, c2, w4, 5);                                                      │      R12(d2, e2, a2, b2, c2, w4, 5);                                                     
    R11(c1, d1, e1, a1, b1, w8, 11);                                                     │      R11(c1, d1, e1, a1, b1, w8, 11);                                                    
    R12(c2, d2, e2, a2, b2, w13, 7);                                                     │      R12(c2, d2, e2, a2, b2, w13, 7);                                                    
    R11(b1, c1, d1, e1, a1, w9, 13);                                                     │      R11(b1, c1, d1, e1, a1, w9, 13);                                                    
    R12(b2, c2, d2, e2, a2, w6, 7);                                                      │      R12(b2, c2, d2, e2, a2, w6, 7);                                                     
    R11(a1, b1, c1, d1, e1, w10, 14);                                                    │      R11(a1, b1, c1, d1, e1, w10, 14);                                                   
    R12(a2, b2, c2, d2, e2, w15, 8);                                                     │      R12(a2, b2, c2, d2, e2, w15, 8);                                                    
    R11(e1, a1, b1, c1, d1, w11, 15);                                                    │      R11(e1, a1, b1, c1, d1, w11, 15);                                                   
    R12(e2, a2, b2, c2, d2, w8, 11);                                                     │      R12(e2, a2, b2, c2, d2, w8, 11);                                                    
    R11(d1, e1, a1, b1, c1, w12, 6);                                                     │      R11(d1, e1, a1, b1, c1, w12, 6);                                                    
    R12(d2, e2, a2, b2, c2, w1, 14);                                                     │      R12(d2, e2, a2, b2, c2, w1, 14);                                                    
    R11(c1, d1, e1, a1, b1, w13, 7);                                                     │      R11(c1, d1, e1, a1, b1, w13, 7);                                                    
    R12(c2, d2, e2, a2, b2, w10, 14);                                                    │      R12(c2, d2, e2, a2, b2, w10, 14);                                                   
    R11(b1, c1, d1, e1, a1, w14, 9);                                                     │      R11(b1, c1, d1, e1, a1, w14, 9);                                                    
    R12(b2, c2, d2, e2, a2, w3, 12);                                                     │      R12(b2, c2, d2, e2, a2, w3, 12);                                                    
    R11(a1, b1, c1, d1, e1, w15, 8);                                                     │      R11(a1, b1, c1, d1, e1, w15, 8);                                                    
    R12(a2, b2, c2, d2, e2, w12, 6);                                                     │      R12(a2, b2, c2, d2, e2, w12, 6);                                                    
                                                                                         │                                                                                          
    R21(e1, a1, b1, c1, d1, w7, 7);                                                      │      R21(e1, a1, b1, c1, d1, w7, 7);                                                     
    R22(e2, a2, b2, c2, d2, w6, 9);                                                      │      R22(e2, a2, b2, c2, d2, w6, 9);                                                     
    R21(d1, e1, a1, b1, c1, w4, 6);                                                      │      R21(d1, e1, a1, b1, c1, w4, 6);                                                     
    R22(d2, e2, a2, b2, c2, w11, 13);                                                    │      R22(d2, e2, a2, b2, c2, w11, 13);                                                   
    R21(c1, d1, e1, a1, b1, w13, 8);                                                     │      R21(c1, d1, e1, a1, b1, w13, 8);                                                    
    R22(c2, d2, e2, a2, b2, w3, 15);                                                     │      R22(c2, d2, e2, a2, b2, w3, 15);                                                    
    R21(b1, c1, d1, e1, a1, w1, 13);                                                     │      R21(b1, c1, d1, e1, a1, w1, 13);                                                    
    R22(b2, c2, d2, e2, a2, w7, 7);                                                      │      R22(b2, c2, d2, e2, a2, w7, 7);                                                     
    R21(a1, b1, c1, d1, e1, w10, 11);                                                    │      R21(a1, b1, c1, d1, e1, w10, 11);                                                   
    R22(a2, b2, c2, d2, e2, w0, 12);                                                     │      R22(a2, b2, c2, d2, e2, w0, 12);                                                    
    R21(e1, a1, b1, c1, d1, w6, 9);                                                      │      R21(e1, a1, b1, c1, d1, w6, 9);                                                     
    R22(e2, a2, b2, c2, d2, w13, 8);                                                     │      R22(e2, a2, b2, c2, d2, w13, 8);                                                    
    R21(d1, e1, a1, b1, c1, w15, 7);                                                     │      R21(d1, e1, a1, b1, c1, w15, 7);                                                    
    R22(d2, e2, a2, b2, c2, w5, 9);                                                      │      R22(d2, e2, a2, b2, c2, w5, 9);                                                     
    R21(c1, d1, e1, a1, b1, w3, 15);                                                     │      R21(c1, d1, e1, a1, b1, w3, 15);                                                    
    R22(c2, d2, e2, a2, b2, w10, 11);                                                    │      R22(c2, d2, e2, a2, b2, w10, 11);                                                   
    R21(b1, c1, d1, e1, a1, w12, 7);                                                     │      R21(b1, c1, d1, e1, a1, w12, 7);                                                    
    R22(b2, c2, d2, e2, a2, w14, 7);                                                     │      R22(b2, c2, d2, e2, a2, w14, 7);                                                    
    R21(a1, b1, c1, d1, e1, w0, 12);                                                     │      R21(a1, b1, c1, d1, e1, w0, 12);                                                    
    R22(a2, b2, c2, d2, e2, w15, 7);                                                     │      R22(a2, b2, c2, d2, e2, w15, 7);                                                    
    R21(e1, a1, b1, c1, d1, w9, 15);                                                     │      R21(e1, a1, b1, c1, d1, w9, 15);                                                    
    R22(e2, a2, b2, c2, d2, w8, 12);                                                     │      R22(e2, a2, b2, c2, d2, w8, 12);                                                    
    R21(d1, e1, a1, b1, c1, w5, 9);                                                      │      R21(d1, e1, a1, b1, c1, w5, 9);                                                     
    R22(d2, e2, a2, b2, c2, w12, 7);                                                     │      R22(d2, e2, a2, b2, c2, w12, 7);                                                    
    R21(c1, d1, e1, a1, b1, w2, 11);                                                     │      R21(c1, d1, e1, a1, b1, w2, 11);                                                    
    R22(c2, d2, e2, a2, b2, w4, 6);                                                      │      R22(c2, d2, e2, a2, b2, w4, 6);                                                     
    R21(b1, c1, d1, e1, a1, w14, 7);                                                     │      R21(b1, c1, d1, e1, a1, w14, 7);                                                    
    R22(b2, c2, d2, e2, a2, w9, 15);                                                     │      R22(b2, c2, d2, e2, a2, w9, 15);                                                    
    R21(a1, b1, c1, d1, e1, w11, 13);                                                    │      R21(a1, b1, c1, d1, e1, w11, 13);                                                   
    R22(a2, b2, c2, d2, e2, w1, 13);                                                     │      R22(a2, b2, c2, d2, e2, w1, 13);                                                    
    R21(e1, a1, b1, c1, d1, w8, 12);                                                     │      R21(e1, a1, b1, c1, d1, w8, 12);                                                    
    R22(e2, a2, b2, c2, d2, w2, 11);                                                     │      R22(e2, a2, b2, c2, d2, w2, 11);                                                    
                                                                                         │                                                                                          
    R31(d1, e1, a1, b1, c1, w3, 11);                                                     │      R31(d1, e1, a1, b1, c1, w3, 11);                                                    
    R32(d2, e2, a2, b2, c2, w15, 9);                                                     │      R32(d2, e2, a2, b2, c2, w15, 9);                                                    
    R31(c1, d1, e1, a1, b1, w10, 13);                                                    │      R31(c1, d1, e1, a1, b1, w10, 13);                                                   
    R32(c2, d2, e2, a2, b2, w5, 7);                                                      │      R32(c2, d2, e2, a2, b2, w5, 7);                                                     
    R31(b1, c1, d1, e1, a1, w14, 6);                                                     │      R31(b1, c1, d1, e1, a1, w14, 6);                                                    
    R32(b2, c2, d2, e2, a2, w1, 15);                                                     │      R32(b2, c2, d2, e2, a2, w1, 15);                                                    
    R31(a1, b1, c1, d1, e1, w4, 7);                                                      │      R31(a1, b1, c1, d1, e1, w4, 7);                                                     
    R32(a2, b2, c2, d2, e2, w3, 11);                                                     │      R32(a2, b2, c2, d2, e2, w3, 11);                                                    
    R31(e1, a1, b1, c1, d1, w9, 14);                                                     │      R31(e1, a1, b1, c1, d1, w9, 14);                                                    
    R32(e2, a2, b2, c2, d2, w7, 8);                                                      │      R32(e2, a2, b2, c2, d2, w7, 8);                                                     
    R31(d1, e1, a1, b1, c1, w15, 9);                                                     │      R31(d1, e1, a1, b1, c1, w15, 9);                                                    
    R32(d2, e2, a2, b2, c2, w14, 6);                                                     │      R32(d2, e2, a2, b2, c2, w14, 6);                                                    
    R31(c1, d1, e1, a1, b1, w8, 13);                                                     │      R31(c1, d1, e1, a1, b1, w8, 13);                                                    
    R32(c2, d2, e2, a2, b2, w6, 6);                                                      │      R32(c2, d2, e2, a2, b2, w6, 6);                                                     
    R31(b1, c1, d1, e1, a1, w1, 15);                                                     │      R31(b1, c1, d1, e1, a1, w1, 15);                                                    
    R32(b2, c2, d2, e2, a2, w9, 14);                                                     │      R32(b2, c2, d2, e2, a2, w9, 14);                                                    
    R31(a1, b1, c1, d1, e1, w2, 14);                                                     │      R31(a1, b1, c1, d1, e1, w2, 14);                                                    
    R32(a2, b2, c2, d2, e2, w11, 12);                                                    │      R32(a2, b2, c2, d2, e2, w11, 12);                                                   
    R31(e1, a1, b1, c1, d1, w7, 8);                                                      │      R31(e1, a1, b1, c1, d1, w7, 8);                                                     
    R32(e2, a2, b2, c2, d2, w8, 13);                                                     │      R32(e2, a2, b2, c2, d2, w8, 13);                                                    
    R31(d1, e1, a1, b1, c1, w0, 13);                                                     │      R31(d1, e1, a1, b1, c1, w0, 13);                                                    
    R32(d2, e2, a2, b2, c2, w12, 5);                                                     │      R32(d2, e2, a2, b2, c2, w12, 5);                                                    
    R31(c1, d1, e1, a1, b1, w6, 6);                                                      │      R31(c1, d1, e1, a1, b1, w6, 6);                                                     
    R32(c2, d2, e2, a2, b2, w2, 14);                                                     │      R32(c2, d2, e2, a2, b2, w2, 14);                                                    
    R31(b1, c1, d1, e1, a1, w13, 5);                                                     │      R31(b1, c1, d1, e1, a1, w13, 5);                                                    
    R32(b2, c2, d2, e2, a2, w10, 13);                                                    │      R32(b2, c2, d2, e2, a2, w10, 13);                                                   
    R31(a1, b1, c1, d1, e1, w11, 12);                                                    │      R31(a1, b1, c1, d1, e1, w11, 12);                                                   
    R32(a2, b2, c2, d2, e2, w0, 13);                                                     │      R32(a2, b2, c2, d2, e2, w0, 13);                                                    
    R31(e1, a1, b1, c1, d1, w5, 7);                                                      │      R31(e1, a1, b1, c1, d1, w5, 7);                                                     
    R32(e2, a2, b2, c2, d2, w4, 7);                                                      │      R32(e2, a2, b2, c2, d2, w4, 7);                                                     
    R31(d1, e1, a1, b1, c1, w12, 5);                                                     │      R31(d1, e1, a1, b1, c1, w12, 5);                                                    
    R32(d2, e2, a2, b2, c2, w13, 5);                                                     │      R32(d2, e2, a2, b2, c2, w13, 5);                                                    
                                                                                         │                                                                                          
    R41(c1, d1, e1, a1, b1, w1, 11);                                                     │      R41(c1, d1, e1, a1, b1, w1, 11);                                                    
    R42(c2, d2, e2, a2, b2, w8, 15);                                                     │      R42(c2, d2, e2, a2, b2, w8, 15);                                                    
    R41(b1, c1, d1, e1, a1, w9, 12);                                                     │      R41(b1, c1, d1, e1, a1, w9, 12);                                                    
    R42(b2, c2, d2, e2, a2, w6, 5);                                                      │      R42(b2, c2, d2, e2, a2, w6, 5);                                                     
    R41(a1, b1, c1, d1, e1, w11, 14);                                                    │      R41(a1, b1, c1, d1, e1, w11, 14);                                                   
    R42(a2, b2, c2, d2, e2, w4, 8);                                                      │      R42(a2, b2, c2, d2, e2, w4, 8);                                                     
    R41(e1, a1, b1, c1, d1, w10, 15);                                                    │      R41(e1, a1, b1, c1, d1, w10, 15);                                                   
    R42(e2, a2, b2, c2, d2, w1, 11);                                                     │      R42(e2, a2, b2, c2, d2, w1, 11);                                                    
    R41(d1, e1, a1, b1, c1, w0, 14);                                                     │      R41(d1, e1, a1, b1, c1, w0, 14);                                                    
    R42(d2, e2, a2, b2, c2, w3, 14);                                                     │      R42(d2, e2, a2, b2, c2, w3, 14);                                                    
    R41(c1, d1, e1, a1, b1, w8, 15);                                                     │      R41(c1, d1, e1, a1, b1, w8, 15);                                                    
    R42(c2, d2, e2, a2, b2, w11, 14);                                                    │      R42(c2, d2, e2, a2, b2, w11, 14);                                                   
    R41(b1, c1, d1, e1, a1, w12, 9);                                                     │      R41(b1, c1, d1, e1, a1, w12, 9);                                                    
    R42(b2, c2, d2, e2, a2, w15, 6);                                                     │      R42(b2, c2, d2, e2, a2, w15, 6);                                                    
    R41(a1, b1, c1, d1, e1, w4, 8);                                                      │      R41(a1, b1, c1, d1, e1, w4, 8);                                                     
    R42(a2, b2, c2, d2, e2, w0, 14);                                                     │      R42(a2, b2, c2, d2, e2, w0, 14);                                                    
    R41(e1, a1, b1, c1, d1, w13, 9);                                                     │      R41(e1, a1, b1, c1, d1, w13, 9);                                                    
    R42(e2, a2, b2, c2, d2, w5, 6);                                                      │      R42(e2, a2, b2, c2, d2, w5, 6);                                                     
    R41(d1, e1, a1, b1, c1, w3, 14);                                                     │      R41(d1, e1, a1, b1, c1, w3, 14);                                                    
    R42(d2, e2, a2, b2, c2, w12, 9);                                                     │      R42(d2, e2, a2, b2, c2, w12, 9);                                                    
    R41(c1, d1, e1, a1, b1, w7, 5);                                                      │      R41(c1, d1, e1, a1, b1, w7, 5);                                                     
    R42(c2, d2, e2, a2, b2, w2, 12);                                                     │      R42(c2, d2, e2, a2, b2, w2, 12);                                                    
    R41(b1, c1, d1, e1, a1, w15, 6);                                                     │      R41(b1, c1, d1, e1, a1, w15, 6);                                                    
    R42(b2, c2, d2, e2, a2, w13, 9);                                                     │      R42(b2, c2, d2, e2, a2, w13, 9);                                                    
    R41(a1, b1, c1, d1, e1, w14, 8);                                                     │      R41(a1, b1, c1, d1, e1, w14, 8);                                                    
    R42(a2, b2, c2, d2, e2, w9, 12);                                                     │      R42(a2, b2, c2, d2, e2, w9, 12);                                                    
    R41(e1, a1, b1, c1, d1, w5, 6);                                                      │      R41(e1, a1, b1, c1, d1, w5, 6);                                                     
    R42(e2, a2, b2, c2, d2, w7, 5);                                                      │      R42(e2, a2, b2, c2, d2, w7, 5);                                                     
    R41(d1, e1, a1, b1, c1, w6, 5);                                                      │      R41(d1, e1, a1, b1, c1, w6, 5);                                                     
    R42(d2, e2, a2, b2, c2, w10, 15);                                                    │      R42(d2, e2, a2, b2, c2, w10, 15);                                                   
    R41(c1, d1, e1, a1, b1, w2, 12);                                                     │      R41(c1, d1, e1, a1, b1, w2, 12);                                                    
    R42(c2, d2, e2, a2, b2, w14, 8);                                                     │      R42(c2, d2, e2, a2, b2, w14, 8);                                                    
                                                                                         │                                                                                          
    R51(b1, c1, d1, e1, a1, w4, 9);                                                      │      R51(b1, c1, d1, e1, a1, w4, 9);                                                     
    R52(b2, c2, d2, e2, a2, w12, 8);                                                     │      R52(b2, c2, d2, e2, a2, w12, 8);                                                    
    R51(a1, b1, c1, d1, e1, w0, 15);                                                     │      R51(a1, b1, c1, d1, e1, w0, 15);                                                    
    R52(a2, b2, c2, d2, e2, w15, 5);                                                     │      R52(a2, b2, c2, d2, e2, w15, 5);                                                    
    R51(e1, a1, b1, c1, d1, w5, 5);                                                      │      R51(e1, a1, b1, c1, d1, w5, 5);                                                     
    R52(e2, a2, b2, c2, d2, w10, 12);                                                    │      R52(e2, a2, b2, c2, d2, w10, 12);                                                   
    R51(d1, e1, a1, b1, c1, w9, 11);                                                     │      R51(d1, e1, a1, b1, c1, w9, 11);                                                    
    R52(d2, e2, a2, b2, c2, w4, 9);                                                      │      R52(d2, e2, a2, b2, c2, w4, 9);                                                     
    R51(c1, d1, e1, a1, b1, w7, 6);                                                      │      R51(c1, d1, e1, a1, b1, w7, 6);                                                     
    R52(c2, d2, e2, a2, b2, w1, 12);                                                     │      R52(c2, d2, e2, a2, b2, w1, 12);                                                    
    R51(b1, c1, d1, e1, a1, w12, 8);                                                     │      R51(b1, c1, d1, e1, a1, w12, 8);                                                    
    R52(b2, c2, d2, e2, a2, w5, 5);                                                      │      R52(b2, c2, d2, e2, a2, w5, 5);                                                     
    R51(a1, b1, c1, d1, e1, w2, 13);                                                     │      R51(a1, b1, c1, d1, e1, w2, 13);                                                    
    R52(a2, b2, c2, d2, e2, w8, 14);                                                     │      R52(a2, b2, c2, d2, e2, w8, 14);                                                    
    R51(e1, a1, b1, c1, d1, w10, 12);                                                    │      R51(e1, a1, b1, c1, d1, w10, 12);                                                   
    R52(e2, a2, b2, c2, d2, w7, 6);                                                      │      R52(e2, a2, b2, c2, d2, w7, 6);                                                     
    R51(d1, e1, a1, b1, c1, w14, 5);                                                     │      R51(d1, e1, a1, b1, c1, w14, 5);                                                    
    R52(d2, e2, a2, b2, c2, w6, 8);                                                      │      R52(d2, e2, a2, b2, c2, w6, 8);                                                     
    R51(c1, d1, e1, a1, b1, w1, 12);                                                     │      R51(c1, d1, e1, a1, b1, w1, 12);                                                    
    R52(c2, d2, e2, a2, b2, w2, 13);                                                     │      R52(c2, d2, e2, a2, b2, w2, 13);                                                    
    R51(b1, c1, d1, e1, a1, w3, 13);                                                     │      R51(b1, c1, d1, e1, a1, w3, 13);                                                    
    R52(b2, c2, d2, e2, a2, w13, 6);                                                     │      R52(b2, c2, d2, e2, a2, w13, 6);                                                    
    R51(a1, b1, c1, d1, e1, w8, 14);                                                     │      R51(a1, b1, c1, d1, e1, w8, 14);                                                    
    R52(a2, b2, c2, d2, e2, w14, 5);                                                     │      R52(a2, b2, c2, d2, e2, w14, 5);                                                    
    R51(e1, a1, b1, c1, d1, w11, 11);                                                    │      R51(e1, a1, b1, c1, d1, w11, 11);                                                   
    R52(e2, a2, b2, c2, d2, w0, 15);                                                     │      R52(e2, a2, b2, c2, d2, w0, 15);                                                    
    R51(d1, e1, a1, b1, c1, w6, 8);                                                      │      R51(d1, e1, a1, b1, c1, w6, 8);                                                     
    R52(d2, e2, a2, b2, c2, w3, 13);                                                     │      R52(d2, e2, a2, b2, c2, w3, 13);                                                    
    R51(c1, d1, e1, a1, b1, w15, 5);                                                     │      R51(c1, d1, e1, a1, b1, w15, 5);                                                    
    R52(c2, d2, e2, a2, b2, w9, 11);                                                     │      R52(c2, d2, e2, a2, b2, w9, 11);                                                    
    R51(b1, c1, d1, e1, a1, w13, 6);                                                     │      R51(b1, c1, d1, e1, a1, w13, 6);                                                    
    R52(b2, c2, d2, e2, a2, w11, 11);                                                    │      R52(b2, c2, d2, e2, a2, w11, 11);                                                   
                                                                                         │                                                                                          
    uint32_t t = s[0];                                                                   │      uint32_t t = s[0];                                                                  
    s[0] = s[1] + c1 + d2;                                                               │      s[0] = s[1] + c1 + d2;                                                              
    s[1] = s[2] + d1 + e2;                                                               │      s[1] = s[2] + d1 + e2;                                                              
    s[2] = s[3] + e1 + a2;                                                               │      s[2] = s[3] + e1 + a2;                                                              
    s[3] = s[4] + a1 + b2;                                                               │      s[3] = s[4] + a1 + b2;                                                              
    s[4] = t + b1 + c2;                                                                  │      s[4] = t + b1 + c2;                                                                 
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
} // namespace ripemd160                                                                 │  } // namespace ripemd160                                                                
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/crypto/sha512.cpp:16                                                        │ dogecoin/src/crypto/sha512.cpp:22                                                        
                                                                                         │                                                                                          
                                                                                         │  #ifndef USE_AVX2                                                                        
uint64_t inline Ch(uint64_t x, uint64_t y, uint64_t z) { return z ^ (x & (y ^ z)); }     │  uint64_t inline Ch(uint64_t x, uint64_t y, uint64_t z) { return z ^ (x & (y ^ z)); }    
uint64_t inline Maj(uint64_t x, uint64_t y, uint64_t z) { return (x & y) | (z & (x | y)) │  uint64_t inline Maj(uint64_t x, uint64_t y, uint64_t z) { return (x & y) | (z & (x | y))
uint64_t inline Sigma0(uint64_t x) { return (x >> 28 | x << 36) ^ (x >> 34 | x << 30) ^  │  uint64_t inline Sigma0(uint64_t x) { return (x >> 28 | x << 36) ^ (x >> 34 | x << 30) ^ 
uint64_t inline Sigma1(uint64_t x) { return (x >> 14 | x << 50) ^ (x >> 18 | x << 46) ^  │  uint64_t inline Sigma1(uint64_t x) { return (x >> 14 | x << 50) ^ (x >> 18 | x << 46) ^ 
uint64_t inline sigma0(uint64_t x) { return (x >> 1 | x << 63) ^ (x >> 8 | x << 56) ^ (x │  uint64_t inline sigma0(uint64_t x) { return (x >> 1 | x << 63) ^ (x >> 8 | x << 56) ^ (x
uint64_t inline sigma1(uint64_t x) { return (x >> 19 | x << 45) ^ (x >> 61 | x << 3) ^ ( │  uint64_t inline sigma1(uint64_t x) { return (x >> 19 | x << 45) ^ (x >> 61 | x << 3) ^ (
                                                                                         │                                                                                          
/** One round of SHA-512. */                                                             │  /** One round of SHA-512. */                                                            
void inline Round(uint64_t a, uint64_t b, uint64_t c, uint64_t& d, uint64_t e, uint64_t  │  void inline Round(uint64_t a, uint64_t b, uint64_t c, uint64_t& d, uint64_t e, uint64_t 
{                                                                                        │  {                                                                                       
    uint64_t t1 = h + Sigma1(e) + Ch(e, f, g) + k + w;                                   │      uint64_t t1 = h + Sigma1(e) + Ch(e, f, g) + k + w;                                  
    uint64_t t2 = Sigma0(a) + Maj(a, b, c);                                              │      uint64_t t2 = Sigma0(a) + Maj(a, b, c);                                             
    d += t1;                                                                             │      d += t1;                                                                            
    h = t1 + t2;                                                                         │      h = t1 + t2;                                                                        
}                                                                                        │  }                                                                                       
                                                                                         │  #endif                                                                                  
                                                                                         │                                                                                          
/** Initialize SHA-256 state. */                                                         │  /** Initialize SHA-256 state. */                                                        
void inline Initialize(uint64_t* s)                                                      │  void inline Initialize(uint64_t* s)                                                     
{                                                                                        │  {                                                                                       
    s[0] = 0x6a09e667f3bcc908ull;                                                        │      s[0] = 0x6a09e667f3bcc908ull;                                                       
    s[1] = 0xbb67ae8584caa73bull;                                                        │      s[1] = 0xbb67ae8584caa73bull;                                                       
    s[2] = 0x3c6ef372fe94f82bull;                                                        │      s[2] = 0x3c6ef372fe94f82bull;                                                       
    s[3] = 0xa54ff53a5f1d36f1ull;                                                        │      s[3] = 0xa54ff53a5f1d36f1ull;                                                       
    s[4] = 0x510e527fade682d1ull;                                                        │      s[4] = 0x510e527fade682d1ull;                                                       
    s[5] = 0x9b05688c2b3e6c1full;                                                        │      s[5] = 0x9b05688c2b3e6c1full;                                                       
    s[6] = 0x1f83d9abfb41bd6bull;                                                        │      s[6] = 0x1f83d9abfb41bd6bull;                                                       
    s[7] = 0x5be0cd19137e2179ull;                                                        │      s[7] = 0x5be0cd19137e2179ull;                                                       
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
/** Perform one SHA-512 transformation, processing a 128-byte chunk. */                  │  /** Perform one SHA-512 transformation, processing a 128-byte chunk. */                 
void Transform(uint64_t* s, const unsigned char* chunk)                                  │  void Transform(uint64_t* s, const unsigned char* chunk)                                 
{                                                                                        │  {                                                                                       
                                                                                         │  #ifdef USE_AVX2                                                                         
                                                                                         │      // Perform SHA512 one block (Intel AVX2)                                            
                                                                                         │      sha512_one_block_avx2(chunk, s);                                                    
                                                                                         │  #else                                                                                   
                                                                                         │      // Perform SHA512 one block (legacy)                                                
    uint64_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s │      uint64_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s
    uint64_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;       │      uint64_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;      
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, 0x428a2f98d728ae22ull, w0 = ReadBE64(chunk + 0));      │      Round(a, b, c, d, e, f, g, h, 0x428a2f98d728ae22ull, w0 = ReadBE64(chunk + 0));     
    Round(h, a, b, c, d, e, f, g, 0x7137449123ef65cdull, w1 = ReadBE64(chunk + 8));      │      Round(h, a, b, c, d, e, f, g, 0x7137449123ef65cdull, w1 = ReadBE64(chunk + 8));     
    Round(g, h, a, b, c, d, e, f, 0xb5c0fbcfec4d3b2full, w2 = ReadBE64(chunk + 16));     │      Round(g, h, a, b, c, d, e, f, 0xb5c0fbcfec4d3b2full, w2 = ReadBE64(chunk + 16));    
    Round(f, g, h, a, b, c, d, e, 0xe9b5dba58189dbbcull, w3 = ReadBE64(chunk + 24));     │      Round(f, g, h, a, b, c, d, e, 0xe9b5dba58189dbbcull, w3 = ReadBE64(chunk + 24));    
    Round(e, f, g, h, a, b, c, d, 0x3956c25bf348b538ull, w4 = ReadBE64(chunk + 32));     │      Round(e, f, g, h, a, b, c, d, 0x3956c25bf348b538ull, w4 = ReadBE64(chunk + 32));    
    Round(d, e, f, g, h, a, b, c, 0x59f111f1b605d019ull, w5 = ReadBE64(chunk + 40));     │      Round(d, e, f, g, h, a, b, c, 0x59f111f1b605d019ull, w5 = ReadBE64(chunk + 40));    
    Round(c, d, e, f, g, h, a, b, 0x923f82a4af194f9bull, w6 = ReadBE64(chunk + 48));     │      Round(c, d, e, f, g, h, a, b, 0x923f82a4af194f9bull, w6 = ReadBE64(chunk + 48));    
    Round(b, c, d, e, f, g, h, a, 0xab1c5ed5da6d8118ull, w7 = ReadBE64(chunk + 56));     │      Round(b, c, d, e, f, g, h, a, 0xab1c5ed5da6d8118ull, w7 = ReadBE64(chunk + 56));    
    Round(a, b, c, d, e, f, g, h, 0xd807aa98a3030242ull, w8 = ReadBE64(chunk + 64));     │      Round(a, b, c, d, e, f, g, h, 0xd807aa98a3030242ull, w8 = ReadBE64(chunk + 64));    
    Round(h, a, b, c, d, e, f, g, 0x12835b0145706fbeull, w9 = ReadBE64(chunk + 72));     │      Round(h, a, b, c, d, e, f, g, 0x12835b0145706fbeull, w9 = ReadBE64(chunk + 72));    
    Round(g, h, a, b, c, d, e, f, 0x243185be4ee4b28cull, w10 = ReadBE64(chunk + 80));    │      Round(g, h, a, b, c, d, e, f, 0x243185be4ee4b28cull, w10 = ReadBE64(chunk + 80));   
    Round(f, g, h, a, b, c, d, e, 0x550c7dc3d5ffb4e2ull, w11 = ReadBE64(chunk + 88));    │      Round(f, g, h, a, b, c, d, e, 0x550c7dc3d5ffb4e2ull, w11 = ReadBE64(chunk + 88));   
    Round(e, f, g, h, a, b, c, d, 0x72be5d74f27b896full, w12 = ReadBE64(chunk + 96));    │      Round(e, f, g, h, a, b, c, d, 0x72be5d74f27b896full, w12 = ReadBE64(chunk + 96));   
    Round(d, e, f, g, h, a, b, c, 0x80deb1fe3b1696b1ull, w13 = ReadBE64(chunk + 104));   │      Round(d, e, f, g, h, a, b, c, 0x80deb1fe3b1696b1ull, w13 = ReadBE64(chunk + 104));  
    Round(c, d, e, f, g, h, a, b, 0x9bdc06a725c71235ull, w14 = ReadBE64(chunk + 112));   │      Round(c, d, e, f, g, h, a, b, 0x9bdc06a725c71235ull, w14 = ReadBE64(chunk + 112));  
    Round(b, c, d, e, f, g, h, a, 0xc19bf174cf692694ull, w15 = ReadBE64(chunk + 120));   │      Round(b, c, d, e, f, g, h, a, 0xc19bf174cf692694ull, w15 = ReadBE64(chunk + 120));  
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, 0xe49b69c19ef14ad2ull, w0 += sigma1(w14) + w9 + sigma0 │      Round(a, b, c, d, e, f, g, h, 0xe49b69c19ef14ad2ull, w0 += sigma1(w14) + w9 + sigma0
    Round(h, a, b, c, d, e, f, g, 0xefbe4786384f25e3ull, w1 += sigma1(w15) + w10 + sigma │      Round(h, a, b, c, d, e, f, g, 0xefbe4786384f25e3ull, w1 += sigma1(w15) + w10 + sigma
    Round(g, h, a, b, c, d, e, f, 0x0fc19dc68b8cd5b5ull, w2 += sigma1(w0) + w11 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0x0fc19dc68b8cd5b5ull, w2 += sigma1(w0) + w11 + sigma0
    Round(f, g, h, a, b, c, d, e, 0x240ca1cc77ac9c65ull, w3 += sigma1(w1) + w12 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0x240ca1cc77ac9c65ull, w3 += sigma1(w1) + w12 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x2de92c6f592b0275ull, w4 += sigma1(w2) + w13 + sigma0 │      Round(e, f, g, h, a, b, c, d, 0x2de92c6f592b0275ull, w4 += sigma1(w2) + w13 + sigma0
    Round(d, e, f, g, h, a, b, c, 0x4a7484aa6ea6e483ull, w5 += sigma1(w3) + w14 + sigma0 │      Round(d, e, f, g, h, a, b, c, 0x4a7484aa6ea6e483ull, w5 += sigma1(w3) + w14 + sigma0
    Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcbd41fbd4ull, w6 += sigma1(w4) + w15 + sigma0 │      Round(c, d, e, f, g, h, a, b, 0x5cb0a9dcbd41fbd4ull, w6 += sigma1(w4) + w15 + sigma0
    Round(b, c, d, e, f, g, h, a, 0x76f988da831153b5ull, w7 += sigma1(w5) + w0 + sigma0( │      Round(b, c, d, e, f, g, h, a, 0x76f988da831153b5ull, w7 += sigma1(w5) + w0 + sigma0(
    Round(a, b, c, d, e, f, g, h, 0x983e5152ee66dfabull, w8 += sigma1(w6) + w1 + sigma0( │      Round(a, b, c, d, e, f, g, h, 0x983e5152ee66dfabull, w8 += sigma1(w6) + w1 + sigma0(
    Round(h, a, b, c, d, e, f, g, 0xa831c66d2db43210ull, w9 += sigma1(w7) + w2 + sigma0( │      Round(h, a, b, c, d, e, f, g, 0xa831c66d2db43210ull, w9 += sigma1(w7) + w2 + sigma0(
    Round(g, h, a, b, c, d, e, f, 0xb00327c898fb213full, w10 += sigma1(w8) + w3 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0xb00327c898fb213full, w10 += sigma1(w8) + w3 + sigma0
    Round(f, g, h, a, b, c, d, e, 0xbf597fc7beef0ee4ull, w11 += sigma1(w9) + w4 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0xbf597fc7beef0ee4ull, w11 += sigma1(w9) + w4 + sigma0
    Round(e, f, g, h, a, b, c, d, 0xc6e00bf33da88fc2ull, w12 += sigma1(w10) + w5 + sigma │      Round(e, f, g, h, a, b, c, d, 0xc6e00bf33da88fc2ull, w12 += sigma1(w10) + w5 + sigma
    Round(d, e, f, g, h, a, b, c, 0xd5a79147930aa725ull, w13 += sigma1(w11) + w6 + sigma │      Round(d, e, f, g, h, a, b, c, 0xd5a79147930aa725ull, w13 += sigma1(w11) + w6 + sigma
    Round(c, d, e, f, g, h, a, b, 0x06ca6351e003826full, w14 += sigma1(w12) + w7 + sigma │      Round(c, d, e, f, g, h, a, b, 0x06ca6351e003826full, w14 += sigma1(w12) + w7 + sigma
    Round(b, c, d, e, f, g, h, a, 0x142929670a0e6e70ull, w15 += sigma1(w13) + w8 + sigma │      Round(b, c, d, e, f, g, h, a, 0x142929670a0e6e70ull, w15 += sigma1(w13) + w8 + sigma
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, 0x27b70a8546d22ffcull, w0 += sigma1(w14) + w9 + sigma0 │      Round(a, b, c, d, e, f, g, h, 0x27b70a8546d22ffcull, w0 += sigma1(w14) + w9 + sigma0
    Round(h, a, b, c, d, e, f, g, 0x2e1b21385c26c926ull, w1 += sigma1(w15) + w10 + sigma │      Round(h, a, b, c, d, e, f, g, 0x2e1b21385c26c926ull, w1 += sigma1(w15) + w10 + sigma
    Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc5ac42aedull, w2 += sigma1(w0) + w11 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0x4d2c6dfc5ac42aedull, w2 += sigma1(w0) + w11 + sigma0
    Round(f, g, h, a, b, c, d, e, 0x53380d139d95b3dfull, w3 += sigma1(w1) + w12 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0x53380d139d95b3dfull, w3 += sigma1(w1) + w12 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x650a73548baf63deull, w4 += sigma1(w2) + w13 + sigma0 │      Round(e, f, g, h, a, b, c, d, 0x650a73548baf63deull, w4 += sigma1(w2) + w13 + sigma0
    Round(d, e, f, g, h, a, b, c, 0x766a0abb3c77b2a8ull, w5 += sigma1(w3) + w14 + sigma0 │      Round(d, e, f, g, h, a, b, c, 0x766a0abb3c77b2a8ull, w5 += sigma1(w3) + w14 + sigma0
    Round(c, d, e, f, g, h, a, b, 0x81c2c92e47edaee6ull, w6 += sigma1(w4) + w15 + sigma0 │      Round(c, d, e, f, g, h, a, b, 0x81c2c92e47edaee6ull, w6 += sigma1(w4) + w15 + sigma0
    Round(b, c, d, e, f, g, h, a, 0x92722c851482353bull, w7 += sigma1(w5) + w0 + sigma0( │      Round(b, c, d, e, f, g, h, a, 0x92722c851482353bull, w7 += sigma1(w5) + w0 + sigma0(
    Round(a, b, c, d, e, f, g, h, 0xa2bfe8a14cf10364ull, w8 += sigma1(w6) + w1 + sigma0( │      Round(a, b, c, d, e, f, g, h, 0xa2bfe8a14cf10364ull, w8 += sigma1(w6) + w1 + sigma0(
    Round(h, a, b, c, d, e, f, g, 0xa81a664bbc423001ull, w9 += sigma1(w7) + w2 + sigma0( │      Round(h, a, b, c, d, e, f, g, 0xa81a664bbc423001ull, w9 += sigma1(w7) + w2 + sigma0(
    Round(g, h, a, b, c, d, e, f, 0xc24b8b70d0f89791ull, w10 += sigma1(w8) + w3 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0xc24b8b70d0f89791ull, w10 += sigma1(w8) + w3 + sigma0
    Round(f, g, h, a, b, c, d, e, 0xc76c51a30654be30ull, w11 += sigma1(w9) + w4 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0xc76c51a30654be30ull, w11 += sigma1(w9) + w4 + sigma0
    Round(e, f, g, h, a, b, c, d, 0xd192e819d6ef5218ull, w12 += sigma1(w10) + w5 + sigma │      Round(e, f, g, h, a, b, c, d, 0xd192e819d6ef5218ull, w12 += sigma1(w10) + w5 + sigma
    Round(d, e, f, g, h, a, b, c, 0xd69906245565a910ull, w13 += sigma1(w11) + w6 + sigma │      Round(d, e, f, g, h, a, b, c, 0xd69906245565a910ull, w13 += sigma1(w11) + w6 + sigma
    Round(c, d, e, f, g, h, a, b, 0xf40e35855771202aull, w14 += sigma1(w12) + w7 + sigma │      Round(c, d, e, f, g, h, a, b, 0xf40e35855771202aull, w14 += sigma1(w12) + w7 + sigma
    Round(b, c, d, e, f, g, h, a, 0x106aa07032bbd1b8ull, w15 += sigma1(w13) + w8 + sigma │      Round(b, c, d, e, f, g, h, a, 0x106aa07032bbd1b8ull, w15 += sigma1(w13) + w8 + sigma
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, 0x19a4c116b8d2d0c8ull, w0 += sigma1(w14) + w9 + sigma0 │      Round(a, b, c, d, e, f, g, h, 0x19a4c116b8d2d0c8ull, w0 += sigma1(w14) + w9 + sigma0
    Round(h, a, b, c, d, e, f, g, 0x1e376c085141ab53ull, w1 += sigma1(w15) + w10 + sigma │      Round(h, a, b, c, d, e, f, g, 0x1e376c085141ab53ull, w1 += sigma1(w15) + w10 + sigma
    Round(g, h, a, b, c, d, e, f, 0x2748774cdf8eeb99ull, w2 += sigma1(w0) + w11 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0x2748774cdf8eeb99ull, w2 += sigma1(w0) + w11 + sigma0
    Round(f, g, h, a, b, c, d, e, 0x34b0bcb5e19b48a8ull, w3 += sigma1(w1) + w12 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0x34b0bcb5e19b48a8ull, w3 += sigma1(w1) + w12 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x391c0cb3c5c95a63ull, w4 += sigma1(w2) + w13 + sigma0 │      Round(e, f, g, h, a, b, c, d, 0x391c0cb3c5c95a63ull, w4 += sigma1(w2) + w13 + sigma0
    Round(d, e, f, g, h, a, b, c, 0x4ed8aa4ae3418acbull, w5 += sigma1(w3) + w14 + sigma0 │      Round(d, e, f, g, h, a, b, c, 0x4ed8aa4ae3418acbull, w5 += sigma1(w3) + w14 + sigma0
    Round(c, d, e, f, g, h, a, b, 0x5b9cca4f7763e373ull, w6 += sigma1(w4) + w15 + sigma0 │      Round(c, d, e, f, g, h, a, b, 0x5b9cca4f7763e373ull, w6 += sigma1(w4) + w15 + sigma0
    Round(b, c, d, e, f, g, h, a, 0x682e6ff3d6b2b8a3ull, w7 += sigma1(w5) + w0 + sigma0( │      Round(b, c, d, e, f, g, h, a, 0x682e6ff3d6b2b8a3ull, w7 += sigma1(w5) + w0 + sigma0(
    Round(a, b, c, d, e, f, g, h, 0x748f82ee5defb2fcull, w8 += sigma1(w6) + w1 + sigma0( │      Round(a, b, c, d, e, f, g, h, 0x748f82ee5defb2fcull, w8 += sigma1(w6) + w1 + sigma0(
    Round(h, a, b, c, d, e, f, g, 0x78a5636f43172f60ull, w9 += sigma1(w7) + w2 + sigma0( │      Round(h, a, b, c, d, e, f, g, 0x78a5636f43172f60ull, w9 += sigma1(w7) + w2 + sigma0(
    Round(g, h, a, b, c, d, e, f, 0x84c87814a1f0ab72ull, w10 += sigma1(w8) + w3 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0x84c87814a1f0ab72ull, w10 += sigma1(w8) + w3 + sigma0
    Round(f, g, h, a, b, c, d, e, 0x8cc702081a6439ecull, w11 += sigma1(w9) + w4 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0x8cc702081a6439ecull, w11 += sigma1(w9) + w4 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x90befffa23631e28ull, w12 += sigma1(w10) + w5 + sigma │      Round(e, f, g, h, a, b, c, d, 0x90befffa23631e28ull, w12 += sigma1(w10) + w5 + sigma
    Round(d, e, f, g, h, a, b, c, 0xa4506cebde82bde9ull, w13 += sigma1(w11) + w6 + sigma │      Round(d, e, f, g, h, a, b, c, 0xa4506cebde82bde9ull, w13 += sigma1(w11) + w6 + sigma
    Round(c, d, e, f, g, h, a, b, 0xbef9a3f7b2c67915ull, w14 += sigma1(w12) + w7 + sigma │      Round(c, d, e, f, g, h, a, b, 0xbef9a3f7b2c67915ull, w14 += sigma1(w12) + w7 + sigma
    Round(b, c, d, e, f, g, h, a, 0xc67178f2e372532bull, w15 += sigma1(w13) + w8 + sigma │      Round(b, c, d, e, f, g, h, a, 0xc67178f2e372532bull, w15 += sigma1(w13) + w8 + sigma
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f, g, h, 0xca273eceea26619cull, w0 += sigma1(w14) + w9 + sigma0 │      Round(a, b, c, d, e, f, g, h, 0xca273eceea26619cull, w0 += sigma1(w14) + w9 + sigma0
    Round(h, a, b, c, d, e, f, g, 0xd186b8c721c0c207ull, w1 += sigma1(w15) + w10 + sigma │      Round(h, a, b, c, d, e, f, g, 0xd186b8c721c0c207ull, w1 += sigma1(w15) + w10 + sigma
    Round(g, h, a, b, c, d, e, f, 0xeada7dd6cde0eb1eull, w2 += sigma1(w0) + w11 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0xeada7dd6cde0eb1eull, w2 += sigma1(w0) + w11 + sigma0
    Round(f, g, h, a, b, c, d, e, 0xf57d4f7fee6ed178ull, w3 += sigma1(w1) + w12 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0xf57d4f7fee6ed178ull, w3 += sigma1(w1) + w12 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x06f067aa72176fbaull, w4 += sigma1(w2) + w13 + sigma0 │      Round(e, f, g, h, a, b, c, d, 0x06f067aa72176fbaull, w4 += sigma1(w2) + w13 + sigma0
    Round(d, e, f, g, h, a, b, c, 0x0a637dc5a2c898a6ull, w5 += sigma1(w3) + w14 + sigma0 │      Round(d, e, f, g, h, a, b, c, 0x0a637dc5a2c898a6ull, w5 += sigma1(w3) + w14 + sigma0
    Round(c, d, e, f, g, h, a, b, 0x113f9804bef90daeull, w6 += sigma1(w4) + w15 + sigma0 │      Round(c, d, e, f, g, h, a, b, 0x113f9804bef90daeull, w6 += sigma1(w4) + w15 + sigma0
    Round(b, c, d, e, f, g, h, a, 0x1b710b35131c471bull, w7 += sigma1(w5) + w0 + sigma0( │      Round(b, c, d, e, f, g, h, a, 0x1b710b35131c471bull, w7 += sigma1(w5) + w0 + sigma0(
    Round(a, b, c, d, e, f, g, h, 0x28db77f523047d84ull, w8 += sigma1(w6) + w1 + sigma0( │      Round(a, b, c, d, e, f, g, h, 0x28db77f523047d84ull, w8 += sigma1(w6) + w1 + sigma0(
    Round(h, a, b, c, d, e, f, g, 0x32caab7b40c72493ull, w9 += sigma1(w7) + w2 + sigma0( │      Round(h, a, b, c, d, e, f, g, 0x32caab7b40c72493ull, w9 += sigma1(w7) + w2 + sigma0(
    Round(g, h, a, b, c, d, e, f, 0x3c9ebe0a15c9bebcull, w10 += sigma1(w8) + w3 + sigma0 │      Round(g, h, a, b, c, d, e, f, 0x3c9ebe0a15c9bebcull, w10 += sigma1(w8) + w3 + sigma0
    Round(f, g, h, a, b, c, d, e, 0x431d67c49c100d4cull, w11 += sigma1(w9) + w4 + sigma0 │      Round(f, g, h, a, b, c, d, e, 0x431d67c49c100d4cull, w11 += sigma1(w9) + w4 + sigma0
    Round(e, f, g, h, a, b, c, d, 0x4cc5d4becb3e42b6ull, w12 += sigma1(w10) + w5 + sigma │      Round(e, f, g, h, a, b, c, d, 0x4cc5d4becb3e42b6ull, w12 += sigma1(w10) + w5 + sigma
    Round(d, e, f, g, h, a, b, c, 0x597f299cfc657e2aull, w13 += sigma1(w11) + w6 + sigma │      Round(d, e, f, g, h, a, b, c, 0x597f299cfc657e2aull, w13 += sigma1(w11) + w6 + sigma
    Round(c, d, e, f, g, h, a, b, 0x5fcb6fab3ad6faecull, w14 + sigma1(w12) + w7 + sigma0 │      Round(c, d, e, f, g, h, a, b, 0x5fcb6fab3ad6faecull, w14 + sigma1(w12) + w7 + sigma0
    Round(b, c, d, e, f, g, h, a, 0x6c44198c4a475817ull, w15 + sigma1(w13) + w8 + sigma0 │      Round(b, c, d, e, f, g, h, a, 0x6c44198c4a475817ull, w15 + sigma1(w13) + w8 + sigma0
                                                                                         │                                                                                          
    s[0] += a;                                                                           │      s[0] += a;                                                                          
    s[1] += b;                                                                           │      s[1] += b;                                                                          
    s[2] += c;                                                                           │      s[2] += c;                                                                          
    s[3] += d;                                                                           │      s[3] += d;                                                                          
    s[4] += e;                                                                           │      s[4] += e;                                                                          
    s[5] += f;                                                                           │      s[5] += f;                                                                          
    s[6] += g;                                                                           │      s[6] += g;                                                                          
    s[7] += h;                                                                           │      s[7] += h;                                                                          
                                                                                         │  #endif                                                                                  
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/net_processing.cpp:2964                                                    │ bitcoin/src/net_processing.cpp:4716                                                      
                                                                                         │                                                                                          
            // If we have less than MAX_BLOCKS_TO_ANNOUNCE in our                        │              // If we have less than MAX_BLOCKS_TO_ANNOUNCE in our                       
            // list of block hashes we're relaying, and our peer wants                   │              // list of block hashes we're relaying, and our peer wants                  
            // headers announcements, then find the first header                         │              // headers announcements, then find the first header                        
            // not yet known to our peer but would connect, and send.                    │              // not yet known to our peer but would connect, and send.                   
            // If no header would connect, or if we have too many                        │              // If no header would connect, or if we have too many                       
            // blocks, or if the peer doesn't want headers, just                         │              // blocks, or if the peer doesn't want headers, just                        
            // add all to the inv queue.                                                 │              // add all to the inv queue.                                                
            LOCK(pto->cs_inventory);                                                     │              LOCK(peer->m_block_inv_mutex);                                              
            std::vector<CBlock> vHeaders;                                                │              std::vector<CBlock> vHeaders;                                               
            bool fRevertToInv = ((!state.fPreferHeaders &&                               │              bool fRevertToInv = ((!state.fPreferHeaders &&                              
                                 (!state.fPreferHeaderAndIDs || pto->vBlockHashesToAnnou │                                   (!state.fPreferHeaderAndIDs || peer->m_blocks_for_heade
                                pto->vBlockHashesToAnnounce.size() > MAX_BLOCKS_TO_ANNOU │                                   peer->m_blocks_for_headers_relay.size() > MAX_BLOCKS_TO
            const CBlockIndex *pBestIndex = NULL; // last header queued for delivery     │              const CBlockIndex *pBestIndex = nullptr; // last header queued for delivery 
            ProcessBlockAvailability(pto->id); // ensure pindexBestKnownBlock is up-to-d │              ProcessBlockAvailability(pto->GetId()); // ensure pindexBestKnownBlock is up
                                                                                         │                                                                                          
            if (!fRevertToInv) {                                                         │              if (!fRevertToInv) {                                                        
                bool fFoundStartingHeader = false;                                       │                  bool fFoundStartingHeader = false;                                      
                // Try to find first header that our peer doesn't have, and              │                  // Try to find first header that our peer doesn't have, and             
                // then send all headers past that one.  If we come across any           │                  // then send all headers past that one.  If we come across any          
                // headers that aren't on chainActive, give up.                          │                  // headers that aren't on m_chainman.ActiveChain(), give up.            
                BOOST_FOREACH(const uint256 &hash, pto->vBlockHashesToAnnounce) {        │                  for (const uint256& hash : peer->m_blocks_for_headers_relay) {          
                    BlockMap::iterator mi = mapBlockIndex.find(hash);                    │                      const CBlockIndex* pindex = m_chainman.m_blockman.LookupBlockIndex(h
                    assert(mi != mapBlockIndex.end());                                   │                      assert(pindex);                                                     
                    const CBlockIndex *pindex = mi->second;                              │                      if (m_chainman.ActiveChain()[pindex->nHeight] != pindex) {          
                    if (chainActive[pindex->nHeight] != pindex) {                        │                                                                                          
                        // Bail out if we reorged away from this block                   │                          // Bail out if we reorged away from this block                  
                        fRevertToInv = true;                                             │                          fRevertToInv = true;                                            
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                    if (pBestIndex != NULL && pindex->pprev != pBestIndex) {             │                      if (pBestIndex != nullptr && pindex->pprev != pBestIndex) {         
                        // This means that the list of blocks to announce don't          │                          // This means that the list of blocks to announce don't         
                        // connect to each other.                                        │                          // connect to each other.                                       
                        // This shouldn't really be possible to hit during               │                          // This shouldn't really be possible to hit during              
                        // regular operation (because reorgs should take us to           │                          // regular operation (because reorgs should take us to          
                        // a chain that has some block not on the prior chain,           │                          // a chain that has some block not on the prior chain,          
                        // which should be caught by the prior check), but one           │                          // which should be caught by the prior check), but one          
                        // way this could happen is by using invalidateblock /           │                          // way this could happen is by using invalidateblock /          
                        // reconsiderblock repeatedly on the tip, causing it to          │                          // reconsiderblock repeatedly on the tip, causing it to         
                        // be added multiple times to vBlockHashesToAnnounce.            │                          // be added multiple times to m_blocks_for_headers_relay.       
                        // Robustly deal with this rare situation by reverting           │                          // Robustly deal with this rare situation by reverting          
                        // to an inv.                                                    │                          // to an inv.                                                   
                        fRevertToInv = true;                                             │                          fRevertToInv = true;                                            
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                    pBestIndex = pindex;                                                 │                      pBestIndex = pindex;                                                
                    if (fFoundStartingHeader) {                                          │                      if (fFoundStartingHeader) {                                         
                        // add this to the headers message                               │                          // add this to the headers message                              
                        vHeaders.push_back(pindex->GetBlockHeader(consensusParams, false │                          vHeaders.push_back(pindex->GetBlockHeader());                   
                    } else if (PeerHasHeader(&state, pindex)) {                          │                      } else if (PeerHasHeader(&state, pindex)) {                         
                        continue; // keep looking for the first new block                │                          continue; // keep looking for the first new block               
                    } else if (pindex->pprev == NULL || PeerHasHeader(&state, pindex->pp │                      } else if (pindex->pprev == nullptr || PeerHasHeader(&state, pindex-
                        // Peer doesn't have this header but they do have the prior one. │                          // Peer doesn't have this header but they do have the prior one.
                        // Start sending headers.                                        │                          // Start sending headers.                                       
                        fFoundStartingHeader = true;                                     │                          fFoundStartingHeader = true;                                    
                        vHeaders.push_back(pindex->GetBlockHeader(consensusParams, false │                          vHeaders.push_back(pindex->GetBlockHeader());                   
                    } else {                                                             │                      } else {                                                            
                        // Peer doesn't have this header or the prior one -- nothing wil │                          // Peer doesn't have this header or the prior one -- nothing wil
                        // connect, so bail out.                                         │                          // connect, so bail out.                                        
                        fRevertToInv = true;                                             │                          fRevertToInv = true;                                            
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            if (!fRevertToInv && !vHeaders.empty()) {                                    │              if (!fRevertToInv && !vHeaders.empty()) {                                   
                if (vHeaders.size() == 1 && state.fPreferHeaderAndIDs) {                 │                  if (vHeaders.size() == 1 && state.fPreferHeaderAndIDs) {                
                    // We only send up to 1 block as header-and-ids, as otherwise        │                      // We only send up to 1 block as header-and-ids, as otherwise       
                    // probably means we're doing an initial-ish-sync or they're slow    │                      // probably means we're doing an initial-ish-sync or they're slow   
                    LogPrint("net", "%s sending header-and-ids %s to peer=%d\n", __func_ │                      LogPrint(BCLog::NET, "%s sending header-and-ids %s to peer=%d\n", __
                            vHeaders.front().GetHash().ToString(), pto->id);             │                              vHeaders.front().GetHash().ToString(), pto->GetId());       
                                                                                         │                                                                                          
                    int nSendFlags = state.fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTIO │                      int nSendFlags = state.fWantsCmpctWitness ? 0 : SERIALIZE_TRANSACTIO
                                                                                         │                                                                                          
                    bool fGotBlockFromCache = false;                                     │                      bool fGotBlockFromCache = false;                                    
                    {                                                                    │                      {                                                                   
                        LOCK(cs_most_recent_block);                                      │                          LOCK(m_most_recent_block_mutex);                                
                        if (most_recent_block_hash == pBestIndex->GetBlockHash()) {      │                          if (m_most_recent_block_hash == pBestIndex->GetBlockHash()) {   
                            if (state.fWantsCmpctWitness)                                │                              if (state.fWantsCmpctWitness || !m_most_recent_compact_block
                                connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMs │                                  m_connman.PushMessage(pto, msgMaker.Make(nSendFlags, Net
                            else {                                                       │                              else {                                                      
                                CBlockHeaderAndShortTxIDs cmpctblock(*most_recent_block, │                                  CBlockHeaderAndShortTxIDs cmpctblock(*m_most_recent_bloc
                                connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMs │                                  m_connman.PushMessage(pto, msgMaker.Make(nSendFlags, Net
                            }                                                            │                              }                                                           
                            fGotBlockFromCache = true;                                   │                              fGotBlockFromCache = true;                                  
                        }                                                                │                          }                                                               
                    }                                                                    │                      }                                                                   
                    if (!fGotBlockFromCache) {                                           │                      if (!fGotBlockFromCache) {                                          
                        CBlock block;                                                    │                          CBlock block;                                                   
                        bool ret = ReadBlockFromDisk(block, pBestIndex, consensusParams, │                          bool ret = ReadBlockFromDisk(block, pBestIndex, consensusParams)
                        assert(ret);                                                     │                          assert(ret);                                                    
                        CBlockHeaderAndShortTxIDs cmpctblock(block, state.fWantsCmpctWit │                          CBlockHeaderAndShortTxIDs cmpctblock(block, state.fWantsCmpctWit
                        connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType::C │                          m_connman.PushMessage(pto, msgMaker.Make(nSendFlags, NetMsgType:
                    }                                                                    │                      }                                                                   
                    state.pindexBestHeaderSent = pBestIndex;                             │                      state.pindexBestHeaderSent = pBestIndex;                            
                } else if (state.fPreferHeaders) {                                       │                  } else if (state.fPreferHeaders) {                                      
                    if (vHeaders.size() > 1) {                                           │                      if (vHeaders.size() > 1) {                                          
                        LogPrint("net", "%s: %u headers, range (%s, %s), to peer=%d\n",  │                          LogPrint(BCLog::NET, "%s: %u headers, range (%s, %s), to peer=%d
                                vHeaders.size(),                                         │                                  vHeaders.size(),                                        
                                vHeaders.front().GetHash().ToString(),                   │                                  vHeaders.front().GetHash().ToString(),                  
                                vHeaders.back().GetHash().ToString(), pto->id);          │                                  vHeaders.back().GetHash().ToString(), pto->GetId());    
                    } else {                                                             │                      } else {                                                            
                        LogPrint("net", "%s: sending header %s to peer=%d\n", __func__,  │                          LogPrint(BCLog::NET, "%s: sending header %s to peer=%d\n", __fun
                                vHeaders.front().GetHash().ToString(), pto->id);         │                                  vHeaders.front().GetHash().ToString(), pto->GetId());   
                    }                                                                    │                      }                                                                   
                    connman.PushMessage(pto, msgMaker.Make(NetMsgType::HEADERS, vHeaders │                      m_connman.PushMessage(pto, msgMaker.Make(NetMsgType::HEADERS, vHeade
                    state.pindexBestHeaderSent = pBestIndex;                             │                      state.pindexBestHeaderSent = pBestIndex;                            
                } else                                                                   │                  } else                                                                  
                    fRevertToInv = true;                                                 │                      fRevertToInv = true;                                                
            }                                                                            │              }                                                                           
            if (fRevertToInv) {                                                          │              if (fRevertToInv) {                                                         
                // If falling back to using an inv, just try to inv the tip.             │                  // If falling back to using an inv, just try to inv the tip.            
                // The last entry in vBlockHashesToAnnounce was our tip at some point    │                  // The last entry in m_blocks_for_headers_relay was our tip at some poin
                // in the past.                                                          │                  // in the past.                                                         
                if (!pto->vBlockHashesToAnnounce.empty()) {                              │                  if (!peer->m_blocks_for_headers_relay.empty()) {                        
                    const uint256 &hashToAnnounce = pto->vBlockHashesToAnnounce.back();  │                      const uint256& hashToAnnounce = peer->m_blocks_for_headers_relay.bac
                    BlockMap::iterator mi = mapBlockIndex.find(hashToAnnounce);          │                      const CBlockIndex* pindex = m_chainman.m_blockman.LookupBlockIndex(h
                    assert(mi != mapBlockIndex.end());                                   │                      assert(pindex);                                                     
                    const CBlockIndex *pindex = mi->second;                              │                                                                                          
                                                                                         │                                                                                          
                    // Warn if we're announcing a block that is not on the main chain.   │                      // Warn if we're announcing a block that is not on the main chain.  
                    // This should be very rare and could be optimized out.              │                      // This should be very rare and could be optimized out.             
                    // Just log for now.                                                 │                      // Just log for now.                                                
                    if (chainActive[pindex->nHeight] != pindex) {                        │                      if (m_chainman.ActiveChain()[pindex->nHeight] != pindex) {          
                        LogPrint("net", "Announcing block %s not on main chain (tip=%s)\ │                          LogPrint(BCLog::NET, "Announcing block %s not on main chain (tip
                            hashToAnnounce.ToString(), chainActive.Tip()->GetBlockHash() │                              hashToAnnounce.ToString(), m_chainman.ActiveChain().Tip()->G
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    // If the peer's chain has this block, don't inv it back.            │                      // If the peer's chain has this block, don't inv it back.           
                    if (!PeerHasHeader(&state, pindex)) {                                │                      if (!PeerHasHeader(&state, pindex)) {                               
                        pto->PushInventory(CInv(MSG_BLOCK, hashToAnnounce));             │                          peer->m_blocks_for_inv_relay.push_back(hashToAnnounce);         
                        LogPrint("net", "%s: sending inv peer=%d hash=%s\n", __func__,   │                          LogPrint(BCLog::NET, "%s: sending inv peer=%d hash=%s\n", __func
                            pto->id, hashToAnnounce.ToString());                         │                              pto->GetId(), hashToAnnounce.ToString());                   
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            pto->vBlockHashesToAnnounce.clear();                                         │              peer->m_blocks_for_headers_relay.clear();                                   
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/script_tests.cpp:209                                                   │ dogecoin/src/test/script_tests.cpp:226                                                   
                                                                                         │                                                                                          
const unsigned char vchKey0[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 │  const unsigned char vchKey0[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
const unsigned char vchKey1[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 │  const unsigned char vchKey1[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
const unsigned char vchKey2[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 │  const unsigned char vchKey2[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                                                                                         │                                                                                          
struct KeyData                                                                           │  struct KeyData                                                                          
{                                                                                        │  {                                                                                       
    CKey key0, key0C, key1, key1C, key2, key2C;                                          │      CKey key0, key0C, key1, key1C, key2, key2C;                                         
    CPubKey pubkey0, pubkey0C, pubkey0H;                                                 │      CPubKey pubkey0, pubkey0C, pubkey0H;                                                
    CPubKey pubkey1, pubkey1C;                                                           │      CPubKey pubkey1, pubkey1C;                                                          
    CPubKey pubkey2, pubkey2C;                                                           │      CPubKey pubkey2, pubkey2C;                                                          
                                                                                         │                                                                                          
    KeyData()                                                                            │      KeyData()                                                                           
    {                                                                                    │      {                                                                                   
                                                                                         │                                                                                          
        key0.Set(vchKey0, vchKey0 + 32, false);                                          │          key0.Set(vchKey0, vchKey0 + 32, false);                                         
        key0C.Set(vchKey0, vchKey0 + 32, true);                                          │          key0C.Set(vchKey0, vchKey0 + 32, true);                                         
        pubkey0 = key0.GetPubKey();                                                      │          pubkey0 = key0.GetPubKey();                                                     
        pubkey0H = key0.GetPubKey();                                                     │          pubkey0H = key0.GetPubKey();                                                    
        pubkey0C = key0C.GetPubKey();                                                    │          pubkey0C = key0C.GetPubKey();                                                   
        *const_cast<unsigned char*>(pubkey0H.data()) = 0x06 | (pubkey0H[64] & 1);        │          *const_cast<unsigned char*>(&pubkey0H[0]) = 0x06 | (pubkey0H[64] & 1);          
                                                                                         │                                                                                          
        key1.Set(vchKey1, vchKey1 + 32, false);                                          │          key1.Set(vchKey1, vchKey1 + 32, false);                                         
        key1C.Set(vchKey1, vchKey1 + 32, true);                                          │          key1C.Set(vchKey1, vchKey1 + 32, true);                                         
        pubkey1 = key1.GetPubKey();                                                      │          pubkey1 = key1.GetPubKey();                                                     
        pubkey1C = key1C.GetPubKey();                                                    │          pubkey1C = key1C.GetPubKey();                                                   
                                                                                         │                                                                                          
        key2.Set(vchKey2, vchKey2 + 32, false);                                          │          key2.Set(vchKey2, vchKey2 + 32, false);                                         
        key2C.Set(vchKey2, vchKey2 + 32, true);                                          │          key2C.Set(vchKey2, vchKey2 + 32, true);                                         
        pubkey2 = key2.GetPubKey();                                                      │          pubkey2 = key2.GetPubKey();                                                     
        pubkey2C = key2C.GetPubKey();                                                    │          pubkey2C = key2C.GetPubKey();                                                   
    }                                                                                    │      }                                                                                   
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
enum class WitnessMode {                                                                 │  enum WitnessMode {                                                                      
    NONE,                                                                                │      WITNESS_NONE,                                                                       
    PKH,                                                                                 │      WITNESS_PKH,                                                                        
    SH                                                                                   │      WITNESS_SH                                                                          
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
class TestBuilder                                                                        │  class TestBuilder                                                                       
{                                                                                        │  {                                                                                       
private:                                                                                 │  private:                                                                                
    //! Actually executed script                                                         │      //! Actually executed script                                                        
    CScript script;                                                                      │      CScript script;                                                                     
    //! The P2SH redeemscript                                                            │      //! The P2SH redeemscript                                                           
    CScript redeemscript;                                                                │      CScript redeemscript;                                                               
    //! The Witness embedded script                                                      │      //! The Witness embedded script                                                     
    CScript witscript;                                                                   │      CScript witscript;                                                                  
    CScriptWitness scriptWitness;                                                        │      CScriptWitness scriptWitness;                                                       
    CTransactionRef creditTx;                                                            │      CTransactionRef creditTx;                                                           
    CMutableTransaction spendTx;                                                         │      CMutableTransaction spendTx;                                                        
    bool havePush;                                                                       │      bool havePush;                                                                      
    std::vector<unsigned char> push;                                                     │      std::vector<unsigned char> push;                                                    
    std::string comment;                                                                 │      std::string comment;                                                                
    uint32_t flags;                                                                      │      int flags;                                                                          
    int scriptError;                                                                     │      int scriptError;                                                                    
    CAmount nValue;                                                                      │      CAmount nValue;                                                                     
                                                                                         │                                                                                          
    void DoPush()                                                                        │      void DoPush()                                                                       
    {                                                                                    │      {                                                                                   
        if (havePush) {                                                                  │          if (havePush) {                                                                 
            spendTx.vin[0].scriptSig << push;                                            │              spendTx.vin[0].scriptSig << push;                                           
            havePush = false;                                                            │              havePush = false;                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    void DoPush(const std::vector<unsigned char>& data)                                  │      void DoPush(const std::vector<unsigned char>& data)                                 
    {                                                                                    │      {                                                                                   
        DoPush();                                                                        │           DoPush();                                                                      
        push = data;                                                                     │           push = data;                                                                   
        havePush = true;                                                                 │           havePush = true;                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
public:                                                                                  │  public:                                                                                 
    TestBuilder(const CScript& script_, const std::string& comment_, uint32_t flags_, bo │      TestBuilder(const CScript& script_, const std::string& comment_, int flags_, bool P2
    {                                                                                    │      {                                                                                   
        CScript scriptPubKey = script;                                                   │          CScript scriptPubKey = script;                                                  
        if (wm == WitnessMode::PKH) {                                                    │          if (wm == WITNESS_PKH) {                                                        
            uint160 hash;                                                                │              uint160 hash;                                                               
            CHash160().Write(Span{script}.subspan(1)).Finalize(hash);                    │              CHash160().Write(&script[1], script.size() - 1).Finalize(hash.begin());     
            script = CScript() << OP_DUP << OP_HASH160 << ToByteVector(hash) << OP_EQUAL │              script = CScript() << OP_DUP << OP_HASH160 << ToByteVector(hash) << OP_EQUAL
            scriptPubKey = CScript() << witnessversion << ToByteVector(hash);            │              scriptPubKey = CScript() << witnessversion << ToByteVector(hash);           
        } else if (wm == WitnessMode::SH) {                                              │          } else if (wm == WITNESS_SH) {                                                  
            witscript = scriptPubKey;                                                    │              witscript = scriptPubKey;                                                   
            uint256 hash;                                                                │              uint256 hash;                                                               
            CSHA256().Write(witscript.data(), witscript.size()).Finalize(hash.begin());  │              CSHA256().Write(&witscript[0], witscript.size()).Finalize(hash.begin());    
            scriptPubKey = CScript() << witnessversion << ToByteVector(hash);            │              scriptPubKey = CScript() << witnessversion << ToByteVector(hash);           
        }                                                                                │          }                                                                               
        if (P2SH) {                                                                      │          if (P2SH) {                                                                     
            redeemscript = scriptPubKey;                                                 │              redeemscript = scriptPubKey;                                                
            scriptPubKey = CScript() << OP_HASH160 << ToByteVector(CScriptID(redeemscrip │              scriptPubKey = CScript() << OP_HASH160 << ToByteVector(CScriptID(redeemscrip
        }                                                                                │          }                                                                               
        creditTx = MakeTransactionRef(BuildCreditingTransaction(scriptPubKey, nValue));  │          creditTx = MakeTransactionRef(BuildCreditingTransaction(scriptPubKey, nValue)); 
        spendTx = BuildSpendingTransaction(CScript(), CScriptWitness(), *creditTx);      │          spendTx = BuildSpendingTransaction(CScript(), CScriptWitness(), *creditTx);     
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& ScriptError(ScriptError_t err)                                          │      TestBuilder& ScriptError(ScriptError_t err)                                         
    {                                                                                    │      {                                                                                   
        scriptError = err;                                                               │          scriptError = err;                                                              
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Opcode(const opcodetype& _op)                                           │      TestBuilder& Add(const CScript& _script)                                            
    {                                                                                    │      {                                                                                   
        DoPush();                                                                        │          DoPush();                                                                       
        spendTx.vin[0].scriptSig << _op;                                                 │          spendTx.vin[0].scriptSig += _script;                                            
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Num(int num)                                                            │      TestBuilder& Num(int num)                                                           
    {                                                                                    │      {                                                                                   
        DoPush();                                                                        │          DoPush();                                                                       
        spendTx.vin[0].scriptSig << num;                                                 │          spendTx.vin[0].scriptSig << num;                                                
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Push(const std::string& hex)                                            │      TestBuilder& Push(const std::string& hex)                                           
    {                                                                                    │      {                                                                                   
        DoPush(ParseHex(hex));                                                           │          DoPush(ParseHex(hex));                                                          
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Push(const CScript& _script)                                            │      TestBuilder& Push(const CScript& _script) {                                         
    {                                                                                    │           DoPush(std::vector<unsigned char>(_script.begin(), _script.end()));            
        DoPush(std::vector<unsigned char>(_script.begin(), _script.end()));              │                                                                                          
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& PushSig(const CKey& key, int nHashType = SIGHASH_ALL, unsigned int lenR │      TestBuilder& PushSig(const CKey& key, int nHashType = SIGHASH_ALL, unsigned int lenR
    {                                                                                    │      {                                                                                   
        uint256 hash = SignatureHash(script, spendTx, 0, nHashType, amount, sigversion); │          uint256 hash = SignatureHash(script, spendTx, 0, nHashType, amount, sigversion);
        std::vector<unsigned char> vchSig, r, s;                                         │          std::vector<unsigned char> vchSig, r, s;                                        
        uint32_t iter = 0;                                                               │          uint32_t iter = 0;                                                              
        do {                                                                             │          do {                                                                            
            key.Sign(hash, vchSig, false, iter++);                                       │              key.Sign(hash, vchSig, iter++);                                             
            if ((lenS == 33) != (vchSig[5 + vchSig[3]] == 33)) {                         │              if ((lenS == 33) != (vchSig[5 + vchSig[3]] == 33)) {                        
                NegateSignatureS(vchSig);                                                │                  NegateSignatureS(vchSig);                                               
            }                                                                            │              }                                                                           
            r = std::vector<unsigned char>(vchSig.begin() + 4, vchSig.begin() + 4 + vchS │              r = std::vector<unsigned char>(vchSig.begin() + 4, vchSig.begin() + 4 + vchS
            s = std::vector<unsigned char>(vchSig.begin() + 6 + vchSig[3], vchSig.begin( │              s = std::vector<unsigned char>(vchSig.begin() + 6 + vchSig[3], vchSig.begin(
        } while (lenR != r.size() || lenS != s.size());                                  │          } while (lenR != r.size() || lenS != s.size());                                 
        vchSig.push_back(static_cast<unsigned char>(nHashType));                         │          vchSig.push_back(static_cast<unsigned char>(nHashType));                        
        DoPush(vchSig);                                                                  │          DoPush(vchSig);                                                                 
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& PushWitSig(const CKey& key, CAmount amount = -1, int nHashType = SIGHAS │      TestBuilder& PushWitSig(const CKey& key, CAmount amount = -1, int nHashType = SIGHAS
    {                                                                                    │      {                                                                                   
        if (amount == -1)                                                                │          if (amount == -1)                                                               
            amount = nValue;                                                             │              amount = nValue;                                                            
        return PushSig(key, nHashType, lenR, lenS, sigversion, amount).AsWit();          │          return PushSig(key, nHashType, lenR, lenS, sigversion, amount).AsWit();         
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Push(const CPubKey& pubkey)                                             │      TestBuilder& Push(const CPubKey& pubkey)                                            
    {                                                                                    │      {                                                                                   
        DoPush(std::vector<unsigned char>(pubkey.begin(), pubkey.end()));                │          DoPush(std::vector<unsigned char>(pubkey.begin(), pubkey.end()));               
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& PushRedeem()                                                            │      TestBuilder& PushRedeem()                                                           
    {                                                                                    │      {                                                                                   
        DoPush(std::vector<unsigned char>(redeemscript.begin(), redeemscript.end()));    │          DoPush(std::vector<unsigned char>(redeemscript.begin(), redeemscript.end()));   
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& PushWitRedeem()                                                         │      TestBuilder& PushWitRedeem()                                                        
    {                                                                                    │      {                                                                                   
        DoPush(std::vector<unsigned char>(witscript.begin(), witscript.end()));          │          DoPush(std::vector<unsigned char>(witscript.begin(), witscript.end()));         
        return AsWit();                                                                  │          return AsWit();                                                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& EditPush(unsigned int pos, const std::string& hexin, const std::string& │      TestBuilder& EditPush(unsigned int pos, const std::string& hexin, const std::string&
    {                                                                                    │      {                                                                                   
        assert(havePush);                                                                │          assert(havePush);                                                               
        std::vector<unsigned char> datain = ParseHex(hexin);                             │          std::vector<unsigned char> datain = ParseHex(hexin);                            
        std::vector<unsigned char> dataout = ParseHex(hexout);                           │          std::vector<unsigned char> dataout = ParseHex(hexout);                          
        assert(pos + datain.size() <= push.size());                                      │          assert(pos + datain.size() <= push.size());                                     
        BOOST_CHECK_MESSAGE(std::vector<unsigned char>(push.begin() + pos, push.begin()  │          BOOST_CHECK_MESSAGE(std::vector<unsigned char>(push.begin() + pos, push.begin() 
        push.erase(push.begin() + pos, push.begin() + pos + datain.size());              │          push.erase(push.begin() + pos, push.begin() + pos + datain.size());             
        push.insert(push.begin() + pos, dataout.begin(), dataout.end());                 │          push.insert(push.begin() + pos, dataout.begin(), dataout.end());                
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& DamagePush(unsigned int pos)                                            │      TestBuilder& DamagePush(unsigned int pos)                                           
    {                                                                                    │      {                                                                                   
        assert(havePush);                                                                │          assert(havePush);                                                               
        assert(pos < push.size());                                                       │          assert(pos < push.size());                                                      
        push[pos] ^= 1;                                                                  │          push[pos] ^= 1;                                                                 
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& Test()                                                                  │      TestBuilder& Test()                                                                 
    {                                                                                    │      {                                                                                   
        TestBuilder copy = *this; // Make a copy so we can rollback the push.            │          TestBuilder copy = *this; // Make a copy so we can rollback the push.           
        DoPush();                                                                        │          DoPush();                                                                       
        DoTest(creditTx->vout[0].scriptPubKey, spendTx.vin[0].scriptSig, scriptWitness,  │          DoTest(creditTx->vout[0].scriptPubKey, spendTx.vin[0].scriptSig, scriptWitness, 
        *this = copy;                                                                    │          *this = copy;                                                                   
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    TestBuilder& AsWit()                                                                 │      TestBuilder& AsWit()                                                                
    {                                                                                    │      {                                                                                   
        assert(havePush);                                                                │          assert(havePush);                                                               
        scriptWitness.stack.push_back(push);                                             │          scriptWitness.stack.push_back(push);                                            
        havePush = false;                                                                │          havePush = false;                                                               
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    UniValue GetJSON()                                                                   │      UniValue GetJSON()                                                                  
    {                                                                                    │      {                                                                                   
        DoPush();                                                                        │          DoPush();                                                                       
        UniValue array(UniValue::VARR);                                                  │          UniValue array(UniValue::VARR);                                                 
        if (!scriptWitness.stack.empty()) {                                              │          if (!scriptWitness.stack.empty()) {                                             
            UniValue wit(UniValue::VARR);                                                │              UniValue wit(UniValue::VARR);                                               
            for (unsigned i = 0; i < scriptWitness.stack.size(); i++) {                  │              for (unsigned i = 0; i < scriptWitness.stack.size(); i++) {                 
                wit.push_back(HexStr(scriptWitness.stack[i]));                           │                  wit.push_back(HexStr(scriptWitness.stack[i]));                          
            }                                                                            │              }                                                                           
            wit.push_back(ValueFromAmount(nValue));                                      │              wit.push_back(ValueFromAmount(nValue));                                     
            array.push_back(wit);                                                        │              array.push_back(wit);                                                       
        }                                                                                │          }                                                                               
        array.push_back(FormatScript(spendTx.vin[0].scriptSig));                         │          array.push_back(FormatScript(spendTx.vin[0].scriptSig));                        
        array.push_back(FormatScript(creditTx->vout[0].scriptPubKey));                   │          array.push_back(FormatScript(creditTx->vout[0].scriptPubKey));                  
        array.push_back(FormatScriptFlags(flags));                                       │          array.push_back(FormatScriptFlags(flags));                                      
        array.push_back(FormatScriptError((ScriptError_t)scriptError));                  │          array.push_back(FormatScriptError((ScriptError_t)scriptError));                 
        array.push_back(comment);                                                        │          array.push_back(comment);                                                       
        return array;                                                                    │          return array;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    std::string GetComment() const                                                       │      std::string GetComment()                                                            
    {                                                                                    │      {                                                                                   
        return comment;                                                                  │          return comment;                                                                 
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      const CScript& GetScriptPubKey()                                                    
                                                                                         │      {                                                                                   
                                                                                         │          return creditTx->vout[0].scriptPubKey;                                          
    }                                                                                    │      }                                                                                   
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
std::string JSONPrettyPrint(const UniValue& univalue)                                    │  std::string JSONPrettyPrint(const UniValue& univalue)                                   
{                                                                                        │  {                                                                                       
    std::string ret = univalue.write(4);                                                 │      std::string ret = univalue.write(4);                                                
    // Workaround for libunivalue pretty printer, which puts a space between commas and  │      // Workaround for libunivalue pretty printer, which puts a space between commas and 
    size_t pos = 0;                                                                      │      size_t pos = 0;                                                                     
    while ((pos = ret.find(" \n", pos)) != std::string::npos) {                          │      while ((pos = ret.find(" \n", pos)) != std::string::npos) {                         
        ret.replace(pos, 2, "\n");                                                       │          ret.replace(pos, 2, "\n");                                                      
        pos++;                                                                           │          pos++;                                                                          
    }                                                                                    │      }                                                                                   
    return ret;                                                                          │      return ret;                                                                         
}                                                                                        │  }                                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rest.cpp:700                                                                │ dogecoin/src/rest.cpp:406                                                                
                                                                                         │                                                                                          
    if (!CheckWarmup(req))                                                               │      if (!CheckWarmup(req))                                                              
        return false;                                                                    │          return false;                                                                   
    std::string param;                                                                   │      std::string param;                                                                  
    const RESTResponseFormat rf = ParseDataFormat(param, strURIPart);                    │      const RetFormat rf = ParseDataFormat(param, strURIPart);                            
                                                                                         │                                                                                          
    std::vector<std::string> uriParts;                                                   │      std::vector<std::string> uriParts;                                                  
    if (param.length() > 1)                                                              │      if (param.length() > 1)                                                             
    {                                                                                    │      {                                                                                   
        std::string strUriParams = param.substr(1);                                      │          std::string strUriParams = param.substr(1);                                     
        uriParts = SplitString(strUriParams, '/');                                       │          boost::split(uriParts, strUriParams, boost::is_any_of("/"));                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // throw exception in case of an empty request                                       │      // throw exception in case of a empty request                                       
    std::string strRequestMutable = req->ReadBody();                                     │      std::string strRequestMutable = req->ReadBody();                                    
    if (strRequestMutable.length() == 0 && uriParts.size() == 0)                         │      if (strRequestMutable.length() == 0 && uriParts.size() == 0)                        
        return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");                   │          return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");                  
                                                                                         │                                                                                          
    bool fInputParsed = false;                                                           │      bool fInputParsed = false;                                                          
    bool fCheckMemPool = false;                                                          │      bool fCheckMemPool = false;                                                         
    std::vector<COutPoint> vOutPoints;                                                   │      std::vector<COutPoint> vOutPoints;                                                  
                                                                                         │                                                                                          
    // parse/deserialize input                                                           │      // parse/deserialize input                                                          
    // input-format = output-format, rest/getutxos/bin requires binary input, gives bina │      // input-format = output-format, rest/getutxos/bin requires binary input, gives bina
                                                                                         │                                                                                          
    if (uriParts.size() > 0)                                                             │      if (uriParts.size() > 0)                                                            
    {                                                                                    │      {                                                                                   
                                                                                         │                                                                                          
        //inputs is sent over URI scheme (/rest/getutxos/checkmempool/txid1-n/txid2-n/.. │          //inputs is sent over URI scheme (/rest/getutxos/checkmempool/txid1-n/txid2-n/..
        if (uriParts[0] == "checkmempool") fCheckMemPool = true;                         │          if (uriParts.size() > 0 && uriParts[0] == "checkmempool")                       
                                                                                         │              fCheckMemPool = true;                                                       
                                                                                         │                                                                                          
        for (size_t i = (fCheckMemPool) ? 1 : 0; i < uriParts.size(); i++)               │          for (size_t i = (fCheckMemPool) ? 1 : 0; i < uriParts.size(); i++)              
        {                                                                                │          {                                                                               
            uint256 txid;                                                                │              uint256 txid;                                                               
            int32_t nOutput;                                                             │              int32_t nOutput;                                                            
            std::string strTxid = uriParts[i].substr(0, uriParts[i].find('-'));          │              std::string strTxid = uriParts[i].substr(0, uriParts[i].find("-"));         
            std::string strOutput = uriParts[i].substr(uriParts[i].find('-')+1);         │              std::string strOutput = uriParts[i].substr(uriParts[i].find("-")+1);        
                                                                                         │                                                                                          
            if (!ParseInt32(strOutput, &nOutput) || !IsHex(strTxid))                     │              if (!ParseInt32(strOutput, &nOutput) || !IsHex(strTxid))                    
                return RESTERR(req, HTTP_BAD_REQUEST, "Parse error");                    │                  return RESTERR(req, HTTP_BAD_REQUEST, "Parse error");                   
                                                                                         │                                                                                          
            txid.SetHex(strTxid);                                                        │              txid.SetHex(strTxid);                                                       
            vOutPoints.push_back(COutPoint(txid, (uint32_t)nOutput));                    │              vOutPoints.push_back(COutPoint(txid, (uint32_t)nOutput));                   
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (vOutPoints.size() > 0)                                                       │          if (vOutPoints.size() > 0)                                                      
            fInputParsed = true;                                                         │              fInputParsed = true;                                                        
        else                                                                             │          else                                                                            
            return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");               │              return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");              
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    switch (rf) {                                                                        │      switch (rf) {                                                                       
    case RESTResponseFormat::HEX: {                                                      │      case RF_HEX: {                                                                      
        // convert hex to bin, continue then with bin part                               │          // convert hex to bin, continue then with bin part                              
        std::vector<unsigned char> strRequestV = ParseHex(strRequestMutable);            │          std::vector<unsigned char> strRequestV = ParseHex(strRequestMutable);           
        strRequestMutable.assign(strRequestV.begin(), strRequestV.end());                │          strRequestMutable.assign(strRequestV.begin(), strRequestV.end());               
        [[fallthrough]];                                                                 │                                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │      // Falls through                                                                    
                                                                                         │                                                                                          
    case RESTResponseFormat::BINARY: {                                                   │      case RF_BINARY: {                                                                   
        try {                                                                            │          try {                                                                           
            //deserialize only if user sent a request                                    │              //deserialize only if user sent a request                                   
            if (strRequestMutable.size() > 0)                                            │              if (strRequestMutable.size() > 0)                                           
            {                                                                            │              {                                                                           
                if (fInputParsed) //don't allow sending input over URI and HTTP RAW DATA │                  if (fInputParsed) //don't allow sending input over URI and HTTP RAW DATA
                    return RESTERR(req, HTTP_BAD_REQUEST, "Combination of URI scheme inp │                      return RESTERR(req, HTTP_BAD_REQUEST, "Combination of URI scheme inp
                                                                                         │                                                                                          
                CDataStream oss(SER_NETWORK, PROTOCOL_VERSION);                          │                  CDataStream oss(SER_NETWORK, PROTOCOL_VERSION);                         
                oss << strRequestMutable;                                                │                  oss << strRequestMutable;                                               
                oss >> fCheckMemPool;                                                    │                  oss >> fCheckMemPool;                                                   
                oss >> vOutPoints;                                                       │                  oss >> vOutPoints;                                                      
            }                                                                            │              }                                                                           
        } catch (const std::ios_base::failure&) {                                        │          } catch (const std::ios_base::failure& e) {                                     
            // abort in case of unreadable binary data                                   │              // abort in case of unreadable binary data                                  
            return RESTERR(req, HTTP_BAD_REQUEST, "Parse error");                        │              return RESTERR(req, HTTP_BAD_REQUEST, "Parse error");                       
        }                                                                                │          }                                                                               
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::JSON: {                                                     │      case RF_JSON: {                                                                     
        if (!fInputParsed)                                                               │          if (!fInputParsed)                                                              
            return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");               │              return RESTERR(req, HTTP_BAD_REQUEST, "Error: empty request");              
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
    default: {                                                                           │      default: {                                                                          
        return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava │          return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava
    }                                                                                    │      }                                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // limit max outpoints                                                               │      // limit max outpoints                                                              
    if (vOutPoints.size() > MAX_GETUTXOS_OUTPOINTS)                                      │      if (vOutPoints.size() > MAX_GETUTXOS_OUTPOINTS)                                     
        return RESTERR(req, HTTP_BAD_REQUEST, strprintf("Error: max outpoints exceeded ( │          return RESTERR(req, HTTP_BAD_REQUEST, strprintf("Error: max outpoints exceeded (
                                                                                         │                                                                                          
    // check spentness and form a bitmap (as well as a JSON capable human-readable strin │      // check spentness and form a bitmap (as well as a JSON capable human-readable strin
    std::vector<unsigned char> bitmap;                                                   │      std::vector<unsigned char> bitmap;                                                  
    std::vector<CCoin> outs;                                                             │      std::vector<CCoin> outs;                                                            
    std::string bitmapStringRepresentation;                                              │      std::string bitmapStringRepresentation;                                             
    std::vector<bool> hits;                                                              │      std::vector<bool> hits;                                                             
    bitmap.resize((vOutPoints.size() + 7) / 8);                                          │      bitmap.resize((vOutPoints.size() + 7) / 8);                                         
    ChainstateManager* maybe_chainman = GetChainman(context, req);                       │                                                                                          
    if (!maybe_chainman) return false;                                                   │                                                                                          
    ChainstateManager& chainman = *maybe_chainman;                                       │                                                                                          
    {                                                                                    │      {                                                                                   
        auto process_utxos = [&vOutPoints, &outs, &hits](const CCoinsView& view, const C │          LOCK2(cs_main, mempool.cs);                                                     
            for (const COutPoint& vOutPoint : vOutPoints) {                              │                                                                                          
                Coin coin;                                                               │                                                                                          
                bool hit = !mempool.isSpent(vOutPoint) && view.GetCoin(vOutPoint, coin); │                                                                                          
                hits.push_back(hit);                                                     │                                                                                          
                if (hit) outs.emplace_back(std::move(coin));                             │                                                                                          
            }                                                                            │                                                                                          
        };                                                                               │                                                                                          
                                                                                         │                                                                                          
        if (fCheckMemPool) {                                                             │          CCoinsView viewDummy;                                                           
            const CTxMemPool* mempool = GetMemPool(context, req);                        │          CCoinsViewCache view(&viewDummy);                                               
            if (!mempool) return false;                                                  │                                                                                          
            // use db+mempool as cache backend in case user likes to query mempool       │          CCoinsViewCache& viewChain = *pcoinsTip;                                        
            LOCK2(cs_main, mempool->cs);                                                 │          CCoinsViewMemPool viewMempool(&viewChain, mempool);                             
            CCoinsViewCache& viewChain = chainman.ActiveChainstate().CoinsTip();         │                                                                                          
            CCoinsViewMemPool viewMempool(&viewChain, *mempool);                         │                                                                                          
            process_utxos(viewMempool, *mempool);                                        │                                                                                          
        } else {                                                                         │                                                                                          
            LOCK(cs_main);  // no need to lock mempool!                                  │                                                                                          
            process_utxos(chainman.ActiveChainstate().CoinsTip(), CTxMemPool());         │                                                                                          
        }                                                                                │                                                                                          
                                                                                         │                                                                                          
        for (size_t i = 0; i < hits.size(); ++i) {                                       │          if (fCheckMemPool)                                                              
            const bool hit = hits[i];                                                    │              view.SetBackend(viewMempool); // switch cache backend to db+mempool in case 
                                                                                         │                                                                                          
                                                                                         │          for (size_t i = 0; i < vOutPoints.size(); i++) {                                
                                                                                         │              CCoins coins;                                                               
                                                                                         │              uint256 hash = vOutPoints[i].hash;                                          
                                                                                         │              bool hit = false;                                                           
                                                                                         │              if (view.GetCoins(hash, coins)) {                                           
                                                                                         │                  mempool.pruneSpent(hash, coins);                                        
                                                                                         │                  if (coins.IsAvailable(vOutPoints[i].n)) {                               
                                                                                         │                      hit = true;                                                         
                                                                                         │                      // Safe to index into vout here because IsAvailable checked if it's 
                                                                                         │                      // n is valid but points to an already spent output (IsNull).       
                                                                                         │                      CCoin coin;                                                         
                                                                                         │                      coin.nTxVer = coins.nVersion;                                       
                                                                                         │                      coin.nHeight = coins.nHeight;                                       
                                                                                         │                      coin.out = coins.vout.at(vOutPoints[i].n);                          
                                                                                         │                      assert(!coin.out.IsNull());                                         
                                                                                         │                      outs.push_back(coin);                                               
                                                                                         │                  }                                                                       
                                                                                         │              }                                                                           
                                                                                         │                                                                                          
                                                                                         │              hits.push_back(hit);                                                        
            bitmapStringRepresentation.append(hit ? "1" : "0"); // form a binary string  │              bitmapStringRepresentation.append(hit ? "1" : "0"); // form a binary string 
            bitmap[i / 8] |= ((uint8_t)hit) << (i % 8);                                  │              bitmap[i / 8] |= ((uint8_t)hit) << (i % 8);                                 
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    switch (rf) {                                                                        │      switch (rf) {                                                                       
    case RESTResponseFormat::BINARY: {                                                   │      case RF_BINARY: {                                                                   
        // serialize data                                                                │          // serialize data                                                               
        // use exact same output as mentioned in Bip64                                   │          // use exact same output as mentioned in Bip64                                  
        CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);                    │          CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);                   
        ssGetUTXOResponse << chainman.ActiveChain().Height() << chainman.ActiveChain().T │          ssGetUTXOResponse << chainActive.Height() << chainActive.Tip()->GetBlockHash() <
        std::string ssGetUTXOResponseString = ssGetUTXOResponse.str();                   │          std::string ssGetUTXOResponseString = ssGetUTXOResponse.str();                  
                                                                                         │                                                                                          
        req->WriteHeader("Content-Type", "application/octet-stream");                    │          req->WriteHeader("Content-Type", "application/octet-stream");                   
        req->WriteReply(HTTP_OK, ssGetUTXOResponseString);                               │          req->WriteReply(HTTP_OK, ssGetUTXOResponseString);                              
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::HEX: {                                                      │      case RF_HEX: {                                                                      
        CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);                    │          CDataStream ssGetUTXOResponse(SER_NETWORK, PROTOCOL_VERSION);                   
        ssGetUTXOResponse << chainman.ActiveChain().Height() << chainman.ActiveChain().T │          ssGetUTXOResponse << chainActive.Height() << chainActive.Tip()->GetBlockHash() <
        std::string strHex = HexStr(ssGetUTXOResponse) + "\n";                           │          std::string strHex = HexStr(ssGetUTXOResponse.begin(), ssGetUTXOResponse.end()) 
                                                                                         │                                                                                          
        req->WriteHeader("Content-Type", "text/plain");                                  │          req->WriteHeader("Content-Type", "text/plain");                                 
        req->WriteReply(HTTP_OK, strHex);                                                │          req->WriteReply(HTTP_OK, strHex);                                               
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::JSON: {                                                     │      case RF_JSON: {                                                                     
        UniValue objGetUTXOResponse(UniValue::VOBJ);                                     │          UniValue objGetUTXOResponse(UniValue::VOBJ);                                    
                                                                                         │                                                                                          
        // pack in some essentials                                                       │          // pack in some essentials                                                      
        // use more or less the same output as mentioned in Bip64                        │          // use more or less the same output as mentioned in Bip64                       
        objGetUTXOResponse.pushKV("chainHeight", chainman.ActiveChain().Height());       │          objGetUTXOResponse.pushKV("chainHeight", chainActive.Height());                 
        objGetUTXOResponse.pushKV("chaintipHash", chainman.ActiveChain().Tip()->GetBlock │          objGetUTXOResponse.pushKV("chaintipHash", chainActive.Tip()->GetBlockHash().GetH
        objGetUTXOResponse.pushKV("bitmap", bitmapStringRepresentation);                 │          objGetUTXOResponse.pushKV("bitmap", bitmapStringRepresentation);                
                                                                                         │                                                                                          
        UniValue utxos(UniValue::VARR);                                                  │          UniValue utxos(UniValue::VARR);                                                 
        for (const CCoin& coin : outs) {                                                 │          BOOST_FOREACH (const CCoin& coin, outs) {                                       
            UniValue utxo(UniValue::VOBJ);                                               │              UniValue utxo(UniValue::VOBJ);                                              
                                                                                         │              utxo.pushKV("txvers", (int32_t)coin.nTxVer);                                
            utxo.pushKV("height", (int32_t)coin.nHeight);                                │              utxo.pushKV("height", (int32_t)coin.nHeight);                               
            utxo.pushKV("value", ValueFromAmount(coin.out.nValue));                      │              utxo.pushKV("value", ValueFromAmount(coin.out.nValue));                     
                                                                                         │                                                                                          
            // include the script in a json output                                       │              // include the script in a json output                                      
            UniValue o(UniValue::VOBJ);                                                  │              UniValue o(UniValue::VOBJ);                                                 
            ScriptToUniv(coin.out.scriptPubKey, /*out=*/o, /*include_hex=*/true, /*inclu │              ScriptPubKeyToJSON(coin.out.scriptPubKey, o, true);                         
            utxo.pushKV("scriptPubKey", o);                                              │              utxo.pushKV("scriptPubKey", o);                                             
            utxos.push_back(utxo);                                                       │              utxos.push_back(utxo);                                                      
        }                                                                                │          }                                                                               
        objGetUTXOResponse.pushKV("utxos", utxos);                                       │          objGetUTXOResponse.pushKV("utxos", utxos);                                      
                                                                                         │                                                                                          
        // return json string                                                            │          // return json string                                                           
        std::string strJSON = objGetUTXOResponse.write() + "\n";                         │          std::string strJSON = objGetUTXOResponse.write() + "\n";                        
        req->WriteHeader("Content-Type", "application/json");                            │          req->WriteHeader("Content-Type", "application/json");                           
        req->WriteReply(HTTP_OK, strJSON);                                               │          req->WriteReply(HTTP_OK, strJSON);                                              
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
    default: {                                                                           │      default: {                                                                          
        return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava │          return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava
    }                                                                                    │      }                                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      // not reached                                                                      
                                                                                         │      return true; // continue to process further HTTP reqs on this cxn                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/crypto/sha1.cpp:13                                                          │ dogecoin/src/crypto/sha1.cpp:19                                                          
                                                                                         │                                                                                          
/// Internal SHA-1 implementation.                                                       │  /// Internal SHA-1 implementation.                                                      
namespace sha1                                                                           │  namespace sha1                                                                          
{                                                                                        │  {                                                                                       
                                                                                         │                                                                                          
                                                                                         │  #ifndef USE_AVX2                                                                        
/** One round of SHA-1. */                                                               │  /** One round of SHA-1. */                                                              
void inline Round(uint32_t a, uint32_t& b, uint32_t c, uint32_t d, uint32_t& e, uint32_t │  void inline Round(uint32_t a, uint32_t& b, uint32_t c, uint32_t d, uint32_t& e, uint32_t
{                                                                                        │  {                                                                                       
    e += ((a << 5) | (a >> 27)) + f + k + w;                                             │      e += ((a << 5) | (a >> 27)) + f + k + w;                                            
    b = (b << 30) | (b >> 2);                                                            │      b = (b << 30) | (b >> 2);                                                           
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); }     │  uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); }    
uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; }             │  uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; }            
uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c)); │  uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c));
                                                                                         │                                                                                          
uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); }                        │  uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); }                       
                                                                                         │  #endif                                                                                  
                                                                                         │                                                                                          
/** Initialize SHA-1 state. */                                                           │  /** Initialize SHA-1 state. */                                                          
void inline Initialize(uint32_t* s)                                                      │  void inline Initialize(uint32_t* s)                                                     
{                                                                                        │  {                                                                                       
    s[0] = 0x67452301ul;                                                                 │      s[0] = 0x67452301ul;                                                                
    s[1] = 0xEFCDAB89ul;                                                                 │      s[1] = 0xEFCDAB89ul;                                                                
    s[2] = 0x98BADCFEul;                                                                 │      s[2] = 0x98BADCFEul;                                                                
    s[3] = 0x10325476ul;                                                                 │      s[3] = 0x10325476ul;                                                                
    s[4] = 0xC3D2E1F0ul;                                                                 │      s[4] = 0xC3D2E1F0ul;                                                                
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
const uint32_t k1 = 0x5A827999ul;                                                        │  const uint32_t k1 = 0x5A827999ul;                                                       
const uint32_t k2 = 0x6ED9EBA1ul;                                                        │  const uint32_t k2 = 0x6ED9EBA1ul;                                                       
const uint32_t k3 = 0x8F1BBCDCul;                                                        │  const uint32_t k3 = 0x8F1BBCDCul;                                                       
const uint32_t k4 = 0xCA62C1D6ul;                                                        │  const uint32_t k4 = 0xCA62C1D6ul;                                                       
                                                                                         │                                                                                          
/** Perform a SHA-1 transformation, processing a 64-byte chunk. */                       │  /** Perform a SHA-1 transformation, processing a 64-byte chunk. */                      
void Transform(uint32_t* s, const unsigned char* chunk)                                  │  void Transform(uint32_t* s, const unsigned char* chunk)                                 
{                                                                                        │  {                                                                                       
                                                                                         │  #ifdef USE_AVX2                                                                         
                                                                                         │      // Perform SHA1 one block (Intel AVX2)                                              
                                                                                         │      sha1_one_block_avx2(chunk, s);                                                      
                                                                                         │  #else                                                                                   
                                                                                         │      // Perform SHA one block (legacy)                                                   
                                                                                         │                                                                                          
    uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4];                           │      uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4];                          
    uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;       │      uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;      
                                                                                         │                                                                                          
    Round(a, b, c, d, e, f1(b, c, d), k1, w0 = ReadBE32(chunk + 0));                     │      Round(a, b, c, d, e, f1(b, c, d), k1, w0 = ReadBE32(chunk + 0));                    
    Round(e, a, b, c, d, f1(a, b, c), k1, w1 = ReadBE32(chunk + 4));                     │      Round(e, a, b, c, d, f1(a, b, c), k1, w1 = ReadBE32(chunk + 4));                    
    Round(d, e, a, b, c, f1(e, a, b), k1, w2 = ReadBE32(chunk + 8));                     │      Round(d, e, a, b, c, f1(e, a, b), k1, w2 = ReadBE32(chunk + 8));                    
    Round(c, d, e, a, b, f1(d, e, a), k1, w3 = ReadBE32(chunk + 12));                    │      Round(c, d, e, a, b, f1(d, e, a), k1, w3 = ReadBE32(chunk + 12));                   
    Round(b, c, d, e, a, f1(c, d, e), k1, w4 = ReadBE32(chunk + 16));                    │      Round(b, c, d, e, a, f1(c, d, e), k1, w4 = ReadBE32(chunk + 16));                   
    Round(a, b, c, d, e, f1(b, c, d), k1, w5 = ReadBE32(chunk + 20));                    │      Round(a, b, c, d, e, f1(b, c, d), k1, w5 = ReadBE32(chunk + 20));                   
    Round(e, a, b, c, d, f1(a, b, c), k1, w6 = ReadBE32(chunk + 24));                    │      Round(e, a, b, c, d, f1(a, b, c), k1, w6 = ReadBE32(chunk + 24));                   
    Round(d, e, a, b, c, f1(e, a, b), k1, w7 = ReadBE32(chunk + 28));                    │      Round(d, e, a, b, c, f1(e, a, b), k1, w7 = ReadBE32(chunk + 28));                   
    Round(c, d, e, a, b, f1(d, e, a), k1, w8 = ReadBE32(chunk + 32));                    │      Round(c, d, e, a, b, f1(d, e, a), k1, w8 = ReadBE32(chunk + 32));                   
    Round(b, c, d, e, a, f1(c, d, e), k1, w9 = ReadBE32(chunk + 36));                    │      Round(b, c, d, e, a, f1(c, d, e), k1, w9 = ReadBE32(chunk + 36));                   
    Round(a, b, c, d, e, f1(b, c, d), k1, w10 = ReadBE32(chunk + 40));                   │      Round(a, b, c, d, e, f1(b, c, d), k1, w10 = ReadBE32(chunk + 40));                  
    Round(e, a, b, c, d, f1(a, b, c), k1, w11 = ReadBE32(chunk + 44));                   │      Round(e, a, b, c, d, f1(a, b, c), k1, w11 = ReadBE32(chunk + 44));                  
    Round(d, e, a, b, c, f1(e, a, b), k1, w12 = ReadBE32(chunk + 48));                   │      Round(d, e, a, b, c, f1(e, a, b), k1, w12 = ReadBE32(chunk + 48));                  
    Round(c, d, e, a, b, f1(d, e, a), k1, w13 = ReadBE32(chunk + 52));                   │      Round(c, d, e, a, b, f1(d, e, a), k1, w13 = ReadBE32(chunk + 52));                  
    Round(b, c, d, e, a, f1(c, d, e), k1, w14 = ReadBE32(chunk + 56));                   │      Round(b, c, d, e, a, f1(c, d, e), k1, w14 = ReadBE32(chunk + 56));                  
    Round(a, b, c, d, e, f1(b, c, d), k1, w15 = ReadBE32(chunk + 60));                   │      Round(a, b, c, d, e, f1(b, c, d), k1, w15 = ReadBE32(chunk + 60));                  
                                                                                         │                                                                                          
    Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2));                │      Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2));               
    Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3));                │      Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3));               
    Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4));               │      Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4));              
    Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5));                │      Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5));               
    Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6));                │      Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6));               
    Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7));                │      Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7));               
    Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8));                │      Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8));               
    Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9));                │      Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9));               
    Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10));                │      Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10));               
    Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11));                │      Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11));               
    Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12));              │      Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12));             
    Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13));              │      Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13));             
    Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14));              │      Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14));             
    Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15));             │      Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15));            
    Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0));              │      Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0));             
    Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1));              │      Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1));             
                                                                                         │                                                                                          
    Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2));                │      Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2));               
    Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3));                │      Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3));               
    Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4));               │      Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4));              
    Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5));                │      Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5));               
    Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6));                │      Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6));               
    Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7));                │      Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7));               
    Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8));                │      Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8));               
    Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9));                │      Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9));               
    Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10));                │      Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10));               
    Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11));                │      Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11));               
    Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12));              │      Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12));             
    Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13));              │      Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13));             
    Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14));              │      Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14));             
    Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15));             │      Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15));            
    Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0));              │      Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0));             
    Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1));              │      Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1));             
                                                                                         │                                                                                          
    Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2));                │      Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2));               
    Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3));                │      Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3));               
    Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4));               │      Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4));              
    Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5));                │      Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5));               
    Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6));                │      Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6));               
    Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7));                │      Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7));               
    Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8));                │      Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8));               
    Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9));                │      Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9));               
    Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10));                │      Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10));               
    Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11));                │      Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11));               
    Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12));              │      Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12));             
    Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13));              │      Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13));             
    Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14));              │      Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14));             
    Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15));             │      Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15));            
    Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0));              │      Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0));             
    Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1));              │      Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1));             
                                                                                         │                                                                                          
    Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2));                │      Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2));               
    Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3));                │      Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3));               
    Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4));               │      Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4));              
    Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5));                │      Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5));               
    Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6));                │      Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6));               
    Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7));                │      Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7));               
    Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8));                │      Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8));               
    Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9));                │      Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9));               
    Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10));                │      Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10));               
    Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11));                │      Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11));               
    Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12));              │      Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12));             
    Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13));              │      Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13));             
    Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14));              │      Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14));             
    Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15));                   │      Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15));                  
    Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0));                    │      Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0));                   
    Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1));                    │      Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1));                   
                                                                                         │                                                                                          
    s[0] += a;                                                                           │      s[0] += a;                                                                          
    s[1] += b;                                                                           │      s[1] += b;                                                                          
    s[2] += c;                                                                           │      s[2] += c;                                                                          
    s[3] += d;                                                                           │      s[3] += d;                                                                          
    s[4] += e;                                                                           │      s[4] += e;                                                                          
                                                                                         │                                                                                          
                                                                                         │  #endif                                                                                  
                                                                                         │                                                                                          
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
} // namespace sha1                                                                      │  } // namespace sha1                                                                     
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:374                                                   │ bitcoin/src/test/bloom_tests.cpp:353                                                     
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                              │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the last transaction                                                        │      // Match the last transaction                                                       
    filter.insert(uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df │      filter.insert(uint256S("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x0a2a92f0bda4727d0a13ead │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x0a2a92f0bda4727d0a13ead
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Also match the 4th transaction                                                    │      // Also match the 4th transaction                                                   
    filter.insert(uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df │      filter.insert(uint256S("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x02981fa052f0481dbc5868f │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x02981fa052f0481dbc5868f
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair);                                     │      BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/mempool_tests.cpp:425                                                  │ dogecoin/src/test/mempool_tests.cpp:434                                                  
                                                                                         │                                                                                          
    CTxMemPool pool;                                                                     │      CTxMemPool pool(CFeeRate(COIN / 1000));                                             
    LOCK2(cs_main, pool.cs);                                                             │                                                                                          
    TestMemPoolEntryHelper entry;                                                        │      TestMemPoolEntryHelper entry;                                                       
                                                                                         │      entry.dPriority = 10.0;                                                             
                                                                                         │                                                                                          
    CMutableTransaction tx1 = CMutableTransaction();                                     │      CMutableTransaction tx1 = CMutableTransaction();                                    
    tx1.vin.resize(1);                                                                   │      tx1.vin.resize(1);                                                                  
    tx1.vin[0].scriptSig = CScript() << OP_1;                                            │      tx1.vin[0].scriptSig = CScript() << OP_1;                                           
    tx1.vout.resize(1);                                                                  │      tx1.vout.resize(1);                                                                 
    tx1.vout[0].scriptPubKey = CScript() << OP_1 << OP_EQUAL;                            │      tx1.vout[0].scriptPubKey = CScript() << OP_1 << OP_EQUAL;                           
    tx1.vout[0].nValue = 10 * COIN;                                                      │      tx1.vout[0].nValue = 10 * COIN;                                                     
    pool.addUnchecked(entry.Fee(10000LL).FromTx(tx1));                                   │      pool.addUnchecked(tx1.GetHash(), entry.Fee(COIN / 100).FromTx(tx1, &pool));         
                                                                                         │                                                                                          
    CMutableTransaction tx2 = CMutableTransaction();                                     │      CMutableTransaction tx2 = CMutableTransaction();                                    
    tx2.vin.resize(1);                                                                   │      tx2.vin.resize(1);                                                                  
    tx2.vin[0].scriptSig = CScript() << OP_2;                                            │      tx2.vin[0].scriptSig = CScript() << OP_2;                                           
    tx2.vout.resize(1);                                                                  │      tx2.vout.resize(1);                                                                 
    tx2.vout[0].scriptPubKey = CScript() << OP_2 << OP_EQUAL;                            │      tx2.vout[0].scriptPubKey = CScript() << OP_2 << OP_EQUAL;                           
    tx2.vout[0].nValue = 10 * COIN;                                                      │      tx2.vout[0].nValue = 10 * COIN;                                                     
    pool.addUnchecked(entry.Fee(5000LL).FromTx(tx2));                                    │      pool.addUnchecked(tx2.GetHash(), entry.Fee(COIN / 200).FromTx(tx2, &pool));         
                                                                                         │                                                                                          
    pool.TrimToSize(pool.DynamicMemoryUsage()); // should do nothing                     │      pool.TrimToSize(pool.DynamicMemoryUsage()); // should do nothing                    
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx1.GetHash())));                              │      BOOST_CHECK(pool.exists(tx1.GetHash()));                                            
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx2.GetHash())));                              │      BOOST_CHECK(pool.exists(tx2.GetHash()));                                            
                                                                                         │                                                                                          
    pool.TrimToSize(pool.DynamicMemoryUsage() * 3 / 4); // should remove the lower-feera │      pool.TrimToSize(pool.DynamicMemoryUsage() * 3 / 4); // should remove the lower-feera
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx1.GetHash())));                              │      BOOST_CHECK(pool.exists(tx1.GetHash()));                                            
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx2.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx2.GetHash()));                                           
                                                                                         │                                                                                          
    pool.addUnchecked(entry.FromTx(tx2));                                                │      pool.addUnchecked(tx2.GetHash(), entry.FromTx(tx2, &pool));                         
    CMutableTransaction tx3 = CMutableTransaction();                                     │      CMutableTransaction tx3 = CMutableTransaction();                                    
    tx3.vin.resize(1);                                                                   │      tx3.vin.resize(1);                                                                  
    tx3.vin[0].prevout = COutPoint(tx2.GetHash(), 0);                                    │      tx3.vin[0].prevout = COutPoint(tx2.GetHash(), 0);                                   
    tx3.vin[0].scriptSig = CScript() << OP_2;                                            │      tx3.vin[0].scriptSig = CScript() << OP_2;                                           
    tx3.vout.resize(1);                                                                  │      tx3.vout.resize(1);                                                                 
    tx3.vout[0].scriptPubKey = CScript() << OP_3 << OP_EQUAL;                            │      tx3.vout[0].scriptPubKey = CScript() << OP_3 << OP_EQUAL;                           
    tx3.vout[0].nValue = 10 * COIN;                                                      │      tx3.vout[0].nValue = 10 * COIN;                                                     
    pool.addUnchecked(entry.Fee(20000LL).FromTx(tx3));                                   │      pool.addUnchecked(tx3.GetHash(), entry.Fee(COIN / 50).FromTx(tx3, &pool));          
                                                                                         │                                                                                          
    pool.TrimToSize(pool.DynamicMemoryUsage() * 3 / 4); // tx3 should pay for tx2 (CPFP) │      pool.TrimToSize(pool.DynamicMemoryUsage() * 3 / 4); // tx3 should pay for tx2 (CPFP)
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx1.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx1.GetHash()));                                           
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx2.GetHash())));                              │      BOOST_CHECK(pool.exists(tx2.GetHash()));                                            
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx3.GetHash())));                              │      BOOST_CHECK(pool.exists(tx3.GetHash()));                                            
                                                                                         │                                                                                          
    pool.TrimToSize(GetVirtualTransactionSize(CTransaction(tx1))); // mempool is limited │      pool.TrimToSize(GetVirtualTransactionSize(tx1)); // mempool is limited to tx1's size
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx1.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx1.GetHash()));                                           
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx2.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx2.GetHash()));                                           
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx3.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx3.GetHash()));                                           
                                                                                         │                                                                                          
    CFeeRate maxFeeRateRemoved(25000, GetVirtualTransactionSize(CTransaction(tx3)) + Get │      CFeeRate maxFeeRateRemoved(COIN / 1000 * 25, GetVirtualTransactionSize(tx3) + GetVir
    BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), maxFeeRateRemoved.GetFeePerK() + 1 │      BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), maxFeeRateRemoved.GetFeePerK() + D
                                                                                         │                                                                                          
    CMutableTransaction tx4 = CMutableTransaction();                                     │      CMutableTransaction tx4 = CMutableTransaction();                                    
    tx4.vin.resize(2);                                                                   │      tx4.vin.resize(2);                                                                  
    tx4.vin[0].prevout.SetNull();                                                        │      tx4.vin[0].prevout.SetNull();                                                       
    tx4.vin[0].scriptSig = CScript() << OP_4;                                            │      tx4.vin[0].scriptSig = CScript() << OP_4;                                           
    tx4.vin[1].prevout.SetNull();                                                        │      tx4.vin[1].prevout.SetNull();                                                       
    tx4.vin[1].scriptSig = CScript() << OP_4;                                            │      tx4.vin[1].scriptSig = CScript() << OP_4;                                           
    tx4.vout.resize(2);                                                                  │      tx4.vout.resize(2);                                                                 
    tx4.vout[0].scriptPubKey = CScript() << OP_4 << OP_EQUAL;                            │      tx4.vout[0].scriptPubKey = CScript() << OP_4 << OP_EQUAL;                           
    tx4.vout[0].nValue = 10 * COIN;                                                      │      tx4.vout[0].nValue = 10 * COIN;                                                     
    tx4.vout[1].scriptPubKey = CScript() << OP_4 << OP_EQUAL;                            │      tx4.vout[1].scriptPubKey = CScript() << OP_4 << OP_EQUAL;                           
    tx4.vout[1].nValue = 10 * COIN;                                                      │      tx4.vout[1].nValue = 10 * COIN;                                                     
                                                                                         │                                                                                          
    CMutableTransaction tx5 = CMutableTransaction();                                     │      CMutableTransaction tx5 = CMutableTransaction();                                    
    tx5.vin.resize(2);                                                                   │      tx5.vin.resize(2);                                                                  
    tx5.vin[0].prevout = COutPoint(tx4.GetHash(), 0);                                    │      tx5.vin[0].prevout = COutPoint(tx4.GetHash(), 0);                                   
    tx5.vin[0].scriptSig = CScript() << OP_4;                                            │      tx5.vin[0].scriptSig = CScript() << OP_4;                                           
    tx5.vin[1].prevout.SetNull();                                                        │      tx5.vin[1].prevout.SetNull();                                                       
    tx5.vin[1].scriptSig = CScript() << OP_5;                                            │      tx5.vin[1].scriptSig = CScript() << OP_5;                                           
    tx5.vout.resize(2);                                                                  │      tx5.vout.resize(2);                                                                 
    tx5.vout[0].scriptPubKey = CScript() << OP_5 << OP_EQUAL;                            │      tx5.vout[0].scriptPubKey = CScript() << OP_5 << OP_EQUAL;                           
    tx5.vout[0].nValue = 10 * COIN;                                                      │      tx5.vout[0].nValue = 10 * COIN;                                                     
    tx5.vout[1].scriptPubKey = CScript() << OP_5 << OP_EQUAL;                            │      tx5.vout[1].scriptPubKey = CScript() << OP_5 << OP_EQUAL;                           
    tx5.vout[1].nValue = 10 * COIN;                                                      │      tx5.vout[1].nValue = 10 * COIN;                                                     
                                                                                         │                                                                                          
    CMutableTransaction tx6 = CMutableTransaction();                                     │      CMutableTransaction tx6 = CMutableTransaction();                                    
    tx6.vin.resize(2);                                                                   │      tx6.vin.resize(2);                                                                  
    tx6.vin[0].prevout = COutPoint(tx4.GetHash(), 1);                                    │      tx6.vin[0].prevout = COutPoint(tx4.GetHash(), 1);                                   
    tx6.vin[0].scriptSig = CScript() << OP_4;                                            │      tx6.vin[0].scriptSig = CScript() << OP_4;                                           
    tx6.vin[1].prevout.SetNull();                                                        │      tx6.vin[1].prevout.SetNull();                                                       
    tx6.vin[1].scriptSig = CScript() << OP_6;                                            │      tx6.vin[1].scriptSig = CScript() << OP_6;                                           
    tx6.vout.resize(2);                                                                  │      tx6.vout.resize(2);                                                                 
    tx6.vout[0].scriptPubKey = CScript() << OP_6 << OP_EQUAL;                            │      tx6.vout[0].scriptPubKey = CScript() << OP_6 << OP_EQUAL;                           
    tx6.vout[0].nValue = 10 * COIN;                                                      │      tx6.vout[0].nValue = 10 * COIN;                                                     
    tx6.vout[1].scriptPubKey = CScript() << OP_6 << OP_EQUAL;                            │      tx6.vout[1].scriptPubKey = CScript() << OP_6 << OP_EQUAL;                           
    tx6.vout[1].nValue = 10 * COIN;                                                      │      tx6.vout[1].nValue = 10 * COIN;                                                     
                                                                                         │                                                                                          
    CMutableTransaction tx7 = CMutableTransaction();                                     │      CMutableTransaction tx7 = CMutableTransaction();                                    
    tx7.vin.resize(2);                                                                   │      tx7.vin.resize(2);                                                                  
    tx7.vin[0].prevout = COutPoint(tx5.GetHash(), 0);                                    │      tx7.vin[0].prevout = COutPoint(tx5.GetHash(), 0);                                   
    tx7.vin[0].scriptSig = CScript() << OP_5;                                            │      tx7.vin[0].scriptSig = CScript() << OP_5;                                           
    tx7.vin[1].prevout = COutPoint(tx6.GetHash(), 0);                                    │      tx7.vin[1].prevout = COutPoint(tx6.GetHash(), 0);                                   
    tx7.vin[1].scriptSig = CScript() << OP_6;                                            │      tx7.vin[1].scriptSig = CScript() << OP_6;                                           
    tx7.vout.resize(2);                                                                  │      tx7.vout.resize(2);                                                                 
    tx7.vout[0].scriptPubKey = CScript() << OP_7 << OP_EQUAL;                            │      tx7.vout[0].scriptPubKey = CScript() << OP_7 << OP_EQUAL;                           
    tx7.vout[0].nValue = 10 * COIN;                                                      │      tx7.vout[0].nValue = 10 * COIN;                                                     
    tx7.vout[1].scriptPubKey = CScript() << OP_7 << OP_EQUAL;                            │      tx7.vout[1].scriptPubKey = CScript() << OP_7 << OP_EQUAL;                           
    tx7.vout[1].nValue = 10 * COIN;                                                      │      tx7.vout[1].nValue = 10 * COIN;                                                     
                                                                                         │                                                                                          
    pool.addUnchecked(entry.Fee(7000LL).FromTx(tx4));                                    │      pool.addUnchecked(tx4.GetHash(), entry.Fee(COIN / 1000 * 7).FromTx(tx4, &pool));    
    pool.addUnchecked(entry.Fee(1000LL).FromTx(tx5));                                    │      pool.addUnchecked(tx5.GetHash(), entry.Fee(COIN / 1000).FromTx(tx5, &pool));        
    pool.addUnchecked(entry.Fee(1100LL).FromTx(tx6));                                    │      pool.addUnchecked(tx6.GetHash(), entry.Fee(COIN / 10000 * 11).FromTx(tx6, &pool));  
    pool.addUnchecked(entry.Fee(9000LL).FromTx(tx7));                                    │      pool.addUnchecked(tx7.GetHash(), entry.Fee(COIN / 1000 * 9).FromTx(tx7, &pool));    
                                                                                         │                                                                                          
    // we only require this to remove, at max, 2 txn, because it's not clear what we're  │      // we only require this remove, at max, 2 txn, because its not clear what we're real
    pool.TrimToSize(pool.DynamicMemoryUsage() - 1);                                      │      pool.TrimToSize(pool.DynamicMemoryUsage() - 1);                                     
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx4.GetHash())));                              │      BOOST_CHECK(pool.exists(tx4.GetHash()));                                            
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx6.GetHash())));                              │      BOOST_CHECK(pool.exists(tx6.GetHash()));                                            
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx7.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx7.GetHash()));                                           
                                                                                         │                                                                                          
    if (!pool.exists(GenTxid::Txid(tx5.GetHash())))                                      │      if (!pool.exists(tx5.GetHash()))                                                    
        pool.addUnchecked(entry.Fee(1000LL).FromTx(tx5));                                │          pool.addUnchecked(tx5.GetHash(), entry.Fee(COIN / 1000).FromTx(tx5, &pool));    
    pool.addUnchecked(entry.Fee(9000LL).FromTx(tx7));                                    │      pool.addUnchecked(tx7.GetHash(), entry.Fee(COIN / 1000 * 9).FromTx(tx7, &pool));    
                                                                                         │                                                                                          
    pool.TrimToSize(pool.DynamicMemoryUsage() / 2); // should maximize mempool size by o │      pool.TrimToSize(pool.DynamicMemoryUsage() / 2); // should maximize mempool size by o
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx4.GetHash())));                              │      BOOST_CHECK(pool.exists(tx4.GetHash()));                                            
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx5.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx5.GetHash()));                                           
    BOOST_CHECK(pool.exists(GenTxid::Txid(tx6.GetHash())));                              │      BOOST_CHECK(pool.exists(tx6.GetHash()));                                            
    BOOST_CHECK(!pool.exists(GenTxid::Txid(tx7.GetHash())));                             │      BOOST_CHECK(!pool.exists(tx7.GetHash()));                                           
                                                                                         │                                                                                          
    pool.addUnchecked(entry.Fee(1000LL).FromTx(tx5));                                    │      pool.addUnchecked(tx5.GetHash(), entry.Fee(COIN / 1000).FromTx(tx5, &pool));        
    pool.addUnchecked(entry.Fee(9000LL).FromTx(tx7));                                    │      pool.addUnchecked(tx7.GetHash(), entry.Fee(COIN / 1000 * 9).FromTx(tx7, &pool));    
                                                                                         │                                                                                          
    std::vector<CTransactionRef> vtx;                                                    │      std::vector<CTransactionRef> vtx;                                                   
    SetMockTime(42);                                                                     │      SetMockTime(42);                                                                    
    SetMockTime(42 + CTxMemPool::ROLLING_FEE_HALFLIFE);                                  │      SetMockTime(42 + CTxMemPool::ROLLING_FEE_HALFLIFE);                                 
    BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), maxFeeRateRemoved.GetFeePerK() + 1 │      BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), maxFeeRateRemoved.GetFeePerK() + D
    // ... we should keep the same min fee until we get a block                          │      // ... we should keep the same min fee until we get a block                         
    pool.removeForBlock(vtx, 1);                                                         │      pool.removeForBlock(vtx, 1);                                                        
    SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE);                                │      SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE);                               
    BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), llround((maxFeeRateRemoved.GetFeeP │      BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), (maxFeeRateRemoved.GetFeePerK() + 
    // ... then feerate should drop 1/2 each halflife                                    │      // ... then feerate should drop 1/2 each halflife                                   
                                                                                         │                                                                                          
    SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI │      SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI
    BOOST_CHECK_EQUAL(pool.GetMinFee(pool.DynamicMemoryUsage() * 5 / 2).GetFeePerK(), ll │      BOOST_CHECK_EQUAL(pool.GetMinFee(pool.DynamicMemoryUsage() * 5 / 2).GetFeePerK(), (m
    // ... with a 1/2 halflife when mempool is < 1/2 its target size                     │      // ... with a 1/2 halflife when mempool is < 1/2 its target size                    
                                                                                         │                                                                                          
    SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI │      SetMockTime(42 + 2*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI
    BOOST_CHECK_EQUAL(pool.GetMinFee(pool.DynamicMemoryUsage() * 9 / 2).GetFeePerK(), ll │      BOOST_CHECK_EQUAL(pool.GetMinFee(pool.DynamicMemoryUsage() * 9 / 2).GetFeePerK(), (m
    // ... with a 1/4 halflife when mempool is < 1/4 its target size                     │      // ... with a 1/4 halflife when mempool is < 1/4 its target size                    
                                                                                         │                                                                                          
    SetMockTime(42 + 7*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI │      SetMockTime(42 + 10*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFL
    BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), 1000);                             │      BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), DEFAULT_INCREMENTAL_RELAY_FEE);   
    // ... but feerate should never drop below 1000                                      │      // ... but feerate should never drop below DEFAULT_INCREMENTAL_RELAY_FEE            
                                                                                         │                                                                                          
    SetMockTime(42 + 8*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFLI │      SetMockTime(42 + 11*CTxMemPool::ROLLING_FEE_HALFLIFE + CTxMemPool::ROLLING_FEE_HALFL
    BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), 0);                                │      BOOST_CHECK_EQUAL(pool.GetMinFee(1).GetFeePerK(), 0);                               
    // ... unless it has gone all the way to 0 (after getting past 1000/2)               │      // ... unless it has gone all the way to 0 (after getting past DEFAULT_INCREMENTAL_R
                                                                                         │                                                                                          
                                                                                         │      SetMockTime(0);                                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/script.cpp:13                                                        │ dogecoin/src/script/script.cpp:14                                                        
                                                                                         │                                                                                          
    switch (opcode)                                                                      │      switch (opcode)                                                                     
    {                                                                                    │      {                                                                                   
    // push value                                                                        │      // push value                                                                       
    case OP_0                      : return "0";                                         │      case OP_0                      : return "0";                                        
    case OP_PUSHDATA1              : return "OP_PUSHDATA1";                              │      case OP_PUSHDATA1              : return "OP_PUSHDATA1";                             
    case OP_PUSHDATA2              : return "OP_PUSHDATA2";                              │      case OP_PUSHDATA2              : return "OP_PUSHDATA2";                             
    case OP_PUSHDATA4              : return "OP_PUSHDATA4";                              │      case OP_PUSHDATA4              : return "OP_PUSHDATA4";                             
    case OP_1NEGATE                : return "-1";                                        │      case OP_1NEGATE                : return "-1";                                       
    case OP_RESERVED               : return "OP_RESERVED";                               │      case OP_RESERVED               : return "OP_RESERVED";                              
    case OP_1                      : return "1";                                         │      case OP_1                      : return "1";                                        
    case OP_2                      : return "2";                                         │      case OP_2                      : return "2";                                        
    case OP_3                      : return "3";                                         │      case OP_3                      : return "3";                                        
    case OP_4                      : return "4";                                         │      case OP_4                      : return "4";                                        
    case OP_5                      : return "5";                                         │      case OP_5                      : return "5";                                        
    case OP_6                      : return "6";                                         │      case OP_6                      : return "6";                                        
    case OP_7                      : return "7";                                         │      case OP_7                      : return "7";                                        
    case OP_8                      : return "8";                                         │      case OP_8                      : return "8";                                        
    case OP_9                      : return "9";                                         │      case OP_9                      : return "9";                                        
    case OP_10                     : return "10";                                        │      case OP_10                     : return "10";                                       
    case OP_11                     : return "11";                                        │      case OP_11                     : return "11";                                       
    case OP_12                     : return "12";                                        │      case OP_12                     : return "12";                                       
    case OP_13                     : return "13";                                        │      case OP_13                     : return "13";                                       
    case OP_14                     : return "14";                                        │      case OP_14                     : return "14";                                       
    case OP_15                     : return "15";                                        │      case OP_15                     : return "15";                                       
    case OP_16                     : return "16";                                        │      case OP_16                     : return "16";                                       
                                                                                         │                                                                                          
    // control                                                                           │      // control                                                                          
    case OP_NOP                    : return "OP_NOP";                                    │      case OP_NOP                    : return "OP_NOP";                                   
    case OP_VER                    : return "OP_VER";                                    │      case OP_VER                    : return "OP_VER";                                   
    case OP_IF                     : return "OP_IF";                                     │      case OP_IF                     : return "OP_IF";                                    
    case OP_NOTIF                  : return "OP_NOTIF";                                  │      case OP_NOTIF                  : return "OP_NOTIF";                                 
    case OP_VERIF                  : return "OP_VERIF";                                  │      case OP_VERIF                  : return "OP_VERIF";                                 
    case OP_VERNOTIF               : return "OP_VERNOTIF";                               │      case OP_VERNOTIF               : return "OP_VERNOTIF";                              
    case OP_ELSE                   : return "OP_ELSE";                                   │      case OP_ELSE                   : return "OP_ELSE";                                  
    case OP_ENDIF                  : return "OP_ENDIF";                                  │      case OP_ENDIF                  : return "OP_ENDIF";                                 
    case OP_VERIFY                 : return "OP_VERIFY";                                 │      case OP_VERIFY                 : return "OP_VERIFY";                                
    case OP_RETURN                 : return "OP_RETURN";                                 │      case OP_RETURN                 : return "OP_RETURN";                                
                                                                                         │                                                                                          
    // stack ops                                                                         │      // stack ops                                                                        
    case OP_TOALTSTACK             : return "OP_TOALTSTACK";                             │      case OP_TOALTSTACK             : return "OP_TOALTSTACK";                            
    case OP_FROMALTSTACK           : return "OP_FROMALTSTACK";                           │      case OP_FROMALTSTACK           : return "OP_FROMALTSTACK";                          
    case OP_2DROP                  : return "OP_2DROP";                                  │      case OP_2DROP                  : return "OP_2DROP";                                 
    case OP_2DUP                   : return "OP_2DUP";                                   │      case OP_2DUP                   : return "OP_2DUP";                                  
    case OP_3DUP                   : return "OP_3DUP";                                   │      case OP_3DUP                   : return "OP_3DUP";                                  
    case OP_2OVER                  : return "OP_2OVER";                                  │      case OP_2OVER                  : return "OP_2OVER";                                 
    case OP_2ROT                   : return "OP_2ROT";                                   │      case OP_2ROT                   : return "OP_2ROT";                                  
    case OP_2SWAP                  : return "OP_2SWAP";                                  │      case OP_2SWAP                  : return "OP_2SWAP";                                 
    case OP_IFDUP                  : return "OP_IFDUP";                                  │      case OP_IFDUP                  : return "OP_IFDUP";                                 
    case OP_DEPTH                  : return "OP_DEPTH";                                  │      case OP_DEPTH                  : return "OP_DEPTH";                                 
    case OP_DROP                   : return "OP_DROP";                                   │      case OP_DROP                   : return "OP_DROP";                                  
    case OP_DUP                    : return "OP_DUP";                                    │      case OP_DUP                    : return "OP_DUP";                                   
    case OP_NIP                    : return "OP_NIP";                                    │      case OP_NIP                    : return "OP_NIP";                                   
    case OP_OVER                   : return "OP_OVER";                                   │      case OP_OVER                   : return "OP_OVER";                                  
    case OP_PICK                   : return "OP_PICK";                                   │      case OP_PICK                   : return "OP_PICK";                                  
    case OP_ROLL                   : return "OP_ROLL";                                   │      case OP_ROLL                   : return "OP_ROLL";                                  
    case OP_ROT                    : return "OP_ROT";                                    │      case OP_ROT                    : return "OP_ROT";                                   
    case OP_SWAP                   : return "OP_SWAP";                                   │      case OP_SWAP                   : return "OP_SWAP";                                  
    case OP_TUCK                   : return "OP_TUCK";                                   │      case OP_TUCK                   : return "OP_TUCK";                                  
                                                                                         │                                                                                          
    // splice ops                                                                        │      // splice ops                                                                       
    case OP_CAT                    : return "OP_CAT";                                    │      case OP_CAT                    : return "OP_CAT";                                   
    case OP_SUBSTR                 : return "OP_SUBSTR";                                 │      case OP_SUBSTR                 : return "OP_SUBSTR";                                
    case OP_LEFT                   : return "OP_LEFT";                                   │      case OP_LEFT                   : return "OP_LEFT";                                  
    case OP_RIGHT                  : return "OP_RIGHT";                                  │      case OP_RIGHT                  : return "OP_RIGHT";                                 
    case OP_SIZE                   : return "OP_SIZE";                                   │      case OP_SIZE                   : return "OP_SIZE";                                  
                                                                                         │                                                                                          
    // bit logic                                                                         │      // bit logic                                                                        
    case OP_INVERT                 : return "OP_INVERT";                                 │      case OP_INVERT                 : return "OP_INVERT";                                
    case OP_AND                    : return "OP_AND";                                    │      case OP_AND                    : return "OP_AND";                                   
    case OP_OR                     : return "OP_OR";                                     │      case OP_OR                     : return "OP_OR";                                    
    case OP_XOR                    : return "OP_XOR";                                    │      case OP_XOR                    : return "OP_XOR";                                   
    case OP_EQUAL                  : return "OP_EQUAL";                                  │      case OP_EQUAL                  : return "OP_EQUAL";                                 
    case OP_EQUALVERIFY            : return "OP_EQUALVERIFY";                            │      case OP_EQUALVERIFY            : return "OP_EQUALVERIFY";                           
    case OP_RESERVED1              : return "OP_RESERVED1";                              │      case OP_RESERVED1              : return "OP_RESERVED1";                             
    case OP_RESERVED2              : return "OP_RESERVED2";                              │      case OP_RESERVED2              : return "OP_RESERVED2";                             
                                                                                         │                                                                                          
    // numeric                                                                           │      // numeric                                                                          
    case OP_1ADD                   : return "OP_1ADD";                                   │      case OP_1ADD                   : return "OP_1ADD";                                  
    case OP_1SUB                   : return "OP_1SUB";                                   │      case OP_1SUB                   : return "OP_1SUB";                                  
    case OP_2MUL                   : return "OP_2MUL";                                   │      case OP_2MUL                   : return "OP_2MUL";                                  
    case OP_2DIV                   : return "OP_2DIV";                                   │      case OP_2DIV                   : return "OP_2DIV";                                  
    case OP_NEGATE                 : return "OP_NEGATE";                                 │      case OP_NEGATE                 : return "OP_NEGATE";                                
    case OP_ABS                    : return "OP_ABS";                                    │      case OP_ABS                    : return "OP_ABS";                                   
    case OP_NOT                    : return "OP_NOT";                                    │      case OP_NOT                    : return "OP_NOT";                                   
    case OP_0NOTEQUAL              : return "OP_0NOTEQUAL";                              │      case OP_0NOTEQUAL              : return "OP_0NOTEQUAL";                             
    case OP_ADD                    : return "OP_ADD";                                    │      case OP_ADD                    : return "OP_ADD";                                   
    case OP_SUB                    : return "OP_SUB";                                    │      case OP_SUB                    : return "OP_SUB";                                   
    case OP_MUL                    : return "OP_MUL";                                    │      case OP_MUL                    : return "OP_MUL";                                   
    case OP_DIV                    : return "OP_DIV";                                    │      case OP_DIV                    : return "OP_DIV";                                   
    case OP_MOD                    : return "OP_MOD";                                    │      case OP_MOD                    : return "OP_MOD";                                   
    case OP_LSHIFT                 : return "OP_LSHIFT";                                 │      case OP_LSHIFT                 : return "OP_LSHIFT";                                
    case OP_RSHIFT                 : return "OP_RSHIFT";                                 │      case OP_RSHIFT                 : return "OP_RSHIFT";                                
    case OP_BOOLAND                : return "OP_BOOLAND";                                │      case OP_BOOLAND                : return "OP_BOOLAND";                               
    case OP_BOOLOR                 : return "OP_BOOLOR";                                 │      case OP_BOOLOR                 : return "OP_BOOLOR";                                
    case OP_NUMEQUAL               : return "OP_NUMEQUAL";                               │      case OP_NUMEQUAL               : return "OP_NUMEQUAL";                              
    case OP_NUMEQUALVERIFY         : return "OP_NUMEQUALVERIFY";                         │      case OP_NUMEQUALVERIFY         : return "OP_NUMEQUALVERIFY";                        
    case OP_NUMNOTEQUAL            : return "OP_NUMNOTEQUAL";                            │      case OP_NUMNOTEQUAL            : return "OP_NUMNOTEQUAL";                           
    case OP_LESSTHAN               : return "OP_LESSTHAN";                               │      case OP_LESSTHAN               : return "OP_LESSTHAN";                              
    case OP_GREATERTHAN            : return "OP_GREATERTHAN";                            │      case OP_GREATERTHAN            : return "OP_GREATERTHAN";                           
    case OP_LESSTHANOREQUAL        : return "OP_LESSTHANOREQUAL";                        │      case OP_LESSTHANOREQUAL        : return "OP_LESSTHANOREQUAL";                       
    case OP_GREATERTHANOREQUAL     : return "OP_GREATERTHANOREQUAL";                     │      case OP_GREATERTHANOREQUAL     : return "OP_GREATERTHANOREQUAL";                    
    case OP_MIN                    : return "OP_MIN";                                    │      case OP_MIN                    : return "OP_MIN";                                   
    case OP_MAX                    : return "OP_MAX";                                    │      case OP_MAX                    : return "OP_MAX";                                   
    case OP_WITHIN                 : return "OP_WITHIN";                                 │      case OP_WITHIN                 : return "OP_WITHIN";                                
                                                                                         │                                                                                          
    // crypto                                                                            │      // crypto                                                                           
    case OP_RIPEMD160              : return "OP_RIPEMD160";                              │      case OP_RIPEMD160              : return "OP_RIPEMD160";                             
    case OP_SHA1                   : return "OP_SHA1";                                   │      case OP_SHA1                   : return "OP_SHA1";                                  
    case OP_SHA256                 : return "OP_SHA256";                                 │      case OP_SHA256                 : return "OP_SHA256";                                
    case OP_HASH160                : return "OP_HASH160";                                │      case OP_HASH160                : return "OP_HASH160";                               
    case OP_HASH256                : return "OP_HASH256";                                │      case OP_HASH256                : return "OP_HASH256";                               
    case OP_CODESEPARATOR          : return "OP_CODESEPARATOR";                          │      case OP_CODESEPARATOR          : return "OP_CODESEPARATOR";                         
    case OP_CHECKSIG               : return "OP_CHECKSIG";                               │      case OP_CHECKSIG               : return "OP_CHECKSIG";                              
    case OP_CHECKSIGVERIFY         : return "OP_CHECKSIGVERIFY";                         │      case OP_CHECKSIGVERIFY         : return "OP_CHECKSIGVERIFY";                        
    case OP_CHECKMULTISIG          : return "OP_CHECKMULTISIG";                          │      case OP_CHECKMULTISIG          : return "OP_CHECKMULTISIG";                         
    case OP_CHECKMULTISIGVERIFY    : return "OP_CHECKMULTISIGVERIFY";                    │      case OP_CHECKMULTISIGVERIFY    : return "OP_CHECKMULTISIGVERIFY";                   
                                                                                         │                                                                                          
    // expansion                                                                         │      // expansion                                                                        
    case OP_NOP1                   : return "OP_NOP1";                                   │      case OP_NOP1                   : return "OP_NOP1";                                  
    case OP_CHECKLOCKTIMEVERIFY    : return "OP_CHECKLOCKTIMEVERIFY";                    │      case OP_CHECKLOCKTIMEVERIFY    : return "OP_CHECKLOCKTIMEVERIFY";                   
    case OP_CHECKSEQUENCEVERIFY    : return "OP_CHECKSEQUENCEVERIFY";                    │      case OP_CHECKSEQUENCEVERIFY    : return "OP_CHECKSEQUENCEVERIFY";                   
    case OP_NOP4                   : return "OP_NOP4";                                   │      case OP_NOP4                   : return "OP_NOP4";                                  
    case OP_NOP5                   : return "OP_NOP5";                                   │      case OP_NOP5                   : return "OP_NOP5";                                  
    case OP_NOP6                   : return "OP_NOP6";                                   │      case OP_NOP6                   : return "OP_NOP6";                                  
    case OP_NOP7                   : return "OP_NOP7";                                   │      case OP_NOP7                   : return "OP_NOP7";                                  
    case OP_NOP8                   : return "OP_NOP8";                                   │      case OP_NOP8                   : return "OP_NOP8";                                  
    case OP_NOP9                   : return "OP_NOP9";                                   │      case OP_NOP9                   : return "OP_NOP9";                                  
    case OP_NOP10                  : return "OP_NOP10";                                  │      case OP_NOP10                  : return "OP_NOP10";                                 
                                                                                         │                                                                                          
    // Opcode added by BIP 342 (Tapscript)                                               │                                                                                          
    case OP_CHECKSIGADD            : return "OP_CHECKSIGADD";                            │                                                                                          
                                                                                         │                                                                                          
    case OP_INVALIDOPCODE          : return "OP_INVALIDOPCODE";                          │      case OP_INVALIDOPCODE          : return "OP_INVALIDOPCODE";                         
                                                                                         │                                                                                          
                                                                                         │      // Note:                                                                            
                                                                                         │      //  The template matching params OP_SMALLINTEGER/etc are defined in opcodetype enum 
                                                                                         │      //  as kind of implementation hack, they are *NOT* real opcodes.  If found in real  
                                                                                         │      //  Script, just let the default: case deal with them.                              
                                                                                         │                                                                                          
    default:                                                                             │      default:                                                                            
        return "OP_UNKNOWN";                                                             │          return "OP_UNKNOWN";                                                            
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/sigopcount_tests.cpp:109                                              │ bitcoin/src/test/sigopcount_tests.cpp:109                                                
                                                                                         │                                                                                          
    // Transaction creates outputs                                                       │      // Transaction creates outputs                                                      
    CMutableTransaction creationTx;                                                      │      CMutableTransaction creationTx;                                                     
    // Transaction that spends outputs and whose                                         │      // Transaction that spends outputs and whose                                        
    // sig op cost is going to be tested                                                 │      // sig op cost is going to be tested                                                
    CMutableTransaction spendingTx;                                                      │      CMutableTransaction spendingTx;                                                     
                                                                                         │                                                                                          
    // Create utxo set                                                                   │      // Create utxo set                                                                  
    CCoinsView coinsDummy;                                                               │      CCoinsView coinsDummy;                                                              
    CCoinsViewCache coins(&coinsDummy);                                                  │      CCoinsViewCache coins(&coinsDummy);                                                 
    // Create key                                                                        │      // Create key                                                                       
    CKey key;                                                                            │      CKey key;                                                                           
    key.MakeNewKey(true);                                                                │      key.MakeNewKey(true);                                                               
    CPubKey pubkey = key.GetPubKey();                                                    │      CPubKey pubkey = key.GetPubKey();                                                   
    // Default flags                                                                     │      // Default flags                                                                    
    int flags = SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH;                              │      const uint32_t flags{SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH};                   
                                                                                         │                                                                                          
    // Multisig script (legacy counting)                                                 │      // Multisig script (legacy counting)                                                
    {                                                                                    │      {                                                                                   
        CScript scriptPubKey = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pu │          CScript scriptPubKey = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pu
        // Do not use a valid signature to avoid using wallet operations.                │          // Do not use a valid signature to avoid using wallet operations.               
        CScript scriptSig = CScript() << OP_0 << OP_0;                                   │          CScript scriptSig = CScript() << OP_0 << OP_0;                                  
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, CScriptWitness( │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, CScriptWitness(
        // Legacy counting only includes signature operations in scriptSigs and scriptPu │          // Legacy counting only includes signature operations in scriptSigs and scriptPu
        // of a transaction and does not take the actual executed sig operations into ac │          // of a transaction and does not take the actual executed sig operations into ac
        // spendingTx in itself does not contain a signature operation.                  │          // spendingTx in itself does not contain a signature operation.                 
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);   
        // creationTx contains two signature operations in its scriptPubKey, but legacy  │          // creationTx contains two signature operations in its scriptPubKey, but legacy 
        // is not accurate.                                                              │          // is not accurate.                                                             
        assert(GetTransactionSigOpCost(CTransaction(creationTx), coins, flags) == MAX_PU │          assert(GetTransactionSigOpCost(CTransaction(creationTx), coins, flags) == MAX_PU
        // Sanity check: script verification fails because of an invalid signature.      │          // Sanity check: script verification fails because of an invalid signature.     
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_CHECKMULTISIG │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Multisig nested in P2SH                                                           │      // Multisig nested in P2SH                                                          
    {                                                                                    │      {                                                                                   
        CScript redeemScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pu │          CScript redeemScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(pu
        CScript scriptPubKey = GetScriptForDestination(CScriptID(redeemScript));         │          CScript scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));       
        CScript scriptSig = CScript() << OP_0 << OP_0 << ToByteVector(redeemScript);     │          CScript scriptSig = CScript() << OP_0 << OP_0 << ToByteVector(redeemScript);    
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, CScriptWitness( │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, CScriptWitness(
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2 * WI │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2 * WI
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_CHECKMULTISIG │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // P2WPKH witness program                                                            │      // P2WPKH witness program                                                           
    {                                                                                    │      {                                                                                   
        CScript p2pk = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;                 │          CScript scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkey));       
        CScript scriptPubKey = GetScriptForWitness(p2pk);                                │                                                                                          
        CScript scriptSig = CScript();                                                   │          CScript scriptSig = CScript();                                                  
        CScriptWitness scriptWitness;                                                    │          CScriptWitness scriptWitness;                                                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 1);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 1);   
        // No signature operations if we don't verify the witness.                       │          // No signature operations if we don't verify the witness.                      
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags & ~SCRIPT_ │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags & ~SCRIPT_
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_EQUALVERIFY); │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
                                                                                         │                                                                                          
        // The sig op cost for witness version != 0 is zero.                             │          // The sig op cost for witness version != 0 is zero.                            
        assert(scriptPubKey[0] == 0x00);                                                 │          assert(scriptPubKey[0] == 0x00);                                                
        scriptPubKey[0] = 0x51;                                                          │          scriptPubKey[0] = 0x51;                                                         
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);   
        scriptPubKey[0] = 0x00;                                                          │          scriptPubKey[0] = 0x00;                                                         
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
                                                                                         │                                                                                          
        // The witness of a coinbase transaction is not taken into account.              │          // The witness of a coinbase transaction is not taken into account.             
        spendingTx.vin[0].prevout.SetNull();                                             │          spendingTx.vin[0].prevout.SetNull();                                            
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 0);   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // P2WPKH nested in P2SH                                                             │      // P2WPKH nested in P2SH                                                            
    {                                                                                    │      {                                                                                   
        CScript p2pk = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;                 │          CScript scriptSig = GetScriptForDestination(WitnessV0KeyHash(pubkey));          
        CScript scriptSig = GetScriptForWitness(p2pk);                                   │          CScript scriptPubKey = GetScriptForDestination(ScriptHash(scriptSig));          
        CScript scriptPubKey = GetScriptForDestination(CScriptID(scriptSig));            │                                                                                          
        scriptSig = CScript() << ToByteVector(scriptSig);                                │          scriptSig = CScript() << ToByteVector(scriptSig);                               
        CScriptWitness scriptWitness;                                                    │          CScriptWitness scriptWitness;                                                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 1);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 1);   
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_EQUALVERIFY); │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // P2WSH witness program                                                             │      // P2WSH witness program                                                            
    {                                                                                    │      {                                                                                   
        CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(p │          CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(p
        CScript scriptPubKey = GetScriptForWitness(witnessScript);                       │          CScript scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessScript
        CScript scriptSig = CScript();                                                   │          CScript scriptSig = CScript();                                                  
        CScriptWitness scriptWitness;                                                    │          CScriptWitness scriptWitness;                                                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(witnessScript.begin(),  │          scriptWitness.stack.push_back(std::vector<unsigned char>(witnessScript.begin(), 
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2);   
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags & ~SCRIPT_ │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags & ~SCRIPT_
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_CHECKMULTISIG │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // P2WSH nested in P2SH                                                              │      // P2WSH nested in P2SH                                                             
    {                                                                                    │      {                                                                                   
        CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(p │          CScript witnessScript = CScript() << 1 << ToByteVector(pubkey) << ToByteVector(p
        CScript redeemScript = GetScriptForWitness(witnessScript);                       │          CScript redeemScript = GetScriptForDestination(WitnessV0ScriptHash(witnessScript
        CScript scriptPubKey = GetScriptForDestination(CScriptID(redeemScript));         │          CScript scriptPubKey = GetScriptForDestination(ScriptHash(redeemScript));       
        CScript scriptSig = CScript() << ToByteVector(redeemScript);                     │          CScript scriptSig = CScript() << ToByteVector(redeemScript);                    
        CScriptWitness scriptWitness;                                                    │          CScriptWitness scriptWitness;                                                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(0));                    │          scriptWitness.stack.push_back(std::vector<unsigned char>(0));                   
        scriptWitness.stack.push_back(std::vector<unsigned char>(witnessScript.begin(),  │          scriptWitness.stack.push_back(std::vector<unsigned char>(witnessScript.begin(), 
                                                                                         │                                                                                          
        BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness); │          BuildTxs(spendingTx, coins, creationTx, scriptPubKey, scriptSig, scriptWitness);
        assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2);    │          assert(GetTransactionSigOpCost(CTransaction(spendingTx), coins, flags) == 2);   
        assert(VerifyWithFlag(creationTx, spendingTx, flags) == SCRIPT_ERR_CHECKMULTISIG │          assert(VerifyWithFlag(CTransaction(creationTx), spendingTx, flags) == SCRIPT_ERR
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:113                                                   │ bitcoin/src/test/bloom_tests.cpp:100                                                     
                                                                                         │                                                                                          
    // Random real transaction (b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854f │      // Random real transaction (b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854f
    CDataStream stream(ParseHex("01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719 │      CDataStream stream(ParseHex("01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719
    CTransaction tx(deserialize, stream);                                                │      CTransaction tx(deserialize, stream);                                               
                                                                                         │                                                                                          
    // and one which spends it (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff83 │      // and one which spends it (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff83
    unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x │      unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x
    std::vector<unsigned char> vch(ch, ch + sizeof(ch) -1);                              │      std::vector<unsigned char> vch(ch, ch + sizeof(ch) -1);                             
    CDataStream spendStream(vch, SER_DISK, CLIENT_VERSION);                              │      CDataStream spendStream(vch, SER_DISK, CLIENT_VERSION);                             
    CTransaction spendingTx(deserialize, spendStream);                                   │      CTransaction spendingTx(deserialize, spendStream);                                  
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                              │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    filter.insert(uint256S("0xb4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd │      filter.insert(uint256S("0xb4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    // byte-reversed tx hash                                                             │      // byte-reversed tx hash                                                            
    filter.insert(ParseHex("6bff7fcd4f8565ef406dd5d63d4ff94f318fe82027fd4dc451b04474019f │      filter.insert(ParseHex("6bff7fcd4f8565ef406dd5d63d4ff94f318fe82027fd4dc451b04474019f
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(ParseHex("30450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f │      filter.insert(ParseHex("30450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(ParseHex("046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95 │      filter.insert(ParseHex("046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(ParseHex("04943fdd508053c75000106d3bc6e2754dbcff19"));                 │      filter.insert(ParseHex("04943fdd508053c75000106d3bc6e2754dbcff19"));                
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(spendingTx), "Simple Bloom filter did │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(spendingTx), "Simple Bloom filter did
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(ParseHex("a266436d2965547608b9e15d9032a7b9d64fa431"));                 │      filter.insert(ParseHex("a266436d2965547608b9e15d9032a7b9d64fa431"));                
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(COutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bd │      filter.insert(COutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bd
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    COutPoint prevOutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bda │      COutPoint prevOutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bda
    {                                                                                    │      {                                                                                   
        std::vector<unsigned char> data(32 + sizeof(unsigned int));                      │          std::vector<unsigned char> data(32 + sizeof(unsigned int));                     
        memcpy(&data[0], prevOutPoint.hash.begin(), 32);                                 │          memcpy(data.data(), prevOutPoint.hash.begin(), 32);                             
        memcpy(&data[32], &prevOutPoint.n, sizeof(unsigned int));                        │          memcpy(data.data()+32, &prevOutPoint.n, sizeof(unsigned int));                  
        filter.insert(data);                                                             │          filter.insert(data);                                                            
    }                                                                                    │      }                                                                                   
    BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc │      BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx), "Simple Bloom filter didn't matc
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(uint256S("00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b11 │      filter.insert(uint256S("00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b11
    BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched ra │      BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched ra
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(ParseHex("0000006d2965547608b9e15d9032a7b9d64fa431"));                 │      filter.insert(ParseHex("0000006d2965547608b9e15d9032a7b9d64fa431"));                
    BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched ra │      BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched ra
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(COutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bd │      filter.insert(COutPoint(uint256S("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bd
    BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched CO │      BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched CO
                                                                                         │                                                                                          
    filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                            │      filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                           
    filter.insert(COutPoint(uint256S("0x000000d70786e899529d71dbeba91ba216982fb6ba58f3bd │      filter.insert(COutPoint(uint256S("0x000000d70786e899529d71dbeba91ba216982fb6ba58f3bd
    BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched CO │      BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx), "Simple Bloom filter matched CO
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/blockencodings.cpp:49                                                       │ dogecoin/src/blockencodings.cpp:50                                                       
                                                                                         │                                                                                          
    if (cmpctblock.header.IsNull() || (cmpctblock.shorttxids.empty() && cmpctblock.prefi │      if (cmpctblock.header.IsNull() || (cmpctblock.shorttxids.empty() && cmpctblock.prefi
        return READ_STATUS_INVALID;                                                      │          return READ_STATUS_INVALID;                                                     
    if (cmpctblock.shorttxids.size() + cmpctblock.prefilledtxn.size() > MAX_BLOCK_WEIGHT │      if (cmpctblock.shorttxids.size() + cmpctblock.prefilledtxn.size() > MAX_BLOCK_BASE_S
        return READ_STATUS_INVALID;                                                      │          return READ_STATUS_INVALID;                                                     
                                                                                         │                                                                                          
    assert(header.IsNull() && txn_available.empty());                                    │      assert(header.IsNull() && txn_available.empty());                                   
    header = cmpctblock.header;                                                          │      header = cmpctblock.header;                                                         
    txn_available.resize(cmpctblock.BlockTxCount());                                     │      txn_available.resize(cmpctblock.BlockTxCount());                                    
                                                                                         │                                                                                          
    int32_t lastprefilledindex = -1;                                                     │      int32_t lastprefilledindex = -1;                                                    
    for (size_t i = 0; i < cmpctblock.prefilledtxn.size(); i++) {                        │      for (size_t i = 0; i < cmpctblock.prefilledtxn.size(); i++) {                       
        if (cmpctblock.prefilledtxn[i].tx->IsNull())                                     │          if (cmpctblock.prefilledtxn[i].tx->IsNull())                                    
            return READ_STATUS_INVALID;                                                  │              return READ_STATUS_INVALID;                                                 
                                                                                         │                                                                                          
        lastprefilledindex += cmpctblock.prefilledtxn[i].index + 1; //index is a uint16_ │          lastprefilledindex += cmpctblock.prefilledtxn[i].index + 1; //index is a uint16_
        if (lastprefilledindex > std::numeric_limits<uint16_t>::max())                   │          if (lastprefilledindex > std::numeric_limits<uint16_t>::max())                  
            return READ_STATUS_INVALID;                                                  │              return READ_STATUS_INVALID;                                                 
        if ((uint32_t)lastprefilledindex > cmpctblock.shorttxids.size() + i) {           │          if ((uint32_t)lastprefilledindex > cmpctblock.shorttxids.size() + i) {          
            // If we are inserting a tx at an index greater than our full list of shortt │              // If we are inserting a tx at an index greater than our full list of shortt
            // plus the number of prefilled txn we've inserted, then we have txn for whi │              // plus the number of prefilled txn we've inserted, then we have txn for whi
            // have neither a prefilled txn or a shorttxid!                              │              // have neither a prefilled txn or a shorttxid!                             
            return READ_STATUS_INVALID;                                                  │              return READ_STATUS_INVALID;                                                 
        }                                                                                │          }                                                                               
        txn_available[lastprefilledindex] = cmpctblock.prefilledtxn[i].tx;               │          txn_available[lastprefilledindex] = cmpctblock.prefilledtxn[i].tx;              
    }                                                                                    │      }                                                                                   
    prefilled_count = cmpctblock.prefilledtxn.size();                                    │      prefilled_count = cmpctblock.prefilledtxn.size();                                   
                                                                                         │                                                                                          
    // Calculate map of txids -> positions and check mempool to see what we have (or don │      // Calculate map of txids -> positions and check mempool to see what we have (or don
    // Because well-formed cmpctblock messages will have a (relatively) uniform distribu │      // Because well-formed cmpctblock messages will have a (relatively) uniform distribu
    // of short IDs, any highly-uneven distribution of elements can be safely treated as │      // of short IDs, any highly-uneven distribution of elements can be safely treated as
    // READ_STATUS_FAILED.                                                               │      // READ_STATUS_FAILED.                                                              
    std::unordered_map<uint64_t, uint16_t> shorttxids(cmpctblock.shorttxids.size());     │      std::unordered_map<uint64_t, uint16_t> shorttxids(cmpctblock.shorttxids.size());    
    uint16_t index_offset = 0;                                                           │      uint16_t index_offset = 0;                                                          
    for (size_t i = 0; i < cmpctblock.shorttxids.size(); i++) {                          │      for (size_t i = 0; i < cmpctblock.shorttxids.size(); i++) {                         
        while (txn_available[i + index_offset])                                          │          while (txn_available[i + index_offset])                                         
            index_offset++;                                                              │              index_offset++;                                                             
        shorttxids[cmpctblock.shorttxids[i]] = i + index_offset;                         │          shorttxids[cmpctblock.shorttxids[i]] = i + index_offset;                        
        // To determine the chance that the number of entries in a bucket exceeds N,     │          // To determine the chance that the number of entries in a bucket exceeds N,    
        // we use the fact that the number of elements in a single bucket is             │          // we use the fact that the number of elements in a single bucket is            
        // binomially distributed (with n = the number of shorttxids S, and p =          │          // binomially distributed (with n = the number of shorttxids S, and p =         
        // 1 / the number of buckets), that in the worst case the number of buckets is   │          // 1 / the number of buckets), that in the worst case the number of buckets is  
        // equal to S (due to std::unordered_map having a default load factor of 1.0),   │          // equal to S (due to std::unordered_map having a default load factor of 1.0),  
        // and that the chance for any bucket to exceed N elements is at most            │          // and that the chance for any bucket to exceed N elements is at most           
        // buckets * (the chance that any given bucket is above N elements).             │          // buckets * (the chance that any given bucket is above N elements).            
        // Thus: P(max_elements_per_bucket > N) <= S * (1 - cdf(binomial(n=S,p=1/S), N)) │          // Thus: P(max_elements_per_bucket > N) <= S * (1 - cdf(binomial(n=S,p=1/S), N))
        // If we assume blocks of up to 16000, allowing 12 elements per bucket should    │          // If we assume blocks of up to 16000, allowing 12 elements per bucket should   
        // only fail once per ~1 million block transfers (per peer and connection).      │          // only fail once per ~1 million block transfers (per peer and connection).     
        if (shorttxids.bucket_size(shorttxids.bucket(cmpctblock.shorttxids[i])) > 12)    │          if (shorttxids.bucket_size(shorttxids.bucket(cmpctblock.shorttxids[i])) > 12)   
            return READ_STATUS_FAILED;                                                   │              return READ_STATUS_FAILED;                                                  
    }                                                                                    │      }                                                                                   
    // TODO: in the shortid-collision case, we should instead request both transactions  │      // TODO: in the shortid-collision case, we should instead request both transactions 
    // which collided. Falling back to full-block-request here is overkill.              │      // which collided. Falling back to full-block-request here is overkill.             
    if (shorttxids.size() != cmpctblock.shorttxids.size())                               │      if (shorttxids.size() != cmpctblock.shorttxids.size())                              
        return READ_STATUS_FAILED; // Short ID collision                                 │          return READ_STATUS_FAILED; // Short ID collision                                
                                                                                         │                                                                                          
    std::vector<bool> have_txn(txn_available.size());                                    │      std::vector<bool> have_txn(txn_available.size());                                   
    {                                                                                    │      {                                                                                   
    LOCK(pool->cs);                                                                      │      LOCK(pool->cs);                                                                     
    for (size_t i = 0; i < pool->vTxHashes.size(); i++) {                                │      const std::vector<std::pair<uint256, CTxMemPool::txiter> >& vTxHashes = pool->vTxHas
        uint64_t shortid = cmpctblock.GetShortID(pool->vTxHashes[i].first);              │      for (size_t i = 0; i < vTxHashes.size(); i++) {                                     
                                                                                         │          uint64_t shortid = cmpctblock.GetShortID(vTxHashes[i].first);                   
        std::unordered_map<uint64_t, uint16_t>::iterator idit = shorttxids.find(shortid) │          std::unordered_map<uint64_t, uint16_t>::iterator idit = shorttxids.find(shortid)
        if (idit != shorttxids.end()) {                                                  │          if (idit != shorttxids.end()) {                                                 
            if (!have_txn[idit->second]) {                                               │              if (!have_txn[idit->second]) {                                              
                txn_available[idit->second] = pool->vTxHashes[i].second->GetSharedTx();  │                  txn_available[idit->second] = vTxHashes[i].second->GetSharedTx();       
                have_txn[idit->second]  = true;                                          │                  have_txn[idit->second]  = true;                                         
                mempool_count++;                                                         │                  mempool_count++;                                                        
            } else {                                                                     │              } else {                                                                    
                // If we find two mempool txn that match the short id, just request it.  │                  // If we find two mempool txn that match the short id, just request it. 
                // This should be rare enough that the extra bandwidth doesn't matter,   │                  // This should be rare enough that the extra bandwidth doesn't matter,  
                // but eating a round-trip due to FillBlock failure would be annoying    │                  // but eating a round-trip due to FillBlock failure would be annoying   
                if (txn_available[idit->second]) {                                       │                  if (txn_available[idit->second]) {                                      
                    txn_available[idit->second].reset();                                 │                      txn_available[idit->second].reset();                                
                    mempool_count--;                                                     │                      mempool_count--;                                                    
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        // Though ideally we'd continue scanning for the two-txn-match-shortid case,     │          // Though ideally we'd continue scanning for the two-txn-match-shortid case,    
        // the performance win of an early exit here is too good to pass up and worth    │          // the performance win of an early exit here is too good to pass up and worth   
        // the extra risk.                                                               │          // the extra risk.                                                              
        if (mempool_count == shorttxids.size())                                          │          if (mempool_count == shorttxids.size())                                         
            break;                                                                       │              break;                                                                      
    }                                                                                    │      }                                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    for (size_t i = 0; i < extra_txn.size(); i++) {                                      │      for (size_t i = 0; i < extra_txn.size(); i++) {                                     
        uint64_t shortid = cmpctblock.GetShortID(extra_txn[i].first);                    │          uint64_t shortid = cmpctblock.GetShortID(extra_txn[i].first);                   
        std::unordered_map<uint64_t, uint16_t>::iterator idit = shorttxids.find(shortid) │          std::unordered_map<uint64_t, uint16_t>::iterator idit = shorttxids.find(shortid)
        if (idit != shorttxids.end()) {                                                  │          if (idit != shorttxids.end()) {                                                 
            if (!have_txn[idit->second]) {                                               │              if (!have_txn[idit->second]) {                                              
                txn_available[idit->second] = extra_txn[i].second;                       │                  txn_available[idit->second] = extra_txn[i].second;                      
                have_txn[idit->second]  = true;                                          │                  have_txn[idit->second]  = true;                                         
                mempool_count++;                                                         │                  mempool_count++;                                                        
                extra_count++;                                                           │                  extra_count++;                                                          
            } else {                                                                     │              } else {                                                                    
                // If we find two mempool/extra txn that match the short id, just        │                  // If we find two mempool/extra txn that match the short id, just       
                // request it.                                                           │                  // request it.                                                          
                // This should be rare enough that the extra bandwidth doesn't matter,   │                  // This should be rare enough that the extra bandwidth doesn't matter,  
                // but eating a round-trip due to FillBlock failure would be annoying    │                  // but eating a round-trip due to FillBlock failure would be annoying   
                // Note that we don't want duplication between extra_txn and mempool to  │                  // Note that we dont want duplication between extra_txn and mempool to  
                // trigger this case, so we compare witness hashes first                 │                  // trigger this case, so we compare witness hashes first                
                if (txn_available[idit->second] &&                                       │                  if (txn_available[idit->second] &&                                      
                        txn_available[idit->second]->GetWitnessHash() != extra_txn[i].se │                          txn_available[idit->second]->GetWitnessHash() != extra_txn[i].se
                    txn_available[idit->second].reset();                                 │                      txn_available[idit->second].reset();                                
                    mempool_count--;                                                     │                      mempool_count--;                                                    
                    extra_count--;                                                       │                      extra_count--;                                                      
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        // Though ideally we'd continue scanning for the two-txn-match-shortid case,     │          // Though ideally we'd continue scanning for the two-txn-match-shortid case,    
        // the performance win of an early exit here is too good to pass up and worth    │          // the performance win of an early exit here is too good to pass up and worth   
        // the extra risk.                                                               │          // the extra risk.                                                              
        if (mempool_count == shorttxids.size())                                          │          if (mempool_count == shorttxids.size())                                         
            break;                                                                       │              break;                                                                      
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    LogPrint(BCLog::CMPCTBLOCK, "Initialized PartiallyDownloadedBlock for block %s using │      LogPrint("cmpctblock", "Initialized PartiallyDownloadedBlock for block %s using a cm
                                                                                         │                                                                                          
    return READ_STATUS_OK;                                                               │      return READ_STATUS_OK;                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/net_processing.cpp:3595                                                     │ dogecoin/src/net_processing.cpp:2027                                                     
                                                                                         │                                                                                          
        LOCK2(cs_main, g_cs_orphans);                                                    │          LOCK(cs_main);                                                                  
        // If AcceptBlockHeader returned true, it set pindex                             │          // If AcceptBlockHeader returned true, it set pindex                            
        assert(pindex);                                                                  │          assert(pindex);                                                                 
        UpdateBlockAvailability(pfrom.GetId(), pindex->GetBlockHash());                  │          UpdateBlockAvailability(pfrom->GetId(), pindex->GetBlockHash());                
                                                                                         │                                                                                          
        CNodeState *nodestate = State(pfrom.GetId());                                    │                                                                                          
                                                                                         │                                                                                          
        // If this was a new header with more work than our tip, update the              │                                                                                          
        // peer's last block announcement time                                           │                                                                                          
        if (received_new_header && pindex->nChainWork > m_chainman.ActiveChain().Tip()-> │                                                                                          
            nodestate->m_last_block_announcement = GetTime();                            │                                                                                          
        }                                                                                │                                                                                          
                                                                                         │                                                                                          
        std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::iterato │          std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::iterato
        bool fAlreadyInFlight = blockInFlightIt != mapBlocksInFlight.end();              │          bool fAlreadyInFlight = blockInFlightIt != mapBlocksInFlight.end();             
                                                                                         │                                                                                          
        if (pindex->nStatus & BLOCK_HAVE_DATA) // Nothing to do here                     │          if (pindex->nStatus & BLOCK_HAVE_DATA) // Nothing to do here                    
            return;                                                                      │              return true;                                                                
                                                                                         │                                                                                          
        if (pindex->nChainWork <= m_chainman.ActiveChain().Tip()->nChainWork || // We kn │          if (pindex->nChainWork <= chainActive.Tip()->nChainWork || // We know something 
                pindex->nTx != 0) { // We had this block at some point, but pruned it    │                  pindex->nTx != 0) { // We had this block at some point, but pruned it   
            if (fAlreadyInFlight) {                                                      │              if (fAlreadyInFlight) {                                                     
                // We requested this block for some reason, but our mempool will probabl │                  // We requested this block for some reason, but our mempool will probabl
                // so we just grab the block via normal getdata                          │                  // so we just grab the block via normal getdata                         
                std::vector<CInv> vInv(1);                                               │                  std::vector<CInv> vInv(1);                                              
                vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHa │                  vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chainpara
                m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv)); │                  connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));   
            }                                                                            │              }                                                                           
            return;                                                                      │              return true;                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // If we're not close to tip yet, give up and let parallel block fetch work its  │          // If we're not close to tip yet, give up and let parallel block fetch work its 
        if (!fAlreadyInFlight && !CanDirectFetch()) {                                    │          if (!fAlreadyInFlight && !CanDirectFetch(chainparams.GetConsensus(pindex->pprev-
            return;                                                                      │              return true;                                                                
        }                                                                                │                                                                                          
                                                                                         │          CNodeState *nodestate = State(pfrom->GetId());                                  
                                                                                         │                                                                                          
        if (DeploymentActiveAt(*pindex, m_chainparams.GetConsensus(), Consensus::DEPLOYM │          if (IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus(pindex->pprev->nHei
            // Don't bother trying to process compact blocks from v1 peers               │              // Don't bother trying to process compact blocks from v1 peers              
            // after segwit activates.                                                   │              // after segwit activates.                                                  
            return;                                                                      │              return true;                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // We want to be a bit conservative just to be extra careful about DoS           │          // We want to be a bit conservative just to be extra careful about DoS          
        // possibilities in compact block processing...                                  │          // possibilities in compact block processing...                                 
        if (pindex->nHeight <= m_chainman.ActiveChain().Height() + 2) {                  │          if (pindex->nHeight <= chainActive.Height() + 2) {                              
            if ((!fAlreadyInFlight && nodestate->nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT │              if ((!fAlreadyInFlight && nodestate->nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT
                 (fAlreadyInFlight && blockInFlightIt->second.first == pfrom.GetId())) { │                   (fAlreadyInFlight && blockInFlightIt->second.first == pfrom->GetId())) 
                std::list<QueuedBlock>::iterator* queuedBlockIt = nullptr;               │                  std::list<QueuedBlock>::iterator* queuedBlockIt = NULL;                 
                if (!BlockRequested(pfrom.GetId(), *pindex, &queuedBlockIt)) {           │                  if (!MarkBlockAsInFlight(pfrom->GetId(), pindex->GetBlockHash(), chainpa
                    if (!(*queuedBlockIt)->partialBlock)                                 │                      if (!(*queuedBlockIt)->partialBlock)                                
                        (*queuedBlockIt)->partialBlock.reset(new PartiallyDownloadedBloc │                          (*queuedBlockIt)->partialBlock.reset(new PartiallyDownloadedBloc
                    else {                                                               │                      else {                                                              
                        // The block was already in flight using compact blocks from the │                          // The block was already in flight using compact blocks from the
                        LogPrint(BCLog::NET, "Peer sent us compact block we were already │                          LogPrint("net", "Peer sent us compact block we were already sync
                        return;                                                          │                          return true;                                                    
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                PartiallyDownloadedBlock& partialBlock = *(*queuedBlockIt)->partialBlock │                  PartiallyDownloadedBlock& partialBlock = *(*queuedBlockIt)->partialBlock
                ReadStatus status = partialBlock.InitData(cmpctblock, vExtraTxnForCompac │                  ReadStatus status = partialBlock.InitData(cmpctblock, vExtraTxnForCompac
                if (status == READ_STATUS_INVALID) {                                     │                  if (status == READ_STATUS_INVALID) {                                    
                    RemoveBlockRequest(pindex->GetBlockHash()); // Reset in-flight state │                      MarkBlockAsReceived(pindex->GetBlockHash()); // Reset in-flight stat
                    Misbehaving(pfrom.GetId(), 100, "invalid compact block");            │                      Misbehaving(pfrom->GetId(), 100);                                   
                    return;                                                              │                      LogPrintf("Peer %d sent us invalid compact block\n", pfrom->id);    
                                                                                         │                      return true;                                                        
                } else if (status == READ_STATUS_FAILED) {                               │                  } else if (status == READ_STATUS_FAILED) {                              
                    // Duplicate txindexes, the block is now in-flight, so just request  │                      // Duplicate txindexes, the block is now in-flight, so just request 
                    std::vector<CInv> vInv(1);                                           │                      std::vector<CInv> vInv(1);                                          
                    vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.G │                      vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chain
                    m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vIn │                      connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv))
                    return;                                                              │                      return true;                                                        
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                BlockTransactionsRequest req;                                            │                  BlockTransactionsRequest req;                                           
                for (size_t i = 0; i < cmpctblock.BlockTxCount(); i++) {                 │                  for (size_t i = 0; i < cmpctblock.BlockTxCount(); i++) {                
                    if (!partialBlock.IsTxAvailable(i))                                  │                      if (!partialBlock.IsTxAvailable(i))                                 
                        req.indexes.push_back(i);                                        │                          req.indexes.push_back(i);                                       
                }                                                                        │                  }                                                                       
                if (req.indexes.empty()) {                                               │                  if (req.indexes.empty()) {                                              
                    // Dirty hack to jump to BLOCKTXN code (TODO: move message handling  │                      // Dirty hack to jump to BLOCKTXN code (TODO: move message handling 
                    BlockTransactions txn;                                               │                      BlockTransactions txn;                                              
                    txn.blockhash = cmpctblock.header.GetHash();                         │                      txn.blockhash = cmpctblock.header.GetHash();                        
                    blockTxnMsg << txn;                                                  │                      blockTxnMsg << txn;                                                 
                    fProcessBLOCKTXN = true;                                             │                      fProcessBLOCKTXN = true;                                            
                } else {                                                                 │                  } else {                                                                
                    req.blockhash = pindex->GetBlockHash();                              │                      req.blockhash = pindex->GetBlockHash();                             
                    m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, │                      connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETBLOCKTXN, re
                }                                                                        │                  }                                                                       
            } else {                                                                     │              } else {                                                                    
                // This block is either already in flight from a different               │                  // This block is either already in flight from a different              
                // peer, or this peer has too many blocks outstanding to                 │                  // peer, or this peer has too many blocks outstanding to                
                // download from.                                                        │                  // download from.                                                       
                // Optimistically try to reconstruct anyway since we might be            │                  // Optimistically try to reconstruct anyway since we might be           
                // able to without any round trips.                                      │                  // able to without any round trips.                                     
                PartiallyDownloadedBlock tempBlock(&m_mempool);                          │                  PartiallyDownloadedBlock tempBlock(&mempool);                           
                ReadStatus status = tempBlock.InitData(cmpctblock, vExtraTxnForCompact); │                  ReadStatus status = tempBlock.InitData(cmpctblock, vExtraTxnForCompact);
                if (status != READ_STATUS_OK) {                                          │                  if (status != READ_STATUS_OK) {                                         
                    // TODO: don't ignore failures                                       │                      // TODO: don't ignore failures                                      
                    return;                                                              │                      return true;                                                        
                }                                                                        │                  }                                                                       
                std::vector<CTransactionRef> dummy;                                      │                  std::vector<CTransactionRef> dummy;                                     
                status = tempBlock.FillBlock(*pblock, dummy);                            │                  status = tempBlock.FillBlock(*pblock, dummy);                           
                if (status == READ_STATUS_OK) {                                          │                  if (status == READ_STATUS_OK) {                                         
                    fBlockReconstructed = true;                                          │                      fBlockReconstructed = true;                                         
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        } else {                                                                         │          } else {                                                                        
            if (fAlreadyInFlight) {                                                      │              if (fAlreadyInFlight) {                                                     
                // We requested this block, but its far into the future, so our          │                  // We requested this block, but its far into the future, so our         
                // mempool will probably be useless - request the block normally         │                  // mempool will probably be useless - request the block normally        
                std::vector<CInv> vInv(1);                                               │                  std::vector<CInv> vInv(1);                                              
                vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom), cmpctblock.header.GetHa │                  vInv[0] = CInv(MSG_BLOCK | GetFetchFlags(pfrom, pindex->pprev, chainpara
                m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv)); │                  connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, vInv));   
                return;                                                                  │                  return true;                                                            
            } else {                                                                     │              } else {                                                                    
                // If this was an announce-cmpctblock, we want the same treatment as a h │                  // If this was an announce-cmpctblock, we want the same treatment as a h
                                                                                         │                  // Dirty hack to process as if it were just a headers message (TODO: mov
                                                                                         │                  std::vector<CBlock> headers;                                            
                                                                                         │                  headers.push_back(cmpctblock.header);                                   
                                                                                         │                  vHeadersMsg << headers;                                                 
                fRevertToHeaderProcessing = true;                                        │                  fRevertToHeaderProcessing = true;                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:420                                                   │ bitcoin/src/test/bloom_tests.cpp:399                                                     
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                    │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                   
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We should match the generation outpoint                                           │      // We should match the generation outpoint                                          
    BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86 │      BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86
    // ... but not the 4th transaction's output (its not pay-2-pubkey)                   │      // ... but not the 4th transaction's output (its not pay-2-pubkey)                  
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/rpcconsole.cpp:207                                                      │ bitcoin/src/qt/rpcconsole.cpp:231                                                        
                                                                                         │                                                                                          
            case STATE_COMMAND_EXECUTED_INNER:                                           │              case STATE_COMMAND_EXECUTED_INNER:                                          
            case STATE_COMMAND_EXECUTED:                                                 │              case STATE_COMMAND_EXECUTED:                                                
            {                                                                            │              {                                                                           
                bool breakParsing = true;                                                │                  bool breakParsing = true;                                               
                switch(ch)                                                               │                  switch(ch)                                                              
                {                                                                        │                  {                                                                       
                    case '[': curarg.clear(); state = STATE_COMMAND_EXECUTED_INNER; brea │                      case '[': curarg.clear(); state = STATE_COMMAND_EXECUTED_INNER; brea
                    default:                                                             │                      default:                                                            
                        if (state == STATE_COMMAND_EXECUTED_INNER)                       │                          if (state == STATE_COMMAND_EXECUTED_INNER)                      
                        {                                                                │                          {                                                               
                            if (ch != ']')                                               │                              if (ch != ']')                                              
                            {                                                            │                              {                                                           
                                // append char to the current argument (which is also us │                                  // append char to the current argument (which is also us
                                curarg += ch;                                            │                                  curarg += ch;                                           
                                break;                                                   │                                  break;                                                  
                            }                                                            │                              }                                                           
                            if (curarg.size() && fExecute)                               │                              if (curarg.size() && fExecute)                              
                            {                                                            │                              {                                                           
                                // if we have a value query, query arrays with index and │                                  // if we have a value query, query arrays with index and
                                UniValue subelement;                                     │                                  UniValue subelement;                                    
                                if (lastResult.isArray())                                │                                  if (lastResult.isArray())                               
                                {                                                        │                                  {                                                       
                                    for(char argch: curarg)                              │                                      const auto parsed{ToIntegral<size_t>(curarg)};      
                                        if (!std::isdigit(argch))                        │                                      if (!parsed) {                                      
                                            throw std::runtime_error("Invalid result que │                                          throw std::runtime_error("Invalid result query")
                                    subelement = lastResult[atoi(curarg.c_str())];       │                                      }                                                   
                                                                                         │                                      subelement = lastResult[parsed.value()];            
                                }                                                        │                                  }                                                       
                                else if (lastResult.isObject())                          │                                  else if (lastResult.isObject())                         
                                    subelement = find_value(lastResult, curarg);         │                                      subelement = find_value(lastResult, curarg);        
                                else                                                     │                                  else                                                    
                                    throw std::runtime_error("Invalid result query"); // │                                      throw std::runtime_error("Invalid result query"); //
                                lastResult = subelement;                                 │                                  lastResult = subelement;                                
                            }                                                            │                              }                                                           
                                                                                         │                                                                                          
                            state = STATE_COMMAND_EXECUTED;                              │                              state = STATE_COMMAND_EXECUTED;                             
                            break;                                                       │                              break;                                                      
                        }                                                                │                          }                                                               
                        // don't break parsing when the char is required for the next ar │                          // don't break parsing when the char is required for the next ar
                        breakParsing = false;                                            │                          breakParsing = false;                                           
                                                                                         │                                                                                          
                        // pop the stack and return the result to the current command ar │                          // pop the stack and return the result to the current command ar
                        close_out_params();                                              │                          close_out_params();                                             
                                                                                         │                                                                                          
                        // don't stringify the json in case of a string to avoid doubleq │                          // don't stringify the json in case of a string to avoid doubleq
                        if (lastResult.isStr())                                          │                          if (lastResult.isStr())                                         
                            curarg = lastResult.get_str();                               │                              curarg = lastResult.get_str();                              
                        else                                                             │                          else                                                            
                            curarg = lastResult.write(2);                                │                              curarg = lastResult.write(2);                               
                                                                                         │                                                                                          
                        // if we have a non empty result, use it as stack argument other │                          // if we have a non empty result, use it as stack argument other
                        if (curarg.size())                                               │                          if (curarg.size())                                              
                        {                                                                │                          {                                                               
                            if (stack.size())                                            │                              if (stack.size())                                           
                                add_to_current_stack(curarg);                            │                                  add_to_current_stack(curarg);                           
                            else                                                         │                              else                                                        
                                strResult = curarg;                                      │                                  strResult = curarg;                                     
                        }                                                                │                          }                                                               
                        curarg.clear();                                                  │                          curarg.clear();                                                 
                        // assume eating space state                                     │                          // assume eating space state                                    
                        state = STATE_EATING_SPACES;                                     │                          state = STATE_EATING_SPACES;                                    
                }                                                                        │                  }                                                                       
                if (breakParsing)                                                        │                  if (breakParsing)                                                       
                    break;                                                               │                      break;                                                              
                                                                                         │                  [[fallthrough]];                                                        
            }                                                                            │              }                                                                           
            // Falls through                                                             │                                                                                          
            case STATE_ARGUMENT: // In or after argument                                 │              case STATE_ARGUMENT: // In or after argument                                
            case STATE_EATING_SPACES_IN_ARG:                                             │              case STATE_EATING_SPACES_IN_ARG:                                            
            case STATE_EATING_SPACES_IN_BRACKETS:                                        │              case STATE_EATING_SPACES_IN_BRACKETS:                                       
            case STATE_EATING_SPACES: // Handle runs of whitespace                       │              case STATE_EATING_SPACES: // Handle runs of whitespace                      
                switch(ch)                                                               │                  switch(ch)                                                              
            {                                                                            │              {                                                                           
                case '"': state = STATE_DOUBLEQUOTED; break;                             │                  case '"': state = STATE_DOUBLEQUOTED; break;                            
                case '\'': state = STATE_SINGLEQUOTED; break;                            │                  case '\'': state = STATE_SINGLEQUOTED; break;                           
                case '\\': state = STATE_ESCAPE_OUTER; break;                            │                  case '\\': state = STATE_ESCAPE_OUTER; break;                           
                case '(': case ')': case '\n':                                           │                  case '(': case ')': case '\n':                                          
                    if (state == STATE_EATING_SPACES_IN_ARG)                             │                      if (state == STATE_EATING_SPACES_IN_ARG)                            
                        throw std::runtime_error("Invalid Syntax");                      │                          throw std::runtime_error("Invalid Syntax");                     
                    if (state == STATE_ARGUMENT)                                         │                      if (state == STATE_ARGUMENT)                                        
                    {                                                                    │                      {                                                                   
                        if (ch == '(' && stack.size() && stack.back().size() > 0)        │                          if (ch == '(' && stack.size() && stack.back().size() > 0)       
                        {                                                                │                          {                                                               
                            if (nDepthInsideSensitive) {                                 │                              if (nDepthInsideSensitive) {                                
                                ++nDepthInsideSensitive;                                 │                                  ++nDepthInsideSensitive;                                
                            }                                                            │                              }                                                           
                            stack.push_back(std::vector<std::string>());                 │                              stack.push_back(std::vector<std::string>());                
                        }                                                                │                          }                                                               
                                                                                         │                                                                                          
                        // don't allow commands after executed commands on baselevel     │                          // don't allow commands after executed commands on baselevel    
                        if (!stack.size())                                               │                          if (!stack.size())                                              
                            throw std::runtime_error("Invalid Syntax");                  │                              throw std::runtime_error("Invalid Syntax");                 
                                                                                         │                                                                                          
                        add_to_current_stack(curarg);                                    │                          add_to_current_stack(curarg);                                   
                        curarg.clear();                                                  │                          curarg.clear();                                                 
                        state = STATE_EATING_SPACES_IN_BRACKETS;                         │                          state = STATE_EATING_SPACES_IN_BRACKETS;                        
                    }                                                                    │                      }                                                                   
                    if ((ch == ')' || ch == '\n') && stack.size() > 0)                   │                      if ((ch == ')' || ch == '\n') && stack.size() > 0)                  
                    {                                                                    │                      {                                                                   
                        if (fExecute) {                                                  │                          if (fExecute) {                                                 
                            // Convert argument list to JSON objects in method-dependent │                              // Convert argument list to JSON objects in method-dependent
                            // and pass it along with the method name to the dispatcher. │                              // and pass it along with the method name to the dispatcher.
                            JSONRPCRequest req;                                          │                              UniValue params = RPCConvertValues(stack.back()[0], std::vec
                            req.params = RPCConvertValues(stack.back()[0], std::vector<s │                              std::string method = stack.back()[0];                       
                            req.strMethod = stack.back()[0];                             │                              std::string uri;                                            
                            lastResult = tableRPC.execute(req);                          │  #ifdef ENABLE_WALLET                                                                    
                                                                                         │                              if (wallet_model) {                                         
                                                                                         │                                  QByteArray encodedName = QUrl::toPercentEncoding(wallet_
                                                                                         │                                  uri = "/wallet/"+std::string(encodedName.constData(), en
                                                                                         │                              }                                                           
                                                                                         │  #endif                                                                                  
                                                                                         │                              assert(node);                                               
                                                                                         │                              lastResult = node->executeRpc(method, params, uri);         
                        }                                                                │                          }                                                               
                                                                                         │                                                                                          
                        state = STATE_COMMAND_EXECUTED;                                  │                          state = STATE_COMMAND_EXECUTED;                                 
                        curarg.clear();                                                  │                          curarg.clear();                                                 
                    }                                                                    │                      }                                                                   
                    break;                                                               │                      break;                                                              
                case ' ': case ',': case '\t':                                           │                  case ' ': case ',': case '\t':                                          
                    if(state == STATE_EATING_SPACES_IN_ARG && curarg.empty() && ch == ', │                      if(state == STATE_EATING_SPACES_IN_ARG && curarg.empty() && ch == ',
                        throw std::runtime_error("Invalid Syntax");                      │                          throw std::runtime_error("Invalid Syntax");                     
                                                                                         │                                                                                          
                    else if(state == STATE_ARGUMENT) // Space ends argument              │                      else if(state == STATE_ARGUMENT) // Space ends argument             
                    {                                                                    │                      {                                                                   
                        add_to_current_stack(curarg);                                    │                          add_to_current_stack(curarg);                                   
                        curarg.clear();                                                  │                          curarg.clear();                                                 
                    }                                                                    │                      }                                                                   
                    if ((state == STATE_EATING_SPACES_IN_BRACKETS || state == STATE_ARGU │                      if ((state == STATE_EATING_SPACES_IN_BRACKETS || state == STATE_ARGU
                    {                                                                    │                      {                                                                   
                        state = STATE_EATING_SPACES_IN_ARG;                              │                          state = STATE_EATING_SPACES_IN_ARG;                             
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                    state = STATE_EATING_SPACES;                                         │                      state = STATE_EATING_SPACES;                                        
                    break;                                                               │                      break;                                                              
                default: curarg += ch; state = STATE_ARGUMENT;                           │                  default: curarg += ch; state = STATE_ARGUMENT;                          
            }                                                                            │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:422                                                    │ bitcoin/src/test/bloom_tests.cpp:399                                                     
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                   
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We shouldn't match any outpoints (UPDATE_NONE)                                    │      // We should match the generation outpoint                                          
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8 │      BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86
                                                                                         │      // ... but not the 4th transaction's output (its not pay-2-pubkey)                  
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:443                                                   │ bitcoin/src/test/bloom_tests.cpp:399                                                     
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                   
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We shouldn't match any outpoints (UPDATE_NONE)                                    │      // We should match the generation outpoint                                          
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8 │      BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86
                                                                                         │      // ... but not the 4th transaction's output (its not pay-2-pubkey)                  
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:422                                                    │ dogecoin/src/test/bloom_tests.cpp:420                                                    
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                   
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We shouldn't match any outpoints (UPDATE_NONE)                                    │      // We should match the generation outpoint                                          
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8 │      BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86
                                                                                         │      // ... but not the 4th transaction's output (its not pay-2-pubkey)                  
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:443                                                   │ dogecoin/src/test/bloom_tests.cpp:420                                                    
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY);                   
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We shouldn't match any outpoints (UPDATE_NONE)                                    │      // We should match the generation outpoint                                          
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8 │      BOOST_CHECK(filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b86
                                                                                         │      // ... but not the 4th transaction's output (its not pay-2-pubkey)                  
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:443                                                   │ bitcoin/src/test/bloom_tests.cpp:422                                                     
                                                                                         │                                                                                          
    // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de │      // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6de
    // With 7 txes                                                                       │      // With 7 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc │      CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                            
    // Match the generation pubkey                                                       │      // Match the generation pubkey                                                      
    filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2 │      filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2
    // ...and the output address of the 4th transaction                                  │      // ...and the output address of the 4th transaction                                 
    filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                 │      filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21"));                
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    // We shouldn't match any outpoints (UPDATE_NONE)                                    │      // We shouldn't match any outpoints (UPDATE_NONE)                                   
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x147caa76786596590baa4e98f5d9f48b8
    BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035 │      BOOST_CHECK(!filter.contains(COutPoint(uint256S("0x02981fa052f0481dbc5868f4fc2166035
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:413                                           │ bitcoin/src/test/arith_uint256_tests.cpp:407                                             
                                                                                         │                                                                                          
    arith_uint256 num;                                                                   │      arith_uint256 num;                                                                  
    bool fNegative;                                                                      │      bool fNegative;                                                                     
    bool fOverflow;                                                                      │      bool fOverflow;                                                                     
    num.SetCompact(0, &fNegative, &fOverflow);                                           │      num.SetCompact(0, &fNegative, &fOverflow);                                          
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x00123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x00123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x01003456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x01003456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x02000056, &fNegative, &fOverflow);                                  │      num.SetCompact(0x02000056, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x03000000, &fNegative, &fOverflow);                                  │      num.SetCompact(0x03000000, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x04000000, &fNegative, &fOverflow);                                  │      num.SetCompact(0x04000000, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x00923456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x00923456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x01803456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x01803456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x02800056, &fNegative, &fOverflow);                                  │      num.SetCompact(0x02800056, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x03800000, &fNegative, &fOverflow);                                  │      num.SetCompact(0x03800000, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x04800000, &fNegative, &fOverflow);                                  │      num.SetCompact(0x04800000, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                             │      BOOST_CHECK_EQUAL(num.GetCompact(), 0U);                                            
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x01123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x01123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x01120000U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x01120000U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    // Make sure that we don't generate compacts with the 0x00800000 bit set             │      // Make sure that we don't generate compacts with the 0x00800000 bit set            
    num = 0x80;                                                                          │      num = 0x80;                                                                         
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x02008000U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x02008000U);                                   
                                                                                         │                                                                                          
    num.SetCompact(0x01fedcba, &fNegative, &fOverflow);                                  │      num.SetCompact(0x01fedcba, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(true), 0x01fe0000U);                                │      BOOST_CHECK_EQUAL(num.GetCompact(true), 0x01fe0000U);                               
    BOOST_CHECK_EQUAL(fNegative, true);                                                  │      BOOST_CHECK_EQUAL(fNegative, true);                                                 
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x02123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x02123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x02123400U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x02123400U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x03123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x03123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x03123456U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x03123456U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x04123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x04123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x04123456U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x04123456U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x04923456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x04923456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(true), 0x04923456U);                                │      BOOST_CHECK_EQUAL(num.GetCompact(true), 0x04923456U);                               
    BOOST_CHECK_EQUAL(fNegative, true);                                                  │      BOOST_CHECK_EQUAL(fNegative, true);                                                 
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x05009234, &fNegative, &fOverflow);                                  │      num.SetCompact(0x05009234, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "000000000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x05009234U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x05009234U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0x20123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0x20123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(num.GetHex(), "123456000000000000000000000000000000000000000000000 │      BOOST_CHECK_EQUAL(num.GetHex(), "123456000000000000000000000000000000000000000000000
    BOOST_CHECK_EQUAL(num.GetCompact(), 0x20123456U);                                    │      BOOST_CHECK_EQUAL(num.GetCompact(), 0x20123456U);                                   
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, false);                                                 │      BOOST_CHECK_EQUAL(fOverflow, false);                                                
                                                                                         │                                                                                          
    num.SetCompact(0xff123456, &fNegative, &fOverflow);                                  │      num.SetCompact(0xff123456, &fNegative, &fOverflow);                                 
    BOOST_CHECK_EQUAL(fNegative, false);                                                 │      BOOST_CHECK_EQUAL(fNegative, false);                                                
    BOOST_CHECK_EQUAL(fOverflow, true);                                                  │      BOOST_CHECK_EQUAL(fOverflow, true);                                                 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/coincontroldialog.cpp:581                                                │ dogecoin/src/qt/coincontroldialog.cpp:636                                                
                                                                                         │                                                                                          
    if (!model || !model->getOptionsModel() || !model->getAddressTableModel())           │      if (!model || !model->getOptionsModel() || !model->getAddressTableModel())          
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    bool treeMode = ui->radioTreeMode->isChecked();                                      │      bool treeMode = ui->radioTreeMode->isChecked();                                     
                                                                                         │                                                                                          
    ui->treeWidget->clear();                                                             │      ui->treeWidget->clear();                                                            
    ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be c │      ui->treeWidget->setEnabled(false); // performance, otherwise updateLabels would be c
    ui->treeWidget->setAlternatingRowColors(!treeMode);                                  │      ui->treeWidget->setAlternatingRowColors(!treeMode);                                 
    QFlags<Qt::ItemFlag> flgCheckbox = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::It │      QFlags<Qt::ItemFlag> flgCheckbox = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::It
    QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::It │      QFlags<Qt::ItemFlag> flgTristate = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::It
                                                                                         │                                                                                          
    BitcoinUnit nDisplayUnit = model->getOptionsModel()->getDisplayUnit();               │      int nDisplayUnit = model->getOptionsModel()->getDisplayUnit();                      
                                                                                         │                                                                                          
    for (const auto& coins : model->wallet().listCoins()) {                              │      std::map<QString, std::vector<COutput> > mapCoins;                                  
        CCoinControlWidgetItem* itemWalletAddress{nullptr};                              │      model->listCoins(mapCoins);                                                         
        QString sWalletAddress = QString::fromStdString(EncodeDestination(coins.first)); │                                                                                          
                                                                                         │      BOOST_FOREACH(const PAIRTYPE(QString, std::vector<COutput>)& coins, mapCoins) {     
                                                                                         │          CCoinControlWidgetItem *itemWalletAddress = new CCoinControlWidgetItem();       
                                                                                         │          itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked);               
                                                                                         │          QString sWalletAddress = coins.first;                                           
        QString sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAdd │          QString sWalletLabel = model->getAddressTableModel()->labelForAddress(sWalletAdd
        if (sWalletLabel.isEmpty())                                                      │          if (sWalletLabel.isEmpty())                                                     
            sWalletLabel = tr("(no label)");                                             │              sWalletLabel = tr("(no label)");                                            
                                                                                         │                                                                                          
        if (treeMode)                                                                    │          if (treeMode)                                                                   
        {                                                                                │          {                                                                               
            // wallet address                                                            │              // wallet address                                                           
            itemWalletAddress = new CCoinControlWidgetItem(ui->treeWidget);              │              ui->treeWidget->addTopLevelItem(itemWalletAddress);                         
                                                                                         │                                                                                          
            itemWalletAddress->setFlags(flgTristate);                                    │              itemWalletAddress->setFlags(flgTristate);                                   
            itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked);            │              itemWalletAddress->setCheckState(COLUMN_CHECKBOX, Qt::Unchecked);           
                                                                                         │                                                                                          
            // label                                                                     │              // label                                                                    
            itemWalletAddress->setText(COLUMN_LABEL, sWalletLabel);                      │              itemWalletAddress->setText(COLUMN_LABEL, sWalletLabel);                     
                                                                                         │                                                                                          
            // address                                                                   │              // address                                                                  
            itemWalletAddress->setText(COLUMN_ADDRESS, sWalletAddress);                  │              itemWalletAddress->setText(COLUMN_ADDRESS, sWalletAddress);                 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        CAmount nSum = 0;                                                                │          CAmount nSum = 0;                                                               
        int nChildren = 0;                                                               │          int nChildren = 0;                                                              
        for (const auto& outpair : coins.second) {                                       │          BOOST_FOREACH(const COutput& out, coins.second) {                               
            const COutPoint& output = std::get<0>(outpair);                              │              nSum += out.tx->tx->vout[out.i].nValue;                                     
            const interfaces::WalletTxOut& out = std::get<1>(outpair);                   │                                                                                          
            nSum += out.txout.nValue;                                                    │                                                                                          
            nChildren++;                                                                 │              nChildren++;                                                                
                                                                                         │                                                                                          
            CCoinControlWidgetItem *itemOutput;                                          │              CCoinControlWidgetItem *itemOutput;                                         
            if (treeMode)    itemOutput = new CCoinControlWidgetItem(itemWalletAddress); │              if (treeMode)    itemOutput = new CCoinControlWidgetItem(itemWalletAddress);
            else             itemOutput = new CCoinControlWidgetItem(ui->treeWidget);    │              else             itemOutput = new CCoinControlWidgetItem(ui->treeWidget);   
            itemOutput->setFlags(flgCheckbox);                                           │              itemOutput->setFlags(flgCheckbox);                                          
            itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked);                    │              itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked);                   
                                                                                         │                                                                                          
            // address                                                                   │              // address                                                                  
            CTxDestination outputAddress;                                                │              CTxDestination outputAddress;                                               
            QString sAddress = "";                                                       │              QString sAddress = "";                                                      
            if(ExtractDestination(out.txout.scriptPubKey, outputAddress))                │              if(ExtractDestination(out.tx->tx->vout[out.i].scriptPubKey, outputAddress)) 
            {                                                                            │              {                                                                           
                sAddress = QString::fromStdString(EncodeDestination(outputAddress));     │                  sAddress = QString::fromStdString(CBitcoinAddress(outputAddress).ToStrin
                                                                                         │                                                                                          
                // if listMode or change => show bitcoin address. In tree mode, address  │                  // if listMode or change => show bitcoin address. In tree mode, address 
                if (!treeMode || (!(sAddress == sWalletAddress)))                        │                  if (!treeMode || (!(sAddress == sWalletAddress)))                       
                    itemOutput->setText(COLUMN_ADDRESS, sAddress);                       │                      itemOutput->setText(COLUMN_ADDRESS, sAddress);                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            // label                                                                     │              // label                                                                    
            if (!(sAddress == sWalletAddress)) // change                                 │              if (!(sAddress == sWalletAddress)) // change                                
            {                                                                            │              {                                                                           
                // tooltip from where the change comes from                              │                  // tooltip from where the change comes from                             
                itemOutput->setToolTip(COLUMN_LABEL, tr("change from %1 (%2)").arg(sWall │                  itemOutput->setToolTip(COLUMN_LABEL, tr("change from %1 (%2)").arg(sWall
                itemOutput->setText(COLUMN_LABEL, tr("(change)"));                       │                  itemOutput->setText(COLUMN_LABEL, tr("(change)"));                      
            }                                                                            │              }                                                                           
            else if (!treeMode)                                                          │              else if (!treeMode)                                                         
            {                                                                            │              {                                                                           
                QString sLabel = model->getAddressTableModel()->labelForAddress(sAddress │                  QString sLabel = model->getAddressTableModel()->labelForAddress(sAddress
                if (sLabel.isEmpty())                                                    │                  if (sLabel.isEmpty())                                                   
                    sLabel = tr("(no label)");                                           │                      sLabel = tr("(no label)");                                          
                itemOutput->setText(COLUMN_LABEL, sLabel);                               │                  itemOutput->setText(COLUMN_LABEL, sLabel);                              
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            // amount                                                                    │              // amount                                                                   
            itemOutput->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, out.tx │              itemOutput->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, out.tx
            itemOutput->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong)out.txo │              itemOutput->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong)out.tx-
                                                                                         │                                                                                          
            // date                                                                      │              // date                                                                     
            itemOutput->setText(COLUMN_DATE, GUIUtil::dateTimeStr(out.time));            │              itemOutput->setText(COLUMN_DATE, GUIUtil::dateTimeStr(out.tx->GetTxTime()));
            itemOutput->setData(COLUMN_DATE, Qt::UserRole, QVariant((qlonglong)out.time) │              itemOutput->setData(COLUMN_DATE, Qt::UserRole, QVariant((qlonglong)out.tx->G
                                                                                         │                                                                                          
            // confirmations                                                             │              // confirmations                                                            
            itemOutput->setText(COLUMN_CONFIRMATIONS, QString::number(out.depth_in_main_ │              itemOutput->setText(COLUMN_CONFIRMATIONS, QString::number(out.nDepth));     
            itemOutput->setData(COLUMN_CONFIRMATIONS, Qt::UserRole, QVariant((qlonglong) │              itemOutput->setData(COLUMN_CONFIRMATIONS, Qt::UserRole, QVariant((qlonglong)
                                                                                         │                                                                                          
            // transaction hash                                                          │              // transaction hash                                                         
            itemOutput->setData(COLUMN_ADDRESS, TxHashRole, QString::fromStdString(outpu │              uint256 txhash = out.tx->GetHash();                                         
                                                                                         │              itemOutput->setText(COLUMN_TXHASH, QString::fromStdString(txhash.GetHex()));
                                                                                         │                                                                                          
            // vout index                                                                │              // vout index                                                               
            itemOutput->setData(COLUMN_ADDRESS, VOutRole, output.n);                     │              itemOutput->setText(COLUMN_VOUT_INDEX, QString::number(out.i));             
                                                                                         │                                                                                          
             // disable locked coins                                                     │               // disable locked coins                                                    
            if (model->wallet().isLockedCoin(output))                                    │              if (model->isLockedCoin(txhash, out.i))                                     
            {                                                                            │              {                                                                           
                m_coin_control.UnSelect(output); // just to be sure                      │                  COutPoint outpt(txhash, out.i);                                         
                                                                                         │                  coinControl->UnSelect(outpt); // just to be sure                        
                itemOutput->setDisabled(true);                                           │                  itemOutput->setDisabled(true);                                          
                itemOutput->setIcon(COLUMN_CHECKBOX, platformStyle->SingleColorIcon(":/i │                  itemOutput->setIcon(COLUMN_CHECKBOX, platformStyle->SingleColorIcon(":/i
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            // set checkbox                                                              │              // set checkbox                                                             
            if (m_coin_control.IsSelected(output))                                       │              if (coinControl->IsSelected(COutPoint(txhash, out.i)))                      
                itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked);                 │                  itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked);                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // amount                                                                        │          // amount                                                                       
        if (treeMode)                                                                    │          if (treeMode)                                                                   
        {                                                                                │          {                                                                               
            itemWalletAddress->setText(COLUMN_CHECKBOX, "(" + QString::number(nChildren) │              itemWalletAddress->setText(COLUMN_CHECKBOX, "(" + QString::number(nChildren)
            itemWalletAddress->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit, │              itemWalletAddress->setText(COLUMN_AMOUNT, BitcoinUnits::format(nDisplayUnit,
            itemWalletAddress->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong) │              itemWalletAddress->setData(COLUMN_AMOUNT, Qt::UserRole, QVariant((qlonglong)
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // expand all partially selected                                                     │      // expand all partially selected                                                    
    if (treeMode)                                                                        │      if (treeMode)                                                                       
    {                                                                                    │      {                                                                                   
        for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++)                    │          for (int i = 0; i < ui->treeWidget->topLevelItemCount(); i++)                   
            if (ui->treeWidget->topLevelItem(i)->checkState(COLUMN_CHECKBOX) == Qt::Part │              if (ui->treeWidget->topLevelItem(i)->checkState(COLUMN_CHECKBOX) == Qt::Part
                ui->treeWidget->topLevelItem(i)->setExpanded(true);                      │                  ui->treeWidget->topLevelItem(i)->setExpanded(true);                     
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // sort view                                                                         │      // sort view                                                                        
    sortView(sortColumn, sortOrder);                                                     │      sortView(sortColumn, sortOrder);                                                    
    ui->treeWidget->setEnabled(true);                                                    │      ui->treeWidget->setEnabled(true);                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:228                                                   │ bitcoin/src/test/bloom_tests.cpp:210                                                     
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                              │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should match the third transaction because it spends the output matched      │      // This should match the third transaction because it spends the output matched     
    // It also matches the fourth transaction, which spends to the pubkey again          │      // It also matches the fourth transaction, which spends to the pubkey again         
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883 │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e
    BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:265                                                    │ bitcoin/src/test/bloom_tests.cpp:210                                                     
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should not match the third transaction though it spends the output matched   │      // This should match the third transaction because it spends the output matched     
    // It will match the fourth transaction, which has another pay-to-pubkey output to t │      // It also matches the fourth transaction, which spends to the pubkey again         
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                 
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:283                                                   │ bitcoin/src/test/bloom_tests.cpp:210                                                     
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should not match the third transaction though it spends the output matched   │      // This should match the third transaction because it spends the output matched     
    // It will match the fourth transaction, which has another pay-to-pubkey output to t │      // It also matches the fourth transaction, which spends to the pubkey again         
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                 
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:265                                                    │ dogecoin/src/test/bloom_tests.cpp:228                                                    
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should not match the third transaction though it spends the output matched   │      // This should match the third transaction because it spends the output matched     
    // It will match the fourth transaction, which has another pay-to-pubkey output to t │      // It also matches the fourth transaction, which spends to the pubkey again         
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                 
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:283                                                   │ dogecoin/src/test/bloom_tests.cpp:228                                                    
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should not match the third transaction though it spends the output matched   │      // This should match the third transaction because it spends the output matched     
    // It will match the fourth transaction, which has another pay-to-pubkey output to t │      // It also matches the fourth transaction, which spends to the pubkey again         
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x6b0f8a73a56c04b519f1883
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2);                                 
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256S("0x3c1d7e82342158e4109df2e
                                                                                         │      BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:283                                                   │ bitcoin/src/test/bloom_tests.cpp:265                                                     
                                                                                         │                                                                                          
    // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a │      // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34a
    // With 4 txes                                                                       │      // With 4 txes                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29 │      CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                             │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE);                            
    // Match the first transaction                                                       │      // Match the first transaction                                                      
    filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec │      filter.insert(uint256S("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aec
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
    std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                  │      std::pair<unsigned int, uint256> pair = merkleBlock.vMatchedTxn[0];                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520 │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0xe980fe9f792d014e73b9520
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T │      // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T
    // This should not match the third transaction though it spends the output matched   │      // This should not match the third transaction though it spends the output matched  
    // It will match the fourth transaction, which has another pay-to-pubkey output to t │      // It will match the fourth transaction, which has another pay-to-pubkey output to t
    filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032 │      filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032
                                                                                         │                                                                                          
    merkleBlock = CMerkleBlock(block, filter);                                           │      merkleBlock = CMerkleBlock(block, filter);                                          
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                     │      BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]);                                    
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4 │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256S("0x28204cad1d7fc1d199e8ef4
    BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256S("0x3c1d7e82342158e4109df2e
    BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3);                                 
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/lib/univalue_read.cpp:260                                         │ bitcoin/src/univalue/lib/univalue_read.cpp:260                                           
                                                                                         │                                                                                          
    clear();                                                                             │      clear();                                                                            
                                                                                         │                                                                                          
    uint32_t expectMask = 0;                                                             │      uint32_t expectMask = 0;                                                            
    std::vector<UniValue*> stack;                                                        │      std::vector<UniValue*> stack;                                                       
                                                                                         │                                                                                          
    std::string tokenVal;                                                                │      std::string tokenVal;                                                               
    unsigned int consumed;                                                               │      unsigned int consumed;                                                              
    enum jtokentype tok = JTOK_NONE;                                                     │      enum jtokentype tok = JTOK_NONE;                                                    
    enum jtokentype last_tok = JTOK_NONE;                                                │      enum jtokentype last_tok = JTOK_NONE;                                               
    const char* end = raw + size;                                                        │      const char* end = raw + size;                                                       
    do {                                                                                 │      do {                                                                                
        last_tok = tok;                                                                  │          last_tok = tok;                                                                 
                                                                                         │                                                                                          
        tok = getJsonToken(tokenVal, consumed, raw, end);                                │          tok = getJsonToken(tokenVal, consumed, raw, end);                               
        if (tok == JTOK_NONE || tok == JTOK_ERR)                                         │          if (tok == JTOK_NONE || tok == JTOK_ERR)                                        
            return false;                                                                │              return false;                                                               
        raw += consumed;                                                                 │          raw += consumed;                                                                
                                                                                         │                                                                                          
        bool isValueOpen = jsonTokenIsValue(tok) ||                                      │          bool isValueOpen = jsonTokenIsValue(tok) ||                                     
            tok == JTOK_OBJ_OPEN || tok == JTOK_ARR_OPEN;                                │              tok == JTOK_OBJ_OPEN || tok == JTOK_ARR_OPEN;                               
                                                                                         │                                                                                          
        if (expect(VALUE)) {                                                             │          if (expect(VALUE)) {                                                            
            if (!isValueOpen)                                                            │              if (!isValueOpen)                                                           
                return false;                                                            │                  return false;                                                           
            clearExpect(VALUE);                                                          │              clearExpect(VALUE);                                                         
                                                                                         │                                                                                          
        } else if (expect(ARR_VALUE)) {                                                  │          } else if (expect(ARR_VALUE)) {                                                 
            bool isArrValue = isValueOpen || (tok == JTOK_ARR_CLOSE);                    │              bool isArrValue = isValueOpen || (tok == JTOK_ARR_CLOSE);                   
            if (!isArrValue)                                                             │              if (!isArrValue)                                                            
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            clearExpect(ARR_VALUE);                                                      │              clearExpect(ARR_VALUE);                                                     
                                                                                         │                                                                                          
        } else if (expect(OBJ_NAME)) {                                                   │          } else if (expect(OBJ_NAME)) {                                                  
            bool isObjName = (tok == JTOK_OBJ_CLOSE || tok == JTOK_STRING);              │              bool isObjName = (tok == JTOK_OBJ_CLOSE || tok == JTOK_STRING);             
            if (!isObjName)                                                              │              if (!isObjName)                                                             
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
        } else if (expect(COLON)) {                                                      │          } else if (expect(COLON)) {                                                     
            if (tok != JTOK_COLON)                                                       │              if (tok != JTOK_COLON)                                                      
                return false;                                                            │                  return false;                                                           
            clearExpect(COLON);                                                          │              clearExpect(COLON);                                                         
                                                                                         │                                                                                          
        } else if (!expect(COLON) && (tok == JTOK_COLON)) {                              │          } else if (!expect(COLON) && (tok == JTOK_COLON)) {                             
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (expect(NOT_VALUE)) {                                                         │          if (expect(NOT_VALUE)) {                                                        
            if (isValueOpen)                                                             │              if (isValueOpen)                                                            
                return false;                                                            │                  return false;                                                           
            clearExpect(NOT_VALUE);                                                      │              clearExpect(NOT_VALUE);                                                     
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        switch (tok) {                                                                   │          switch (tok) {                                                                  
                                                                                         │                                                                                          
        case JTOK_OBJ_OPEN:                                                              │          case JTOK_OBJ_OPEN:                                                             
        case JTOK_ARR_OPEN: {                                                            │          case JTOK_ARR_OPEN: {                                                           
            VType utyp = (tok == JTOK_OBJ_OPEN ? VOBJ : VARR);                           │              VType utyp = (tok == JTOK_OBJ_OPEN ? VOBJ : VARR);                          
            if (!stack.size()) {                                                         │              if (!stack.size()) {                                                        
                if (utyp == VOBJ)                                                        │                  if (utyp == VOBJ)                                                       
                    setObject();                                                         │                      setObject();                                                        
                else                                                                     │                  else                                                                    
                    setArray();                                                          │                      setArray();                                                         
                stack.push_back(this);                                                   │                  stack.push_back(this);                                                  
            } else {                                                                     │              } else {                                                                    
                UniValue tmpVal(utyp);                                                   │                  UniValue tmpVal(utyp);                                                  
                UniValue *top = stack.back();                                            │                  UniValue *top = stack.back();                                           
                top->values.push_back(tmpVal);                                           │                  top->values.push_back(tmpVal);                                          
                                                                                         │                                                                                          
                UniValue *newTop = &(top->values.back());                                │                  UniValue *newTop = &(top->values.back());                               
                stack.push_back(newTop);                                                 │                  stack.push_back(newTop);                                                
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            if (stack.size() > MAX_JSON_DEPTH)                                           │              if (stack.size() > MAX_JSON_DEPTH)                                          
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            if (utyp == VOBJ)                                                            │              if (utyp == VOBJ)                                                           
                setExpect(OBJ_NAME);                                                     │                  setExpect(OBJ_NAME);                                                    
            else                                                                         │              else                                                                        
                setExpect(ARR_VALUE);                                                    │                  setExpect(ARR_VALUE);                                                   
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_OBJ_CLOSE:                                                             │          case JTOK_OBJ_CLOSE:                                                            
        case JTOK_ARR_CLOSE: {                                                           │          case JTOK_ARR_CLOSE: {                                                          
            if (!stack.size() || (last_tok == JTOK_COMMA))                               │              if (!stack.size() || (last_tok == JTOK_COMMA))                              
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            VType utyp = (tok == JTOK_OBJ_CLOSE ? VOBJ : VARR);                          │              VType utyp = (tok == JTOK_OBJ_CLOSE ? VOBJ : VARR);                         
            UniValue *top = stack.back();                                                │              UniValue *top = stack.back();                                               
            if (utyp != top->getType())                                                  │              if (utyp != top->getType())                                                 
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            stack.pop_back();                                                            │              stack.pop_back();                                                           
            clearExpect(OBJ_NAME);                                                       │              clearExpect(OBJ_NAME);                                                      
            setExpect(NOT_VALUE);                                                        │              setExpect(NOT_VALUE);                                                       
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_COLON: {                                                               │          case JTOK_COLON: {                                                              
            if (!stack.size())                                                           │              if (!stack.size())                                                          
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            UniValue *top = stack.back();                                                │              UniValue *top = stack.back();                                               
            if (top->getType() != VOBJ)                                                  │              if (top->getType() != VOBJ)                                                 
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            setExpect(VALUE);                                                            │              setExpect(VALUE);                                                           
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_COMMA: {                                                               │          case JTOK_COMMA: {                                                              
            if (!stack.size() ||                                                         │              if (!stack.size() ||                                                        
                (last_tok == JTOK_COMMA) || (last_tok == JTOK_ARR_OPEN))                 │                  (last_tok == JTOK_COMMA) || (last_tok == JTOK_ARR_OPEN))                
                return false;                                                            │                  return false;                                                           
                                                                                         │                                                                                          
            UniValue *top = stack.back();                                                │              UniValue *top = stack.back();                                               
            if (top->getType() == VOBJ)                                                  │              if (top->getType() == VOBJ)                                                 
                setExpect(OBJ_NAME);                                                     │                  setExpect(OBJ_NAME);                                                    
            else                                                                         │              else                                                                        
                setExpect(ARR_VALUE);                                                    │                  setExpect(ARR_VALUE);                                                   
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_KW_NULL:                                                               │          case JTOK_KW_NULL:                                                              
        case JTOK_KW_TRUE:                                                               │          case JTOK_KW_TRUE:                                                              
        case JTOK_KW_FALSE: {                                                            │          case JTOK_KW_FALSE: {                                                           
            UniValue tmpVal;                                                             │              UniValue tmpVal;                                                            
            switch (tok) {                                                               │              switch (tok) {                                                              
            case JTOK_KW_NULL:                                                           │              case JTOK_KW_NULL:                                                          
                // do nothing more                                                       │                  // do nothing more                                                      
                break;                                                                   │                  break;                                                                  
            case JTOK_KW_TRUE:                                                           │              case JTOK_KW_TRUE:                                                          
                tmpVal.setBool(true);                                                    │                  tmpVal.setBool(true);                                                   
                break;                                                                   │                  break;                                                                  
            case JTOK_KW_FALSE:                                                          │              case JTOK_KW_FALSE:                                                         
                tmpVal.setBool(false);                                                   │                  tmpVal.setBool(false);                                                  
                break;                                                                   │                  break;                                                                  
            default: /* impossible */ break;                                             │              default: /* impossible */ break;                                            
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            if (!stack.size()) {                                                         │              if (!stack.size()) {                                                        
                *this = tmpVal;                                                          │                  *this = tmpVal;                                                         
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            UniValue *top = stack.back();                                                │              UniValue *top = stack.back();                                               
            top->values.push_back(tmpVal);                                               │              top->values.push_back(tmpVal);                                              
                                                                                         │                                                                                          
            setExpect(NOT_VALUE);                                                        │              setExpect(NOT_VALUE);                                                       
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_NUMBER: {                                                              │          case JTOK_NUMBER: {                                                             
            UniValue tmpVal(VNUM, tokenVal);                                             │              UniValue tmpVal(VNUM, tokenVal);                                            
            if (!stack.size()) {                                                         │              if (!stack.size()) {                                                        
                *this = tmpVal;                                                          │                  *this = tmpVal;                                                         
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            UniValue *top = stack.back();                                                │              UniValue *top = stack.back();                                               
            top->values.push_back(tmpVal);                                               │              top->values.push_back(tmpVal);                                              
                                                                                         │                                                                                          
            setExpect(NOT_VALUE);                                                        │              setExpect(NOT_VALUE);                                                       
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        case JTOK_STRING: {                                                              │          case JTOK_STRING: {                                                             
            if (expect(OBJ_NAME)) {                                                      │              if (expect(OBJ_NAME)) {                                                     
                UniValue *top = stack.back();                                            │                  UniValue *top = stack.back();                                           
                top->keys.push_back(tokenVal);                                           │                  top->keys.push_back(tokenVal);                                          
                clearExpect(OBJ_NAME);                                                   │                  clearExpect(OBJ_NAME);                                                  
                setExpect(COLON);                                                        │                  setExpect(COLON);                                                       
            } else {                                                                     │              } else {                                                                    
                UniValue tmpVal(VSTR, tokenVal);                                         │                  UniValue tmpVal(VSTR, tokenVal);                                        
                if (!stack.size()) {                                                     │                  if (!stack.size()) {                                                    
                    *this = tmpVal;                                                      │                      *this = tmpVal;                                                     
                    break;                                                               │                      break;                                                              
                }                                                                        │                  }                                                                       
                UniValue *top = stack.back();                                            │                  UniValue *top = stack.back();                                           
                top->values.push_back(tmpVal);                                           │                  top->values.push_back(tmpVal);                                          
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            setExpect(NOT_VALUE);                                                        │              setExpect(NOT_VALUE);                                                       
            break;                                                                       │              break;                                                                      
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
        default:                                                                         │          default:                                                                        
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
    } while (!stack.empty ());                                                           │      } while (!stack.empty ());                                                          
                                                                                         │                                                                                          
    /* Check that nothing follows the initial construct (parsed above).  */              │      /* Check that nothing follows the initial construct (parsed above).  */             
    tok = getJsonToken(tokenVal, consumed, raw, end);                                    │      tok = getJsonToken(tokenVal, consumed, raw, end);                                   
    if (tok != JTOK_NONE)                                                                │      if (tok != JTOK_NONE)                                                               
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:922                                                 │ bitcoin/src/script/interpreter.cpp:1106                                                  
                                                                                         │                                                                                          
                                                                                         │                      if (sigversion == SigVersion::TAPSCRIPT) return set_error(serror, SC
                                                                                         │                                                                                          
                    // ([sig ...] num_of_signatures [pubkey ...] num_of_pubkeys -- bool) │                      // ([sig ...] num_of_signatures [pubkey ...] num_of_pubkeys -- bool)
                                                                                         │                                                                                          
                    int i = 1;                                                           │                      int i = 1;                                                          
                    if ((int)stack.size() < i)                                           │                      if ((int)stack.size() < i)                                          
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                                                                                         │                                                                                          
                    int nKeysCount = CScriptNum(stacktop(-i), fRequireMinimal).getint(); │                      int nKeysCount = CScriptNum(stacktop(-i), fRequireMinimal).getint();
                    if (nKeysCount < 0 || nKeysCount > MAX_PUBKEYS_PER_MULTISIG)         │                      if (nKeysCount < 0 || nKeysCount > MAX_PUBKEYS_PER_MULTISIG)        
                        return set_error(serror, SCRIPT_ERR_PUBKEY_COUNT);               │                          return set_error(serror, SCRIPT_ERR_PUBKEY_COUNT);              
                    nOpCount += nKeysCount;                                              │                      nOpCount += nKeysCount;                                             
                    if (nOpCount > MAX_OPS_PER_SCRIPT)                                   │                      if (nOpCount > MAX_OPS_PER_SCRIPT)                                  
                        return set_error(serror, SCRIPT_ERR_OP_COUNT);                   │                          return set_error(serror, SCRIPT_ERR_OP_COUNT);                  
                    int ikey = ++i;                                                      │                      int ikey = ++i;                                                     
                    // ikey2 is the position of last non-signature item in the stack. To │                      // ikey2 is the position of last non-signature item in the stack. To
                    // With SCRIPT_VERIFY_NULLFAIL, this is used for cleanup if operatio │                      // With SCRIPT_VERIFY_NULLFAIL, this is used for cleanup if operatio
                    int ikey2 = nKeysCount + 2;                                          │                      int ikey2 = nKeysCount + 2;                                         
                    i += nKeysCount;                                                     │                      i += nKeysCount;                                                    
                    if ((int)stack.size() < i)                                           │                      if ((int)stack.size() < i)                                          
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                                                                                         │                                                                                          
                    int nSigsCount = CScriptNum(stacktop(-i), fRequireMinimal).getint(); │                      int nSigsCount = CScriptNum(stacktop(-i), fRequireMinimal).getint();
                    if (nSigsCount < 0 || nSigsCount > nKeysCount)                       │                      if (nSigsCount < 0 || nSigsCount > nKeysCount)                      
                        return set_error(serror, SCRIPT_ERR_SIG_COUNT);                  │                          return set_error(serror, SCRIPT_ERR_SIG_COUNT);                 
                    int isig = ++i;                                                      │                      int isig = ++i;                                                     
                    i += nSigsCount;                                                     │                      i += nSigsCount;                                                    
                    if ((int)stack.size() < i)                                           │                      if ((int)stack.size() < i)                                          
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                                                                                         │                                                                                          
                    // Subset of script starting at the most recent codeseparator        │                      // Subset of script starting at the most recent codeseparator       
                    CScript scriptCode(pbegincodehash, pend);                            │                      CScript scriptCode(pbegincodehash, pend);                           
                                                                                         │                                                                                          
                    // Drop the signature in pre-segwit scripts but not segwit scripts   │                      // Drop the signature in pre-segwit scripts but not segwit scripts  
                    for (int k = 0; k < nSigsCount; k++)                                 │                      for (int k = 0; k < nSigsCount; k++)                                
                    {                                                                    │                      {                                                                   
                        valtype& vchSig = stacktop(-isig-k);                             │                          valtype& vchSig = stacktop(-isig-k);                            
                        if (sigversion == SIGVERSION_BASE) {                             │                          if (sigversion == SigVersion::BASE) {                           
                            scriptCode.FindAndDelete(CScript(vchSig));                   │                              int found = FindAndDelete(scriptCode, CScript() << vchSig); 
                                                                                         │                              if (found > 0 && (flags & SCRIPT_VERIFY_CONST_SCRIPTCODE))  
                                                                                         │                                  return set_error(serror, SCRIPT_ERR_SIG_FINDANDDELETE); 
                        }                                                                │                          }                                                               
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    bool fSuccess = true;                                                │                      bool fSuccess = true;                                               
                    while (fSuccess && nSigsCount > 0)                                   │                      while (fSuccess && nSigsCount > 0)                                  
                    {                                                                    │                      {                                                                   
                        valtype& vchSig    = stacktop(-isig);                            │                          valtype& vchSig    = stacktop(-isig);                           
                        valtype& vchPubKey = stacktop(-ikey);                            │                          valtype& vchPubKey = stacktop(-ikey);                           
                                                                                         │                                                                                          
                        // Note how this makes the exact order of pubkey/signature evalu │                          // Note how this makes the exact order of pubkey/signature evalu
                        // distinguishable by CHECKMULTISIG NOT if the STRICTENC flag is │                          // distinguishable by CHECKMULTISIG NOT if the STRICTENC flag is
                        // See the script_(in)valid tests for details.                   │                          // See the script_(in)valid tests for details.                  
                        if (!CheckSignatureEncoding(vchSig, flags, serror) || !CheckPubK │                          if (!CheckSignatureEncoding(vchSig, flags, serror) || !CheckPubK
                            // serror is set                                             │                              // serror is set                                            
                            return false;                                                │                              return false;                                               
                        }                                                                │                          }                                                               
                                                                                         │                                                                                          
                        // Check signature                                               │                          // Check signature                                              
                        bool fOk = checker.CheckSig(vchSig, vchPubKey, scriptCode, sigve │                          bool fOk = checker.CheckECDSASignature(vchSig, vchPubKey, script
                                                                                         │                                                                                          
                        if (fOk) {                                                       │                          if (fOk) {                                                      
                            isig++;                                                      │                              isig++;                                                     
                            nSigsCount--;                                                │                              nSigsCount--;                                               
                        }                                                                │                          }                                                               
                        ikey++;                                                          │                          ikey++;                                                         
                        nKeysCount--;                                                    │                          nKeysCount--;                                                   
                                                                                         │                                                                                          
                        // If there are more signatures left than keys left,             │                          // If there are more signatures left than keys left,            
                        // then too many signatures have failed. Exit early,             │                          // then too many signatures have failed. Exit early,            
                        // without checking any further signatures.                      │                          // without checking any further signatures.                     
                        if (nSigsCount > nKeysCount)                                     │                          if (nSigsCount > nKeysCount)                                    
                            fSuccess = false;                                            │                              fSuccess = false;                                           
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    // Clean up stack of actual arguments                                │                      // Clean up stack of actual arguments                               
                    while (i-- > 1) {                                                    │                      while (i-- > 1) {                                                   
                        // If the operation failed, we require that all signatures must  │                          // If the operation failed, we require that all signatures must 
                        if (!fSuccess && (flags & SCRIPT_VERIFY_NULLFAIL) && !ikey2 && s │                          if (!fSuccess && (flags & SCRIPT_VERIFY_NULLFAIL) && !ikey2 && s
                            return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL);           │                              return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL);          
                        if (ikey2 > 0)                                                   │                          if (ikey2 > 0)                                                  
                            ikey2--;                                                     │                              ikey2--;                                                    
                        popstack(stack);                                                 │                          popstack(stack);                                                
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    // A bug causes CHECKMULTISIG to consume one extra argument          │                      // A bug causes CHECKMULTISIG to consume one extra argument         
                    // whose contents were not checked in any way.                       │                      // whose contents were not checked in any way.                      
                    //                                                                   │                      //                                                                  
                    // Unfortunately this is a potential source of mutability,           │                      // Unfortunately this is a potential source of mutability,          
                    // so optionally verify it is exactly equal to zero prior            │                      // so optionally verify it is exactly equal to zero prior           
                    // to removing it from the stack.                                    │                      // to removing it from the stack.                                   
                    if (stack.size() < 1)                                                │                      if (stack.size() < 1)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                    if ((flags & SCRIPT_VERIFY_NULLDUMMY) && stacktop(-1).size())        │                      if ((flags & SCRIPT_VERIFY_NULLDUMMY) && stacktop(-1).size())       
                        return set_error(serror, SCRIPT_ERR_SIG_NULLDUMMY);              │                          return set_error(serror, SCRIPT_ERR_SIG_NULLDUMMY);             
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                                                                                         │                                                                                          
                    stack.push_back(fSuccess ? vchTrue : vchFalse);                      │                      stack.push_back(fSuccess ? vchTrue : vchFalse);                     
                                                                                         │                                                                                          
                    if (opcode == OP_CHECKMULTISIGVERIFY)                                │                      if (opcode == OP_CHECKMULTISIGVERIFY)                               
                    {                                                                    │                      {                                                                   
                        if (fSuccess)                                                    │                          if (fSuccess)                                                   
                            popstack(stack);                                             │                              popstack(stack);                                            
                        else                                                             │                          else                                                            
                            return set_error(serror, SCRIPT_ERR_CHECKMULTISIGVERIFY);    │                              return set_error(serror, SCRIPT_ERR_CHECKMULTISIGVERIFY);   
                    }                                                                    │                      }                                                                   
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/miner_tests.cpp:81                                                    │ bitcoin/src/test/miner_tests.cpp:92                                                      
                                                                                         │                                                                                          
    // Test the ancestor feerate transaction selection.                                  │      // Test the ancestor feerate transaction selection.                                 
    TestMemPoolEntryHelper entry;                                                        │      TestMemPoolEntryHelper entry;                                                       
                                                                                         │                                                                                          
    // Test that a medium fee transaction will be selected after a higher fee            │      // Test that a medium fee transaction will be selected after a higher fee           
    // rate package with a low fee rate parent.                                          │      // rate package with a low fee rate parent.                                         
    CMutableTransaction tx;                                                              │      CMutableTransaction tx;                                                             
    tx.vin.resize(1);                                                                    │      tx.vin.resize(1);                                                                   
    tx.vin[0].scriptSig = CScript() << OP_1;                                             │      tx.vin[0].scriptSig = CScript() << OP_1;                                            
    tx.vin[0].prevout.hash = txFirst[0]->GetHash();                                      │      tx.vin[0].prevout.hash = txFirst[0]->GetHash();                                     
    tx.vin[0].prevout.n = 0;                                                             │      tx.vin[0].prevout.n = 0;                                                            
    tx.vout.resize(1);                                                                   │      tx.vout.resize(1);                                                                  
    tx.vout[0].nValue = 5000000000LL - 1000;                                             │      tx.vout[0].nValue = 5000000000LL - 1000;                                            
    // This tx has a low fee: 1000 satoshis                                              │      // This tx has a low fee: 1000 satoshis                                             
    uint256 hashParentTx = tx.GetHash(); // save this txid for later use                 │      uint256 hashParentTx = tx.GetHash(); // save this txid for later use                
    mempool.addUnchecked(hashParentTx, entry.Fee(1000).Time(GetTime()).SpendsCoinbase(tr │      m_node.mempool->addUnchecked(entry.Fee(1000).Time(GetTime()).SpendsCoinbase(true).Fr
                                                                                         │                                                                                          
    // This tx has a medium fee: 10000 satoshis                                          │      // This tx has a medium fee: 10000 satoshis                                         
    tx.vin[0].prevout.hash = txFirst[1]->GetHash();                                      │      tx.vin[0].prevout.hash = txFirst[1]->GetHash();                                     
    tx.vout[0].nValue = 5000000000LL - 10000;                                            │      tx.vout[0].nValue = 5000000000LL - 10000;                                           
    uint256 hashMediumFeeTx = tx.GetHash();                                              │      uint256 hashMediumFeeTx = tx.GetHash();                                             
    mempool.addUnchecked(hashMediumFeeTx, entry.Fee(10000).Time(GetTime()).SpendsCoinbas │      m_node.mempool->addUnchecked(entry.Fee(10000).Time(GetTime()).SpendsCoinbase(true).F
                                                                                         │                                                                                          
    // This tx has a high fee, but depends on the first transaction                      │      // This tx has a high fee, but depends on the first transaction                     
    tx.vin[0].prevout.hash = hashParentTx;                                               │      tx.vin[0].prevout.hash = hashParentTx;                                              
    tx.vout[0].nValue = 5000000000LL - 1000 - 50000; // 50k satoshi fee                  │      tx.vout[0].nValue = 5000000000LL - 1000 - 50000; // 50k satoshi fee                 
    uint256 hashHighFeeTx = tx.GetHash();                                                │      uint256 hashHighFeeTx = tx.GetHash();                                               
    mempool.addUnchecked(hashHighFeeTx, entry.Fee(50000).Time(GetTime()).SpendsCoinbase( │      m_node.mempool->addUnchecked(entry.Fee(50000).Time(GetTime()).SpendsCoinbase(false).
                                                                                         │                                                                                          
    std::unique_ptr<CBlockTemplate> pblocktemplate = BlockAssembler(chainparams).CreateN │      std::unique_ptr<CBlockTemplate> pblocktemplate = AssemblerForTest(chainparams).Creat
                                                                                         │      BOOST_REQUIRE_EQUAL(pblocktemplate->block.vtx.size(), 4U);                          
    BOOST_CHECK(pblocktemplate->block.vtx[1]->GetHash() == hashParentTx);                │      BOOST_CHECK(pblocktemplate->block.vtx[1]->GetHash() == hashParentTx);               
    BOOST_CHECK(pblocktemplate->block.vtx[2]->GetHash() == hashHighFeeTx);               │      BOOST_CHECK(pblocktemplate->block.vtx[2]->GetHash() == hashHighFeeTx);              
    BOOST_CHECK(pblocktemplate->block.vtx[3]->GetHash() == hashMediumFeeTx);             │      BOOST_CHECK(pblocktemplate->block.vtx[3]->GetHash() == hashMediumFeeTx);            
                                                                                         │                                                                                          
    // Test that a package below the block min tx fee doesn't get included               │      // Test that a package below the block min tx fee doesn't get included              
    tx.vin[0].prevout.hash = hashHighFeeTx;                                              │      tx.vin[0].prevout.hash = hashHighFeeTx;                                             
    tx.vout[0].nValue = 5000000000LL - 1000 - 50000; // 0 fee                            │      tx.vout[0].nValue = 5000000000LL - 1000 - 50000; // 0 fee                           
    uint256 hashFreeTx = tx.GetHash();                                                   │      uint256 hashFreeTx = tx.GetHash();                                                  
    mempool.addUnchecked(hashFreeTx, entry.Fee(0).FromTx(tx));                           │      m_node.mempool->addUnchecked(entry.Fee(0).FromTx(tx));                              
    size_t freeTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);           │      size_t freeTxSize = ::GetSerializeSize(tx, PROTOCOL_VERSION);                       
                                                                                         │                                                                                          
    // Calculate a fee on child transaction that will put the package just               │      // Calculate a fee on child transaction that will put the package just              
    // below the block min tx fee (assuming 1 child tx of the same size).                │      // below the block min tx fee (assuming 1 child tx of the same size).               
    CAmount feeToUse = blockMinFeeRate.GetFee(2*freeTxSize) - 1;                         │      CAmount feeToUse = blockMinFeeRate.GetFee(2*freeTxSize) - 1;                        
                                                                                         │                                                                                          
    tx.vin[0].prevout.hash = hashFreeTx;                                                 │      tx.vin[0].prevout.hash = hashFreeTx;                                                
    tx.vout[0].nValue = 5000000000LL - 1000 - 50000 - feeToUse;                          │      tx.vout[0].nValue = 5000000000LL - 1000 - 50000 - feeToUse;                         
    uint256 hashLowFeeTx = tx.GetHash();                                                 │      uint256 hashLowFeeTx = tx.GetHash();                                                
    mempool.addUnchecked(hashLowFeeTx, entry.Fee(feeToUse).FromTx(tx));                  │      m_node.mempool->addUnchecked(entry.Fee(feeToUse).FromTx(tx));                       
    pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey, true);     │      pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey);        
    // Verify that the free tx and the low fee tx didn't get selected                    │      // Verify that the free tx and the low fee tx didn't get selected                   
    for (size_t i=0; i<pblocktemplate->block.vtx.size(); ++i) {                          │      for (size_t i=0; i<pblocktemplate->block.vtx.size(); ++i) {                         
        BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashFreeTx);              │          BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashFreeTx);             
        BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashLowFeeTx);            │          BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashLowFeeTx);           
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Test that packages above the min relay fee do get included, even if one           │      // Test that packages above the min relay fee do get included, even if one          
    // of the transactions is below the min relay fee                                    │      // of the transactions is below the min relay fee                                   
    // Remove the low fee transaction and replace with a higher fee transaction          │      // Remove the low fee transaction and replace with a higher fee transaction         
    mempool.removeRecursive(tx);                                                         │      m_node.mempool->removeRecursive(CTransaction(tx), MemPoolRemovalReason::REPLACED);  
    tx.vout[0].nValue -= 2; // Now we should be just over the min relay fee              │      tx.vout[0].nValue -= 2; // Now we should be just over the min relay fee             
    hashLowFeeTx = tx.GetHash();                                                         │      hashLowFeeTx = tx.GetHash();                                                        
    mempool.addUnchecked(hashLowFeeTx, entry.Fee(feeToUse+2).FromTx(tx));                │      m_node.mempool->addUnchecked(entry.Fee(feeToUse+2).FromTx(tx));                     
    pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey, true);     │      pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey);        
                                                                                         │      BOOST_REQUIRE_EQUAL(pblocktemplate->block.vtx.size(), 6U);                          
    BOOST_CHECK(pblocktemplate->block.vtx[4]->GetHash() == hashFreeTx);                  │      BOOST_CHECK(pblocktemplate->block.vtx[4]->GetHash() == hashFreeTx);                 
    BOOST_CHECK(pblocktemplate->block.vtx[5]->GetHash() == hashLowFeeTx);                │      BOOST_CHECK(pblocktemplate->block.vtx[5]->GetHash() == hashLowFeeTx);               
                                                                                         │                                                                                          
    // Test that transaction selection properly updates ancestor fee                     │      // Test that transaction selection properly updates ancestor fee                    
    // calculations as ancestor transactions get included in a block.                    │      // calculations as ancestor transactions get included in a block.                   
    // Add a 0-fee transaction that has 2 outputs.                                       │      // Add a 0-fee transaction that has 2 outputs.                                      
    tx.vin[0].prevout.hash = txFirst[2]->GetHash();                                      │      tx.vin[0].prevout.hash = txFirst[2]->GetHash();                                     
    tx.vout.resize(2);                                                                   │      tx.vout.resize(2);                                                                  
    tx.vout[0].nValue = 5000000000LL - 100000000;                                        │      tx.vout[0].nValue = 5000000000LL - 100000000;                                       
    tx.vout[1].nValue = 100000000; // 1BTC output                                        │      tx.vout[1].nValue = 100000000; // 1BTC output                                       
    uint256 hashFreeTx2 = tx.GetHash();                                                  │      uint256 hashFreeTx2 = tx.GetHash();                                                 
    mempool.addUnchecked(hashFreeTx2, entry.Fee(0).SpendsCoinbase(true).FromTx(tx));     │      m_node.mempool->addUnchecked(entry.Fee(0).SpendsCoinbase(true).FromTx(tx));         
                                                                                         │                                                                                          
    // This tx can't be mined by itself                                                  │      // This tx can't be mined by itself                                                 
    tx.vin[0].prevout.hash = hashFreeTx2;                                                │      tx.vin[0].prevout.hash = hashFreeTx2;                                               
    tx.vout.resize(1);                                                                   │      tx.vout.resize(1);                                                                  
    feeToUse = blockMinFeeRate.GetFee(freeTxSize);                                       │      feeToUse = blockMinFeeRate.GetFee(freeTxSize);                                      
    tx.vout[0].nValue = 5000000000LL - 100000000 - feeToUse;                             │      tx.vout[0].nValue = 5000000000LL - 100000000 - feeToUse;                            
    uint256 hashLowFeeTx2 = tx.GetHash();                                                │      uint256 hashLowFeeTx2 = tx.GetHash();                                               
    mempool.addUnchecked(hashLowFeeTx2, entry.Fee(feeToUse).SpendsCoinbase(false).FromTx │      m_node.mempool->addUnchecked(entry.Fee(feeToUse).SpendsCoinbase(false).FromTx(tx)); 
    pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey, true);     │      pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey);        
                                                                                         │                                                                                          
    // Verify that this tx isn't selected.                                               │      // Verify that this tx isn't selected.                                              
    for (size_t i=0; i<pblocktemplate->block.vtx.size(); ++i) {                          │      for (size_t i=0; i<pblocktemplate->block.vtx.size(); ++i) {                         
        BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashFreeTx2);             │          BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashFreeTx2);            
        BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashLowFeeTx2);           │          BOOST_CHECK(pblocktemplate->block.vtx[i]->GetHash() != hashLowFeeTx2);          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // This tx will be mineable, and should cause hashLowFeeTx2 to be selected           │      // This tx will be mineable, and should cause hashLowFeeTx2 to be selected          
    // as well.                                                                          │      // as well.                                                                         
    tx.vin[0].prevout.n = 1;                                                             │      tx.vin[0].prevout.n = 1;                                                            
    tx.vout[0].nValue = 100000000 - 10000; // 10k satoshi fee                            │      tx.vout[0].nValue = 100000000 - 10000; // 10k satoshi fee                           
    mempool.addUnchecked(tx.GetHash(), entry.Fee(10000).FromTx(tx));                     │      m_node.mempool->addUnchecked(entry.Fee(10000).FromTx(tx));                          
    pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey, true);     │      pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey);        
                                                                                         │      BOOST_REQUIRE_EQUAL(pblocktemplate->block.vtx.size(), 9U);                          
    BOOST_CHECK(pblocktemplate->block.vtx[8]->GetHash() == hashLowFeeTx2);               │      BOOST_CHECK(pblocktemplate->block.vtx[8]->GetHash() == hashLowFeeTx2);              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/lib/univalue_read.cpp:53                                          │ bitcoin/src/univalue/lib/univalue_read.cpp:53                                            
                                                                                         │                                                                                          
    tokenVal.clear();                                                                    │      tokenVal.clear();                                                                   
    consumed = 0;                                                                        │      consumed = 0;                                                                       
                                                                                         │                                                                                          
    const char *rawStart = raw;                                                          │      const char *rawStart = raw;                                                         
                                                                                         │                                                                                          
    while (raw < end && (json_isspace(*raw)))          // skip whitespace                │      while (raw < end && (json_isspace(*raw)))          // skip whitespace               
        raw++;                                                                           │          raw++;                                                                          
                                                                                         │                                                                                          
    if (raw >= end)                                                                      │      if (raw >= end)                                                                     
        return JTOK_NONE;                                                                │          return JTOK_NONE;                                                               
                                                                                         │                                                                                          
    switch (*raw) {                                                                      │      switch (*raw) {                                                                     
                                                                                         │                                                                                          
    case '{':                                                                            │      case '{':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_OBJ_OPEN;                                                            │          return JTOK_OBJ_OPEN;                                                           
    case '}':                                                                            │      case '}':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_OBJ_CLOSE;                                                           │          return JTOK_OBJ_CLOSE;                                                          
    case '[':                                                                            │      case '[':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_ARR_OPEN;                                                            │          return JTOK_ARR_OPEN;                                                           
    case ']':                                                                            │      case ']':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_ARR_CLOSE;                                                           │          return JTOK_ARR_CLOSE;                                                          
                                                                                         │                                                                                          
    case ':':                                                                            │      case ':':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_COLON;                                                               │          return JTOK_COLON;                                                              
    case ',':                                                                            │      case ',':                                                                           
        raw++;                                                                           │          raw++;                                                                          
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_COMMA;                                                               │          return JTOK_COMMA;                                                              
                                                                                         │                                                                                          
    case 'n':                                                                            │      case 'n':                                                                           
    case 't':                                                                            │      case 't':                                                                           
    case 'f':                                                                            │      case 'f':                                                                           
        if (!strncmp(raw, "null", 4)) {                                                  │          if (!strncmp(raw, "null", 4)) {                                                 
            raw += 4;                                                                    │              raw += 4;                                                                   
            consumed = (raw - rawStart);                                                 │              consumed = (raw - rawStart);                                                
            return JTOK_KW_NULL;                                                         │              return JTOK_KW_NULL;                                                        
        } else if (!strncmp(raw, "true", 4)) {                                           │          } else if (!strncmp(raw, "true", 4)) {                                          
            raw += 4;                                                                    │              raw += 4;                                                                   
            consumed = (raw - rawStart);                                                 │              consumed = (raw - rawStart);                                                
            return JTOK_KW_TRUE;                                                         │              return JTOK_KW_TRUE;                                                        
        } else if (!strncmp(raw, "false", 5)) {                                          │          } else if (!strncmp(raw, "false", 5)) {                                         
            raw += 5;                                                                    │              raw += 5;                                                                   
            consumed = (raw - rawStart);                                                 │              consumed = (raw - rawStart);                                                
            return JTOK_KW_FALSE;                                                        │              return JTOK_KW_FALSE;                                                       
        } else                                                                           │          } else                                                                          
            return JTOK_ERR;                                                             │              return JTOK_ERR;                                                            
                                                                                         │                                                                                          
    case '-':                                                                            │      case '-':                                                                           
    case '0':                                                                            │      case '0':                                                                           
    case '1':                                                                            │      case '1':                                                                           
    case '2':                                                                            │      case '2':                                                                           
    case '3':                                                                            │      case '3':                                                                           
    case '4':                                                                            │      case '4':                                                                           
    case '5':                                                                            │      case '5':                                                                           
    case '6':                                                                            │      case '6':                                                                           
    case '7':                                                                            │      case '7':                                                                           
    case '8':                                                                            │      case '8':                                                                           
    case '9': {                                                                          │      case '9': {                                                                         
        // part 1: int                                                                   │          // part 1: int                                                                  
        std::string numStr;                                                              │          std::string numStr;                                                             
                                                                                         │                                                                                          
        const char *first = raw;                                                         │          const char *first = raw;                                                        
                                                                                         │                                                                                          
        const char *firstDigit = first;                                                  │          const char *firstDigit = first;                                                 
        if (!json_isdigit(*firstDigit))                                                  │          if (!json_isdigit(*firstDigit))                                                 
            firstDigit++;                                                                │              firstDigit++;                                                               
        if ((*firstDigit == '0') && json_isdigit(firstDigit[1]))                         │          if ((*firstDigit == '0') && json_isdigit(firstDigit[1]))                        
            return JTOK_ERR;                                                             │              return JTOK_ERR;                                                            
                                                                                         │                                                                                          
        numStr += *raw;                       // copy first char                         │          numStr += *raw;                       // copy first char                        
        raw++;                                                                           │          raw++;                                                                          
                                                                                         │                                                                                          
        if ((*first == '-') && (raw < end) && (!json_isdigit(*raw)))                     │          if ((*first == '-') && (raw < end) && (!json_isdigit(*raw)))                    
            return JTOK_ERR;                                                             │              return JTOK_ERR;                                                            
                                                                                         │                                                                                          
        while (raw < end && json_isdigit(*raw)) {  // copy digits                        │          while (raw < end && json_isdigit(*raw)) {  // copy digits                       
            numStr += *raw;                                                              │              numStr += *raw;                                                             
            raw++;                                                                       │              raw++;                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // part 2: frac                                                                  │          // part 2: frac                                                                 
        if (raw < end && *raw == '.') {                                                  │          if (raw < end && *raw == '.') {                                                 
            numStr += *raw;                   // copy .                                  │              numStr += *raw;                   // copy .                                 
            raw++;                                                                       │              raw++;                                                                      
                                                                                         │                                                                                          
            if (raw >= end || !json_isdigit(*raw))                                       │              if (raw >= end || !json_isdigit(*raw))                                      
                return JTOK_ERR;                                                         │                  return JTOK_ERR;                                                        
            while (raw < end && json_isdigit(*raw)) { // copy digits                     │              while (raw < end && json_isdigit(*raw)) { // copy digits                    
                numStr += *raw;                                                          │                  numStr += *raw;                                                         
                raw++;                                                                   │                  raw++;                                                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // part 3: exp                                                                   │          // part 3: exp                                                                  
        if (raw < end && (*raw == 'e' || *raw == 'E')) {                                 │          if (raw < end && (*raw == 'e' || *raw == 'E')) {                                
            numStr += *raw;                   // copy E                                  │              numStr += *raw;                   // copy E                                 
            raw++;                                                                       │              raw++;                                                                      
                                                                                         │                                                                                          
            if (raw < end && (*raw == '-' || *raw == '+')) { // copy +/-                 │              if (raw < end && (*raw == '-' || *raw == '+')) { // copy +/-                
                numStr += *raw;                                                          │                  numStr += *raw;                                                         
                raw++;                                                                   │                  raw++;                                                                  
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            if (raw >= end || !json_isdigit(*raw))                                       │              if (raw >= end || !json_isdigit(*raw))                                      
                return JTOK_ERR;                                                         │                  return JTOK_ERR;                                                        
            while (raw < end && json_isdigit(*raw)) { // copy digits                     │              while (raw < end && json_isdigit(*raw)) { // copy digits                    
                numStr += *raw;                                                          │                  numStr += *raw;                                                         
                raw++;                                                                   │                  raw++;                                                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        tokenVal = numStr;                                                               │          tokenVal = numStr;                                                              
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_NUMBER;                                                              │          return JTOK_NUMBER;                                                             
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
    case '"': {                                                                          │      case '"': {                                                                         
        raw++;                                // skip "                                  │          raw++;                                // skip "                                 
                                                                                         │                                                                                          
        std::string valStr;                                                              │          std::string valStr;                                                             
        JSONUTF8StringFilter writer(valStr);                                             │          JSONUTF8StringFilter writer(valStr);                                            
                                                                                         │                                                                                          
        while (true) {                                                                   │          while (true) {                                                                  
            if (raw >= end || (unsigned char)*raw < 0x20)                                │              if (raw >= end || (unsigned char)*raw < 0x20)                               
                return JTOK_ERR;                                                         │                  return JTOK_ERR;                                                        
                                                                                         │                                                                                          
            else if (*raw == '\\') {                                                     │              else if (*raw == '\\') {                                                    
                raw++;                        // skip backslash                          │                  raw++;                        // skip backslash                         
                                                                                         │                                                                                          
                if (raw >= end)                                                          │                  if (raw >= end)                                                         
                    return JTOK_ERR;                                                     │                      return JTOK_ERR;                                                    
                                                                                         │                                                                                          
                switch (*raw) {                                                          │                  switch (*raw) {                                                         
                case '"':  writer.push_back('\"'); break;                                │                  case '"':  writer.push_back('\"'); break;                               
                case '\\': writer.push_back('\\'); break;                                │                  case '\\': writer.push_back('\\'); break;                               
                case '/':  writer.push_back('/'); break;                                 │                  case '/':  writer.push_back('/'); break;                                
                case 'b':  writer.push_back('\b'); break;                                │                  case 'b':  writer.push_back('\b'); break;                               
                case 'f':  writer.push_back('\f'); break;                                │                  case 'f':  writer.push_back('\f'); break;                               
                case 'n':  writer.push_back('\n'); break;                                │                  case 'n':  writer.push_back('\n'); break;                               
                case 'r':  writer.push_back('\r'); break;                                │                  case 'r':  writer.push_back('\r'); break;                               
                case 't':  writer.push_back('\t'); break;                                │                  case 't':  writer.push_back('\t'); break;                               
                                                                                         │                                                                                          
                case 'u': {                                                              │                  case 'u': {                                                             
                    unsigned int codepoint;                                              │                      unsigned int codepoint;                                             
                    if (raw + 1 + 4 >= end ||                                            │                      if (raw + 1 + 4 >= end ||                                           
                        hatoui(raw + 1, raw + 1 + 4, codepoint) !=                       │                          hatoui(raw + 1, raw + 1 + 4, codepoint) !=                      
                               raw + 1 + 4)                                              │                                 raw + 1 + 4)                                             
                        return JTOK_ERR;                                                 │                          return JTOK_ERR;                                                
                    writer.push_back_u(codepoint);                                       │                      writer.push_back_u(codepoint);                                      
                    raw += 4;                                                            │                      raw += 4;                                                           
                    break;                                                               │                      break;                                                              
                    }                                                                    │                      }                                                                   
                default:                                                                 │                  default:                                                                
                    return JTOK_ERR;                                                     │                      return JTOK_ERR;                                                    
                                                                                         │                                                                                          
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                raw++;                        // skip esc'd char                         │                  raw++;                        // skip esc'd char                        
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            else if (*raw == '"') {                                                      │              else if (*raw == '"') {                                                     
                raw++;                        // skip "                                  │                  raw++;                        // skip "                                 
                break;                        // stop scanning                           │                  break;                        // stop scanning                          
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            else {                                                                       │              else {                                                                      
                writer.push_back(static_cast<unsigned char>(*raw));                      │                  writer.push_back(static_cast<unsigned char>(*raw));                     
                raw++;                                                                   │                  raw++;                                                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (!writer.finalize())                                                          │          if (!writer.finalize())                                                         
            return JTOK_ERR;                                                             │              return JTOK_ERR;                                                            
        tokenVal = valStr;                                                               │          tokenVal = valStr;                                                              
        consumed = (raw - rawStart);                                                     │          consumed = (raw - rawStart);                                                    
        return JTOK_STRING;                                                              │          return JTOK_STRING;                                                             
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
    default:                                                                             │      default:                                                                            
        return JTOK_ERR;                                                                 │          return JTOK_ERR;                                                                
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:1410                                                │ bitcoin/src/script/interpreter.cpp:1948                                                  
                                                                                         │                                                                                          
    static const CScriptWitness emptyWitness;                                            │      static const CScriptWitness emptyWitness;                                           
    if (witness == NULL) {                                                               │      if (witness == nullptr) {                                                           
        witness = &emptyWitness;                                                         │          witness = &emptyWitness;                                                        
    }                                                                                    │      }                                                                                   
    bool hadWitness = false;                                                             │      bool hadWitness = false;                                                            
                                                                                         │                                                                                          
    set_error(serror, SCRIPT_ERR_UNKNOWN_ERROR);                                         │      set_error(serror, SCRIPT_ERR_UNKNOWN_ERROR);                                        
                                                                                         │                                                                                          
    if ((flags & SCRIPT_VERIFY_SIGPUSHONLY) != 0 && !scriptSig.IsPushOnly()) {           │      if ((flags & SCRIPT_VERIFY_SIGPUSHONLY) != 0 && !scriptSig.IsPushOnly()) {          
        return set_error(serror, SCRIPT_ERR_SIG_PUSHONLY);                               │          return set_error(serror, SCRIPT_ERR_SIG_PUSHONLY);                              
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    vector<vector<unsigned char> > stack, stackCopy;                                     │      // scriptSig and scriptPubKey must be evaluated sequentially on the same stack      
    if (!EvalScript(stack, scriptSig, flags, checker, SIGVERSION_BASE, serror))          │      // rather than being simply concatenated (see CVE-2010-5141)                        
                                                                                         │      std::vector<std::vector<unsigned char> > stack, stackCopy;                          
                                                                                         │      if (!EvalScript(stack, scriptSig, flags, checker, SigVersion::BASE, serror))        
        // serror is set                                                                 │          // serror is set                                                                
        return false;                                                                    │          return false;                                                                   
    if (flags & SCRIPT_VERIFY_P2SH)                                                      │      if (flags & SCRIPT_VERIFY_P2SH)                                                     
        stackCopy = stack;                                                               │          stackCopy = stack;                                                              
    if (!EvalScript(stack, scriptPubKey, flags, checker, SIGVERSION_BASE, serror))       │      if (!EvalScript(stack, scriptPubKey, flags, checker, SigVersion::BASE, serror))     
        // serror is set                                                                 │          // serror is set                                                                
        return false;                                                                    │          return false;                                                                   
    if (stack.empty())                                                                   │      if (stack.empty())                                                                  
        return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                                 │          return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                                
    if (CastToBool(stack.back()) == false)                                               │      if (CastToBool(stack.back()) == false)                                              
        return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                                 │          return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                                
                                                                                         │                                                                                          
    // Bare witness programs                                                             │      // Bare witness programs                                                            
    int witnessversion;                                                                  │      int witnessversion;                                                                 
    std::vector<unsigned char> witnessprogram;                                           │      std::vector<unsigned char> witnessprogram;                                          
    if (flags & SCRIPT_VERIFY_WITNESS) {                                                 │      if (flags & SCRIPT_VERIFY_WITNESS) {                                                
        if (scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram)) {             │          if (scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram)) {            
            hadWitness = true;                                                           │              hadWitness = true;                                                          
            if (scriptSig.size() != 0) {                                                 │              if (scriptSig.size() != 0) {                                                
                // The scriptSig must be _exactly_ CScript(), otherwise we reintroduce m │                  // The scriptSig must be _exactly_ CScript(), otherwise we reintroduce m
                return set_error(serror, SCRIPT_ERR_WITNESS_MALLEATED);                  │                  return set_error(serror, SCRIPT_ERR_WITNESS_MALLEATED);                 
            }                                                                            │              }                                                                           
            if (!VerifyWitnessProgram(*witness, witnessversion, witnessprogram, flags, c │              if (!VerifyWitnessProgram(*witness, witnessversion, witnessprogram, flags, c
                return false;                                                            │                  return false;                                                           
            }                                                                            │              }                                                                           
            // Bypass the cleanstack check at the end. The actual stack is obviously not │              // Bypass the cleanstack check at the end. The actual stack is obviously not
            // for witness programs.                                                     │              // for witness programs.                                                    
            stack.resize(1);                                                             │              stack.resize(1);                                                            
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Additional validation for spend-to-script-hash transactions:                      │      // Additional validation for spend-to-script-hash transactions:                     
    if ((flags & SCRIPT_VERIFY_P2SH) && scriptPubKey.IsPayToScriptHash())                │      if ((flags & SCRIPT_VERIFY_P2SH) && scriptPubKey.IsPayToScriptHash())               
    {                                                                                    │      {                                                                                   
        // scriptSig must be literals-only or validation fails                           │          // scriptSig must be literals-only or validation fails                          
        if (!scriptSig.IsPushOnly())                                                     │          if (!scriptSig.IsPushOnly())                                                    
            return set_error(serror, SCRIPT_ERR_SIG_PUSHONLY);                           │              return set_error(serror, SCRIPT_ERR_SIG_PUSHONLY);                          
                                                                                         │                                                                                          
        // Restore stack.                                                                │          // Restore stack.                                                               
        swap(stack, stackCopy);                                                          │          swap(stack, stackCopy);                                                         
                                                                                         │                                                                                          
        // stack cannot be empty here, because if it was the                             │          // stack cannot be empty here, because if it was the                            
        // P2SH  HASH <> EQUAL  scriptPubKey would be evaluated with                     │          // P2SH  HASH <> EQUAL  scriptPubKey would be evaluated with                    
        // an empty stack and the EvalScript above would return false.                   │          // an empty stack and the EvalScript above would return false.                  
        assert(!stack.empty());                                                          │          assert(!stack.empty());                                                         
                                                                                         │                                                                                          
        const valtype& pubKeySerialized = stack.back();                                  │          const valtype& pubKeySerialized = stack.back();                                 
        CScript pubKey2(pubKeySerialized.begin(), pubKeySerialized.end());               │          CScript pubKey2(pubKeySerialized.begin(), pubKeySerialized.end());              
        popstack(stack);                                                                 │          popstack(stack);                                                                
                                                                                         │                                                                                          
        if (!EvalScript(stack, pubKey2, flags, checker, SIGVERSION_BASE, serror))        │          if (!EvalScript(stack, pubKey2, flags, checker, SigVersion::BASE, serror))      
            // serror is set                                                             │              // serror is set                                                            
            return false;                                                                │              return false;                                                               
        if (stack.empty())                                                               │          if (stack.empty())                                                              
            return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                             │              return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                            
        if (!CastToBool(stack.back()))                                                   │          if (!CastToBool(stack.back()))                                                  
            return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                             │              return set_error(serror, SCRIPT_ERR_EVAL_FALSE);                            
                                                                                         │                                                                                          
        // P2SH witness program                                                          │          // P2SH witness program                                                         
        if (flags & SCRIPT_VERIFY_WITNESS) {                                             │          if (flags & SCRIPT_VERIFY_WITNESS) {                                            
            if (pubKey2.IsWitnessProgram(witnessversion, witnessprogram)) {              │              if (pubKey2.IsWitnessProgram(witnessversion, witnessprogram)) {             
                hadWitness = true;                                                       │                  hadWitness = true;                                                      
                if (scriptSig != CScript() << std::vector<unsigned char>(pubKey2.begin() │                  if (scriptSig != CScript() << std::vector<unsigned char>(pubKey2.begin()
                    // The scriptSig must be _exactly_ a single push of the redeemScript │                      // The scriptSig must be _exactly_ a single push of the redeemScript
                    // reintroduce malleability.                                         │                      // reintroduce malleability.                                        
                    return set_error(serror, SCRIPT_ERR_WITNESS_MALLEATED_P2SH);         │                      return set_error(serror, SCRIPT_ERR_WITNESS_MALLEATED_P2SH);        
                }                                                                        │                  }                                                                       
                if (!VerifyWitnessProgram(*witness, witnessversion, witnessprogram, flag │                  if (!VerifyWitnessProgram(*witness, witnessversion, witnessprogram, flag
                    return false;                                                        │                      return false;                                                       
                }                                                                        │                  }                                                                       
                // Bypass the cleanstack check at the end. The actual stack is obviously │                  // Bypass the cleanstack check at the end. The actual stack is obviously
                // for witness programs.                                                 │                  // for witness programs.                                                
                stack.resize(1);                                                         │                  stack.resize(1);                                                        
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // The CLEANSTACK check is only performed after potential P2SH evaluation,           │      // The CLEANSTACK check is only performed after potential P2SH evaluation,          
    // as the non-P2SH evaluation of a P2SH script will obviously not result in          │      // as the non-P2SH evaluation of a P2SH script will obviously not result in         
    // a clean stack (the P2SH inputs remain). The same holds for witness evaluation.    │      // a clean stack (the P2SH inputs remain). The same holds for witness evaluation.   
    if ((flags & SCRIPT_VERIFY_CLEANSTACK) != 0) {                                       │      if ((flags & SCRIPT_VERIFY_CLEANSTACK) != 0) {                                      
        // Disallow CLEANSTACK without P2SH, as otherwise a switch CLEANSTACK->P2SH+CLEA │          // Disallow CLEANSTACK without P2SH, as otherwise a switch CLEANSTACK->P2SH+CLEA
        // would be possible, which is not a softfork (and P2SH should be one).          │          // would be possible, which is not a softfork (and P2SH should be one).         
        assert((flags & SCRIPT_VERIFY_P2SH) != 0);                                       │          assert((flags & SCRIPT_VERIFY_P2SH) != 0);                                      
        assert((flags & SCRIPT_VERIFY_WITNESS) != 0);                                    │          assert((flags & SCRIPT_VERIFY_WITNESS) != 0);                                   
        if (stack.size() != 1) {                                                         │          if (stack.size() != 1) {                                                        
            return set_error(serror, SCRIPT_ERR_CLEANSTACK);                             │              return set_error(serror, SCRIPT_ERR_CLEANSTACK);                            
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (flags & SCRIPT_VERIFY_WITNESS) {                                                 │      if (flags & SCRIPT_VERIFY_WITNESS) {                                                
        // We can't check for correct unexpected witness data if P2SH was off, so requir │          // We can't check for correct unexpected witness data if P2SH was off, so requir
        // that WITNESS implies P2SH. Otherwise, going from WITNESS->P2SH+WITNESS would  │          // that WITNESS implies P2SH. Otherwise, going from WITNESS->P2SH+WITNESS would 
        // possible, which is not a softfork.                                            │          // possible, which is not a softfork.                                           
        assert((flags & SCRIPT_VERIFY_P2SH) != 0);                                       │          assert((flags & SCRIPT_VERIFY_P2SH) != 0);                                      
        if (!hadWitness && !witness->IsNull()) {                                         │          if (!hadWitness && !witness->IsNull()) {                                        
            return set_error(serror, SCRIPT_ERR_WITNESS_UNEXPECTED);                     │              return set_error(serror, SCRIPT_ERR_WITNESS_UNEXPECTED);                    
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return set_success(serror);                                                          │      return set_success(serror);                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/coins_tests.cpp:811                                                   │ bitcoin/src/test/coins_tests.cpp:816                                                     
                                                                                         │                                                                                          
    /* Check BatchWrite behavior, flushing one entry from a child cache to a             │      /* Check BatchWrite behavior, flushing one entry from a child cache to a            
     * parent cache, and checking the resulting entry in the parent cache                │       * parent cache, and checking the resulting entry in the parent cache               
     * after the write.                                                                  │       * after the write.                                                                 
     *                                                                                   │       *                                                                                  
     *              Parent  Child   Result  Parent       Child        Result             │       *              Parent  Child   Result  Parent       Child        Result            
     *              Value   Value   Value   Flags        Flags        Flags              │       *              Value   Value   Value   Flags        Flags        Flags             
     */                                                                                  │       */                                                                                 
    CheckWriteCoins(ABSENT, ABSENT, ABSENT, NO_ENTRY   , NO_ENTRY   , NO_ENTRY   );      │      CheckWriteCoins(ABSENT, ABSENT, ABSENT, NO_ENTRY   , NO_ENTRY   , NO_ENTRY   );     
    CheckWriteCoins(ABSENT, PRUNED, PRUNED, NO_ENTRY   , DIRTY      , DIRTY      );      │      CheckWriteCoins(ABSENT, SPENT , SPENT , NO_ENTRY   , DIRTY      , DIRTY      );     
    CheckWriteCoins(ABSENT, PRUNED, ABSENT, NO_ENTRY   , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(ABSENT, SPENT , ABSENT, NO_ENTRY   , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(ABSENT, VALUE2, VALUE2, NO_ENTRY   , DIRTY      , DIRTY      );      │      CheckWriteCoins(ABSENT, VALUE2, VALUE2, NO_ENTRY   , DIRTY      , DIRTY      );     
    CheckWriteCoins(ABSENT, VALUE2, VALUE2, NO_ENTRY   , DIRTY|FRESH, DIRTY|FRESH);      │      CheckWriteCoins(ABSENT, VALUE2, VALUE2, NO_ENTRY   , DIRTY|FRESH, DIRTY|FRESH);     
    CheckWriteCoins(PRUNED, ABSENT, PRUNED, 0          , NO_ENTRY   , 0          );      │      CheckWriteCoins(SPENT , ABSENT, SPENT , 0          , NO_ENTRY   , 0          );     
    CheckWriteCoins(PRUNED, ABSENT, PRUNED, FRESH      , NO_ENTRY   , FRESH      );      │      CheckWriteCoins(SPENT , ABSENT, SPENT , FRESH      , NO_ENTRY   , FRESH      );     
    CheckWriteCoins(PRUNED, ABSENT, PRUNED, DIRTY      , NO_ENTRY   , DIRTY      );      │      CheckWriteCoins(SPENT , ABSENT, SPENT , DIRTY      , NO_ENTRY   , DIRTY      );     
    CheckWriteCoins(PRUNED, ABSENT, PRUNED, DIRTY|FRESH, NO_ENTRY   , DIRTY|FRESH);      │      CheckWriteCoins(SPENT , ABSENT, SPENT , DIRTY|FRESH, NO_ENTRY   , DIRTY|FRESH);     
    CheckWriteCoins(PRUNED, PRUNED, PRUNED, 0          , DIRTY      , DIRTY      );      │      CheckWriteCoins(SPENT , SPENT , SPENT , 0          , DIRTY      , DIRTY      );     
    CheckWriteCoins(PRUNED, PRUNED, PRUNED, 0          , DIRTY|FRESH, DIRTY      );      │      CheckWriteCoins(SPENT , SPENT , SPENT , 0          , DIRTY|FRESH, DIRTY      );     
    CheckWriteCoins(PRUNED, PRUNED, ABSENT, FRESH      , DIRTY      , NO_ENTRY   );      │      CheckWriteCoins(SPENT , SPENT , ABSENT, FRESH      , DIRTY      , NO_ENTRY   );     
    CheckWriteCoins(PRUNED, PRUNED, ABSENT, FRESH      , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(SPENT , SPENT , ABSENT, FRESH      , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(PRUNED, PRUNED, PRUNED, DIRTY      , DIRTY      , DIRTY      );      │      CheckWriteCoins(SPENT , SPENT , SPENT , DIRTY      , DIRTY      , DIRTY      );     
    CheckWriteCoins(PRUNED, PRUNED, PRUNED, DIRTY      , DIRTY|FRESH, DIRTY      );      │      CheckWriteCoins(SPENT , SPENT , SPENT , DIRTY      , DIRTY|FRESH, DIRTY      );     
    CheckWriteCoins(PRUNED, PRUNED, ABSENT, DIRTY|FRESH, DIRTY      , NO_ENTRY   );      │      CheckWriteCoins(SPENT , SPENT , ABSENT, DIRTY|FRESH, DIRTY      , NO_ENTRY   );     
    CheckWriteCoins(PRUNED, PRUNED, ABSENT, DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(SPENT , SPENT , ABSENT, DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, 0          , DIRTY      , DIRTY      );      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, 0          , DIRTY      , DIRTY      );     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, 0          , DIRTY|FRESH, DIRTY      );      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, 0          , DIRTY|FRESH, DIRTY      );     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, FRESH      , DIRTY      , DIRTY|FRESH);      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, FRESH      , DIRTY      , DIRTY|FRESH);     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, FRESH      , DIRTY|FRESH, DIRTY|FRESH);      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, FRESH      , DIRTY|FRESH, DIRTY|FRESH);     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, DIRTY      , DIRTY      , DIRTY      );      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, DIRTY      , DIRTY      , DIRTY      );     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, DIRTY      , DIRTY|FRESH, DIRTY      );      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, DIRTY      , DIRTY|FRESH, DIRTY      );     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, DIRTY|FRESH, DIRTY      , DIRTY|FRESH);      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, DIRTY|FRESH, DIRTY      , DIRTY|FRESH);     
    CheckWriteCoins(PRUNED, VALUE2, VALUE2, DIRTY|FRESH, DIRTY|FRESH, DIRTY|FRESH);      │      CheckWriteCoins(SPENT , VALUE2, VALUE2, DIRTY|FRESH, DIRTY|FRESH, DIRTY|FRESH);     
    CheckWriteCoins(VALUE1, ABSENT, VALUE1, 0          , NO_ENTRY   , 0          );      │      CheckWriteCoins(VALUE1, ABSENT, VALUE1, 0          , NO_ENTRY   , 0          );     
    CheckWriteCoins(VALUE1, ABSENT, VALUE1, FRESH      , NO_ENTRY   , FRESH      );      │      CheckWriteCoins(VALUE1, ABSENT, VALUE1, FRESH      , NO_ENTRY   , FRESH      );     
    CheckWriteCoins(VALUE1, ABSENT, VALUE1, DIRTY      , NO_ENTRY   , DIRTY      );      │      CheckWriteCoins(VALUE1, ABSENT, VALUE1, DIRTY      , NO_ENTRY   , DIRTY      );     
    CheckWriteCoins(VALUE1, ABSENT, VALUE1, DIRTY|FRESH, NO_ENTRY   , DIRTY|FRESH);      │      CheckWriteCoins(VALUE1, ABSENT, VALUE1, DIRTY|FRESH, NO_ENTRY   , DIRTY|FRESH);     
    CheckWriteCoins(VALUE1, PRUNED, PRUNED, 0          , DIRTY      , DIRTY      );      │      CheckWriteCoins(VALUE1, SPENT , SPENT , 0          , DIRTY      , DIRTY      );     
    CheckWriteCoins(VALUE1, PRUNED, FAIL  , 0          , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , FAIL  , 0          , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, PRUNED, ABSENT, FRESH      , DIRTY      , NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , ABSENT, FRESH      , DIRTY      , NO_ENTRY   );     
    CheckWriteCoins(VALUE1, PRUNED, FAIL  , FRESH      , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , FAIL  , FRESH      , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, PRUNED, PRUNED, DIRTY      , DIRTY      , DIRTY      );      │      CheckWriteCoins(VALUE1, SPENT , SPENT , DIRTY      , DIRTY      , DIRTY      );     
    CheckWriteCoins(VALUE1, PRUNED, FAIL  , DIRTY      , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , FAIL  , DIRTY      , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, PRUNED, ABSENT, DIRTY|FRESH, DIRTY      , NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , ABSENT, DIRTY|FRESH, DIRTY      , NO_ENTRY   );     
    CheckWriteCoins(VALUE1, PRUNED, FAIL  , DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, SPENT , FAIL  , DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, VALUE2, VALUE2, 0          , DIRTY      , DIRTY      );      │      CheckWriteCoins(VALUE1, VALUE2, VALUE2, 0          , DIRTY      , DIRTY      );     
    CheckWriteCoins(VALUE1, VALUE2, FAIL  , 0          , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, VALUE2, FAIL  , 0          , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, VALUE2, VALUE2, FRESH      , DIRTY      , DIRTY|FRESH);      │      CheckWriteCoins(VALUE1, VALUE2, VALUE2, FRESH      , DIRTY      , DIRTY|FRESH);     
    CheckWriteCoins(VALUE1, VALUE2, FAIL  , FRESH      , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, VALUE2, FAIL  , FRESH      , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, VALUE2, VALUE2, DIRTY      , DIRTY      , DIRTY      );      │      CheckWriteCoins(VALUE1, VALUE2, VALUE2, DIRTY      , DIRTY      , DIRTY      );     
    CheckWriteCoins(VALUE1, VALUE2, FAIL  , DIRTY      , DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, VALUE2, FAIL  , DIRTY      , DIRTY|FRESH, NO_ENTRY   );     
    CheckWriteCoins(VALUE1, VALUE2, VALUE2, DIRTY|FRESH, DIRTY      , DIRTY|FRESH);      │      CheckWriteCoins(VALUE1, VALUE2, VALUE2, DIRTY|FRESH, DIRTY      , DIRTY|FRESH);     
    CheckWriteCoins(VALUE1, VALUE2, FAIL  , DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );      │      CheckWriteCoins(VALUE1, VALUE2, FAIL  , DIRTY|FRESH, DIRTY|FRESH, NO_ENTRY   );     
                                                                                         │                                                                                          
    // The checks above omit cases where the child flags are not DIRTY, since            │      // The checks above omit cases where the child flags are not DIRTY, since           
    // they would be too repetitive (the parent cache is never updated in these          │      // they would be too repetitive (the parent cache is never updated in these         
    // cases). The loop below covers these cases and makes sure the parent cache         │      // cases). The loop below covers these cases and makes sure the parent cache        
    // is always left unchanged.                                                         │      // is always left unchanged.                                                        
    for (CAmount parent_value : {ABSENT, PRUNED, VALUE1})                                │      for (const CAmount parent_value : {ABSENT, SPENT, VALUE1})                          
        for (CAmount child_value : {ABSENT, PRUNED, VALUE2})                             │          for (const CAmount child_value : {ABSENT, SPENT, VALUE2})                       
            for (char parent_flags : parent_value == ABSENT ? ABSENT_FLAGS : FLAGS)      │              for (const char parent_flags : parent_value == ABSENT ? ABSENT_FLAGS : FLAGS
                for (char child_flags : child_value == ABSENT ? ABSENT_FLAGS : CLEAN_FLA │                  for (const char child_flags : child_value == ABSENT ? ABSENT_FLAGS : CLE
                    CheckWriteCoins(parent_value, child_value, parent_value, parent_flag │                      CheckWriteCoins(parent_value, child_value, parent_value, parent_flag
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_P2SH_tests.cpp:258                                             │ bitcoin/src/test/script_p2sh_tests.cpp:265                                               
                                                                                         │                                                                                          
    LOCK(cs_main);                                                                       │      LOCK(cs_main);                                                                      
    CCoinsView coinsDummy;                                                               │      CCoinsView coinsDummy;                                                              
    CCoinsViewCache coins(&coinsDummy);                                                  │      CCoinsViewCache coins(&coinsDummy);                                                 
    CBasicKeyStore keystore;                                                             │      FillableSigningProvider keystore;                                                   
    CKey key[6];                                                                         │      CKey key[6];                                                                        
    std::vector<CPubKey> keys;                                                           │      std::vector<CPubKey> keys;                                                          
    for (int i = 0; i < 6; i++)                                                          │      for (int i = 0; i < 6; i++)                                                         
    {                                                                                    │      {                                                                                   
        key[i].MakeNewKey(true);                                                         │          key[i].MakeNewKey(true);                                                        
        keystore.AddKey(key[i]);                                                         │          BOOST_CHECK(keystore.AddKey(key[i]));                                           
    }                                                                                    │      }                                                                                   
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
        keys.push_back(key[i].GetPubKey());                                              │          keys.push_back(key[i].GetPubKey());                                             
                                                                                         │                                                                                          
    CMutableTransaction txFrom;                                                          │      CMutableTransaction txFrom;                                                         
    txFrom.vout.resize(7);                                                               │      txFrom.vout.resize(7);                                                              
                                                                                         │                                                                                          
    // First three are standard:                                                         │      // First three are standard:                                                        
    CScript pay1 = GetScriptForDestination(key[0].GetPubKey().GetID());                  │      CScript pay1 = GetScriptForDestination(PKHash(key[0].GetPubKey()));                 
    keystore.AddCScript(pay1);                                                           │      BOOST_CHECK(keystore.AddCScript(pay1));                                             
    CScript pay1of3 = GetScriptForMultisig(1, keys);                                     │      CScript pay1of3 = GetScriptForMultisig(1, keys);                                    
                                                                                         │                                                                                          
    txFrom.vout[0].scriptPubKey = GetScriptForDestination(CScriptID(pay1)); // P2SH (OP_ │      txFrom.vout[0].scriptPubKey = GetScriptForDestination(ScriptHash(pay1)); // P2SH (OP
    txFrom.vout[0].nValue = 1000;                                                        │      txFrom.vout[0].nValue = 1000;                                                       
    txFrom.vout[1].scriptPubKey = pay1; // ordinary OP_CHECKSIG                          │      txFrom.vout[1].scriptPubKey = pay1; // ordinary OP_CHECKSIG                         
    txFrom.vout[1].nValue = 2000;                                                        │      txFrom.vout[1].nValue = 2000;                                                       
    txFrom.vout[2].scriptPubKey = pay1of3; // ordinary OP_CHECKMULTISIG                  │      txFrom.vout[2].scriptPubKey = pay1of3; // ordinary OP_CHECKMULTISIG                 
    txFrom.vout[2].nValue = 3000;                                                        │      txFrom.vout[2].nValue = 3000;                                                       
                                                                                         │                                                                                          
    // vout[3] is complicated 1-of-3 AND 2-of-3                                          │      // vout[3] is complicated 1-of-3 AND 2-of-3                                         
    // ... that is OK if wrapped in P2SH:                                                │      // ... that is OK if wrapped in P2SH:                                               
    CScript oneAndTwo;                                                                   │      CScript oneAndTwo;                                                                  
    oneAndTwo << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubK │      oneAndTwo << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubK
    oneAndTwo << OP_3 << OP_CHECKMULTISIGVERIFY;                                         │      oneAndTwo << OP_3 << OP_CHECKMULTISIGVERIFY;                                        
    oneAndTwo << OP_2 << ToByteVector(key[3].GetPubKey()) << ToByteVector(key[4].GetPubK │      oneAndTwo << OP_2 << ToByteVector(key[3].GetPubKey()) << ToByteVector(key[4].GetPubK
    oneAndTwo << OP_3 << OP_CHECKMULTISIG;                                               │      oneAndTwo << OP_3 << OP_CHECKMULTISIG;                                              
    keystore.AddCScript(oneAndTwo);                                                      │      BOOST_CHECK(keystore.AddCScript(oneAndTwo));                                        
    txFrom.vout[3].scriptPubKey = GetScriptForDestination(CScriptID(oneAndTwo));         │      txFrom.vout[3].scriptPubKey = GetScriptForDestination(ScriptHash(oneAndTwo));       
    txFrom.vout[3].nValue = 4000;                                                        │      txFrom.vout[3].nValue = 4000;                                                       
                                                                                         │                                                                                          
    // vout[4] is max sigops:                                                            │      // vout[4] is max sigops:                                                           
    CScript fifteenSigops; fifteenSigops << OP_1;                                        │      CScript fifteenSigops; fifteenSigops << OP_1;                                       
    for (unsigned i = 0; i < MAX_P2SH_SIGOPS; i++)                                       │      for (unsigned i = 0; i < MAX_P2SH_SIGOPS; i++)                                      
        fifteenSigops << ToByteVector(key[i%3].GetPubKey());                             │          fifteenSigops << ToByteVector(key[i%3].GetPubKey());                            
    fifteenSigops << OP_15 << OP_CHECKMULTISIG;                                          │      fifteenSigops << OP_15 << OP_CHECKMULTISIG;                                         
    keystore.AddCScript(fifteenSigops);                                                  │      BOOST_CHECK(keystore.AddCScript(fifteenSigops));                                    
    txFrom.vout[4].scriptPubKey = GetScriptForDestination(CScriptID(fifteenSigops));     │      txFrom.vout[4].scriptPubKey = GetScriptForDestination(ScriptHash(fifteenSigops));   
    txFrom.vout[4].nValue = 5000;                                                        │      txFrom.vout[4].nValue = 5000;                                                       
                                                                                         │                                                                                          
    // vout[5/6] are non-standard because they exceed MAX_P2SH_SIGOPS                    │      // vout[5/6] are non-standard because they exceed MAX_P2SH_SIGOPS                   
    CScript sixteenSigops; sixteenSigops << OP_16 << OP_CHECKMULTISIG;                   │      CScript sixteenSigops; sixteenSigops << OP_16 << OP_CHECKMULTISIG;                  
    keystore.AddCScript(sixteenSigops);                                                  │      BOOST_CHECK(keystore.AddCScript(sixteenSigops));                                    
    txFrom.vout[5].scriptPubKey = GetScriptForDestination(CScriptID(fifteenSigops));     │      txFrom.vout[5].scriptPubKey = GetScriptForDestination(ScriptHash(sixteenSigops));   
    txFrom.vout[5].nValue = 5000;                                                        │      txFrom.vout[5].nValue = 5000;                                                       
    CScript twentySigops; twentySigops << OP_CHECKMULTISIG;                              │      CScript twentySigops; twentySigops << OP_CHECKMULTISIG;                             
    keystore.AddCScript(twentySigops);                                                   │      BOOST_CHECK(keystore.AddCScript(twentySigops));                                     
    txFrom.vout[6].scriptPubKey = GetScriptForDestination(CScriptID(twentySigops));      │      txFrom.vout[6].scriptPubKey = GetScriptForDestination(ScriptHash(twentySigops));    
    txFrom.vout[6].nValue = 6000;                                                        │      txFrom.vout[6].nValue = 6000;                                                       
                                                                                         │                                                                                          
    coins.ModifyCoins(txFrom.GetHash())->FromTx(txFrom, 0);                              │      AddCoins(coins, CTransaction(txFrom), 0);                                           
                                                                                         │                                                                                          
    CMutableTransaction txTo;                                                            │      CMutableTransaction txTo;                                                           
    txTo.vout.resize(1);                                                                 │      txTo.vout.resize(1);                                                                
    txTo.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID());     │      txTo.vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[1].GetPubKey()));    
                                                                                         │                                                                                          
    txTo.vin.resize(5);                                                                  │      txTo.vin.resize(5);                                                                 
    for (int i = 0; i < 5; i++)                                                          │      for (int i = 0; i < 5; i++)                                                         
    {                                                                                    │      {                                                                                   
        txTo.vin[i].prevout.n = i;                                                       │          txTo.vin[i].prevout.n = i;                                                      
        txTo.vin[i].prevout.hash = txFrom.GetHash();                                     │          txTo.vin[i].prevout.hash = txFrom.GetHash();                                    
    }                                                                                    │      }                                                                                   
    BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 0, SIGHASH_ALL));                  │      BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 0, SIGHASH_ALL));   
    BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 1, SIGHASH_ALL));                  │      BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 1, SIGHASH_ALL));   
    BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 2, SIGHASH_ALL));                  │      BOOST_CHECK(SignSignature(keystore, CTransaction(txFrom), txTo, 2, SIGHASH_ALL));   
    // SignSignature doesn't know how to sign these. We're                               │      // SignSignature doesn't know how to sign these. We're                              
    // not testing validating signatures, so just create                                 │      // not testing validating signatures, so just create                                
    // dummy signatures that DO include the correct P2SH scripts:                        │      // dummy signatures that DO include the correct P2SH scripts:                       
    txTo.vin[3].scriptSig << OP_11 << OP_11 << std::vector<unsigned char>(oneAndTwo.begi │      txTo.vin[3].scriptSig << OP_11 << OP_11 << std::vector<unsigned char>(oneAndTwo.begi
    txTo.vin[4].scriptSig << std::vector<unsigned char>(fifteenSigops.begin(), fifteenSi │      txTo.vin[4].scriptSig << std::vector<unsigned char>(fifteenSigops.begin(), fifteenSi
                                                                                         │                                                                                          
    BOOST_CHECK(::AreInputsStandard(txTo, coins));                                       │      BOOST_CHECK(::AreInputsStandard(CTransaction(txTo), coins));                        
    // 22 P2SH sigops for all inputs (1 for vin[0], 6 for vin[3], 15 for vin[4]          │      // 22 P2SH sigops for all inputs (1 for vin[0], 6 for vin[3], 15 for vin[4]         
    BOOST_CHECK_EQUAL(GetP2SHSigOpCount(txTo, coins), 22U);                              │      BOOST_CHECK_EQUAL(GetP2SHSigOpCount(CTransaction(txTo), coins), 22U);               
                                                                                         │                                                                                          
    CMutableTransaction txToNonStd1;                                                     │      CMutableTransaction txToNonStd1;                                                    
    txToNonStd1.vout.resize(1);                                                          │      txToNonStd1.vout.resize(1);                                                         
    txToNonStd1.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID( │      txToNonStd1.vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[1].GetPubKey()
    txToNonStd1.vout[0].nValue = 1000;                                                   │      txToNonStd1.vout[0].nValue = 1000;                                                  
    txToNonStd1.vin.resize(1);                                                           │      txToNonStd1.vin.resize(1);                                                          
    txToNonStd1.vin[0].prevout.n = 5;                                                    │      txToNonStd1.vin[0].prevout.n = 5;                                                   
    txToNonStd1.vin[0].prevout.hash = txFrom.GetHash();                                  │      txToNonStd1.vin[0].prevout.hash = txFrom.GetHash();                                 
    txToNonStd1.vin[0].scriptSig << std::vector<unsigned char>(sixteenSigops.begin(), si │      txToNonStd1.vin[0].scriptSig << std::vector<unsigned char>(sixteenSigops.begin(), si
                                                                                         │                                                                                          
    BOOST_CHECK(!::AreInputsStandard(txToNonStd1, coins));                               │      BOOST_CHECK(!::AreInputsStandard(CTransaction(txToNonStd1), coins));                
    BOOST_CHECK_EQUAL(GetP2SHSigOpCount(txToNonStd1, coins), 16U);                       │      BOOST_CHECK_EQUAL(GetP2SHSigOpCount(CTransaction(txToNonStd1), coins), 16U);        
                                                                                         │                                                                                          
    CMutableTransaction txToNonStd2;                                                     │      CMutableTransaction txToNonStd2;                                                    
    txToNonStd2.vout.resize(1);                                                          │      txToNonStd2.vout.resize(1);                                                         
    txToNonStd2.vout[0].scriptPubKey = GetScriptForDestination(key[1].GetPubKey().GetID( │      txToNonStd2.vout[0].scriptPubKey = GetScriptForDestination(PKHash(key[1].GetPubKey()
    txToNonStd2.vout[0].nValue = 1000;                                                   │      txToNonStd2.vout[0].nValue = 1000;                                                  
    txToNonStd2.vin.resize(1);                                                           │      txToNonStd2.vin.resize(1);                                                          
    txToNonStd2.vin[0].prevout.n = 6;                                                    │      txToNonStd2.vin[0].prevout.n = 6;                                                   
    txToNonStd2.vin[0].prevout.hash = txFrom.GetHash();                                  │      txToNonStd2.vin[0].prevout.hash = txFrom.GetHash();                                 
    txToNonStd2.vin[0].scriptSig << std::vector<unsigned char>(twentySigops.begin(), twe │      txToNonStd2.vin[0].scriptSig << std::vector<unsigned char>(twentySigops.begin(), twe
                                                                                         │                                                                                          
    BOOST_CHECK(!::AreInputsStandard(txToNonStd2, coins));                               │      BOOST_CHECK(!::AreInputsStandard(CTransaction(txToNonStd2), coins));                
    BOOST_CHECK_EQUAL(GetP2SHSigOpCount(txToNonStd2, coins), 20U);                       │      BOOST_CHECK_EQUAL(GetP2SHSigOpCount(CTransaction(txToNonStd2), coins), 20U);        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactiontablemodel.cpp:523                                           │ bitcoin/src/qt/transactiontablemodel.cpp:522                                             
                                                                                         │                                                                                          
    if(!index.isValid())                                                                 │      if(!index.isValid())                                                                
        return QVariant();                                                               │          return QVariant();                                                              
    TransactionRecord *rec = static_cast<TransactionRecord*>(index.internalPointer());   │      TransactionRecord *rec = static_cast<TransactionRecord*>(index.internalPointer());  
                                                                                         │                                                                                          
    switch(role)                                                                         │      const auto column = static_cast<ColumnIndex>(index.column());                       
    {                                                                                    │      switch (role) {                                                                     
    case RawDecorationRole:                                                              │      case RawDecorationRole:                                                             
        switch(index.column())                                                           │          switch (column) {                                                               
        {                                                                                │                                                                                          
        case Status:                                                                     │          case Status:                                                                    
            return txStatusDecoration(rec);                                              │              return txStatusDecoration(rec);                                             
        case Watchonly:                                                                  │          case Watchonly:                                                                 
            return txWatchonlyDecoration(rec);                                           │              return txWatchonlyDecoration(rec);                                          
                                                                                         │          case Date: return {};                                                           
                                                                                         │          case Type: return {};                                                           
        case ToAddress:                                                                  │          case ToAddress:                                                                 
            return txAddressDecoration(rec);                                             │              return txAddressDecoration(rec);                                            
        }                                                                                │          case Amount: return {};                                                         
        break;                                                                           │          } // no default case, so the compiler can warn about missing cases              
                                                                                         │          assert(false);                                                                  
    case Qt::DecorationRole:                                                             │      case Qt::DecorationRole:                                                            
    {                                                                                    │      {                                                                                   
        QIcon icon = qvariant_cast<QIcon>(index.data(RawDecorationRole));                │          QIcon icon = qvariant_cast<QIcon>(index.data(RawDecorationRole));               
        return platformStyle->TextColorIcon(icon);                                       │          return platformStyle->TextColorIcon(icon);                                      
    }                                                                                    │      }                                                                                   
    case Qt::DisplayRole:                                                                │      case Qt::DisplayRole:                                                               
        switch(index.column())                                                           │          switch (column) {                                                               
        {                                                                                │          case Status: return {};                                                         
                                                                                         │          case Watchonly: return {};                                                      
        case Date:                                                                       │          case Date:                                                                      
            return formatTxDate(rec);                                                    │              return formatTxDate(rec);                                                   
        case Type:                                                                       │          case Type:                                                                      
            return formatTxType(rec);                                                    │              return formatTxType(rec);                                                   
        case ToAddress:                                                                  │          case ToAddress:                                                                 
            return formatTxToAddress(rec, false);                                        │              return formatTxToAddress(rec, false);                                       
        case Amount:                                                                     │          case Amount:                                                                    
            return formatTxAmount(rec, true, BitcoinUnits::separatorAlways);             │              return formatTxAmount(rec, true, BitcoinUnits::SeparatorStyle::ALWAYS);     
        }                                                                                │          } // no default case, so the compiler can warn about missing cases              
        break;                                                                           │          assert(false);                                                                  
    case Qt::EditRole:                                                                   │      case Qt::EditRole:                                                                  
        // Edit role is used for sorting, so return the unformatted values               │          // Edit role is used for sorting, so return the unformatted values              
        switch(index.column())                                                           │          switch (column) {                                                               
        {                                                                                │                                                                                          
        case Status:                                                                     │          case Status:                                                                    
            return QString::fromStdString(rec->status.sortKey);                          │              return QString::fromStdString(rec->status.sortKey);                         
        case Date:                                                                       │          case Date:                                                                      
            return rec->time;                                                            │              return rec->time;                                                           
        case Type:                                                                       │          case Type:                                                                      
            return formatTxType(rec);                                                    │              return formatTxType(rec);                                                   
        case Watchonly:                                                                  │          case Watchonly:                                                                 
            return (rec->involvesWatchAddress ? 1 : 0);                                  │              return (rec->involvesWatchAddress ? 1 : 0);                                 
        case ToAddress:                                                                  │          case ToAddress:                                                                 
            return formatTxToAddress(rec, true);                                         │              return formatTxToAddress(rec, true);                                        
        case Amount:                                                                     │          case Amount:                                                                    
            return qint64(rec->credit + rec->debit);                                     │              return qint64(rec->credit + rec->debit);                                    
        }                                                                                │          } // no default case, so the compiler can warn about missing cases              
        break;                                                                           │          assert(false);                                                                  
    case Qt::ToolTipRole:                                                                │      case Qt::ToolTipRole:                                                               
        return formatTooltip(rec);                                                       │          return formatTooltip(rec);                                                      
    case Qt::TextAlignmentRole:                                                          │      case Qt::TextAlignmentRole:                                                         
        return column_alignments[index.column()];                                        │          return column_alignments[index.column()];                                       
    case Qt::ForegroundRole:                                                             │      case Qt::ForegroundRole:                                                            
        // Use the "danger" color for abandoned transactions                             │          // Use the "danger" color for abandoned transactions                            
        if(rec->status.status == TransactionStatus::Abandoned)                           │          if(rec->status.status == TransactionStatus::Abandoned)                          
        {                                                                                │          {                                                                               
            return COLOR_TX_STATUS_DANGER;                                               │              return COLOR_TX_STATUS_DANGER;                                              
        }                                                                                │          }                                                                               
        // Non-confirmed (but not immature) as transactions are grey                     │          // Non-confirmed (but not immature) as transactions are grey                    
        if(!rec->status.countsForBalance && rec->status.status != TransactionStatus::Imm │          if(!rec->status.countsForBalance && rec->status.status != TransactionStatus::Imm
        {                                                                                │          {                                                                               
            return COLOR_UNCONFIRMED;                                                    │              return COLOR_UNCONFIRMED;                                                   
        }                                                                                │          }                                                                               
        if(index.column() == Amount && (rec->credit+rec->debit) < 0)                     │          if(index.column() == Amount && (rec->credit+rec->debit) < 0)                    
        {                                                                                │          {                                                                               
            return COLOR_NEGATIVE;                                                       │              return COLOR_NEGATIVE;                                                      
        }                                                                                │          }                                                                               
        if(index.column() == ToAddress)                                                  │          if(index.column() == ToAddress)                                                 
        {                                                                                │          {                                                                               
            return addressColor(rec);                                                    │              return addressColor(rec);                                                   
        }                                                                                │          }                                                                               
        break;                                                                           │          break;                                                                          
    case TypeRole:                                                                       │      case TypeRole:                                                                      
        return rec->type;                                                                │          return rec->type;                                                               
    case DateRole:                                                                       │      case DateRole:                                                                      
        return QDateTime::fromTime_t(static_cast<uint>(rec->time));                      │          return QDateTime::fromSecsSinceEpoch(rec->time);                                
    case WatchonlyRole:                                                                  │      case WatchonlyRole:                                                                 
        return rec->involvesWatchAddress;                                                │          return rec->involvesWatchAddress;                                               
    case WatchonlyDecorationRole:                                                        │      case WatchonlyDecorationRole:                                                       
        return txWatchonlyDecoration(rec);                                               │          return txWatchonlyDecoration(rec);                                              
    case LongDescriptionRole:                                                            │      case LongDescriptionRole:                                                           
        return priv->describe(rec, walletModel->getOptionsModel()->getDisplayUnit());    │          return priv->describe(walletModel->node(), walletModel->wallet(), rec, walletMod
    case AddressRole:                                                                    │      case AddressRole:                                                                   
        return QString::fromStdString(rec->address);                                     │          return QString::fromStdString(rec->address);                                    
    case LabelRole:                                                                      │      case LabelRole:                                                                     
        return walletModel->getAddressTableModel()->labelForAddress(QString::fromStdStri │          return walletModel->getAddressTableModel()->labelForAddress(QString::fromStdStri
    case AmountRole:                                                                     │      case AmountRole:                                                                    
        return qint64(rec->credit + rec->debit);                                         │          return qint64(rec->credit + rec->debit);                                        
    case TxIDRole:                                                                       │                                                                                          
        return rec->getTxID();                                                           │                                                                                          
    case TxHashRole:                                                                     │      case TxHashRole:                                                                    
        return QString::fromStdString(rec->hash.ToString());                             │          return rec->getTxHash();                                                        
    case TxHexRole:                                                                      │      case TxHexRole:                                                                     
        return priv->getTxHex(rec);                                                      │          return priv->getTxHex(walletModel->wallet(), rec);                              
    case TxPlainTextRole:                                                                │      case TxPlainTextRole:                                                               
        {                                                                                │          {                                                                               
            QString details;                                                             │              QString details;                                                            
            QDateTime date = QDateTime::fromTime_t(static_cast<uint>(rec->time));        │              QDateTime date = QDateTime::fromSecsSinceEpoch(rec->time);                  
            QString txLabel = walletModel->getAddressTableModel()->labelForAddress(QStri │              QString txLabel = walletModel->getAddressTableModel()->labelForAddress(QStri
                                                                                         │                                                                                          
            details.append(date.toString("M/d/yy HH:mm"));                               │              details.append(date.toString("M/d/yy HH:mm"));                              
            details.append(" ");                                                         │              details.append(" ");                                                        
            details.append(formatTxStatus(rec));                                         │              details.append(formatTxStatus(rec));                                        
            details.append(". ");                                                        │              details.append(". ");                                                       
            if(!formatTxType(rec).isEmpty()) {                                           │              if(!formatTxType(rec).isEmpty()) {                                          
                details.append(formatTxType(rec));                                       │                  details.append(formatTxType(rec));                                      
                details.append(" ");                                                     │                  details.append(" ");                                                    
            }                                                                            │              }                                                                           
            if(!rec->address.empty()) {                                                  │              if(!rec->address.empty()) {                                                 
                if(txLabel.isEmpty())                                                    │                  if(txLabel.isEmpty())                                                   
                    details.append(tr("(no label)") + " ");                              │                      details.append(tr("(no label)") + " ");                             
                else {                                                                   │                  else {                                                                  
                    details.append("(");                                                 │                      details.append("(");                                                
                    details.append(txLabel);                                             │                      details.append(txLabel);                                            
                    details.append(") ");                                                │                      details.append(") ");                                               
                }                                                                        │                  }                                                                       
                details.append(QString::fromStdString(rec->address));                    │                  details.append(QString::fromStdString(rec->address));                   
                details.append(" ");                                                     │                  details.append(" ");                                                    
            }                                                                            │              }                                                                           
            details.append(formatTxAmount(rec, false, BitcoinUnits::separatorNever));    │              details.append(formatTxAmount(rec, false, BitcoinUnits::SeparatorStyle::NEVE
            return details;                                                              │              return details;                                                             
        }                                                                                │          }                                                                               
    case ConfirmedRole:                                                                  │      case ConfirmedRole:                                                                 
        return rec->status.countsForBalance;                                             │          return rec->status.status == TransactionStatus::Status::Confirming || rec->statu
    case FormattedAmountRole:                                                            │      case FormattedAmountRole:                                                           
        // Used for copy/export, so don't include separators                             │          // Used for copy/export, so don't include separators                            
        return formatTxAmount(rec, false, BitcoinUnits::separatorNever);                 │          return formatTxAmount(rec, false, BitcoinUnits::SeparatorStyle::NEVER);         
    case StatusRole:                                                                     │      case StatusRole:                                                                    
        return rec->status.status;                                                       │          return rec->status.status;                                                      
    }                                                                                    │      }                                                                                   
    return QVariant();                                                                   │      return QVariant();                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/transactionrecord.cpp:33                                                 │ dogecoin/src/qt/transactionrecord.cpp:36                                                 
                                                                                         │                                                                                          
    QList<TransactionRecord> parts;                                                      │      QList<TransactionRecord> parts;                                                     
    int64_t nTime = wtx.time;                                                            │      int64_t nTime = wtx.GetTxTime();                                                    
    CAmount nCredit = wtx.credit;                                                        │      CAmount nCredit = wtx.GetCredit(ISMINE_ALL);                                        
    CAmount nDebit = wtx.debit;                                                          │      CAmount nDebit = wtx.GetDebit(ISMINE_ALL);                                          
    CAmount nNet = nCredit - nDebit;                                                     │      CAmount nNet = nCredit - nDebit;                                                    
    uint256 hash = wtx.tx->GetHash();                                                    │      uint256 hash = wtx.GetHash();                                                       
    std::map<std::string, std::string> mapValue = wtx.value_map;                         │      std::map<std::string, std::string> mapValue = wtx.mapValue;                         
                                                                                         │                                                                                          
    if (nNet > 0 || wtx.is_coinbase)                                                     │      if (nNet > 0 || wtx.IsCoinBase())                                                   
    {                                                                                    │      {                                                                                   
        //                                                                               │          //                                                                              
        // Credit                                                                        │          // Credit                                                                       
        //                                                                               │          //                                                                              
        for(unsigned int i = 0; i < wtx.tx->vout.size(); i++)                            │          for(unsigned int i = 0; i < wtx.tx->vout.size(); i++)                           
        {                                                                                │          {                                                                               
            const CTxOut& txout = wtx.tx->vout[i];                                       │              const CTxOut& txout = wtx.tx->vout[i];                                      
            isminetype mine = wtx.txout_is_mine[i];                                      │              isminetype mine = wallet->IsMine(txout);                                    
            if(mine)                                                                     │              if(mine)                                                                    
            {                                                                            │              {                                                                           
                TransactionRecord sub(hash, nTime);                                      │                  TransactionRecord sub(hash, nTime);                                     
                                                                                         │                  CTxDestination address;                                                 
                sub.idx = i; // vout index                                               │                  sub.idx = i; // vout index                                              
                sub.credit = txout.nValue;                                               │                  sub.credit = txout.nValue;                                              
                sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;                     │                  sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;                    
                if (wtx.txout_address_is_mine[i])                                        │                  if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, a
                {                                                                        │                  {                                                                       
                    // Received by Bitcoin Address                                       │                      // Received by Bitcoin Address                                      
                    sub.type = TransactionRecord::RecvWithAddress;                       │                      sub.type = TransactionRecord::RecvWithAddress;                      
                    sub.address = EncodeDestination(wtx.txout_address[i]);               │                      sub.address = CBitcoinAddress(address).ToString();                  
                }                                                                        │                  }                                                                       
                else                                                                     │                  else                                                                    
                {                                                                        │                  {                                                                       
                    // Received by IP connection (deprecated features), or a multisignat │                      // Received by IP connection (deprecated features), or a multisignat
                    sub.type = TransactionRecord::RecvFromOther;                         │                      sub.type = TransactionRecord::RecvFromOther;                        
                    sub.address = mapValue["from"];                                      │                      sub.address = mapValue["from"];                                     
                }                                                                        │                  }                                                                       
                if (wtx.is_coinbase)                                                     │                  if (wtx.IsCoinBase())                                                   
                {                                                                        │                  {                                                                       
                    // Generated                                                         │                      // Generated                                                        
                    sub.type = TransactionRecord::Generated;                             │                      sub.type = TransactionRecord::Generated;                            
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                parts.append(sub);                                                       │                  parts.append(sub);                                                      
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        bool involvesWatchAddress = false;                                               │          bool involvesWatchAddress = false;                                              
        isminetype fAllFromMe = ISMINE_SPENDABLE;                                        │          isminetype fAllFromMe = ISMINE_SPENDABLE;                                       
        for (const isminetype mine : wtx.txin_is_mine)                                   │          BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                   
        {                                                                                │          {                                                                               
                                                                                         │              isminetype mine = wallet->IsMine(txin);                                     
            if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;                    │              if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;                   
            if(fAllFromMe > mine) fAllFromMe = mine;                                     │              if(fAllFromMe > mine) fAllFromMe = mine;                                    
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        isminetype fAllToMe = ISMINE_SPENDABLE;                                          │          isminetype fAllToMe = ISMINE_SPENDABLE;                                         
        for (const isminetype mine : wtx.txout_is_mine)                                  │          BOOST_FOREACH(const CTxOut& txout, wtx.tx->vout)                                
        {                                                                                │          {                                                                               
                                                                                         │              isminetype mine = wallet->IsMine(txout);                                    
            if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;                    │              if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;                   
            if(fAllToMe > mine) fAllToMe = mine;                                         │              if(fAllToMe > mine) fAllToMe = mine;                                        
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (fAllFromMe && fAllToMe)                                                      │          if (fAllFromMe && fAllToMe)                                                     
        {                                                                                │          {                                                                               
            // Payment to self                                                           │              // Payment to self                                                          
            std::string address;                                                         │              CAmount nChange = wtx.GetChange();                                          
            for (auto it = wtx.txout_address.begin(); it != wtx.txout_address.end(); ++i │                                                                                          
                if (it != wtx.txout_address.begin()) address += ", ";                    │                                                                                          
                address += EncodeDestination(*it);                                       │                                                                                          
            }                                                                            │                                                                                          
                                                                                         │                                                                                          
            CAmount nChange = wtx.change;                                                │              parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "
            parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, a │                              -(nDebit - nChange), nCredit - nChange));                   
            parts.last().involvesWatchAddress = involvesWatchAddress;   // maybe pass to │              parts.last().involvesWatchAddress = involvesWatchAddress;   // maybe pass to
        }                                                                                │          }                                                                               
        else if (fAllFromMe)                                                             │          else if (fAllFromMe)                                                            
        {                                                                                │          {                                                                               
            //                                                                           │              //                                                                          
            // Debit                                                                     │              // Debit                                                                    
            //                                                                           │              //                                                                          
            CAmount nTxFee = nDebit - wtx.tx->GetValueOut();                             │              CAmount nTxFee = nDebit - wtx.tx->GetValueOut();                            
                                                                                         │                                                                                          
            for (unsigned int nOut = 0; nOut < wtx.tx->vout.size(); nOut++)              │              for (unsigned int nOut = 0; nOut < wtx.tx->vout.size(); nOut++)             
            {                                                                            │              {                                                                           
                const CTxOut& txout = wtx.tx->vout[nOut];                                │                  const CTxOut& txout = wtx.tx->vout[nOut];                               
                TransactionRecord sub(hash, nTime);                                      │                  TransactionRecord sub(hash, nTime);                                     
                sub.idx = nOut;                                                          │                  sub.idx = nOut;                                                         
                sub.involvesWatchAddress = involvesWatchAddress;                         │                  sub.involvesWatchAddress = involvesWatchAddress;                        
                                                                                         │                                                                                          
                if(wtx.txout_is_mine[nOut])                                              │                  if(wallet->IsMine(txout))                                               
                {                                                                        │                  {                                                                       
                    // Ignore parts sent to self, as this is usually the change          │                      // Ignore parts sent to self, as this is usually the change         
                    // from a transaction sent back to our own address.                  │                      // from a transaction sent back to our own address.                 
                    continue;                                                            │                      continue;                                                           
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                if (!std::get_if<CNoDestination>(&wtx.txout_address[nOut]))              │                  CTxDestination address;                                                 
                                                                                         │                  if (ExtractDestination(txout.scriptPubKey, address))                    
                {                                                                        │                  {                                                                       
                    // Sent to Bitcoin Address                                           │                      // Sent to Bitcoin Address                                          
                    sub.type = TransactionRecord::SendToAddress;                         │                      sub.type = TransactionRecord::SendToAddress;                        
                    sub.address = EncodeDestination(wtx.txout_address[nOut]);            │                      sub.address = CBitcoinAddress(address).ToString();                  
                }                                                                        │                  }                                                                       
                else                                                                     │                  else                                                                    
                {                                                                        │                  {                                                                       
                    // Sent to IP, or other non-address transaction like OP_EVAL         │                      // Sent to IP, or other non-address transaction like OP_EVAL        
                    sub.type = TransactionRecord::SendToOther;                           │                      sub.type = TransactionRecord::SendToOther;                          
                    sub.address = mapValue["to"];                                        │                      sub.address = mapValue["to"];                                       
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                CAmount nValue = txout.nValue;                                           │                  CAmount nValue = txout.nValue;                                          
                /* Add fee to first output */                                            │                  /* Add fee to first output */                                           
                if (nTxFee > 0)                                                          │                  if (nTxFee > 0)                                                         
                {                                                                        │                  {                                                                       
                    nValue += nTxFee;                                                    │                      nValue += nTxFee;                                                   
                    nTxFee = 0;                                                          │                      nTxFee = 0;                                                         
                }                                                                        │                  }                                                                       
                sub.debit = -nValue;                                                     │                  sub.debit = -nValue;                                                    
                                                                                         │                                                                                          
                parts.append(sub);                                                       │                  parts.append(sub);                                                      
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            //                                                                           │              //                                                                          
            // Mixed debit transaction, can't break down payees                          │              // Mixed debit transaction, can't break down payees                         
            //                                                                           │              //                                                                          
            parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nN │              parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nN
            parts.last().involvesWatchAddress = involvesWatchAddress;                    │              parts.last().involvesWatchAddress = involvesWatchAddress;                   
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return parts;                                                                        │      return parts;                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/askpassphrasedialog.cpp:90                                              │ bitcoin/src/qt/askpassphrasedialog.cpp:87                                                
                                                                                         │                                                                                          
    SecureString oldpass, newpass1, newpass2;                                            │      SecureString oldpass, newpass1, newpass2;                                           
    if(!model)                                                                           │      if (!model && mode != Encrypt)                                                      
        return;                                                                          │          return;                                                                         
    oldpass.reserve(MAX_PASSPHRASE_SIZE);                                                │      oldpass.reserve(MAX_PASSPHRASE_SIZE);                                               
    newpass1.reserve(MAX_PASSPHRASE_SIZE);                                               │      newpass1.reserve(MAX_PASSPHRASE_SIZE);                                              
    newpass2.reserve(MAX_PASSPHRASE_SIZE);                                               │      newpass2.reserve(MAX_PASSPHRASE_SIZE);                                              
    // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::strin │      // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::strin
    // Alternately, find a way to make this input mlock()'d to begin with.               │      // Alternately, find a way to make this input mlock()'d to begin with.              
    oldpass.assign(ui->passEdit1->text().toStdString().c_str());                         │      oldpass.assign(ui->passEdit1->text().toStdString().c_str());                        
    newpass1.assign(ui->passEdit2->text().toStdString().c_str());                        │      newpass1.assign(ui->passEdit2->text().toStdString().c_str());                       
    newpass2.assign(ui->passEdit3->text().toStdString().c_str());                        │      newpass2.assign(ui->passEdit3->text().toStdString().c_str());                       
                                                                                         │                                                                                          
    secureClearPassFields();                                                             │      secureClearPassFields();                                                            
                                                                                         │                                                                                          
    switch(mode)                                                                         │      switch(mode)                                                                        
    {                                                                                    │      {                                                                                   
    case Encrypt: {                                                                      │      case Encrypt: {                                                                     
        if(newpass1.empty() || newpass2.empty())                                         │          if(newpass1.empty() || newpass2.empty())                                        
        {                                                                                │          {                                                                               
            // Cannot encrypt with empty passphrase                                      │              // Cannot encrypt with empty passphrase                                     
            break;                                                                       │              break;                                                                      
        }                                                                                │          }                                                                               
        QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wal │          QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wal
                 tr("Warning: If you encrypt your wallet and lose your passphrase, you w │                   tr("Warning: If you encrypt your wallet and lose your passphrase, you w
                 QMessageBox::Yes|QMessageBox::Cancel,                                   │                   QMessageBox::Yes|QMessageBox::Cancel,                                  
                 QMessageBox::Cancel);                                                   │                   QMessageBox::Cancel);                                                  
        if(retval == QMessageBox::Yes)                                                   │          if(retval == QMessageBox::Yes)                                                  
        {                                                                                │          {                                                                               
            if(newpass1 == newpass2)                                                     │              if(newpass1 == newpass2)                                                    
            {                                                                            │              {                                                                           
                if(model->setWalletEncrypted(true, newpass1))                            │                  QString encryption_reminder = tr("Remember that encrypting your wallet c
                {                                                                        │                  "your bitcoins from being stolen by malware infecting your computer."); 
                    QMessageBox::warning(this, tr("Wallet encrypted"),                   │                  if (m_passphrase_out) {                                                 
                                                                                         │                      m_passphrase_out->assign(newpass1);                                 
                                                                                         │                      QMessageBox::warning(this, tr("Wallet to be encrypted"),            
                                         "<qt>" +                                        │                                           "<qt>" +                                       
                                         tr("%1 will close now to finish the encryption  │                                           tr("Your wallet is about to be encrypted. ") + 
                                         "Remember that encrypting your wallet cannot fu │                                                                                          
                                         "your dogecoins from being stolen by malware in │                                                                                          
                                         "<br><br><b>" +                                 │                                                                                          
                                         tr("IMPORTANT: Any previous backups you have ma │                                                                                          
                                         "should be replaced with the newly generated, e │                                                                                          
                                         "For security reasons, previous backups of the  │                                                                                          
                                         "will become useless as soon as you start using │                                                                                          
                                         "</b></qt>");                                   │                                           "</b></qt>");                                  
                    QApplication::quit();                                                │                  } else {                                                                
                }                                                                        │                      assert(model != nullptr);                                           
                else                                                                     │                      if (model->setWalletEncrypted(newpass1)) {                          
                {                                                                        │                          QMessageBox::warning(this, tr("Wallet encrypted"),              
                    QMessageBox::critical(this, tr("Wallet encryption failed"),          │                                               "<qt>" +                                   
                                         tr("Wallet encryption failed due to an internal │                                               tr("Your wallet is now encrypted. ") + encr
                                                                                         │                                               "<br><br><b>" +                            
                                                                                         │                                               tr("IMPORTANT: Any previous backups you hav
                                                                                         │                                               "should be replaced with the newly generate
                                                                                         │                                               "For security reasons, previous backups of 
                                                                                         │                                               "will become useless as soon as you start u
                                                                                         │                                               "</b></qt>");                              
                                                                                         │                      } else {                                                            
                                                                                         │                          QMessageBox::critical(this, tr("Wallet encryption failed"),     
                                                                                         │                                               tr("Wallet encryption failed due to an inte
                                                                                         │                      }                                                                   
                }                                                                        │                  }                                                                       
                QDialog::accept(); // Success                                            │                  QDialog::accept(); // Success                                           
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                QMessageBox::critical(this, tr("Wallet encryption failed"),              │                  QMessageBox::critical(this, tr("Wallet encryption failed"),             
                                     tr("The supplied passphrases do not match."));      │                                       tr("The supplied passphrases do not match."));     
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            QDialog::reject(); // Cancelled                                              │              QDialog::reject(); // Cancelled                                             
        }                                                                                │          }                                                                               
        } break;                                                                         │          } break;                                                                        
    case Unlock:                                                                         │      case Unlock:                                                                        
        if(!model->setWalletLocked(false, oldpass))                                      │          try {                                                                           
        {                                                                                │              if (!model->setWalletLocked(false, oldpass)) {                              
            QMessageBox::critical(this, tr("Wallet unlock failed"),                      │                  QMessageBox::critical(this, tr("Wallet unlock failed"),                 
                                  tr("The passphrase entered for the wallet decryption w │                                        tr("The passphrase entered for the wallet decrypti
        }                                                                                │              } else {                                                                    
        else                                                                             │                  QDialog::accept(); // Success                                           
        {                                                                                │              }                                                                           
            QDialog::accept(); // Success                                                │          } catch (const std::runtime_error& e) {                                         
        }                                                                                │              QMessageBox::critical(this, tr("Wallet unlock failed"), e.what());          
        break;                                                                           │                                                                                          
    case Decrypt:                                                                        │                                                                                          
        if(!model->setWalletEncrypted(false, oldpass))                                   │                                                                                          
        {                                                                                │                                                                                          
            QMessageBox::critical(this, tr("Wallet decryption failed"),                  │                                                                                          
                                  tr("The passphrase entered for the wallet decryption w │                                                                                          
        }                                                                                │                                                                                          
        else                                                                             │                                                                                          
        {                                                                                │                                                                                          
            QDialog::accept(); // Success                                                │                                                                                          
        }                                                                                │          }                                                                               
        break;                                                                           │          break;                                                                          
    case ChangePass:                                                                     │      case ChangePass:                                                                    
        if(newpass1 == newpass2)                                                         │          if(newpass1 == newpass2)                                                        
        {                                                                                │          {                                                                               
            if(model->changePassphrase(oldpass, newpass1))                               │              if(model->changePassphrase(oldpass, newpass1))                              
            {                                                                            │              {                                                                           
                QMessageBox::information(this, tr("Wallet encrypted"),                   │                  QMessageBox::information(this, tr("Wallet encrypted"),                  
                                     tr("Wallet passphrase was successfully changed.")); │                                       tr("Wallet passphrase was successfully changed."));
                QDialog::accept(); // Success                                            │                  QDialog::accept(); // Success                                           
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                QMessageBox::critical(this, tr("Wallet encryption failed"),              │                  QMessageBox::critical(this, tr("Wallet encryption failed"),             
                                     tr("The passphrase entered for the wallet decryptio │                                       tr("The passphrase entered for the wallet decryptio
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            QMessageBox::critical(this, tr("Wallet encryption failed"),                  │              QMessageBox::critical(this, tr("Wallet encryption failed"),                 
                                 tr("The supplied passphrases do not match."));          │                                   tr("The supplied passphrases do not match."));         
        }                                                                                │          }                                                                               
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/validation.cpp:3498                                                         │ dogecoin/src/validation.cpp:3114                                                         
                                                                                         │                                                                                          
    const int nHeight = pindexPrev == nullptr ? 0 : pindexPrev->nHeight + 1;             │      const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1;               
                                                                                         │      const CChainParams& chainParams = Params();                                         
                                                                                         │      const Consensus::Params& consensusParams = chainParams.GetConsensus(nHeight);       
                                                                                         │                                                                                          
    // Enforce BIP113 (Median Time Past).                                                │      // Start enforcing BIP113 (Median Time Past) using versionbits logic.               
                                                                                         │      // Dogecoin: We probably want to disable this                                       
    int nLockTimeFlags = 0;                                                              │      int nLockTimeFlags = 0;                                                             
    if (DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_CSV)) { │      if (VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_CSV, version
        assert(pindexPrev != nullptr);                                                   │                                                                                          
        nLockTimeFlags |= LOCKTIME_MEDIAN_TIME_PAST;                                     │          nLockTimeFlags |= LOCKTIME_MEDIAN_TIME_PAST;                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    int64_t nLockTimeCutoff = (nLockTimeFlags & LOCKTIME_MEDIAN_TIME_PAST)               │      int64_t nLockTimeCutoff = (nLockTimeFlags & LOCKTIME_MEDIAN_TIME_PAST)              
                              ? pindexPrev->GetMedianTimePast()                          │                                ? pindexPrev->GetMedianTimePast()                         
                              : block.GetBlockTime();                                    │                                : block.GetBlockTime();                                   
                                                                                         │                                                                                          
    // Check that all transactions are finalized                                         │      // Check that all transactions are finalized                                        
    for (const auto& tx : block.vtx) {                                                   │      for (const auto& tx : block.vtx) {                                                  
        if (!IsFinalTx(*tx, nHeight, nLockTimeCutoff)) {                                 │          if (!IsFinalTx(*tx, nHeight, nLockTimeCutoff)) {                                
            return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-txns-nonfi │              return state.DoS(10, false, REJECT_INVALID, "bad-txns-nonfinal", false, "non
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Enforce rule that the coinbase starts with serialized block height                │      // Enforce rule that the coinbase starts with serialized block height               
    if (DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_HEIGHTI │      if (nHeight >= consensusParams.BIP34Height)                                         
    {                                                                                    │      {                                                                                   
        CScript expect = CScript() << nHeight;                                           │          CScript expect = CScript() << nHeight;                                          
        if (block.vtx[0]->vin[0].scriptSig.size() < expect.size() ||                     │          if (block.vtx[0]->vin[0].scriptSig.size() < expect.size() ||                    
            !std::equal(expect.begin(), expect.end(), block.vtx[0]->vin[0].scriptSig.beg │              !std::equal(expect.begin(), expect.end(), block.vtx[0]->vin[0].scriptSig.beg
            return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cb-height" │              return state.DoS(100, false, REJECT_INVALID, "bad-cb-height", false, "block 
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Validation for witness commitments.                                               │      // Validation for witness commitments.                                              
    // * We compute the witness hash (which is the hash including witnesses) of all the  │      // * We compute the witness hash (which is the hash including witnesses) of all the 
    //   coinbase (where 0x0000....0000 is used instead).                                │      //   coinbase (where 0x0000....0000 is used instead).                               
    // * The coinbase scriptWitness is a stack of a single 32-byte vector, containing a  │      // * The coinbase scriptWitness is a stack of a single 32-byte vector, containing a 
    // * We build a merkle tree with all those witness hashes as leaves (similar to the  │      // * We build a merkle tree with all those witness hashes as leaves (similar to the 
    // * There must be at least one output whose scriptPubKey is a single 36-byte push,  │      // * There must be at least one output whose scriptPubKey is a single 36-byte push, 
    //   {0xaa, 0x21, 0xa9, 0xed}, and the following 32 bytes are SHA256^2(witness root, │      //   {0xaa, 0x21, 0xa9, 0xed}, and the following 32 bytes are SHA256^2(witness root,
    //   multiple, the last one is used.                                                 │      //   multiple, the last one is used.                                                
    bool fHaveWitness = false;                                                           │      bool fHaveWitness = false;                                                          
    if (DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT) │      if (VersionBitsState(pindexPrev, consensusParams, Consensus::DEPLOYMENT_SEGWIT, vers
        int commitpos = GetWitnessCommitmentIndex(block);                                │          int commitpos = GetWitnessCommitmentIndex(block);                               
        if (commitpos != NO_WITNESS_COMMITMENT) {                                        │          if (commitpos != -1) {                                                          
            bool malleated = false;                                                      │              bool malleated = false;                                                     
            uint256 hashWitness = BlockWitnessMerkleRoot(block, &malleated);             │              uint256 hashWitness = BlockWitnessMerkleRoot(block, &malleated);            
            // The malleation check is ignored; as the transaction tree itself           │              // The malleation check is ignored; as the transaction tree itself          
            // already does not permit it, it is impossible to trigger in the            │              // already does not permit it, it is impossible to trigger in the           
            // witness tree.                                                             │              // witness tree.                                                            
            if (block.vtx[0]->vin[0].scriptWitness.stack.size() != 1 || block.vtx[0]->vi │              if (block.vtx[0]->vin[0].scriptWitness.stack.size() != 1 || block.vtx[0]->vi
                return state.Invalid(BlockValidationResult::BLOCK_MUTATED, "bad-witness- │                  return state.DoS(100, false, REJECT_INVALID, "bad-witness-nonce-size", t
            }                                                                            │              }                                                                           
            CHash256().Write(hashWitness).Write(block.vtx[0]->vin[0].scriptWitness.stack │              CHash256().Write(hashWitness.begin(), 32).Write(&block.vtx[0]->vin[0].script
            if (memcmp(hashWitness.begin(), &block.vtx[0]->vout[commitpos].scriptPubKey[ │              if (memcmp(hashWitness.begin(), &block.vtx[0]->vout[commitpos].scriptPubKey[
                return state.Invalid(BlockValidationResult::BLOCK_MUTATED, "bad-witness- │                  return state.DoS(100, false, REJECT_INVALID, "bad-witness-merkle-match",
            }                                                                            │              }                                                                           
            fHaveWitness = true;                                                         │              fHaveWitness = true;                                                        
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // No witness data is allowed in blocks that don't commit to witness data, as this w │      // No witness data is allowed in blocks that don't commit to witness data, as this w
    if (!fHaveWitness) {                                                                 │      if (!fHaveWitness) {                                                                
      for (const auto& tx : block.vtx) {                                                 │          for (size_t i = 0; i < block.vtx.size(); i++) {                                 
            if (tx->HasWitness()) {                                                      │              if (block.vtx[i]->HasWitness()) {                                           
                return state.Invalid(BlockValidationResult::BLOCK_MUTATED, "unexpected-w │                  return state.DoS(100, false, REJECT_INVALID, "unexpected-witness", true,
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // After the coinbase witness reserved value and commitment are verified,            │      // After the coinbase witness nonce and commitment are verified,                    
    // we can check if the block weight passes (before we've checked the                 │      // we can check if the block weight passes (before we've checked the                
    // coinbase witness, it would be possible for the weight to be too                   │      // coinbase witness, it would be possible for the weight to be too                  
    // large by filling up the coinbase witness, which doesn't change                    │      // large by filling up the coinbase witness, which doesn't change                   
    // the block hash, so we couldn't mark the block as permanently                      │      // the block hash, so we couldn't mark the block as permanently                     
    // failed).                                                                          │      // failed).                                                                         
    if (GetBlockWeight(block) > MAX_BLOCK_WEIGHT) {                                      │      if (GetBlockWeight(block) > MAX_BLOCK_WEIGHT) {                                     
        return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-blk-weight", s │          return state.DoS(100, false, REJECT_INVALID, "bad-blk-weight", false, strprintf(
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/net_processing.cpp:475                                                     │ bitcoin/src/net_processing.cpp:1085                                                      
                                                                                         │                                                                                          
    if (count == 0)                                                                      │      if (count == 0)                                                                     
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    vBlocks.reserve(vBlocks.size() + count);                                             │      vBlocks.reserve(vBlocks.size() + count);                                            
    CNodeState *state = State(nodeid);                                                   │      CNodeState *state = State(nodeid);                                                  
    assert(state != NULL);                                                               │      assert(state != nullptr);                                                           
                                                                                         │                                                                                          
    // Make sure pindexBestKnownBlock is up to date, we'll need it.                      │      // Make sure pindexBestKnownBlock is up to date, we'll need it.                     
    ProcessBlockAvailability(nodeid);                                                    │      ProcessBlockAvailability(nodeid);                                                   
                                                                                         │                                                                                          
    if (state->pindexBestKnownBlock == NULL || state->pindexBestKnownBlock->nChainWork < │      if (state->pindexBestKnownBlock == nullptr || state->pindexBestKnownBlock->nChainWor
        // This peer has nothing interesting.                                            │          // This peer has nothing interesting.                                           
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (state->pindexLastCommonBlock == NULL) {                                          │      if (state->pindexLastCommonBlock == nullptr) {                                      
        // Bootstrap quickly by guessing a parent of our best tip is the forking point.  │          // Bootstrap quickly by guessing a parent of our best tip is the forking point. 
        // Guessing wrong in either direction is not a problem.                          │          // Guessing wrong in either direction is not a problem.                         
        state->pindexLastCommonBlock = chainActive[std::min(state->pindexBestKnownBlock- │          state->pindexLastCommonBlock = m_chainman.ActiveChain()[std::min(state->pindexBe
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // If the peer reorganized, our previous pindexLastCommonBlock may not be an ancesto │      // If the peer reorganized, our previous pindexLastCommonBlock may not be an ancesto
    // of its current tip anymore. Go back enough to fix that.                           │      // of its current tip anymore. Go back enough to fix that.                          
    state->pindexLastCommonBlock = LastCommonAncestor(state->pindexLastCommonBlock, stat │      state->pindexLastCommonBlock = LastCommonAncestor(state->pindexLastCommonBlock, stat
    if (state->pindexLastCommonBlock == state->pindexBestKnownBlock)                     │      if (state->pindexLastCommonBlock == state->pindexBestKnownBlock)                    
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
                                                                                         │      const Consensus::Params& consensusParams = m_chainparams.GetConsensus();            
    std::vector<const CBlockIndex*> vToFetch;                                            │      std::vector<const CBlockIndex*> vToFetch;                                           
    const CBlockIndex *pindexWalk = state->pindexLastCommonBlock;                        │      const CBlockIndex *pindexWalk = state->pindexLastCommonBlock;                       
    // Never fetch further than the best block we know the peer has, or more than BLOCK_ │      // Never fetch further than the best block we know the peer has, or more than BLOCK_
    // linked block we have in common with this peer. The +1 is so we can detect stallin │      // linked block we have in common with this peer. The +1 is so we can detect stallin
    // download that next block if the window were 1 larger.                             │      // download that next block if the window were 1 larger.                            
    int nWindowEnd = state->pindexLastCommonBlock->nHeight + BLOCK_DOWNLOAD_WINDOW;      │      int nWindowEnd = state->pindexLastCommonBlock->nHeight + BLOCK_DOWNLOAD_WINDOW;     
    int nMaxHeight = std::min<int>(state->pindexBestKnownBlock->nHeight, nWindowEnd + 1) │      int nMaxHeight = std::min<int>(state->pindexBestKnownBlock->nHeight, nWindowEnd + 1)
    NodeId waitingfor = -1;                                                              │      NodeId waitingfor = -1;                                                             
    while (pindexWalk->nHeight < nMaxHeight) {                                           │      while (pindexWalk->nHeight < nMaxHeight) {                                          
        // Read up to 128 (or more, if more blocks than that are needed) successors of p │          // Read up to 128 (or more, if more blocks than that are needed) successors of p
        // pindexBestKnownBlock) into vToFetch. We fetch 128, because CBlockIndex::GetAn │          // pindexBestKnownBlock) into vToFetch. We fetch 128, because CBlockIndex::GetAn
        // as iterating over ~100 CBlockIndex* entries anyway.                           │          // as iterating over ~100 CBlockIndex* entries anyway.                          
        int nToFetch = std::min(nMaxHeight - pindexWalk->nHeight, std::max<int>(count -  │          int nToFetch = std::min(nMaxHeight - pindexWalk->nHeight, std::max<int>(count - 
        vToFetch.resize(nToFetch);                                                       │          vToFetch.resize(nToFetch);                                                      
        pindexWalk = state->pindexBestKnownBlock->GetAncestor(pindexWalk->nHeight + nToF │          pindexWalk = state->pindexBestKnownBlock->GetAncestor(pindexWalk->nHeight + nToF
        vToFetch[nToFetch - 1] = pindexWalk;                                             │          vToFetch[nToFetch - 1] = pindexWalk;                                            
        for (unsigned int i = nToFetch - 1; i > 0; i--) {                                │          for (unsigned int i = nToFetch - 1; i > 0; i--) {                               
            vToFetch[i - 1] = vToFetch[i]->pprev;                                        │              vToFetch[i - 1] = vToFetch[i]->pprev;                                       
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // Iterate over those blocks in vToFetch (in forward direction), adding the ones │          // Iterate over those blocks in vToFetch (in forward direction), adding the ones
        // are not yet downloaded and not in flight to vBlocks. In the mean time, update │          // are not yet downloaded and not in flight to vBlocks. In the meantime, update 
        // pindexLastCommonBlock as long as all ancestors are already downloaded, or if  │          // pindexLastCommonBlock as long as all ancestors are already downloaded, or if 
        // already part of our chain (and therefore don't need it even if pruned).       │          // already part of our chain (and therefore don't need it even if pruned).      
        BOOST_FOREACH(const CBlockIndex* pindex, vToFetch) {                             │          for (const CBlockIndex* pindex : vToFetch) {                                    
            if (!pindex->IsValid(BLOCK_VALID_TREE)) {                                    │              if (!pindex->IsValid(BLOCK_VALID_TREE)) {                                   
                // We consider the chain that this peer is on invalid.                   │                  // We consider the chain that this peer is on invalid.                  
                return;                                                                  │                  return;                                                                 
            }                                                                            │              }                                                                           
            if (!State(nodeid)->fHaveWitness && IsWitnessEnabled(pindex->pprev, consensu │              if (!State(nodeid)->fHaveWitness && DeploymentActiveAt(*pindex, consensusPar
                // We wouldn't download this block or its descendants from this peer.    │                  // We wouldn't download this block or its descendants from this peer.   
                return;                                                                  │                  return;                                                                 
            }                                                                            │              }                                                                           
            if (pindex->nStatus & BLOCK_HAVE_DATA || chainActive.Contains(pindex)) {     │              if (pindex->nStatus & BLOCK_HAVE_DATA || m_chainman.ActiveChain().Contains(p
                if (pindex->nChainTx)                                                    │                  if (pindex->HaveTxsDownloaded())                                        
                    state->pindexLastCommonBlock = pindex;                               │                      state->pindexLastCommonBlock = pindex;                              
            } else if (mapBlocksInFlight.count(pindex->GetBlockHash()) == 0) {           │              } else if (!IsBlockRequested(pindex->GetBlockHash())) {                     
                // The block is not already downloaded, and not yet in flight.           │                  // The block is not already downloaded, and not yet in flight.          
                if (pindex->nHeight > nWindowEnd) {                                      │                  if (pindex->nHeight > nWindowEnd) {                                     
                    // We reached the end of the window.                                 │                      // We reached the end of the window.                                
                    if (vBlocks.size() == 0 && waitingfor != nodeid) {                   │                      if (vBlocks.size() == 0 && waitingfor != nodeid) {                  
                        // We aren't able to fetch anything, but we would be if the down │                          // We aren't able to fetch anything, but we would be if the down
                        nodeStaller = waitingfor;                                        │                          nodeStaller = waitingfor;                                       
                    }                                                                    │                      }                                                                   
                    return;                                                              │                      return;                                                             
                }                                                                        │                  }                                                                       
                vBlocks.push_back(pindex);                                               │                  vBlocks.push_back(pindex);                                              
                if (vBlocks.size() == count) {                                           │                  if (vBlocks.size() == count) {                                          
                    return;                                                              │                      return;                                                             
                }                                                                        │                  }                                                                       
            } else if (waitingfor == -1) {                                               │              } else if (waitingfor == -1) {                                              
                // This is the first already-in-flight block.                            │                  // This is the first already-in-flight block.                           
                waitingfor = mapBlocksInFlight[pindex->GetBlockHash()].first;            │                  waitingfor = mapBlocksInFlight[pindex->GetBlockHash()].first;           
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/cuckoocache_tests.cpp:278                                              │ dogecoin/src/test/cuckoocache_tests.cpp:301                                              
                                                                                         │                                                                                          
    // This test checks that for a simulation of network activity, the fresh hit         │      // This test checks that for a simulation of network activity, the fresh hit        
    // rate is never below 99%, and the number of times that it is worse than            │      // rate is never below 99%, and the number of times that it is worse than           
    // 99.9% are less than 1% of the time.                                               │      // 99.9% are less than 1% of the time.                                              
    double min_hit_rate = 0.99;                                                          │      double min_hit_rate = 0.99;                                                         
    double tight_hit_rate = 0.999;                                                       │      double tight_hit_rate = 0.999;                                                      
    double max_rate_less_than_tight_hit_rate = 0.01;                                     │      double max_rate_less_than_tight_hit_rate = 0.01;                                    
    // A cache that meets this specification is therefore shown to have a hit            │      // A cache that meets this specification is therefore shown to have a hit           
    // rate of at least tight_hit_rate * (1 - max_rate_less_than_tight_hit_rate) +       │      // rate of at least tight_hit_rate * (1 - max_rate_less_than_tight_hit_rate) +      
    // min_hit_rate*max_rate_less_than_tight_hit_rate = 0.999*99%+0.99*1% == 99.89%      │      // min_hit_rate*max_rate_less_than_tight_hit_rate = 0.999*99%+0.99*1% == 99.89%     
    // hit rate with low variance.                                                       │      // hit rate with low variance.                                                      
                                                                                         │                                                                                          
    // We use deterministic values, but this test has also passed on many                │      // We use deterministic values, but this test has also passed on many               
    // iterations with non-deterministic values, so it isn't "overfit" to the            │      // iterations with non-deterministic values, so it isn't "overfit" to the           
    // specific entropy in FastRandomContext(true) and implementation of the             │      // specific entropy in FastRandomContext(true) and implementation of the            
    // cache.                                                                            │      // cache.                                                                           
    SeedInsecureRand(SeedRand::ZEROS);                                                   │      insecure_rand = FastRandomContext(true);                                            
                                                                                         │                                                                                          
    // block_activity models a chunk of network activity. n_insert elements are          │      // block_activity models a chunk of network activity. n_insert elements are         
    // added to the cache. The first and last n/4 are stored for removal later           │      // adde to the cache. The first and last n/4 are stored for removal later           
    // and the middle n/2 are not stored. This models a network which uses half          │      // and the middle n/2 are not stored. This models a network which uses half         
    // the signatures of recently (since the last block) added transactions              │      // the signatures of recently (since the last block) added transactions             
    // immediately and never uses the other half.                                        │      // immediately and never uses the other half.                                       
    struct block_activity {                                                              │      struct block_activity {                                                             
        std::vector<uint256> reads;                                                      │          std::vector<uint256> reads;                                                     
        block_activity(uint32_t n_insert, Cache& c) : reads()                            │          block_activity(uint32_t n_insert, Cache& c) : reads()                           
        {                                                                                │          {                                                                               
            std::vector<uint256> inserts;                                                │              std::vector<uint256> inserts;                                               
            inserts.resize(n_insert);                                                    │              inserts.resize(n_insert);                                                   
            reads.reserve(n_insert / 2);                                                 │              reads.reserve(n_insert / 2);                                                
            for (uint32_t i = 0; i < n_insert; ++i) {                                    │              for (uint32_t i = 0; i < n_insert; ++i) {                                   
                uint32_t* ptr = (uint32_t*)inserts[i].begin();                           │                  uint32_t* ptr = (uint32_t*)inserts[i].begin();                          
                for (uint8_t j = 0; j < 8; ++j)                                          │                  for (uint8_t j = 0; j < 8; ++j)                                         
                    *(ptr++) = InsecureRand32();                                         │                      *(ptr++) = insecure_rand.rand32();                                  
            }                                                                            │              }                                                                           
            for (uint32_t i = 0; i < n_insert / 4; ++i)                                  │              for (uint32_t i = 0; i < n_insert / 4; ++i)                                 
                reads.push_back(inserts[i]);                                             │                  reads.push_back(inserts[i]);                                            
            for (uint32_t i = n_insert - (n_insert / 4); i < n_insert; ++i)              │              for (uint32_t i = n_insert - (n_insert / 4); i < n_insert; ++i)             
                reads.push_back(inserts[i]);                                             │                  reads.push_back(inserts[i]);                                            
            for (const auto& h : inserts)                                                │              for (auto h : inserts)                                                      
                c.insert(h);                                                             │                  c.insert(h);                                                            
        }                                                                                │          }                                                                               
    };                                                                                   │      };                                                                                  
                                                                                         │                                                                                          
    const uint32_t BLOCK_SIZE = 1000;                                                    │      const uint32_t BLOCK_SIZE = 10000;                                                  
    // We expect window size 60 to perform reasonably given that each epoch              │      // We expect window size 60 to perform reasonably given that each epoch             
    // stores 45% of the cache size (~472k).                                             │      // stores 45% of the cache size (~472k).                                            
    const uint32_t WINDOW_SIZE = 60;                                                     │      const uint32_t WINDOW_SIZE = 60;                                                    
    const uint32_t POP_AMOUNT = (BLOCK_SIZE / WINDOW_SIZE) / 2;                          │      const uint32_t POP_AMOUNT = (BLOCK_SIZE / WINDOW_SIZE) / 2;                         
    const double load = 10;                                                              │      const double load = 10;                                                             
    const size_t megabytes = 4;                                                          │      const size_t megabytes = 32;                                                        
    const size_t bytes = megabytes * (1 << 20);                                          │      const size_t bytes = megabytes * (1 << 20);                                         
    const uint32_t n_insert = static_cast<uint32_t>(load * (bytes / sizeof(uint256)));   │      const uint32_t n_insert = static_cast<uint32_t>(load * (bytes / sizeof(uint256)));  
                                                                                         │                                                                                          
    std::vector<block_activity> hashes;                                                  │      std::vector<block_activity> hashes;                                                 
    Cache set{};                                                                         │      Cache set{};                                                                        
    set.setup_bytes(bytes);                                                              │      set.setup_bytes(bytes);                                                             
    hashes.reserve(n_insert / BLOCK_SIZE);                                               │      hashes.reserve(n_insert / BLOCK_SIZE);                                              
    std::deque<block_activity> last_few;                                                 │      std::deque<block_activity> last_few;                                                
    uint32_t out_of_tight_tolerance = 0;                                                 │      uint32_t out_of_tight_tolerance = 0;                                                
    uint32_t total = n_insert / BLOCK_SIZE;                                              │      uint32_t total = n_insert / BLOCK_SIZE;                                             
    // we use the deque last_few to model a sliding window of blocks. at each            │      // we use the deque last_few to model a sliding window of blocks. at each           
    // step, each of the last WINDOW_SIZE block_activities checks the cache for          │      // step, each of the last WINDOW_SIZE block_activities checks the cache for         
    // POP_AMOUNT of the hashes that they inserted, and marks these erased.              │      // POP_AMOUNT of the hashes that they inserted, and marks these erased.             
    for (uint32_t i = 0; i < total; ++i) {                                               │      for (uint32_t i = 0; i < total; ++i) {                                              
        if (last_few.size() == WINDOW_SIZE)                                              │          if (last_few.size() == WINDOW_SIZE)                                             
            last_few.pop_front();                                                        │              last_few.pop_front();                                                       
        last_few.emplace_back(BLOCK_SIZE, set);                                          │          last_few.emplace_back(BLOCK_SIZE, set);                                         
        uint32_t count = 0;                                                              │          uint32_t count = 0;                                                             
        for (auto& act : last_few)                                                       │          for (auto& act : last_few)                                                      
            for (uint32_t k = 0; k < POP_AMOUNT; ++k) {                                  │              for (uint32_t k = 0; k < POP_AMOUNT; ++k) {                                 
                count += set.contains(act.reads.back(), true);                           │                  count += set.contains(act.reads.back(), true);                          
                act.reads.pop_back();                                                    │                  act.reads.pop_back();                                                   
            }                                                                            │              }                                                                           
        // We use last_few.size() rather than WINDOW_SIZE for the correct                │          // We use last_few.size() rather than WINDOW_SIZE for the correct               
        // behavior on the first WINDOW_SIZE iterations where the deque is not           │          // behavior on the first WINDOW_SIZE iterations where the deque is not          
        // full yet.                                                                     │          // full yet.                                                                    
        double hit = (double(count)) / (last_few.size() * POP_AMOUNT);                   │          double hit = (double(count)) / (last_few.size() * POP_AMOUNT);                  
        // Loose Check that hit rate is above min_hit_rate                               │          // Loose Check that hit rate is above min_hit_rate                              
        BOOST_CHECK(hit > min_hit_rate);                                                 │          BOOST_CHECK(hit > min_hit_rate);                                                
        // Tighter check, count number of times we are less than tight_hit_rate          │          // Tighter check, count number of times we are less than tight_hit_rate         
        // (and implicitly, greater than min_hit_rate)                                   │          // (and implicityly, greater than min_hit_rate)                                 
        out_of_tight_tolerance += hit < tight_hit_rate;                                  │          out_of_tight_tolerance += hit < tight_hit_rate;                                 
    }                                                                                    │      }                                                                                   
    // Check that being out of tolerance happens less than                               │      // Check that being out of tolerance happens less than                              
    // max_rate_less_than_tight_hit_rate of the time                                     │      // max_rate_less_than_tight_hit_rate of the time                                    
    BOOST_CHECK(double(out_of_tight_tolerance) / double(total) < max_rate_less_than_tigh │      BOOST_CHECK(double(out_of_tight_tolerance) / double(total) < max_rate_less_than_tigh
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/multisig_tests.cpp:42                                                 │ bitcoin/src/test/multisig_tests.cpp:39                                                   
                                                                                         │                                                                                          
    unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC;                   │      unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC;                  
                                                                                         │                                                                                          
    ScriptError err;                                                                     │      ScriptError err;                                                                    
    CKey key[4];                                                                         │      CKey key[4];                                                                        
    CAmount amount = 0;                                                                  │      CAmount amount = 0;                                                                 
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
        key[i].MakeNewKey(true);                                                         │          key[i].MakeNewKey(true);                                                        
                                                                                         │                                                                                          
    CScript a_and_b;                                                                     │      CScript a_and_b;                                                                    
    a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey │      a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey
                                                                                         │                                                                                          
    CScript a_or_b;                                                                      │      CScript a_or_b;                                                                     
    a_or_b << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey( │      a_or_b << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey(
                                                                                         │                                                                                          
    CScript escrow;                                                                      │      CScript escrow;                                                                     
    escrow << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey( │      escrow << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey(
                                                                                         │                                                                                          
    CMutableTransaction txFrom;  // Funding transaction                                  │      CMutableTransaction txFrom;  // Funding transaction                                 
    txFrom.vout.resize(3);                                                               │      txFrom.vout.resize(3);                                                              
    txFrom.vout[0].scriptPubKey = a_and_b;                                               │      txFrom.vout[0].scriptPubKey = a_and_b;                                              
    txFrom.vout[1].scriptPubKey = a_or_b;                                                │      txFrom.vout[1].scriptPubKey = a_or_b;                                               
    txFrom.vout[2].scriptPubKey = escrow;                                                │      txFrom.vout[2].scriptPubKey = escrow;                                               
                                                                                         │                                                                                          
    CMutableTransaction txTo[3]; // Spending transaction                                 │      CMutableTransaction txTo[3]; // Spending transaction                                
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        txTo[i].vin.resize(1);                                                           │          txTo[i].vin.resize(1);                                                          
        txTo[i].vout.resize(1);                                                          │          txTo[i].vout.resize(1);                                                         
        txTo[i].vin[0].prevout.n = i;                                                    │          txTo[i].vin[0].prevout.n = i;                                                   
        txTo[i].vin[0].prevout.hash = txFrom.GetHash();                                  │          txTo[i].vin[0].prevout.hash = txFrom.GetHash();                                 
        txTo[i].vout[0].nValue = 1;                                                      │          txTo[i].vout[0].nValue = 1;                                                     
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    std::vector<CKey> keys;                                                              │      std::vector<CKey> keys;                                                             
    CScript s;                                                                           │      CScript s;                                                                          
                                                                                         │                                                                                          
    // Test a AND b:                                                                     │      // Test a AND b:                                                                    
    keys.assign(1,key[0]);                                                               │      keys.assign(1,key[0]);                                                              
    keys.push_back(key[1]);                                                              │      keys.push_back(key[1]);                                                             
    s = sign_multisig(a_and_b, keys, txTo[0], 0);                                        │      s = sign_multisig(a_and_b, keys, CTransaction(txTo[0]), 0);                         
    BOOST_CHECK(VerifyScript(s, a_and_b, NULL, flags, MutableTransactionSignatureChecker │      BOOST_CHECK(VerifyScript(s, a_and_b, nullptr, flags, MutableTransactionSignatureChec
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
                                                                                         │                                                                                          
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
    {                                                                                    │      {                                                                                   
        keys.assign(1,key[i]);                                                           │          keys.assign(1,key[i]);                                                          
        s = sign_multisig(a_and_b, keys, txTo[0], 0);                                    │          s = sign_multisig(a_and_b, keys, CTransaction(txTo[0]), 0);                     
        BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, NULL, flags, MutableTransactionSig │          BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, nullptr, flags, MutableTransaction
        BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_INVALID_STACK_OPERATION, ScriptErrorString │          BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_INVALID_STACK_OPERATION, ScriptErrorString
                                                                                         │                                                                                          
        keys.assign(1,key[1]);                                                           │          keys.assign(1,key[1]);                                                          
        keys.push_back(key[i]);                                                          │          keys.push_back(key[i]);                                                         
        s = sign_multisig(a_and_b, keys, txTo[0], 0);                                    │          s = sign_multisig(a_and_b, keys, CTransaction(txTo[0]), 0);                     
        BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, NULL, flags, MutableTransactionSig │          BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, nullptr, flags, MutableTransaction
        BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));       │          BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));      
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Test a OR b:                                                                      │      // Test a OR b:                                                                     
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
    {                                                                                    │      {                                                                                   
        keys.assign(1,key[i]);                                                           │          keys.assign(1,key[i]);                                                          
        s = sign_multisig(a_or_b, keys, txTo[1], 0);                                     │          s = sign_multisig(a_or_b, keys, CTransaction(txTo[1]), 0);                      
        if (i == 0 || i == 1)                                                            │          if (i == 0 || i == 1)                                                           
        {                                                                                │          {                                                                               
            BOOST_CHECK_MESSAGE(VerifyScript(s, a_or_b, NULL, flags, MutableTransactionS │              BOOST_CHECK_MESSAGE(VerifyScript(s, a_or_b, nullptr, flags, MutableTransacti
            BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));           │              BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));          
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            BOOST_CHECK_MESSAGE(!VerifyScript(s, a_or_b, NULL, flags, MutableTransaction │              BOOST_CHECK_MESSAGE(!VerifyScript(s, a_or_b, nullptr, flags, MutableTransact
            BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));   │              BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));  
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    s.clear();                                                                           │      s.clear();                                                                          
    s << OP_0 << OP_1;                                                                   │      s << OP_0 << OP_1;                                                                  
    BOOST_CHECK(!VerifyScript(s, a_or_b, NULL, flags, MutableTransactionSignatureChecker │      BOOST_CHECK(!VerifyScript(s, a_or_b, nullptr, flags, MutableTransactionSignatureChec
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_SIG_DER, ScriptErrorString(err));              │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_SIG_DER, ScriptErrorString(err));             
                                                                                         │                                                                                          
                                                                                         │                                                                                          
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
        for (int j = 0; j < 4; j++)                                                      │          for (int j = 0; j < 4; j++)                                                     
        {                                                                                │          {                                                                               
            keys.assign(1,key[i]);                                                       │              keys.assign(1,key[i]);                                                      
            keys.push_back(key[j]);                                                      │              keys.push_back(key[j]);                                                     
            s = sign_multisig(escrow, keys, txTo[2], 0);                                 │              s = sign_multisig(escrow, keys, CTransaction(txTo[2]), 0);                  
            if (i < j && i < 3 && j < 3)                                                 │              if (i < j && i < 3 && j < 3)                                                
            {                                                                            │              {                                                                           
                BOOST_CHECK_MESSAGE(VerifyScript(s, escrow, NULL, flags, MutableTransact │                  BOOST_CHECK_MESSAGE(VerifyScript(s, escrow, nullptr, flags, MutableTrans
                BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));       │                  BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));      
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                BOOST_CHECK_MESSAGE(!VerifyScript(s, escrow, NULL, flags, MutableTransac │                  BOOST_CHECK_MESSAGE(!VerifyScript(s, escrow, nullptr, flags, MutableTran
                BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err) │                  BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err)
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/splashscreen.cpp:33                                                     │ bitcoin/src/qt/splashscreen.cpp:32                                                       
                                                                                         │                                                                                          
    // set reference point, paddings                                                     │      // set reference point, paddings                                                    
    int paddingRight            = 50;                                                    │      int paddingRight            = 50;                                                   
    int paddingTop              = 50;                                                    │      int paddingTop              = 50;                                                   
    int titleVersionVSpace      = 17;                                                    │      int titleVersionVSpace      = 17;                                                   
    int titleCopyrightVSpace    = 40;                                                    │      int titleCopyrightVSpace    = 40;                                                   
                                                                                         │                                                                                          
    float fontFactor            = 1.0;                                                   │      float fontFactor            = 1.0;                                                  
    float devicePixelRatio      = 1.0;                                                   │      float devicePixelRatio      = 1.0;                                                  
#if QT_VERSION > 0x050100                                                                │      devicePixelRatio = static_cast<QGuiApplication*>(QCoreApplication::instance())->devi
    devicePixelRatio = ((QGuiApplication*)QCoreApplication::instance())->devicePixelRati │                                                                                          
#endif                                                                                   │                                                                                          
                                                                                         │                                                                                          
    // define text to place                                                              │      // define text to place                                                             
    QString titleText       = tr(PACKAGE_NAME);                                          │      QString titleText       = PACKAGE_NAME;                                             
    QString versionText     = QString("Version %1").arg(QString::fromStdString(FormatFul │      QString versionText     = QString("Version %1").arg(QString::fromStdString(FormatFul
    QString copyrightText   = QString::fromUtf8(CopyrightHolders(strprintf("\xc2\xA9 %u- │      QString copyrightText   = QString::fromUtf8(CopyrightHolders(strprintf("\xc2\xA9 %u-
    QString titleAddText    = networkStyle->getTitleAddText();                           │      QString titleAddText    = networkStyle->getTitleAddText();                          
                                                                                         │                                                                                          
    QString font            = "Comic Sans MS";                                           │      QString font            = QApplication::font().toString();                          
                                                                                         │                                                                                          
    // create a bitmap according to device pixelratio                                    │      // create a bitmap according to device pixelratio                                   
    QSize splashSize(480*devicePixelRatio,320*devicePixelRatio);                         │      QSize splashSize(480*devicePixelRatio,320*devicePixelRatio);                        
    pixmap = QPixmap(splashSize);                                                        │      pixmap = QPixmap(splashSize);                                                       
                                                                                         │                                                                                          
#if QT_VERSION > 0x050100                                                                │                                                                                          
    // change to HiDPI if it makes sense                                                 │      // change to HiDPI if it makes sense                                                
    pixmap.setDevicePixelRatio(devicePixelRatio);                                        │      pixmap.setDevicePixelRatio(devicePixelRatio);                                       
#endif                                                                                   │                                                                                          
                                                                                         │                                                                                          
    QPainter pixPaint(&pixmap);                                                          │      QPainter pixPaint(&pixmap);                                                         
    pixPaint.setPen(QColor(100,100,100));                                                │      pixPaint.setPen(QColor(100,100,100));                                               
                                                                                         │                                                                                          
    // draw a slightly radial gradient                                                   │      // draw a slightly radial gradient                                                  
    QRadialGradient gradient(QPoint(0,0), splashSize.width()/devicePixelRatio);          │      QRadialGradient gradient(QPoint(0,0), splashSize.width()/devicePixelRatio);         
    gradient.setColorAt(0, Qt::white);                                                   │      gradient.setColorAt(0, Qt::white);                                                  
    gradient.setColorAt(1, QColor(247,247,247));                                         │      gradient.setColorAt(1, QColor(247,247,247));                                        
    QRect rGradient(QPoint(0,0), splashSize);                                            │      QRect rGradient(QPoint(0,0), splashSize);                                           
    pixPaint.fillRect(rGradient, gradient);                                              │      pixPaint.fillRect(rGradient, gradient);                                             
                                                                                         │                                                                                          
    // draw the bitcoin icon, expected size of PNG: 1024x1024                            │      // draw the bitcoin icon, expected size of PNG: 1024x1024                           
    QRect rectIcon(QPoint(-150,-122), QSize(430,430));                                   │      QRect rectIcon(QPoint(-150,-122), QSize(430,430));                                  
                                                                                         │                                                                                          
    const QSize requiredSize(1024,1024);                                                 │      const QSize requiredSize(1024,1024);                                                
    QPixmap icon(networkStyle->getAppIcon().pixmap(requiredSize));                       │      QPixmap icon(networkStyle->getAppIcon().pixmap(requiredSize));                      
                                                                                         │                                                                                          
    pixPaint.drawPixmap(rectIcon, icon);                                                 │      pixPaint.drawPixmap(rectIcon, icon);                                                
                                                                                         │                                                                                          
    // check font size and drawing with                                                  │      // check font size and drawing with                                                 
    pixPaint.setFont(QFont(font, 33*fontFactor));                                        │      pixPaint.setFont(QFont(font, 33*fontFactor));                                       
    QFontMetrics fm = pixPaint.fontMetrics();                                            │      QFontMetrics fm = pixPaint.fontMetrics();                                           
    int titleTextWidth = fm.width(titleText);                                            │      int titleTextWidth = GUIUtil::TextWidth(fm, titleText);                             
    if (titleTextWidth > 176) {                                                          │      if (titleTextWidth > 176) {                                                         
        fontFactor = fontFactor * 176 / titleTextWidth;                                  │          fontFactor = fontFactor * 176 / titleTextWidth;                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    pixPaint.setFont(QFont(font, 33*fontFactor));                                        │      pixPaint.setFont(QFont(font, 33*fontFactor));                                       
    fm = pixPaint.fontMetrics();                                                         │      fm = pixPaint.fontMetrics();                                                        
    titleTextWidth  = fm.width(titleText);                                               │      titleTextWidth  = GUIUtil::TextWidth(fm, titleText);                                
    pixPaint.drawText(pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight,paddin │      pixPaint.drawText(pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight,paddin
                                                                                         │                                                                                          
    pixPaint.setFont(QFont(font, 15*fontFactor));                                        │      pixPaint.setFont(QFont(font, 15*fontFactor));                                       
                                                                                         │                                                                                          
    // if the version string is to long, reduce size                                     │      // if the version string is too long, reduce size                                   
    fm = pixPaint.fontMetrics();                                                         │      fm = pixPaint.fontMetrics();                                                        
    int versionTextWidth  = fm.width(versionText);                                       │      int versionTextWidth  = GUIUtil::TextWidth(fm, versionText);                        
    if(versionTextWidth > titleTextWidth+paddingRight-10) {                              │      if(versionTextWidth > titleTextWidth+paddingRight-10) {                             
        pixPaint.setFont(QFont(font, 10*fontFactor));                                    │          pixPaint.setFont(QFont(font, 10*fontFactor));                                   
        titleVersionVSpace -= 5;                                                         │          titleVersionVSpace -= 5;                                                        
    }                                                                                    │      }                                                                                   
    pixPaint.drawText(pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight+2,padd │      pixPaint.drawText(pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight+2,padd
                                                                                         │                                                                                          
    // draw copyright stuff                                                              │      // draw copyright stuff                                                             
    {                                                                                    │      {                                                                                   
        pixPaint.setFont(QFont(font, 10*fontFactor));                                    │          pixPaint.setFont(QFont(font, 10*fontFactor));                                   
        const int x = pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight;       │          const int x = pixmap.width()/devicePixelRatio-titleTextWidth-paddingRight;      
        const int y = paddingTop+titleCopyrightVSpace;                                   │          const int y = paddingTop+titleCopyrightVSpace;                                  
        QRect copyrightRect(x, y, pixmap.width() - x - paddingRight, pixmap.height() - y │          QRect copyrightRect(x, y, pixmap.width() - x - paddingRight, pixmap.height() - y
        pixPaint.drawText(copyrightRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap │          pixPaint.drawText(copyrightRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // draw additional text if special network                                           │      // draw additional text if special network                                          
    if(!titleAddText.isEmpty()) {                                                        │      if(!titleAddText.isEmpty()) {                                                       
        QFont boldFont = QFont(font, 10*fontFactor);                                     │          QFont boldFont = QFont(font, 10*fontFactor);                                    
        boldFont.setWeight(QFont::Bold);                                                 │          boldFont.setWeight(QFont::Bold);                                                
        pixPaint.setFont(boldFont);                                                      │          pixPaint.setFont(boldFont);                                                     
        fm = pixPaint.fontMetrics();                                                     │          fm = pixPaint.fontMetrics();                                                    
        int titleAddTextWidth  = fm.width(titleAddText);                                 │          int titleAddTextWidth  = GUIUtil::TextWidth(fm, titleAddText);                  
        pixPaint.drawText(pixmap.width()/devicePixelRatio-titleAddTextWidth-10,15,titleA │          pixPaint.drawText(pixmap.width()/devicePixelRatio-titleAddTextWidth-10,15,titleA
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    pixPaint.end();                                                                      │      pixPaint.end();                                                                     
                                                                                         │                                                                                          
    // Set window title                                                                  │      // Set window title                                                                 
    setWindowTitle(titleText + " " + titleAddText);                                      │      setWindowTitle(titleText + " " + titleAddText);                                     
                                                                                         │                                                                                          
    // Resize window and move to center of desktop, disallow resizing                    │      // Resize window and move to center of desktop, disallow resizing                   
    QRect r(QPoint(), QSize(pixmap.size().width()/devicePixelRatio,pixmap.size().height( │      QRect r(QPoint(), QSize(pixmap.size().width()/devicePixelRatio,pixmap.size().height(
    resize(r.size());                                                                    │      resize(r.size());                                                                   
    setFixedSize(r.size());                                                              │      setFixedSize(r.size());                                                             
    move(QApplication::desktop()->screenGeometry().center() - r.center());               │      move(QGuiApplication::primaryScreen()->geometry().center() - r.center());           
                                                                                         │                                                                                          
    subscribeToCoreSignals();                                                            │      installEventFilter(this);                                                           
                                                                                         │                                                                                          
                                                                                         │      GUIUtil::handleCloseWindowShortcut(this);                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:1089                                                 │ bitcoin/src/test/script_tests.cpp:1091                                                   
                                                                                         │                                                                                          
    ScriptError err;                                                                     │      ScriptError err;                                                                    
    CKey key1, key2, key3, key4;                                                         │      CKey key1, key2, key3, key4;                                                        
    key1.MakeNewKey(true);                                                               │      key1.MakeNewKey(true);                                                              
    key2.MakeNewKey(false);                                                              │      key2.MakeNewKey(false);                                                             
    key3.MakeNewKey(true);                                                               │      key3.MakeNewKey(true);                                                              
    key4.MakeNewKey(false);                                                              │      key4.MakeNewKey(false);                                                             
                                                                                         │                                                                                          
    CScript scriptPubKey23;                                                              │      CScript scriptPubKey23;                                                             
    scriptPubKey23 << OP_2 << ToByteVector(key1.GetPubKey()) << ToByteVector(key2.GetPub │      scriptPubKey23 << OP_2 << ToByteVector(key1.GetPubKey()) << ToByteVector(key2.GetPub
                                                                                         │                                                                                          
    CMutableTransaction txFrom23 = BuildCreditingTransaction(scriptPubKey23);            │      const CTransaction txFrom23{BuildCreditingTransaction(scriptPubKey23)};             
    CMutableTransaction txTo23 = BuildSpendingTransaction(CScript(), CScriptWitness(), t │      CMutableTransaction txTo23 = BuildSpendingTransaction(CScript(), CScriptWitness(), t
                                                                                         │                                                                                          
    std::vector<CKey> keys;                                                              │      std::vector<CKey> keys;                                                             
    keys.push_back(key1); keys.push_back(key2);                                          │      keys.push_back(key1); keys.push_back(key2);                                         
    CScript goodsig1 = sign_multisig(scriptPubKey23, keys, txTo23);                      │      CScript goodsig1 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));       
    BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key1); keys.push_back(key3);                                          │      keys.push_back(key1); keys.push_back(key3);                                         
    CScript goodsig2 = sign_multisig(scriptPubKey23, keys, txTo23);                      │      CScript goodsig2 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));       
    BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key2); keys.push_back(key3);                                          │      keys.push_back(key2); keys.push_back(key3);                                         
    CScript goodsig3 = sign_multisig(scriptPubKey23, keys, txTo23);                      │      CScript goodsig3 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));       
    BOOST_CHECK(VerifyScript(goodsig3, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(VerifyScript(goodsig3, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key2); keys.push_back(key2); // Can't re-use sig                      │      keys.push_back(key2); keys.push_back(key2); // Can't re-use sig                     
    CScript badsig1 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig1 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key2); keys.push_back(key1); // sigs must be in correct order         │      keys.push_back(key2); keys.push_back(key1); // sigs must be in correct order        
    CScript badsig2 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig2 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig2, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig2, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key3); keys.push_back(key2); // sigs must be in correct order         │      keys.push_back(key3); keys.push_back(key2); // sigs must be in correct order        
    CScript badsig3 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig3 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig3, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig3, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key4); keys.push_back(key2); // sigs must match pubkeys               │      keys.push_back(key4); keys.push_back(key2); // sigs must match pubkeys              
    CScript badsig4 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig4 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig4, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig4, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    keys.clear();                                                                        │      keys.clear();                                                                       
    keys.push_back(key1); keys.push_back(key4); // sigs must match pubkeys               │      keys.push_back(key1); keys.push_back(key4); // sigs must match pubkeys              
    CScript badsig5 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig5 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig5, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig5, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    keys.clear(); // Must have signatures                                                │      keys.clear(); // Must have signatures                                               
    CScript badsig6 = sign_multisig(scriptPubKey23, keys, txTo23);                       │      CScript badsig6 = sign_multisig(scriptPubKey23, keys, CTransaction(txTo23));        
    BOOST_CHECK(!VerifyScript(badsig6, scriptPubKey23, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig6, scriptPubKey23, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_INVALID_STACK_OPERATION, ScriptErrorString(err │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_INVALID_STACK_OPERATION, ScriptErrorString(err
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/transaction_tests.cpp:193                                              │ bitcoin/src/test/transaction_tests.cpp:281                                               
                                                                                         │                                                                                          
        UniValue test = tests[idx];                                                      │          UniValue test = tests[idx];                                                     
        std::string strTest = test.write();                                              │          std::string strTest = test.write();                                             
        if (test[0].isArray())                                                           │          if (test[0].isArray())                                                          
        {                                                                                │          {                                                                               
            if (test.size() != 3 || !test[1].isStr() || !test[2].isStr())                │              if (test.size() != 3 || !test[1].isStr() || !test[2].isStr())               
            {                                                                            │              {                                                                           
                BOOST_ERROR("Bad test: " << strTest);                                    │                  BOOST_ERROR("Bad test: " << strTest);                                   
                continue;                                                                │                  continue;                                                               
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            std::map<COutPoint, CScript> mapprevOutScriptPubKeys;                        │              std::map<COutPoint, CScript> mapprevOutScriptPubKeys;                       
            std::map<COutPoint, int64_t> mapprevOutValues;                               │              std::map<COutPoint, int64_t> mapprevOutValues;                              
            UniValue inputs = test[0].get_array();                                       │              UniValue inputs = test[0].get_array();                                      
            bool fValid = true;                                                          │              bool fValid = true;                                                         
            for (unsigned int inpIdx = 0; inpIdx < inputs.size(); inpIdx++) {            │              for (unsigned int inpIdx = 0; inpIdx < inputs.size(); inpIdx++) {           
                const UniValue& input = inputs[inpIdx];                                  │                  const UniValue& input = inputs[inpIdx];                                 
                if (!input.isArray()) {                                                  │                  if (!input.isArray()) {                                                 
                    fValid = false;                                                      │                      fValid = false;                                                     
                    break;                                                               │                      break;                                                              
                }                                                                        │                  }                                                                       
                UniValue vinput = input.get_array();                                     │                  UniValue vinput = input.get_array();                                    
                if (vinput.size() < 3 || vinput.size() > 4)                              │                  if (vinput.size() < 3 || vinput.size() > 4)                             
                {                                                                        │                  {                                                                       
                    fValid = false;                                                      │                      fValid = false;                                                     
                    break;                                                               │                      break;                                                              
                }                                                                        │                  }                                                                       
                COutPoint outpoint{uint256S(vinput[0].get_str()), uint32_t(vinput[1].get │                  COutPoint outpoint{uint256S(vinput[0].get_str()), uint32_t(vinput[1].get
                mapprevOutScriptPubKeys[outpoint] = ParseScript(vinput[2].get_str());    │                  mapprevOutScriptPubKeys[outpoint] = ParseScript(vinput[2].get_str());   
                if (vinput.size() >= 4)                                                  │                  if (vinput.size() >= 4)                                                 
                {                                                                        │                  {                                                                       
                    mapprevOutValues[outpoint] = vinput[3].get_int64();                  │                      mapprevOutValues[outpoint] = vinput[3].get_int64();                 
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            if (!fValid)                                                                 │              if (!fValid)                                                                
            {                                                                            │              {                                                                           
                BOOST_ERROR("Bad test: " << strTest);                                    │                  BOOST_ERROR("Bad test: " << strTest);                                   
                continue;                                                                │                  continue;                                                               
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            std::string transaction = test[1].get_str();                                 │              std::string transaction = test[1].get_str();                                
            CDataStream stream(ParseHex(transaction), SER_NETWORK, PROTOCOL_VERSION);    │              CDataStream stream(ParseHex(transaction), SER_NETWORK, PROTOCOL_VERSION );  
            CTransaction tx(deserialize, stream);                                        │              CTransaction tx(deserialize, stream);                                       
                                                                                         │                                                                                          
            TxValidationState state;                                                     │              TxValidationState state;                                                    
            BOOST_CHECK_MESSAGE(CheckTransaction(tx, state), strTest);                   │              if (!CheckTransaction(tx, state) || state.IsInvalid()) {                    
            BOOST_CHECK(state.IsValid());                                                │                  BOOST_CHECK_MESSAGE(test[2].get_str() == "BADTX", strTest);             
                                                                                         │                  continue;                                                               
                                                                                         │              }                                                                           
                                                                                         │                                                                                          
            PrecomputedTransactionData txdata(tx);                                       │              PrecomputedTransactionData txdata(tx);                                      
            unsigned int verify_flags = ParseScriptFlags(test[2].get_str());             │              unsigned int verify_flags = ParseScriptFlags(test[2].get_str());            
                                                                                         │                                                                                          
            // Check that the test gives a valid combination of flags (otherwise VerifyS │              // Check that the test gives a valid combination of flags (otherwise VerifyS
            if (~verify_flags != FillFlags(~verify_flags)) {                             │              if (verify_flags != FillFlags(verify_flags)) {                              
                BOOST_ERROR("Bad test flags: " << strTest);                              │                  BOOST_ERROR("Bad test flags: " << strTest);                             
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            BOOST_CHECK_MESSAGE(CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutVa │              // Not using FillFlags() in the main test, in order to detect invalid verify
                                "Tx unexpectedly failed: " << strTest);                  │              BOOST_CHECK_MESSAGE(CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutVa
                                                                                         │                                  "Tx unexpectedly passed: " << strTest);                 
                                                                                         │                                                                                          
            // Backwards compatibility of script verification flags: Removing any flag(s │              // Backwards compatibility of script verification flags: Adding any flag(s) 
            for (const auto& [name, flag] : mapFlagNames) {                              │              for (const auto& [name, flag] : mapFlagNames) {                             
                // Removing individual flags                                             │                  unsigned int flags = FillFlags(verify_flags | flag);                    
                unsigned int flags = TrimFlags(~(verify_flags | flag));                  │                  // Adding individual flags                                              
                if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags │                  if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags
                    BOOST_ERROR("Tx unexpectedly failed with flag " << name << " unset:  │                      BOOST_ERROR("Tx unexpectedly passed with flag " << name << " set: " 
                }                                                                        │                  }                                                                       
                // Removing random combinations of flags                                 │                  // Adding random combinations of flags                                  
                flags = TrimFlags(~(verify_flags | (unsigned int)InsecureRandBits(mapFla │                  flags = FillFlags(verify_flags | (unsigned int)InsecureRandBits(mapFlagN
                if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags │                  if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags
                    BOOST_ERROR("Tx unexpectedly failed with random flags " << ToString( │                      BOOST_ERROR("Tx unexpectedly passed with random flags " << name << "
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            // Check that flags are maximal: transaction should fail if any unset flags  │              // Check that flags are minimal: transaction should succeed if any set flags
            for (auto flags_excluding_one : ExcludeIndividualFlags(verify_flags)) {      │              for (auto flags_excluding_one : ExcludeIndividualFlags(verify_flags)) {     
                if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, ~flag │                  if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags
                    BOOST_ERROR("Too many flags unset: " << strTest);                    │                      BOOST_ERROR("Too many flags set: " << strTest);                     
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/net_processing.cpp:2177                                                    │ bitcoin/src/net_processing.cpp:3759                                                      
                                                                                         │                                                                                          
                                                                                         │          // Ignore blocktxn received while importing                                     
                                                                                         │          if (fImporting || fReindex) {                                                   
                                                                                         │              LogPrint(BCLog::NET, "Unexpected blocktxn message received from peer %d\n", 
                                                                                         │              return;                                                                     
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        BlockTransactions resp;                                                          │          BlockTransactions resp;                                                         
        vRecv >> resp;                                                                   │          vRecv >> resp;                                                                  
                                                                                         │                                                                                          
        std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();                     │          std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();                    
        bool fBlockRead = false;                                                         │          bool fBlockRead = false;                                                        
        {                                                                                │          {                                                                               
            LOCK(cs_main);                                                               │              LOCK(cs_main);                                                              
                                                                                         │                                                                                          
            std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::ite │              std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::ite
            if (it == mapBlocksInFlight.end() || !it->second.second->partialBlock ||     │              if (it == mapBlocksInFlight.end() || !it->second.second->partialBlock ||    
                    it->second.first != pfrom->GetId()) {                                │                      it->second.first != pfrom.GetId()) {                                
                LogPrint("net", "Peer %d sent us block transactions for block we weren't │                  LogPrint(BCLog::NET, "Peer %d sent us block transactions for block we we
                return true;                                                             │                  return;                                                                 
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            PartiallyDownloadedBlock& partialBlock = *it->second.second->partialBlock;   │              PartiallyDownloadedBlock& partialBlock = *it->second.second->partialBlock;  
            ReadStatus status = partialBlock.FillBlock(*pblock, resp.txn);               │              ReadStatus status = partialBlock.FillBlock(*pblock, resp.txn);              
            if (status == READ_STATUS_INVALID) {                                         │              if (status == READ_STATUS_INVALID) {                                        
                MarkBlockAsReceived(resp.blockhash); // Reset in-flight state in case of │                  RemoveBlockRequest(resp.blockhash); // Reset in-flight state in case Mis
                Misbehaving(pfrom->GetId(), 100);                                        │                  Misbehaving(pfrom.GetId(), 100, "invalid compact block/non-matching bloc
                LogPrintf("Peer %d sent us invalid compact block/non-matching block tran │                  return;                                                                 
                return true;                                                             │                                                                                          
            } else if (status == READ_STATUS_FAILED) {                                   │              } else if (status == READ_STATUS_FAILED) {                                  
                // Might have collided, fall back to getdata now :(                      │                  // Might have collided, fall back to getdata now :(                     
                std::vector<CInv> invs;                                                  │                  std::vector<CInv> invs;                                                 
                invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom, chainActive.Tip(),  │                  invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom), resp.blockhash)); 
                connman.PushMessage(pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));    │                  m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::GETDATA, invs));
            } else {                                                                     │              } else {                                                                    
                // Block is either okay, or possibly we received                         │                  // Block is either okay, or possibly we received                        
                // READ_STATUS_CHECKBLOCK_FAILED.                                        │                  // READ_STATUS_CHECKBLOCK_FAILED.                                       
                // Note that CheckBlock can only fail for one of a few reasons:          │                  // Note that CheckBlock can only fail for one of a few reasons:         
                // 1. bad-proof-of-work (impossible here, because we've already          │                  // 1. bad-proof-of-work (impossible here, because we've already         
                //    accepted the header)                                               │                  //    accepted the header)                                              
                // 2. merkleroot doesn't match the transactions given (already           │                  // 2. merkleroot doesn't match the transactions given (already          
                //    caught in FillBlock with READ_STATUS_FAILED, so                    │                  //    caught in FillBlock with READ_STATUS_FAILED, so                   
                //    impossible here)                                                   │                  //    impossible here)                                                  
                // 3. the block is otherwise invalid (eg invalid coinbase,               │                  // 3. the block is otherwise invalid (eg invalid coinbase,              
                //    block is too big, too many legacy sigops, etc).                    │                  //    block is too big, too many legacy sigops, etc).                   
                // So if CheckBlock failed, #3 is the only possibility.                  │                  // So if CheckBlock failed, #3 is the only possibility.                 
                // Under BIP 152, we don't DoS-ban unless proof of work is               │                  // Under BIP 152, we don't discourage the peer unless proof of work is  
                // invalid (we don't require all the stateless checks to have            │                  // invalid (we don't require all the stateless checks to have           
                // been run).  This is handled below, so just treat this as              │                  // been run).  This is handled below, so just treat this as             
                // though the block was successfully read, and rely on the               │                  // though the block was successfully read, and rely on the              
                // handling in ProcessNewBlock to ensure the block index is              │                  // handling in ProcessNewBlock to ensure the block index is             
                // updated, reject messages go out, etc.                                 │                  // updated, etc.                                                        
                MarkBlockAsReceived(resp.blockhash); // it is now an empty pointer       │                  RemoveBlockRequest(resp.blockhash); // it is now an empty pointer       
                fBlockRead = true;                                                       │                  fBlockRead = true;                                                      
                // mapBlockSource is only used for sending reject messages and DoS score │                  // mapBlockSource is used for potentially punishing peers and           
                // so the race between here and cs_main in ProcessNewBlock is fine.      │                  // updating which peers send us compact blocks, so the race             
                                                                                         │                  // between here and cs_main in ProcessNewBlock is fine.                 
                // BIP 152 permits peers to relay compact blocks after validating        │                  // BIP 152 permits peers to relay compact blocks after validating       
                // the header only; we should not punish peers if the block turns        │                  // the header only; we should not punish peers if the block turns       
                // out to be invalid.                                                    │                  // out to be invalid.                                                   
                mapBlockSource.emplace(resp.blockhash, std::make_pair(pfrom->GetId(), fa │                  mapBlockSource.emplace(resp.blockhash, std::make_pair(pfrom.GetId(), fal
            }                                                                            │              }                                                                           
        } // Don't hold cs_main when we call into ProcessNewBlock                        │          } // Don't hold cs_main when we call into ProcessNewBlock                       
        if (fBlockRead) {                                                                │          if (fBlockRead) {                                                               
            bool fNewBlock = false;                                                      │                                                                                          
            // Since we requested this block (it was in mapBlocksInFlight), force it to  │              // Since we requested this block (it was in mapBlocksInFlight), force it to 
            // even if it would not be a candidate for new tip (missing previous block,  │              // even if it would not be a candidate for new tip (missing previous block, 
            ProcessNewBlock(chainparams, pblock, true, &fNewBlock);                      │              // This bypasses some anti-DoS logic in AcceptBlock (eg to prevent          
            if (fNewBlock)                                                               │              // disk-space attacks), but this should be safe due to the                  
                pfrom->nLastBlockTime = GetTime();                                       │              // protections in the compact block handler -- see related comment          
                                                                                         │              // in compact block optimistic reconstruction handling.                     
                                                                                         │              ProcessBlock(pfrom, pblock, /*force_processing=*/true);                     
        }                                                                                │          }                                                                               
                                                                                         │          return;                                                                         
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/wallet/db.cpp:356                                                          │ bitcoin/src/wallet/bdb.cpp:456                                                           
                                                                                         │                                                                                          
            LOCK(bitdb.cs_db);                                                           │          {                                                                               
            if (!bitdb.mapFileUseCount.count(strFile) || bitdb.mapFileUseCount[strFile]  │              LOCK(cs_db);                                                                
                                                                                         │              const std::string strFile = fs::PathToString(m_filename);                   
                                                                                         │              if (m_refcount <= 0) {                                                      
                // Flush log data to the dat file                                        │                  // Flush log data to the dat file                                       
                bitdb.CloseDb(strFile);                                                  │                  env->CloseDb(m_filename);                                               
                bitdb.CheckpointLSN(strFile);                                            │                  env->CheckpointLSN(strFile);                                            
                bitdb.mapFileUseCount.erase(strFile);                                    │                  m_refcount = -1;                                                        
                                                                                         │                                                                                          
                bool fSuccess = true;                                                    │                  bool fSuccess = true;                                                   
                LogPrintf("CDB::Rewrite: Rewriting %s...\n", strFile);                   │                  LogPrintf("BerkeleyBatch::Rewrite: Rewriting %s...\n", strFile);        
                string strFileRes = strFile + ".rewrite";                                │                  std::string strFileRes = strFile + ".rewrite";                          
                { // surround usage of db with extra {}                                  │                  { // surround usage of db with extra {}                                 
                    CDB db(strFile.c_str(), "r");                                        │                      BerkeleyBatch db(*this, true);                                      
                    Db* pdbCopy = new Db(bitdb.dbenv, 0);                                │                      std::unique_ptr<Db> pdbCopy = std::make_unique<Db>(env->dbenv.get(),
                                                                                         │                                                                                          
                    int ret = pdbCopy->open(NULL,               // Txn pointer           │                      int ret = pdbCopy->open(nullptr,               // Txn pointer       
                                            strFileRes.c_str(), // Filename              │                                              strFileRes.c_str(), // Filename             
                                            "main",             // Logical db name       │                                              "main",             // Logical db name      
                                            DB_BTREE,           // Database type         │                                              DB_BTREE,           // Database type        
                                            DB_CREATE,          // Flags                 │                                              DB_CREATE,          // Flags                
                                            0);                                          │                                              0);                                         
                    if (ret > 0) {                                                       │                      if (ret > 0) {                                                      
                        LogPrintf("CDB::Rewrite: Can't create database file %s\n", strFi │                          LogPrintf("BerkeleyBatch::Rewrite: Can't create database file %s
                        fSuccess = false;                                                │                          fSuccess = false;                                               
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    Dbc* pcursor = db.GetCursor();                                       │                      if (db.StartCursor()) {                                             
                    if (pcursor)                                                         │                                                                                          
                        while (fSuccess) {                                               │                          while (fSuccess) {                                              
                            CDataStream ssKey(SER_DISK, CLIENT_VERSION);                 │                              CDataStream ssKey(SER_DISK, CLIENT_VERSION);                
                            CDataStream ssValue(SER_DISK, CLIENT_VERSION);               │                              CDataStream ssValue(SER_DISK, CLIENT_VERSION);              
                            int ret1 = db.ReadAtCursor(pcursor, ssKey, ssValue);         │                              bool complete;                                              
                            if (ret1 == DB_NOTFOUND) {                                   │                              bool ret1 = db.ReadAtCursor(ssKey, ssValue, complete);      
                                pcursor->close();                                        │                              if (complete) {                                             
                                break;                                                   │                                  break;                                                  
                            } else if (ret1 != 0) {                                      │                              } else if (!ret1) {                                         
                                pcursor->close();                                        │                                                                                          
                                fSuccess = false;                                        │                                  fSuccess = false;                                       
                                break;                                                   │                                  break;                                                  
                            }                                                            │                              }                                                           
                            if (pszSkip &&                                               │                              if (pszSkip &&                                              
                                strncmp(ssKey.data(), pszSkip, std::min(ssKey.size(), st │                                  strncmp((const char*)ssKey.data(), pszSkip, std::min(ssK
                                continue;                                                │                                  continue;                                               
                            if (strncmp(ssKey.data(), "\x07version", 8) == 0) {          │                              if (strncmp((const char*)ssKey.data(), "\x07version", 8) == 
                                // Update version:                                       │                                  // Update version:                                      
                                ssValue.clear();                                         │                                  ssValue.clear();                                        
                                ssValue << CLIENT_VERSION;                               │                                  ssValue << CLIENT_VERSION;                              
                            }                                                            │                              }                                                           
                            Dbt datKey(ssKey.data(), ssKey.size());                      │                              Dbt datKey(ssKey.data(), ssKey.size());                     
                            Dbt datValue(ssValue.data(), ssValue.size());                │                              Dbt datValue(ssValue.data(), ssValue.size());               
                            int ret2 = pdbCopy->put(NULL, &datKey, &datValue, DB_NOOVERW │                              int ret2 = pdbCopy->put(nullptr, &datKey, &datValue, DB_NOOV
                            if (ret2 > 0)                                                │                              if (ret2 > 0)                                               
                                fSuccess = false;                                        │                                  fSuccess = false;                                       
                        }                                                                │                          }                                                               
                                                                                         │                          db.CloseCursor();                                               
                                                                                         │                      }                                                                   
                    if (fSuccess) {                                                      │                      if (fSuccess) {                                                     
                        db.Close();                                                      │                          db.Close();                                                     
                        bitdb.CloseDb(strFile);                                          │                          env->CloseDb(m_filename);                                       
                        if (pdbCopy->close(0))                                           │                          if (pdbCopy->close(0))                                          
                            fSuccess = false;                                            │                              fSuccess = false;                                           
                        delete pdbCopy;                                                  │                      } else {                                                            
                                                                                         │                          pdbCopy->close(0);                                              
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
                if (fSuccess) {                                                          │                  if (fSuccess) {                                                         
                    Db dbA(bitdb.dbenv, 0);                                              │                      Db dbA(env->dbenv.get(), 0);                                        
                    if (dbA.remove(strFile.c_str(), NULL, 0))                            │                      if (dbA.remove(strFile.c_str(), nullptr, 0))                        
                        fSuccess = false;                                                │                          fSuccess = false;                                               
                    Db dbB(bitdb.dbenv, 0);                                              │                      Db dbB(env->dbenv.get(), 0);                                        
                    if (dbB.rename(strFileRes.c_str(), NULL, strFile.c_str(), 0))        │                      if (dbB.rename(strFileRes.c_str(), nullptr, strFile.c_str(), 0))    
                        fSuccess = false;                                                │                          fSuccess = false;                                               
                }                                                                        │                  }                                                                       
                if (!fSuccess)                                                           │                  if (!fSuccess)                                                          
                    LogPrintf("CDB::Rewrite: Failed to rewrite database file %s\n", strF │                      LogPrintf("BerkeleyBatch::Rewrite: Failed to rewrite database file %
                return fSuccess;                                                         │                  return fSuccess;                                                        
            }                                                                            │              }                                                                           
                                                                                         │          UninterruptibleSleep(std::chrono::milliseconds{100});                           
                                                                                         │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/addresstablemodel.cpp:70                                                 │ dogecoin/src/qt/addresstablemodel.cpp:70                                                 
                                                                                         │                                                                                          
public:                                                                                  │  public:                                                                                 
                                                                                         │      CWallet *wallet;                                                                    
    QList<AddressTableEntry> cachedAddressTable;                                         │      QList<AddressTableEntry> cachedAddressTable;                                        
    AddressTableModel *parent;                                                           │      AddressTableModel *parent;                                                          
                                                                                         │                                                                                          
    explicit AddressTablePriv(AddressTableModel *_parent):                               │      AddressTablePriv(CWallet *_wallet, AddressTableModel *_parent):                     
        parent(_parent) {}                                                               │          wallet(_wallet), parent(_parent) {}                                             
                                                                                         │                                                                                          
    void refreshAddressTable(interfaces::Wallet& wallet, bool pk_hash_only = false)      │      void refreshAddressTable()                                                          
    {                                                                                    │      {                                                                                   
        cachedAddressTable.clear();                                                      │          cachedAddressTable.clear();                                                     
        {                                                                                │          {                                                                               
            for (const auto& address : wallet.getAddresses())                            │              LOCK(wallet->cs_wallet);                                                    
                                                                                         │              BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, wallet
            {                                                                            │              {                                                                           
                if (pk_hash_only && !std::holds_alternative<PKHash>(address.dest)) {     │                  const CBitcoinAddress& address = item.first;                            
                    continue;                                                            │                  bool fMine = IsMine(*wallet, address.Get());                            
                }                                                                        │                                                                                          
                AddressTableEntry::Type addressType = translateTransactionType(          │                  AddressTableEntry::Type addressType = translateTransactionType(         
                        QString::fromStdString(address.purpose), address.is_mine);       │                          QString::fromStdString(item.second.purpose), fMine);            
                                                                                         │                  const std::string& strName = item.second.name;                          
                cachedAddressTable.append(AddressTableEntry(addressType,                 │                  cachedAddressTable.append(AddressTableEntry(addressType,                
                                  QString::fromStdString(address.name),                  │                                    QString::fromStdString(strName),                      
                                  QString::fromStdString(EncodeDestination(address.dest) │                                    QString::fromStdString(address.ToString())));         
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        // std::lower_bound() and std::upper_bound() require our cachedAddressTable list │          // qLowerBound() and qUpperBound() require our cachedAddressTable list to be sor
        // Even though the map is already sorted this re-sorting step is needed because  │          // Even though the map is already sorted this re-sorting step is needed because 
        // is sorted by binary address, not by base58() address.                         │          // is sorted by binary address, not by base58() address.                        
        std::sort(cachedAddressTable.begin(), cachedAddressTable.end(), AddressTableEntr │          qSort(cachedAddressTable.begin(), cachedAddressTable.end(), AddressTableEntryLes
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    void updateEntry(const QString &address, const QString &label, bool isMine, const QS │      void updateEntry(const QString &address, const QString &label, bool isMine, const QS
    {                                                                                    │      {                                                                                   
        // Find address / label in model                                                 │          // Find address / label in model                                                
        QList<AddressTableEntry>::iterator lower = std::lower_bound(                     │          QList<AddressTableEntry>::iterator lower = qLowerBound(                         
            cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableE │              cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableE
        QList<AddressTableEntry>::iterator upper = std::upper_bound(                     │          QList<AddressTableEntry>::iterator upper = qUpperBound(                         
            cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableE │              cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableE
        int lowerIndex = (lower - cachedAddressTable.begin());                           │          int lowerIndex = (lower - cachedAddressTable.begin());                          
        int upperIndex = (upper - cachedAddressTable.begin());                           │          int upperIndex = (upper - cachedAddressTable.begin());                          
        bool inModel = (lower != upper);                                                 │          bool inModel = (lower != upper);                                                
        AddressTableEntry::Type newEntryType = translateTransactionType(purpose, isMine) │          AddressTableEntry::Type newEntryType = translateTransactionType(purpose, isMine)
                                                                                         │                                                                                          
        switch(status)                                                                   │          switch(status)                                                                  
        {                                                                                │          {                                                                               
        case CT_NEW:                                                                     │          case CT_NEW:                                                                    
            if(inModel)                                                                  │              if(inModel)                                                                 
            {                                                                            │              {                                                                           
                qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_NEW, but e │                  qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_NEW, but e
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex);              │              parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex);             
            cachedAddressTable.insert(lowerIndex, AddressTableEntry(newEntryType, label, │              cachedAddressTable.insert(lowerIndex, AddressTableEntry(newEntryType, label,
            parent->endInsertRows();                                                     │              parent->endInsertRows();                                                    
            break;                                                                       │              break;                                                                      
        case CT_UPDATED:                                                                 │          case CT_UPDATED:                                                                
            if(!inModel)                                                                 │              if(!inModel)                                                                
            {                                                                            │              {                                                                           
                qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_UPDATED, b │                  qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_UPDATED, b
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            lower->type = newEntryType;                                                  │              lower->type = newEntryType;                                                 
            lower->label = label;                                                        │              lower->label = label;                                                       
            parent->emitDataChanged(lowerIndex);                                         │              parent->emitDataChanged(lowerIndex);                                        
            break;                                                                       │              break;                                                                      
        case CT_DELETED:                                                                 │          case CT_DELETED:                                                                
            if(!inModel)                                                                 │              if(!inModel)                                                                
            {                                                                            │              {                                                                           
                qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_DELETED, b │                  qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_DELETED, b
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);            │              parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);           
            cachedAddressTable.erase(lower, upper);                                      │              cachedAddressTable.erase(lower, upper);                                     
            parent->endRemoveRows();                                                     │              parent->endRemoveRows();                                                    
            break;                                                                       │              break;                                                                      
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    int size()                                                                           │      int size()                                                                          
    {                                                                                    │      {                                                                                   
        return cachedAddressTable.size();                                                │          return cachedAddressTable.size();                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    AddressTableEntry *index(int idx)                                                    │      AddressTableEntry *index(int idx)                                                   
    {                                                                                    │      {                                                                                   
        if(idx >= 0 && idx < cachedAddressTable.size())                                  │          if(idx >= 0 && idx < cachedAddressTable.size())                                 
        {                                                                                │          {                                                                               
            return &cachedAddressTable[idx];                                             │              return &cachedAddressTable[idx];                                            
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            return nullptr;                                                              │              return 0;                                                                   
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/bitcoingui.cpp:793                                                      │ bitcoin/src/qt/bitcoingui.cpp:1007                                                       
                                                                                         │                                                                                          
                                                                                         │  // Disabling macOS App Nap on initial sync, disk and reindex operations.                
                                                                                         │  #ifdef Q_OS_MAC                                                                         
                                                                                         │      if (sync_state == SynchronizationState::POST_INIT) {                                
                                                                                         │          m_app_nap_inhibitor->enableAppNap();                                            
                                                                                         │      } else {                                                                            
                                                                                         │          m_app_nap_inhibitor->disableAppNap();                                           
                                                                                         │      }                                                                                   
                                                                                         │  #endif                                                                                  
                                                                                         │                                                                                          
    if (modalOverlay)                                                                    │      if (modalOverlay)                                                                   
    {                                                                                    │      {                                                                                   
        if (header)                                                                      │          if (header)                                                                     
            modalOverlay->setKnownBestHeight(count, blockDate);                          │              modalOverlay->setKnownBestHeight(count, blockDate);                         
        else                                                                             │          else                                                                            
            modalOverlay->tipUpdate(count, blockDate, nVerificationProgress);            │              modalOverlay->tipUpdate(count, blockDate, nVerificationProgress);           
    }                                                                                    │      }                                                                                   
    if (!clientModel)                                                                    │      if (!clientModel)                                                                   
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    // Prevent orphan statusbar messages (e.g. hover Quit in main menu, wait until chain │      // Prevent orphan statusbar messages (e.g. hover Quit in main menu, wait until chain
    statusBar()->clearMessage();                                                         │      statusBar()->clearMessage();                                                        
                                                                                         │                                                                                          
    // Acquire current block source                                                      │      // Acquire current block source                                                     
    enum BlockSource blockSource = clientModel->getBlockSource();                        │      enum BlockSource blockSource = clientModel->getBlockSource();                       
    switch (blockSource) {                                                               │      switch (blockSource) {                                                              
        case BLOCK_SOURCE_NETWORK:                                                       │          case BlockSource::NETWORK:                                                      
            if (header) {                                                                │              if (header) {                                                               
                updateHeadersSyncProgressLabel();                                        │                  updateHeadersSyncProgressLabel();                                       
                return;                                                                  │                  return;                                                                 
            }                                                                            │              }                                                                           
            progressBarLabel->setText(tr("Synchronizing with network..."));              │              progressBarLabel->setText(tr("Synchronizing with network…"));               
            updateHeadersSyncProgressLabel();                                            │              updateHeadersSyncProgressLabel();                                           
            break;                                                                       │              break;                                                                      
        case BLOCK_SOURCE_DISK:                                                          │          case BlockSource::DISK:                                                         
            if (header) {                                                                │              if (header) {                                                               
                progressBarLabel->setText(tr("Indexing blocks on disk..."));             │                  progressBarLabel->setText(tr("Indexing blocks on disk…"));              
            } else {                                                                     │              } else {                                                                    
                progressBarLabel->setText(tr("Processing blocks on disk..."));           │                  progressBarLabel->setText(tr("Processing blocks on disk…"));            
            }                                                                            │              }                                                                           
            break;                                                                       │              break;                                                                      
        case BLOCK_SOURCE_REINDEX:                                                       │          case BlockSource::REINDEX:                                                      
            progressBarLabel->setText(tr("Reindexing blocks on disk..."));               │              progressBarLabel->setText(tr("Reindexing blocks on disk…"));                
            break;                                                                       │              break;                                                                      
        case BLOCK_SOURCE_NONE:                                                          │          case BlockSource::NONE:                                                         
            if (header) {                                                                │              if (header) {                                                               
                return;                                                                  │                  return;                                                                 
            }                                                                            │              }                                                                           
            progressBarLabel->setText(tr("Connecting to peers..."));                     │              progressBarLabel->setText(tr("Connecting to peers…"));                      
            break;                                                                       │              break;                                                                      
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    QString tooltip;                                                                     │      QString tooltip;                                                                    
                                                                                         │                                                                                          
    QDateTime currentDate = QDateTime::currentDateTime();                                │      QDateTime currentDate = QDateTime::currentDateTime();                               
    qint64 secs = blockDate.secsTo(currentDate);                                         │      qint64 secs = blockDate.secsTo(currentDate);                                        
                                                                                         │                                                                                          
    tooltip = tr("Processed %n block(s) of transaction history.", "", count);            │      tooltip = tr("Processed %n block(s) of transaction history.", "", count);           
                                                                                         │                                                                                          
    // Set icon state: spinning if catching up, tick otherwise                           │      // Set icon state: spinning if catching up, tick otherwise                          
    if(secs < 90*60)                                                                     │      if (secs < MAX_BLOCK_TIME_GAP) {                                                    
    {                                                                                    │                                                                                          
        tooltip = tr("Up to date") + QString(".<br>") + tooltip;                         │          tooltip = tr("Up to date") + QString(".<br>") + tooltip;                        
        labelBlocksIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/synced").pixm │          labelBlocksIcon->setThemedPixmap(QStringLiteral(":/icons/synced"), STATUSBAR_ICO
                                                                                         │                                                                                          
#ifdef ENABLE_WALLET                                                                     │  #ifdef ENABLE_WALLET                                                                    
        if(walletFrame)                                                                  │          if(walletFrame)                                                                 
        {                                                                                │          {                                                                               
            walletFrame->showOutOfSyncWarning(false);                                    │              walletFrame->showOutOfSyncWarning(false);                                   
            modalOverlay->showHide(true, true);                                          │              modalOverlay->showHide(true, true);                                         
        }                                                                                │          }                                                                               
#endif // ENABLE_WALLET                                                                  │  #endif // ENABLE_WALLET                                                                 
                                                                                         │                                                                                          
        progressBarLabel->setVisible(false);                                             │          progressBarLabel->setVisible(false);                                            
        progressBar->setVisible(false);                                                  │          progressBar->setVisible(false);                                                 
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        QString timeBehindText = GUIUtil::formatNiceTimeOffset(secs);                    │          QString timeBehindText = GUIUtil::formatNiceTimeOffset(secs);                   
                                                                                         │                                                                                          
        progressBarLabel->setVisible(true);                                              │          progressBarLabel->setVisible(true);                                             
        progressBar->setFormat(tr("%1 behind").arg(timeBehindText));                     │          progressBar->setFormat(tr("%1 behind").arg(timeBehindText));                    
        progressBar->setMaximum(1000000000);                                             │          progressBar->setMaximum(1000000000);                                            
        progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);               │          progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);              
        progressBar->setVisible(true);                                                   │          progressBar->setVisible(true);                                                  
                                                                                         │                                                                                          
        tooltip = tr("Catching up...") + QString("<br>") + tooltip;                      │          tooltip = tr("Catching up…") + QString("<br>") + tooltip;                       
        if(count != prevBlocks)                                                          │          if(count != prevBlocks)                                                         
        {                                                                                │          {                                                                               
            labelBlocksIcon->setPixmap(platformStyle->SingleColorIcon(QString(           │              labelBlocksIcon->setThemedPixmap(                                           
                ":/movies/spinner-%1").arg(spinnerFrame, 3, 10, QChar('0')))             │                  QString(":/animation/spinner-%1").arg(spinnerFrame, 3, 10, QChar('0')), 
                .pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));                        │                  STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE);                                
            spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES;                          │              spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES;                         
        }                                                                                │          }                                                                               
        prevBlocks = count;                                                              │          prevBlocks = count;                                                             
                                                                                         │                                                                                          
#ifdef ENABLE_WALLET                                                                     │  #ifdef ENABLE_WALLET                                                                    
        if(walletFrame)                                                                  │          if(walletFrame)                                                                 
        {                                                                                │          {                                                                               
            walletFrame->showOutOfSyncWarning(true);                                     │              walletFrame->showOutOfSyncWarning(true);                                    
            modalOverlay->showHide();                                                    │              modalOverlay->showHide();                                                   
        }                                                                                │          }                                                                               
#endif // ENABLE_WALLET                                                                  │  #endif // ENABLE_WALLET                                                                 
                                                                                         │                                                                                          
        tooltip += QString("<br>");                                                      │          tooltip += QString("<br>");                                                     
        tooltip += tr("Last received block was generated %1 ago.").arg(timeBehindText);  │          tooltip += tr("Last received block was generated %1 ago.").arg(timeBehindText); 
        tooltip += QString("<br>");                                                      │          tooltip += QString("<br>");                                                     
        tooltip += tr("Transactions after this will not yet be visible.");               │          tooltip += tr("Transactions after this will not yet be visible.");              
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Don't word-wrap this (fixed-width) tooltip                                        │      // Don't word-wrap this (fixed-width) tooltip                                       
    tooltip = QString("<nobr>") + tooltip + QString("</nobr>");                          │      tooltip = QString("<nobr>") + tooltip + QString("</nobr>");                         
                                                                                         │                                                                                          
    labelBlocksIcon->setToolTip(tooltip);                                                │      labelBlocksIcon->setToolTip(tooltip);                                               
    progressBarLabel->setToolTip(tooltip);                                               │      progressBarLabel->setToolTip(tooltip);                                              
    progressBar->setToolTip(tooltip);                                                    │      progressBar->setToolTip(tooltip);                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/merkle_tests.cpp:68                                                   │ bitcoin/src/test/merkle_tests.cpp:183                                                    
                                                                                         │                                                                                          
    for (int i = 0; i < 32; i++) {                                                       │      for (int i = 0; i < 32; i++) {                                                      
        // Try 32 block sizes: all sizes from 0 to 16 inclusive, and then 15 random size │          // Try 32 block sizes: all sizes from 0 to 16 inclusive, and then 15 random size
        int ntx = (i <= 16) ? i : 17 + (insecure_rand() % 4000);                         │          int ntx = (i <= 16) ? i : 17 + (InsecureRandRange(4000));                       
        // Try up to 3 mutations.                                                        │          // Try up to 3 mutations.                                                       
        for (int mutate = 0; mutate <= 3; mutate++) {                                    │          for (int mutate = 0; mutate <= 3; mutate++) {                                   
            int duplicate1 = mutate >= 1 ? 1 << ctz(ntx) : 0; // The last how many trans │              int duplicate1 = mutate >= 1 ? 1 << ctz(ntx) : 0; // The last how many trans
            if (duplicate1 >= ntx) break; // Duplication of the entire tree results in a │              if (duplicate1 >= ntx) break; // Duplication of the entire tree results in a
            int ntx1 = ntx + duplicate1; // The resulting number of transactions after t │              int ntx1 = ntx + duplicate1; // The resulting number of transactions after t
            int duplicate2 = mutate >= 2 ? 1 << ctz(ntx1) : 0; // Likewise for the secon │              int duplicate2 = mutate >= 2 ? 1 << ctz(ntx1) : 0; // Likewise for the secon
            if (duplicate2 >= ntx1) break;                                               │              if (duplicate2 >= ntx1) break;                                              
            int ntx2 = ntx1 + duplicate2;                                                │              int ntx2 = ntx1 + duplicate2;                                               
            int duplicate3 = mutate >= 3 ? 1 << ctz(ntx2) : 0; // And for the third muta │              int duplicate3 = mutate >= 3 ? 1 << ctz(ntx2) : 0; // And for the third muta
            if (duplicate3 >= ntx2) break;                                               │              if (duplicate3 >= ntx2) break;                                              
            int ntx3 = ntx2 + duplicate3;                                                │              int ntx3 = ntx2 + duplicate3;                                               
            // Build a block with ntx different transactions.                            │              // Build a block with ntx different transactions.                           
            CBlock block;                                                                │              CBlock block;                                                               
            block.vtx.resize(ntx);                                                       │              block.vtx.resize(ntx);                                                      
            for (int j = 0; j < ntx; j++) {                                              │              for (int j = 0; j < ntx; j++) {                                             
                CMutableTransaction mtx;                                                 │                  CMutableTransaction mtx;                                                
                mtx.nLockTime = j;                                                       │                  mtx.nLockTime = j;                                                      
                block.vtx[j] = MakeTransactionRef(std::move(mtx));                       │                  block.vtx[j] = MakeTransactionRef(std::move(mtx));                      
            }                                                                            │              }                                                                           
            // Compute the root of the block before mutating it.                         │              // Compute the root of the block before mutating it.                        
            bool unmutatedMutated = false;                                               │              bool unmutatedMutated = false;                                              
            uint256 unmutatedRoot = BlockMerkleRoot(block, &unmutatedMutated);           │              uint256 unmutatedRoot = BlockMerkleRoot(block, &unmutatedMutated);          
            BOOST_CHECK(unmutatedMutated == false);                                      │              BOOST_CHECK(unmutatedMutated == false);                                     
            // Optionally mutate by duplicating the last transactions, resulting in the  │              // Optionally mutate by duplicating the last transactions, resulting in the 
            block.vtx.resize(ntx3);                                                      │              block.vtx.resize(ntx3);                                                     
            for (int j = 0; j < duplicate1; j++) {                                       │              for (int j = 0; j < duplicate1; j++) {                                      
                block.vtx[ntx + j] = block.vtx[ntx + j - duplicate1];                    │                  block.vtx[ntx + j] = block.vtx[ntx + j - duplicate1];                   
            }                                                                            │              }                                                                           
            for (int j = 0; j < duplicate2; j++) {                                       │              for (int j = 0; j < duplicate2; j++) {                                      
                block.vtx[ntx1 + j] = block.vtx[ntx1 + j - duplicate2];                  │                  block.vtx[ntx1 + j] = block.vtx[ntx1 + j - duplicate2];                 
            }                                                                            │              }                                                                           
            for (int j = 0; j < duplicate3; j++) {                                       │              for (int j = 0; j < duplicate3; j++) {                                      
                block.vtx[ntx2 + j] = block.vtx[ntx2 + j - duplicate3];                  │                  block.vtx[ntx2 + j] = block.vtx[ntx2 + j - duplicate3];                 
            }                                                                            │              }                                                                           
            // Compute the merkle root and merkle tree using the old mechanism.          │              // Compute the merkle root and merkle tree using the old mechanism.         
            bool oldMutated = false;                                                     │              bool oldMutated = false;                                                    
            std::vector<uint256> merkleTree;                                             │              std::vector<uint256> merkleTree;                                            
            uint256 oldRoot = BlockBuildMerkleTree(block, &oldMutated, merkleTree);      │              uint256 oldRoot = BlockBuildMerkleTree(block, &oldMutated, merkleTree);     
            // Compute the merkle root using the new mechanism.                          │              // Compute the merkle root using the new mechanism.                         
            bool newMutated = false;                                                     │              bool newMutated = false;                                                    
            uint256 newRoot = BlockMerkleRoot(block, &newMutated);                       │              uint256 newRoot = BlockMerkleRoot(block, &newMutated);                      
            BOOST_CHECK(oldRoot == newRoot);                                             │              BOOST_CHECK(oldRoot == newRoot);                                            
            BOOST_CHECK(newRoot == unmutatedRoot);                                       │              BOOST_CHECK(newRoot == unmutatedRoot);                                      
            BOOST_CHECK((newRoot == uint256()) == (ntx == 0));                           │              BOOST_CHECK((newRoot == uint256()) == (ntx == 0));                          
            BOOST_CHECK(oldMutated == newMutated);                                       │              BOOST_CHECK(oldMutated == newMutated);                                      
            BOOST_CHECK(newMutated == !!mutate);                                         │              BOOST_CHECK(newMutated == !!mutate);                                        
            // If no mutation was done (once for every ntx value), try up to 16 branches │              // If no mutation was done (once for every ntx value), try up to 16 branches
            if (mutate == 0) {                                                           │              if (mutate == 0) {                                                          
                for (int loop = 0; loop < std::min(ntx, 16); loop++) {                   │                  for (int loop = 0; loop < std::min(ntx, 16); loop++) {                  
                    // If ntx <= 16, try all branches. Otherise, try 16 random ones.     │                      // If ntx <= 16, try all branches. Otherwise, try 16 random ones.   
                    int mtx = loop;                                                      │                      int mtx = loop;                                                     
                    if (ntx > 16) {                                                      │                      if (ntx > 16) {                                                     
                        mtx = insecure_rand() % ntx;                                     │                          mtx = InsecureRandRange(ntx);                                   
                    }                                                                    │                      }                                                                   
                    std::vector<uint256> newBranch = BlockMerkleBranch(block, mtx);      │                      std::vector<uint256> newBranch = BlockMerkleBranch(block, mtx);     
                    std::vector<uint256> oldBranch = BlockGetMerkleBranch(block, merkleT │                      std::vector<uint256> oldBranch = BlockGetMerkleBranch(block, merkleT
                    BOOST_CHECK(oldBranch == newBranch);                                 │                      BOOST_CHECK(oldBranch == newBranch);                                
                    BOOST_CHECK(ComputeMerkleRootFromBranch(block.vtx[mtx]->GetHash(), n │                      BOOST_CHECK(ComputeMerkleRootFromBranch(block.vtx[mtx]->GetHash(), n
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:1338                                                 │ bitcoin/src/test/script_tests.cpp:1352                                                   
                                                                                         │                                                                                          
    // Exercise the FindAndDelete functionality                                          │      // Exercise the FindAndDelete functionality                                         
    CScript s;                                                                           │      CScript s;                                                                          
    CScript d;                                                                           │      CScript d;                                                                          
    CScript expect;                                                                      │      CScript expect;                                                                     
                                                                                         │                                                                                          
    s = CScript() << OP_1 << OP_2;                                                       │      s = CScript() << OP_1 << OP_2;                                                      
    d = CScript(); // delete nothing should be a no-op                                   │      d = CScript(); // delete nothing should be a no-op                                  
    expect = s;                                                                          │      expect = s;                                                                         
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 0);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 0);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = CScript() << OP_1 << OP_2 << OP_3;                                               │      s = CScript() << OP_1 << OP_2 << OP_3;                                              
    d = CScript() << OP_2;                                                               │      d = CScript() << OP_2;                                                              
    expect = CScript() << OP_1 << OP_3;                                                  │      expect = CScript() << OP_1 << OP_3;                                                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = CScript() << OP_3 << OP_1 << OP_3 << OP_3 << OP_4 << OP_3;                       │      s = CScript() << OP_3 << OP_1 << OP_3 << OP_3 << OP_4 << OP_3;                      
    d = CScript() << OP_3;                                                               │      d = CScript() << OP_3;                                                              
    expect = CScript() << OP_1 << OP_4;                                                  │      expect = CScript() << OP_1 << OP_4;                                                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 4);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 4);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("0302ff03"); // PUSH 0x02ff03 onto stack                           │      s = ScriptFromHex("0302ff03"); // PUSH 0x02ff03 onto stack                          
    d = ScriptFromHex("0302ff03");                                                       │      d = ScriptFromHex("0302ff03");                                                      
    expect = CScript();                                                                  │      expect = CScript();                                                                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("0302ff030302ff03"); // PUSH 0x2ff03 PUSH 0x2ff03                  │      s = ScriptFromHex("0302ff030302ff03"); // PUSH 0x2ff03 PUSH 0x2ff03                 
    d = ScriptFromHex("0302ff03");                                                       │      d = ScriptFromHex("0302ff03");                                                      
    expect = CScript();                                                                  │      expect = CScript();                                                                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 2);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 2);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("0302ff030302ff03");                                               │      s = ScriptFromHex("0302ff030302ff03");                                              
    d = ScriptFromHex("02");                                                             │      d = ScriptFromHex("02");                                                            
    expect = s; // FindAndDelete matches entire opcodes                                  │      expect = s; // FindAndDelete matches entire opcodes                                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 0);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 0);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("0302ff030302ff03");                                               │      s = ScriptFromHex("0302ff030302ff03");                                              
    d = ScriptFromHex("ff");                                                             │      d = ScriptFromHex("ff");                                                            
    expect = s;                                                                          │      expect = s;                                                                         
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 0);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 0);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    // This is an odd edge case: strip of the push-three-bytes                           │      // This is an odd edge case: strip of the push-three-bytes                          
    // prefix, leaving 02ff03 which is push-two-bytes:                                   │      // prefix, leaving 02ff03 which is push-two-bytes:                                  
    s = ScriptFromHex("0302ff030302ff03");                                               │      s = ScriptFromHex("0302ff030302ff03");                                              
    d = ScriptFromHex("03");                                                             │      d = ScriptFromHex("03");                                                            
    expect = CScript() << ParseHex("ff03") << ParseHex("ff03");                          │      expect = CScript() << ParseHex("ff03") << ParseHex("ff03");                         
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 2);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 2);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    // Byte sequence that spans multiple opcodes:                                        │      // Byte sequence that spans multiple opcodes:                                       
    s = ScriptFromHex("02feed5169"); // PUSH(0xfeed) OP_1 OP_VERIFY                      │      s = ScriptFromHex("02feed5169"); // PUSH(0xfeed) OP_1 OP_VERIFY                     
    d = ScriptFromHex("feed51");                                                         │      d = ScriptFromHex("feed51");                                                        
    expect = s;                                                                          │      expect = s;                                                                         
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 0); // doesn't match 'inside' opcodes          │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 0); // doesn't match 'inside' opcodes        
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("02feed5169"); // PUSH(0xfeed) OP_1 OP_VERIFY                      │      s = ScriptFromHex("02feed5169"); // PUSH(0xfeed) OP_1 OP_VERIFY                     
    d = ScriptFromHex("02feed51");                                                       │      d = ScriptFromHex("02feed51");                                                      
    expect = ScriptFromHex("69");                                                        │      expect = ScriptFromHex("69");                                                       
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("516902feed5169");                                                 │      s = ScriptFromHex("516902feed5169");                                                
    d = ScriptFromHex("feed51");                                                         │      d = ScriptFromHex("feed51");                                                        
    expect = s;                                                                          │      expect = s;                                                                         
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 0);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 0);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("516902feed5169");                                                 │      s = ScriptFromHex("516902feed5169");                                                
    d = ScriptFromHex("02feed51");                                                       │      d = ScriptFromHex("02feed51");                                                      
    expect = ScriptFromHex("516969");                                                    │      expect = ScriptFromHex("516969");                                                   
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = CScript() << OP_0 << OP_0 << OP_1 << OP_1;                                       │      s = CScript() << OP_0 << OP_0 << OP_1 << OP_1;                                      
    d = CScript() << OP_0 << OP_1;                                                       │      d = CScript() << OP_0 << OP_1;                                                      
    expect = CScript() << OP_0 << OP_1; // FindAndDelete is single-pass                  │      expect = CScript() << OP_0 << OP_1; // FindAndDelete is single-pass                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = CScript() << OP_0 << OP_0 << OP_1 << OP_0 << OP_1 << OP_1;                       │      s = CScript() << OP_0 << OP_0 << OP_1 << OP_0 << OP_1 << OP_1;                      
    d = CScript() << OP_0 << OP_1;                                                       │      d = CScript() << OP_0 << OP_1;                                                      
    expect = CScript() << OP_0 << OP_1; // FindAndDelete is single-pass                  │      expect = CScript() << OP_0 << OP_1; // FindAndDelete is single-pass                 
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 2);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 2);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    // Another weird edge case:                                                          │      // Another weird edge case:                                                         
    // End with invalid push (not enough data)...                                        │      // End with invalid push (not enough data)...                                       
    s = ScriptFromHex("0003feed");                                                       │      s = ScriptFromHex("0003feed");                                                      
    d = ScriptFromHex("03feed"); // ... can remove the invalid push                      │      d = ScriptFromHex("03feed"); // ... can remove the invalid push                     
    expect = ScriptFromHex("00");                                                        │      expect = ScriptFromHex("00");                                                       
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
                                                                                         │                                                                                          
    s = ScriptFromHex("0003feed");                                                       │      s = ScriptFromHex("0003feed");                                                      
    d = ScriptFromHex("00");                                                             │      d = ScriptFromHex("00");                                                            
    expect = ScriptFromHex("03feed");                                                    │      expect = ScriptFromHex("03feed");                                                   
    BOOST_CHECK_EQUAL(s.FindAndDelete(d), 1);                                            │      BOOST_CHECK_EQUAL(FindAndDelete(s, d), 1);                                          
    BOOST_CHECK(s == expect);                                                            │      BOOST_CHECK(s == expect);                                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:1054                                                │ bitcoin/src/script/interpreter.cpp:1250                                                  
                                                                                         │                                                                                          
private:                                                                                 │  private:                                                                                
    const CTransaction& txTo;  //!< reference to the spending transaction (the one being │      const T& txTo;             //!< reference to the spending transaction (the one being
    const CScript& scriptCode; //!< output script being consumed                         │      const CScript& scriptCode; //!< output script being consumed                        
    const unsigned int nIn;    //!< input index of txTo being signed                     │      const unsigned int nIn;    //!< input index of txTo being signed                    
    const bool fAnyoneCanPay;  //!< whether the hashtype has the SIGHASH_ANYONECANPAY fl │      const bool fAnyoneCanPay;  //!< whether the hashtype has the SIGHASH_ANYONECANPAY fl
    const bool fHashSingle;    //!< whether the hashtype is SIGHASH_SINGLE               │      const bool fHashSingle;    //!< whether the hashtype is SIGHASH_SINGLE              
    const bool fHashNone;      //!< whether the hashtype is SIGHASH_NONE                 │      const bool fHashNone;      //!< whether the hashtype is SIGHASH_NONE                
                                                                                         │                                                                                          
public:                                                                                  │  public:                                                                                 
    CTransactionSignatureSerializer(const CTransaction &txToIn, const CScript &scriptCod │      CTransactionSignatureSerializer(const T& txToIn, const CScript& scriptCodeIn, unsign
        txTo(txToIn), scriptCode(scriptCodeIn), nIn(nInIn),                              │          txTo(txToIn), scriptCode(scriptCodeIn), nIn(nInIn),                             
        fAnyoneCanPay(!!(nHashTypeIn & SIGHASH_ANYONECANPAY)),                           │          fAnyoneCanPay(!!(nHashTypeIn & SIGHASH_ANYONECANPAY)),                          
        fHashSingle((nHashTypeIn & 0x1f) == SIGHASH_SINGLE),                             │          fHashSingle((nHashTypeIn & 0x1f) == SIGHASH_SINGLE),                            
        fHashNone((nHashTypeIn & 0x1f) == SIGHASH_NONE) {}                               │          fHashNone((nHashTypeIn & 0x1f) == SIGHASH_NONE) {}                              
                                                                                         │                                                                                          
    /** Serialize the passed scriptCode, skipping OP_CODESEPARATORs */                   │      /** Serialize the passed scriptCode, skipping OP_CODESEPARATORs */                  
    template<typename S>                                                                 │      template<typename S>                                                                
    void SerializeScriptCode(S &s) const {                                               │      void SerializeScriptCode(S &s) const {                                              
        CScript::const_iterator it = scriptCode.begin();                                 │          CScript::const_iterator it = scriptCode.begin();                                
        CScript::const_iterator itBegin = it;                                            │          CScript::const_iterator itBegin = it;                                           
        opcodetype opcode;                                                               │          opcodetype opcode;                                                              
        unsigned int nCodeSeparators = 0;                                                │          unsigned int nCodeSeparators = 0;                                               
        while (scriptCode.GetOp(it, opcode)) {                                           │          while (scriptCode.GetOp(it, opcode)) {                                          
            if (opcode == OP_CODESEPARATOR)                                              │              if (opcode == OP_CODESEPARATOR)                                             
                nCodeSeparators++;                                                       │                  nCodeSeparators++;                                                      
        }                                                                                │          }                                                                               
        ::WriteCompactSize(s, scriptCode.size() - nCodeSeparators);                      │          ::WriteCompactSize(s, scriptCode.size() - nCodeSeparators);                     
        it = itBegin;                                                                    │          it = itBegin;                                                                   
        while (scriptCode.GetOp(it, opcode)) {                                           │          while (scriptCode.GetOp(it, opcode)) {                                          
            if (opcode == OP_CODESEPARATOR) {                                            │              if (opcode == OP_CODESEPARATOR) {                                           
                s.write((char*)&itBegin[0], it-itBegin-1);                               │                  s.write(AsBytes(Span{&itBegin[0], size_t(it - itBegin - 1)}));          
                itBegin = it;                                                            │                  itBegin = it;                                                           
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        if (itBegin != scriptCode.end())                                                 │          if (itBegin != scriptCode.end())                                                
            s.write((char*)&itBegin[0], it-itBegin);                                     │              s.write(AsBytes(Span{&itBegin[0], size_t(it - itBegin)}));                  
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /** Serialize an input of txTo */                                                    │      /** Serialize an input of txTo */                                                   
    template<typename S>                                                                 │      template<typename S>                                                                
    void SerializeInput(S &s, unsigned int nInput) const {                               │      void SerializeInput(S &s, unsigned int nInput) const {                              
        // In case of SIGHASH_ANYONECANPAY, only the input being signed is serialized    │          // In case of SIGHASH_ANYONECANPAY, only the input being signed is serialized   
        if (fAnyoneCanPay)                                                               │          if (fAnyoneCanPay)                                                              
            nInput = nIn;                                                                │              nInput = nIn;                                                               
        // Serialize the prevout                                                         │          // Serialize the prevout                                                        
        ::Serialize(s, txTo.vin[nInput].prevout);                                        │          ::Serialize(s, txTo.vin[nInput].prevout);                                       
        // Serialize the script                                                          │          // Serialize the script                                                         
        if (nInput != nIn)                                                               │          if (nInput != nIn)                                                              
            // Blank out other inputs' signatures                                        │              // Blank out other inputs' signatures                                       
            ::Serialize(s, CScriptBase());                                               │              ::Serialize(s, CScript());                                                  
        else                                                                             │          else                                                                            
            SerializeScriptCode(s);                                                      │              SerializeScriptCode(s);                                                     
        // Serialize the nSequence                                                       │          // Serialize the nSequence                                                      
        if (nInput != nIn && (fHashSingle || fHashNone))                                 │          if (nInput != nIn && (fHashSingle || fHashNone))                                
            // let the others update at will                                             │              // let the others update at will                                            
            ::Serialize(s, (int)0);                                                      │              ::Serialize(s, (int)0);                                                     
        else                                                                             │          else                                                                            
            ::Serialize(s, txTo.vin[nInput].nSequence);                                  │              ::Serialize(s, txTo.vin[nInput].nSequence);                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /** Serialize an output of txTo */                                                   │      /** Serialize an output of txTo */                                                  
    template<typename S>                                                                 │      template<typename S>                                                                
    void SerializeOutput(S &s, unsigned int nOutput) const {                             │      void SerializeOutput(S &s, unsigned int nOutput) const {                            
        if (fHashSingle && nOutput != nIn)                                               │          if (fHashSingle && nOutput != nIn)                                              
            // Do not lock-in the txout payee at other indices as txin                   │              // Do not lock-in the txout payee at other indices as txin                  
            ::Serialize(s, CTxOut());                                                    │              ::Serialize(s, CTxOut());                                                   
        else                                                                             │          else                                                                            
            ::Serialize(s, txTo.vout[nOutput]);                                          │              ::Serialize(s, txTo.vout[nOutput]);                                         
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /** Serialize txTo */                                                                │      /** Serialize txTo */                                                               
    template<typename S>                                                                 │      template<typename S>                                                                
    void Serialize(S &s) const {                                                         │      void Serialize(S &s) const {                                                        
        // Serialize nVersion                                                            │          // Serialize nVersion                                                           
        ::Serialize(s, txTo.nVersion);                                                   │          ::Serialize(s, txTo.nVersion);                                                  
        // Serialize vin                                                                 │          // Serialize vin                                                                
        unsigned int nInputs = fAnyoneCanPay ? 1 : txTo.vin.size();                      │          unsigned int nInputs = fAnyoneCanPay ? 1 : txTo.vin.size();                     
        ::WriteCompactSize(s, nInputs);                                                  │          ::WriteCompactSize(s, nInputs);                                                 
        for (unsigned int nInput = 0; nInput < nInputs; nInput++)                        │          for (unsigned int nInput = 0; nInput < nInputs; nInput++)                       
             SerializeInput(s, nInput);                                                  │               SerializeInput(s, nInput);                                                 
        // Serialize vout                                                                │          // Serialize vout                                                               
        unsigned int nOutputs = fHashNone ? 0 : (fHashSingle ? nIn+1 : txTo.vout.size()) │          unsigned int nOutputs = fHashNone ? 0 : (fHashSingle ? nIn+1 : txTo.vout.size())
        ::WriteCompactSize(s, nOutputs);                                                 │          ::WriteCompactSize(s, nOutputs);                                                
        for (unsigned int nOutput = 0; nOutput < nOutputs; nOutput++)                    │          for (unsigned int nOutput = 0; nOutput < nOutputs; nOutput++)                   
             SerializeOutput(s, nOutput);                                                │               SerializeOutput(s, nOutput);                                               
        // Serialize nLockTime                                                           │          // Serialize nLockTime                                                          
        ::Serialize(s, txTo.nLockTime);                                                  │          ::Serialize(s, txTo.nLockTime);                                                 
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:247                                               │ bitcoin/src/univalue/test/object.cpp:247                                                 
                                                                                         │                                                                                          
    UniValue obj(UniValue::VOBJ);                                                        │      UniValue obj(UniValue::VOBJ);                                                       
    std::string strKey, strVal;                                                          │      std::string strKey, strVal;                                                         
    UniValue v;                                                                          │      UniValue v;                                                                         
                                                                                         │                                                                                          
    strKey = "age";                                                                      │      strKey = "age";                                                                     
    v.setInt(100);                                                                       │      v.setInt(100);                                                                      
    BOOST_CHECK(obj.pushKV(strKey, v));                                                  │      BOOST_CHECK(obj.pushKV(strKey, v));                                                 
                                                                                         │                                                                                          
    strKey = "first";                                                                    │      strKey = "first";                                                                   
    strVal = "John";                                                                     │      strVal = "John";                                                                    
    BOOST_CHECK(obj.pushKV(strKey, strVal));                                             │      BOOST_CHECK(obj.pushKV(strKey, strVal));                                            
                                                                                         │                                                                                          
    strKey = "last";                                                                     │      strKey = "last";                                                                    
    const char *cVal = "Smith";                                                          │      const char *cVal = "Smith";                                                         
    BOOST_CHECK(obj.pushKV(strKey, cVal));                                               │      BOOST_CHECK(obj.pushKV(strKey, cVal));                                              
                                                                                         │                                                                                          
    strKey = "distance";                                                                 │      strKey = "distance";                                                                
    BOOST_CHECK(obj.pushKV(strKey, (int64_t) 25));                                       │      BOOST_CHECK(obj.pushKV(strKey, (int64_t) 25));                                      
                                                                                         │                                                                                          
    strKey = "time";                                                                     │      strKey = "time";                                                                    
    BOOST_CHECK(obj.pushKV(strKey, (uint64_t) 3600));                                    │      BOOST_CHECK(obj.pushKV(strKey, (uint64_t) 3600));                                   
                                                                                         │                                                                                          
    strKey = "calories";                                                                 │      strKey = "calories";                                                                
    BOOST_CHECK(obj.pushKV(strKey, (int) 12));                                           │      BOOST_CHECK(obj.pushKV(strKey, (int) 12));                                          
                                                                                         │                                                                                          
    strKey = "temperature";                                                              │      strKey = "temperature";                                                             
    BOOST_CHECK(obj.pushKV(strKey, (double) 90.012));                                    │      BOOST_CHECK(obj.pushKV(strKey, (double) 90.012));                                   
                                                                                         │                                                                                          
    strKey = "moon";                                                                     │      strKey = "moon";                                                                    
    BOOST_CHECK(obj.pushKV(strKey, true));                                               │      BOOST_CHECK(obj.pushKV(strKey, true));                                              
                                                                                         │                                                                                          
    strKey = "spoon";                                                                    │      strKey = "spoon";                                                                   
    BOOST_CHECK(obj.pushKV(strKey, false));                                              │      BOOST_CHECK(obj.pushKV(strKey, false));                                             
                                                                                         │                                                                                          
    UniValue obj2(UniValue::VOBJ);                                                       │      UniValue obj2(UniValue::VOBJ);                                                      
    BOOST_CHECK(obj2.pushKV("cat1", 9000));                                              │      BOOST_CHECK(obj2.pushKV("cat1", 9000));                                             
    BOOST_CHECK(obj2.pushKV("cat2", 12345));                                             │      BOOST_CHECK(obj2.pushKV("cat2", 12345));                                            
                                                                                         │                                                                                          
    BOOST_CHECK(obj.pushKVs(obj2));                                                      │      BOOST_CHECK(obj.pushKVs(obj2));                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(obj.empty(), false);                                               │      BOOST_CHECK_EQUAL(obj.empty(), false);                                              
    BOOST_CHECK_EQUAL(obj.size(), 11);                                                   │      BOOST_CHECK_EQUAL(obj.size(), 11);                                                  
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(obj["age"].getValStr(), "100");                                    │      BOOST_CHECK_EQUAL(obj["age"].getValStr(), "100");                                   
    BOOST_CHECK_EQUAL(obj["first"].getValStr(), "John");                                 │      BOOST_CHECK_EQUAL(obj["first"].getValStr(), "John");                                
    BOOST_CHECK_EQUAL(obj["last"].getValStr(), "Smith");                                 │      BOOST_CHECK_EQUAL(obj["last"].getValStr(), "Smith");                                
    BOOST_CHECK_EQUAL(obj["distance"].getValStr(), "25");                                │      BOOST_CHECK_EQUAL(obj["distance"].getValStr(), "25");                               
    BOOST_CHECK_EQUAL(obj["time"].getValStr(), "3600");                                  │      BOOST_CHECK_EQUAL(obj["time"].getValStr(), "3600");                                 
    BOOST_CHECK_EQUAL(obj["calories"].getValStr(), "12");                                │      BOOST_CHECK_EQUAL(obj["calories"].getValStr(), "12");                               
    BOOST_CHECK_EQUAL(obj["temperature"].getValStr(), "90.012");                         │      BOOST_CHECK_EQUAL(obj["temperature"].getValStr(), "90.012");                        
    BOOST_CHECK_EQUAL(obj["moon"].getValStr(), "1");                                     │      BOOST_CHECK_EQUAL(obj["moon"].getValStr(), "1");                                    
    BOOST_CHECK_EQUAL(obj["spoon"].getValStr(), "");                                     │      BOOST_CHECK_EQUAL(obj["spoon"].getValStr(), "");                                    
    BOOST_CHECK_EQUAL(obj["cat1"].getValStr(), "9000");                                  │      BOOST_CHECK_EQUAL(obj["cat1"].getValStr(), "9000");                                 
    BOOST_CHECK_EQUAL(obj["cat2"].getValStr(), "12345");                                 │      BOOST_CHECK_EQUAL(obj["cat2"].getValStr(), "12345");                                
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(obj["nyuknyuknyuk"].getValStr(), "");                              │      BOOST_CHECK_EQUAL(obj["nyuknyuknyuk"].getValStr(), "");                             
                                                                                         │                                                                                          
    BOOST_CHECK(obj.exists("age"));                                                      │      BOOST_CHECK(obj.exists("age"));                                                     
    BOOST_CHECK(obj.exists("first"));                                                    │      BOOST_CHECK(obj.exists("first"));                                                   
    BOOST_CHECK(obj.exists("last"));                                                     │      BOOST_CHECK(obj.exists("last"));                                                    
    BOOST_CHECK(obj.exists("distance"));                                                 │      BOOST_CHECK(obj.exists("distance"));                                                
    BOOST_CHECK(obj.exists("time"));                                                     │      BOOST_CHECK(obj.exists("time"));                                                    
    BOOST_CHECK(obj.exists("calories"));                                                 │      BOOST_CHECK(obj.exists("calories"));                                                
    BOOST_CHECK(obj.exists("temperature"));                                              │      BOOST_CHECK(obj.exists("temperature"));                                             
    BOOST_CHECK(obj.exists("moon"));                                                     │      BOOST_CHECK(obj.exists("moon"));                                                    
    BOOST_CHECK(obj.exists("spoon"));                                                    │      BOOST_CHECK(obj.exists("spoon"));                                                   
    BOOST_CHECK(obj.exists("cat1"));                                                     │      BOOST_CHECK(obj.exists("cat1"));                                                    
    BOOST_CHECK(obj.exists("cat2"));                                                     │      BOOST_CHECK(obj.exists("cat2"));                                                    
                                                                                         │                                                                                          
    BOOST_CHECK(!obj.exists("nyuknyuknyuk"));                                            │      BOOST_CHECK(!obj.exists("nyuknyuknyuk"));                                           
                                                                                         │                                                                                          
    std::map<std::string, UniValue::VType> objTypes;                                     │      std::map<std::string, UniValue::VType> objTypes;                                    
    objTypes["age"] = UniValue::VNUM;                                                    │      objTypes["age"] = UniValue::VNUM;                                                   
    objTypes["first"] = UniValue::VSTR;                                                  │      objTypes["first"] = UniValue::VSTR;                                                 
    objTypes["last"] = UniValue::VSTR;                                                   │      objTypes["last"] = UniValue::VSTR;                                                  
    objTypes["distance"] = UniValue::VNUM;                                               │      objTypes["distance"] = UniValue::VNUM;                                              
    objTypes["time"] = UniValue::VNUM;                                                   │      objTypes["time"] = UniValue::VNUM;                                                  
    objTypes["calories"] = UniValue::VNUM;                                               │      objTypes["calories"] = UniValue::VNUM;                                              
    objTypes["temperature"] = UniValue::VNUM;                                            │      objTypes["temperature"] = UniValue::VNUM;                                           
    objTypes["moon"] = UniValue::VBOOL;                                                  │      objTypes["moon"] = UniValue::VBOOL;                                                 
    objTypes["spoon"] = UniValue::VBOOL;                                                 │      objTypes["spoon"] = UniValue::VBOOL;                                                
    objTypes["cat1"] = UniValue::VNUM;                                                   │      objTypes["cat1"] = UniValue::VNUM;                                                  
    objTypes["cat2"] = UniValue::VNUM;                                                   │      objTypes["cat2"] = UniValue::VNUM;                                                  
    BOOST_CHECK(obj.checkObject(objTypes));                                              │      BOOST_CHECK(obj.checkObject(objTypes));                                             
                                                                                         │                                                                                          
    objTypes["cat2"] = UniValue::VSTR;                                                   │      objTypes["cat2"] = UniValue::VSTR;                                                  
    BOOST_CHECK(!obj.checkObject(objTypes));                                             │      BOOST_CHECK(!obj.checkObject(objTypes));                                            
                                                                                         │                                                                                          
    obj.clear();                                                                         │      obj.clear();                                                                        
    BOOST_CHECK(obj.empty());                                                            │      BOOST_CHECK(obj.empty());                                                           
    BOOST_CHECK_EQUAL(obj.size(), 0);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 0);                                                   
    BOOST_CHECK_EQUAL(obj.getType(), UniValue::VNULL);                                   │      BOOST_CHECK_EQUAL(obj.getType(), UniValue::VNULL);                                  
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(obj.setObject(), true);                                            │      BOOST_CHECK_EQUAL(obj.setObject(), true);                                           
    UniValue uv;                                                                         │      UniValue uv;                                                                        
    uv.setInt(42);                                                                       │      uv.setInt(42);                                                                      
    obj.__pushKV("age", uv);                                                             │      obj.__pushKV("age", uv);                                                            
    BOOST_CHECK_EQUAL(obj.size(), 1);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 1);                                                   
    BOOST_CHECK_EQUAL(obj["age"].getValStr(), "42");                                     │      BOOST_CHECK_EQUAL(obj["age"].getValStr(), "42");                                    
                                                                                         │                                                                                          
    uv.setInt(43);                                                                       │      uv.setInt(43);                                                                      
    obj.pushKV("age", uv);                                                               │      obj.pushKV("age", uv);                                                              
    BOOST_CHECK_EQUAL(obj.size(), 1);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 1);                                                   
    BOOST_CHECK_EQUAL(obj["age"].getValStr(), "43");                                     │      BOOST_CHECK_EQUAL(obj["age"].getValStr(), "43");                                    
                                                                                         │                                                                                          
    obj.pushKV("name", "foo bar");                                                       │      obj.pushKV("name", "foo bar");                                                      
                                                                                         │                                                                                          
    std::map<std::string,UniValue> kv;                                                   │      std::map<std::string,UniValue> kv;                                                  
    obj.getObjMap(kv);                                                                   │      obj.getObjMap(kv);                                                                  
    BOOST_CHECK_EQUAL(kv["age"].getValStr(), "43");                                      │      BOOST_CHECK_EQUAL(kv["age"].getValStr(), "43");                                     
    BOOST_CHECK_EQUAL(kv["name"].getValStr(), "foo bar");                                │      BOOST_CHECK_EQUAL(kv["name"].getValStr(), "foo bar");                               
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/mempool_tests.cpp:18                                                  │ bitcoin/src/test/mempool_tests.cpp:20                                                    
                                                                                         │                                                                                          
    // Test CTxMemPool::remove functionality                                             │      // Test CTxMemPool::remove functionality                                            
                                                                                         │                                                                                          
    TestMemPoolEntryHelper entry;                                                        │      TestMemPoolEntryHelper entry;                                                       
    // Parent transaction with three children,                                           │      // Parent transaction with three children,                                          
    // and three grand-children:                                                         │      // and three grand-children:                                                        
    CMutableTransaction txParent;                                                        │      CMutableTransaction txParent;                                                       
    txParent.vin.resize(1);                                                              │      txParent.vin.resize(1);                                                             
    txParent.vin[0].scriptSig = CScript() << OP_11;                                      │      txParent.vin[0].scriptSig = CScript() << OP_11;                                     
    txParent.vout.resize(3);                                                             │      txParent.vout.resize(3);                                                            
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        txParent.vout[i].scriptPubKey = CScript() << OP_11 << OP_EQUAL;                  │          txParent.vout[i].scriptPubKey = CScript() << OP_11 << OP_EQUAL;                 
        txParent.vout[i].nValue = 33000LL;                                               │          txParent.vout[i].nValue = 33000LL;                                              
    }                                                                                    │      }                                                                                   
    CMutableTransaction txChild[3];                                                      │      CMutableTransaction txChild[3];                                                     
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        txChild[i].vin.resize(1);                                                        │          txChild[i].vin.resize(1);                                                       
        txChild[i].vin[0].scriptSig = CScript() << OP_11;                                │          txChild[i].vin[0].scriptSig = CScript() << OP_11;                               
        txChild[i].vin[0].prevout.hash = txParent.GetHash();                             │          txChild[i].vin[0].prevout.hash = txParent.GetHash();                            
        txChild[i].vin[0].prevout.n = i;                                                 │          txChild[i].vin[0].prevout.n = i;                                                
        txChild[i].vout.resize(1);                                                       │          txChild[i].vout.resize(1);                                                      
        txChild[i].vout[0].scriptPubKey = CScript() << OP_11 << OP_EQUAL;                │          txChild[i].vout[0].scriptPubKey = CScript() << OP_11 << OP_EQUAL;               
        txChild[i].vout[0].nValue = 11000LL;                                             │          txChild[i].vout[0].nValue = 11000LL;                                            
    }                                                                                    │      }                                                                                   
    CMutableTransaction txGrandChild[3];                                                 │      CMutableTransaction txGrandChild[3];                                                
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        txGrandChild[i].vin.resize(1);                                                   │          txGrandChild[i].vin.resize(1);                                                  
        txGrandChild[i].vin[0].scriptSig = CScript() << OP_11;                           │          txGrandChild[i].vin[0].scriptSig = CScript() << OP_11;                          
        txGrandChild[i].vin[0].prevout.hash = txChild[i].GetHash();                      │          txGrandChild[i].vin[0].prevout.hash = txChild[i].GetHash();                     
        txGrandChild[i].vin[0].prevout.n = 0;                                            │          txGrandChild[i].vin[0].prevout.n = 0;                                           
        txGrandChild[i].vout.resize(1);                                                  │          txGrandChild[i].vout.resize(1);                                                 
        txGrandChild[i].vout[0].scriptPubKey = CScript() << OP_11 << OP_EQUAL;           │          txGrandChild[i].vout[0].scriptPubKey = CScript() << OP_11 << OP_EQUAL;          
        txGrandChild[i].vout[0].nValue = 11000LL;                                        │          txGrandChild[i].vout[0].nValue = 11000LL;                                       
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │                                                                                          
    CTxMemPool testPool(CFeeRate(0));                                                    │      CTxMemPool testPool;                                                                
                                                                                         │      LOCK2(cs_main, testPool.cs);                                                        
                                                                                         │                                                                                          
    // Nothing in pool, remove should do nothing:                                        │      // Nothing in pool, remove should do nothing:                                       
    unsigned int poolSize = testPool.size();                                             │      unsigned int poolSize = testPool.size();                                            
    testPool.removeRecursive(txParent);                                                  │      testPool.removeRecursive(CTransaction(txParent), REMOVAL_REASON_DUMMY);             
    BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                        │      BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                       
                                                                                         │                                                                                          
    // Just the parent:                                                                  │      // Just the parent:                                                                 
    testPool.addUnchecked(txParent.GetHash(), entry.FromTx(txParent));                   │      testPool.addUnchecked(entry.FromTx(txParent));                                      
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txParent);                                                  │      testPool.removeRecursive(CTransaction(txParent), REMOVAL_REASON_DUMMY);             
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 1);                                    │      BOOST_CHECK_EQUAL(testPool.size(), poolSize - 1);                                   
                                                                                         │                                                                                          
    // Parent, children, grandchildren:                                                  │      // Parent, children, grandchildren:                                                 
    testPool.addUnchecked(txParent.GetHash(), entry.FromTx(txParent));                   │      testPool.addUnchecked(entry.FromTx(txParent));                                      
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        testPool.addUnchecked(txChild[i].GetHash(), entry.FromTx(txChild[i]));           │          testPool.addUnchecked(entry.FromTx(txChild[i]));                                
        testPool.addUnchecked(txGrandChild[i].GetHash(), entry.FromTx(txGrandChild[i])); │          testPool.addUnchecked(entry.FromTx(txGrandChild[i]));                           
    }                                                                                    │      }                                                                                   
    // Remove Child[0], GrandChild[0] should be removed:                                 │      // Remove Child[0], GrandChild[0] should be removed:                                
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txChild[0]);                                                │      testPool.removeRecursive(CTransaction(txChild[0]), REMOVAL_REASON_DUMMY);           
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 2);                                    │      BOOST_CHECK_EQUAL(testPool.size(), poolSize - 2);                                   
    // ... make sure grandchild and child are gone:                                      │      // ... make sure grandchild and child are gone:                                     
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txGrandChild[0]);                                           │      testPool.removeRecursive(CTransaction(txGrandChild[0]), REMOVAL_REASON_DUMMY);      
    BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                        │      BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                       
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txChild[0]);                                                │      testPool.removeRecursive(CTransaction(txChild[0]), REMOVAL_REASON_DUMMY);           
    BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                        │      BOOST_CHECK_EQUAL(testPool.size(), poolSize);                                       
    // Remove parent, all children/grandchildren should go:                              │      // Remove parent, all children/grandchildren should go:                             
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txParent);                                                  │      testPool.removeRecursive(CTransaction(txParent), REMOVAL_REASON_DUMMY);             
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 5);                                    │      BOOST_CHECK_EQUAL(testPool.size(), poolSize - 5);                                   
    BOOST_CHECK_EQUAL(testPool.size(), 0);                                               │      BOOST_CHECK_EQUAL(testPool.size(), 0U);                                             
                                                                                         │                                                                                          
    // Add children and grandchildren, but NOT the parent (simulate the parent being in  │      // Add children and grandchildren, but NOT the parent (simulate the parent being in 
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        testPool.addUnchecked(txChild[i].GetHash(), entry.FromTx(txChild[i]));           │          testPool.addUnchecked(entry.FromTx(txChild[i]));                                
        testPool.addUnchecked(txGrandChild[i].GetHash(), entry.FromTx(txGrandChild[i])); │          testPool.addUnchecked(entry.FromTx(txGrandChild[i]));                           
    }                                                                                    │      }                                                                                   
    // Now remove the parent, as might happen if a block-re-org occurs but the parent ca │      // Now remove the parent, as might happen if a block-re-org occurs but the parent ca
    // put into the mempool (maybe because it is non-standard):                          │      // put into the mempool (maybe because it is non-standard):                         
    poolSize = testPool.size();                                                          │      poolSize = testPool.size();                                                         
    testPool.removeRecursive(txParent);                                                  │      testPool.removeRecursive(CTransaction(txParent), REMOVAL_REASON_DUMMY);             
    BOOST_CHECK_EQUAL(testPool.size(), poolSize - 6);                                    │      BOOST_CHECK_EQUAL(testPool.size(), poolSize - 6);                                   
    BOOST_CHECK_EQUAL(testPool.size(), 0);                                               │      BOOST_CHECK_EQUAL(testPool.size(), 0U);                                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/uint256_tests.cpp:160                                                  │ dogecoin/src/test/uint256_tests.cpp:160                                                  
                                                                                         │                                                                                          
    BOOST_CHECK(R1L.GetHex() == R1L.ToString());                                         │      BOOST_CHECK(R1L.GetHex() == R1L.ToString());                                        
    BOOST_CHECK(R2L.GetHex() == R2L.ToString());                                         │      BOOST_CHECK(R2L.GetHex() == R2L.ToString());                                        
    BOOST_CHECK(OneL.GetHex() == OneL.ToString());                                       │      BOOST_CHECK(OneL.GetHex() == OneL.ToString());                                      
    BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());                                       │      BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());                                      
    uint256 TmpL(R1L);                                                                   │      uint256 TmpL(R1L);                                                                  
    BOOST_CHECK(TmpL == R1L);                                                            │      BOOST_CHECK(TmpL == R1L);                                                           
    TmpL.SetHex(R2L.ToString());   BOOST_CHECK(TmpL == R2L);                             │      TmpL.SetHex(R2L.ToString());   BOOST_CHECK(TmpL == R2L);                            
    TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == uint256());                       │      TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == uint256());                      
                                                                                         │                                                                                          
    TmpL.SetHex(R1L.ToString());                                                         │      TmpL.SetHex(R1L.ToString());                                                        
    BOOST_CHECK(memcmp(R1L.begin(), R1Array, 32)==0);                                    │      BOOST_CHECK(memcmp(R1L.begin(), R1Array, 32)==0);                                   
    BOOST_CHECK(memcmp(TmpL.begin(), R1Array, 32)==0);                                   │      BOOST_CHECK(memcmp(TmpL.begin(), R1Array, 32)==0);                                  
    BOOST_CHECK(memcmp(R2L.begin(), R2Array, 32)==0);                                    │      BOOST_CHECK(memcmp(R2L.begin(), R2Array, 32)==0);                                   
    BOOST_CHECK(memcmp(ZeroL.begin(), ZeroArray, 32)==0);                                │      BOOST_CHECK(memcmp(ZeroL.begin(), ZeroArray, 32)==0);                               
    BOOST_CHECK(memcmp(OneL.begin(), OneArray, 32)==0);                                  │      BOOST_CHECK(memcmp(OneL.begin(), OneArray, 32)==0);                                 
    BOOST_CHECK(R1L.size() == sizeof(R1L));                                              │      BOOST_CHECK(R1L.size() == sizeof(R1L));                                             
    BOOST_CHECK(sizeof(R1L) == 32);                                                      │      BOOST_CHECK(sizeof(R1L) == 32);                                                     
    BOOST_CHECK(R1L.size() == 32);                                                       │      BOOST_CHECK(R1L.size() == 32);                                                      
    BOOST_CHECK(R2L.size() == 32);                                                       │      BOOST_CHECK(R2L.size() == 32);                                                      
    BOOST_CHECK(ZeroL.size() == 32);                                                     │      BOOST_CHECK(ZeroL.size() == 32);                                                    
    BOOST_CHECK(MaxL.size() == 32);                                                      │      BOOST_CHECK(MaxL.size() == 32);                                                     
    BOOST_CHECK(R1L.begin() + 32 == R1L.end());                                          │      BOOST_CHECK(R1L.begin() + 32 == R1L.end());                                         
    BOOST_CHECK(R2L.begin() + 32 == R2L.end());                                          │      BOOST_CHECK(R2L.begin() + 32 == R2L.end());                                         
    BOOST_CHECK(OneL.begin() + 32 == OneL.end());                                        │      BOOST_CHECK(OneL.begin() + 32 == OneL.end());                                       
    BOOST_CHECK(MaxL.begin() + 32 == MaxL.end());                                        │      BOOST_CHECK(MaxL.begin() + 32 == MaxL.end());                                       
    BOOST_CHECK(TmpL.begin() + 32 == TmpL.end());                                        │      BOOST_CHECK(TmpL.begin() + 32 == TmpL.end());                                       
    BOOST_CHECK(GetSerializeSize(R1L, 0, PROTOCOL_VERSION) == 32);                       │      BOOST_CHECK(GetSerializeSize(R1L, 0, PROTOCOL_VERSION) == 32);                      
    BOOST_CHECK(GetSerializeSize(ZeroL, 0, PROTOCOL_VERSION) == 32);                     │      BOOST_CHECK(GetSerializeSize(ZeroL, 0, PROTOCOL_VERSION) == 32);                    
                                                                                         │                                                                                          
    CDataStream ss(0, PROTOCOL_VERSION);                                                 │      CDataStream ss(0, PROTOCOL_VERSION);                                                
    ss << R1L;                                                                           │      ss << R1L;                                                                          
    BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+32));                            │      BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+32));                           
    ss >> TmpL;                                                                          │      ss >> TmpL;                                                                         
    BOOST_CHECK(R1L == TmpL);                                                            │      BOOST_CHECK(R1L == TmpL);                                                           
    ss.clear();                                                                          │      ss.clear();                                                                         
    ss << ZeroL;                                                                         │      ss << ZeroL;                                                                        
    BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+32));                        │      BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+32));                       
    ss >> TmpL;                                                                          │      ss >> TmpL;                                                                         
    BOOST_CHECK(ZeroL == TmpL);                                                          │      BOOST_CHECK(ZeroL == TmpL);                                                         
    ss.clear();                                                                          │      ss.clear();                                                                         
    ss << MaxL;                                                                          │      ss << MaxL;                                                                         
    BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+32));                          │      BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+32));                         
    ss >> TmpL;                                                                          │      ss >> TmpL;                                                                         
    BOOST_CHECK(MaxL == TmpL);                                                           │      BOOST_CHECK(MaxL == TmpL);                                                          
    ss.clear();                                                                          │      ss.clear();                                                                         
                                                                                         │                                                                                          
    BOOST_CHECK(R1S.GetHex() == R1S.ToString());                                         │      BOOST_CHECK(R1S.GetHex() == R1S.ToString());                                        
    BOOST_CHECK(R2S.GetHex() == R2S.ToString());                                         │      BOOST_CHECK(R2S.GetHex() == R2S.ToString());                                        
    BOOST_CHECK(OneS.GetHex() == OneS.ToString());                                       │      BOOST_CHECK(OneS.GetHex() == OneS.ToString());                                      
    BOOST_CHECK(MaxS.GetHex() == MaxS.ToString());                                       │      BOOST_CHECK(MaxS.GetHex() == MaxS.ToString());                                      
    uint160 TmpS(R1S);                                                                   │      uint160 TmpS(R1S);                                                                  
    BOOST_CHECK(TmpS == R1S);                                                            │      BOOST_CHECK(TmpS == R1S);                                                           
    TmpS.SetHex(R2S.ToString());   BOOST_CHECK(TmpS == R2S);                             │      TmpS.SetHex(R2S.ToString());   BOOST_CHECK(TmpS == R2S);                            
    TmpS.SetHex(ZeroS.ToString()); BOOST_CHECK(TmpS == uint160());                       │      TmpS.SetHex(ZeroS.ToString()); BOOST_CHECK(TmpS == uint160());                      
                                                                                         │                                                                                          
    TmpS.SetHex(R1S.ToString());                                                         │      TmpS.SetHex(R1S.ToString());                                                        
    BOOST_CHECK(memcmp(R1S.begin(), R1Array, 20)==0);                                    │      BOOST_CHECK(memcmp(R1S.begin(), R1Array, 20)==0);                                   
    BOOST_CHECK(memcmp(TmpS.begin(), R1Array, 20)==0);                                   │      BOOST_CHECK(memcmp(TmpS.begin(), R1Array, 20)==0);                                  
    BOOST_CHECK(memcmp(R2S.begin(), R2Array, 20)==0);                                    │      BOOST_CHECK(memcmp(R2S.begin(), R2Array, 20)==0);                                   
    BOOST_CHECK(memcmp(ZeroS.begin(), ZeroArray, 20)==0);                                │      BOOST_CHECK(memcmp(ZeroS.begin(), ZeroArray, 20)==0);                               
    BOOST_CHECK(memcmp(OneS.begin(), OneArray, 20)==0);                                  │      BOOST_CHECK(memcmp(OneS.begin(), OneArray, 20)==0);                                 
    BOOST_CHECK(R1S.size() == sizeof(R1S));                                              │      BOOST_CHECK(R1S.size() == sizeof(R1S));                                             
    BOOST_CHECK(sizeof(R1S) == 20);                                                      │      BOOST_CHECK(sizeof(R1S) == 20);                                                     
    BOOST_CHECK(R1S.size() == 20);                                                       │      BOOST_CHECK(R1S.size() == 20);                                                      
    BOOST_CHECK(R2S.size() == 20);                                                       │      BOOST_CHECK(R2S.size() == 20);                                                      
    BOOST_CHECK(ZeroS.size() == 20);                                                     │      BOOST_CHECK(ZeroS.size() == 20);                                                    
    BOOST_CHECK(MaxS.size() == 20);                                                      │      BOOST_CHECK(MaxS.size() == 20);                                                     
    BOOST_CHECK(R1S.begin() + 20 == R1S.end());                                          │      BOOST_CHECK(R1S.begin() + 20 == R1S.end());                                         
    BOOST_CHECK(R2S.begin() + 20 == R2S.end());                                          │      BOOST_CHECK(R2S.begin() + 20 == R2S.end());                                         
    BOOST_CHECK(OneS.begin() + 20 == OneS.end());                                        │      BOOST_CHECK(OneS.begin() + 20 == OneS.end());                                       
    BOOST_CHECK(MaxS.begin() + 20 == MaxS.end());                                        │      BOOST_CHECK(MaxS.begin() + 20 == MaxS.end());                                       
    BOOST_CHECK(TmpS.begin() + 20 == TmpS.end());                                        │      BOOST_CHECK(TmpS.begin() + 20 == TmpS.end());                                       
    BOOST_CHECK(GetSerializeSize(R1S, 0, PROTOCOL_VERSION) == 20);                       │      BOOST_CHECK(GetSerializeSize(R1S, 0, PROTOCOL_VERSION) == 20);                      
    BOOST_CHECK(GetSerializeSize(ZeroS, 0, PROTOCOL_VERSION) == 20);                     │      BOOST_CHECK(GetSerializeSize(ZeroS, 0, PROTOCOL_VERSION) == 20);                    
                                                                                         │                                                                                          
    ss << R1S;                                                                           │      ss << R1S;                                                                          
    BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+20));                            │      BOOST_CHECK(ss.str() == std::string(R1Array,R1Array+20));                           
    ss >> TmpS;                                                                          │      ss >> TmpS;                                                                         
    BOOST_CHECK(R1S == TmpS);                                                            │      BOOST_CHECK(R1S == TmpS);                                                           
    ss.clear();                                                                          │      ss.clear();                                                                         
    ss << ZeroS;                                                                         │      ss << ZeroS;                                                                        
    BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+20));                        │      BOOST_CHECK(ss.str() == std::string(ZeroArray,ZeroArray+20));                       
    ss >> TmpS;                                                                          │      ss >> TmpS;                                                                         
    BOOST_CHECK(ZeroS == TmpS);                                                          │      BOOST_CHECK(ZeroS == TmpS);                                                         
    ss.clear();                                                                          │      ss.clear();                                                                         
    ss << MaxS;                                                                          │      ss << MaxS;                                                                         
    BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+20));                          │      BOOST_CHECK(ss.str() == std::string(MaxArray,MaxArray+20));                         
    ss >> TmpS;                                                                          │      ss >> TmpS;                                                                         
    BOOST_CHECK(MaxS == TmpS);                                                           │      BOOST_CHECK(MaxS == TmpS);                                                          
    ss.clear();                                                                          │      ss.clear();                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/util_tests.cpp:505                                                    │ bitcoin/src/test/util_tests.cpp:1997                                                     
                                                                                         │                                                                                          
    int64_t amount = 0;                                                                  │      int64_t amount = 0;                                                                 
    BOOST_CHECK(ParseFixedPoint("0", 8, &amount));                                       │      BOOST_CHECK(ParseFixedPoint("0", 8, &amount));                                      
    BOOST_CHECK_EQUAL(amount, 0LL);                                                      │      BOOST_CHECK_EQUAL(amount, 0LL);                                                     
    BOOST_CHECK(ParseFixedPoint("1", 8, &amount));                                       │      BOOST_CHECK(ParseFixedPoint("1", 8, &amount));                                      
    BOOST_CHECK_EQUAL(amount, 100000000LL);                                              │      BOOST_CHECK_EQUAL(amount, 100000000LL);                                             
    BOOST_CHECK(ParseFixedPoint("0.0", 8, &amount));                                     │      BOOST_CHECK(ParseFixedPoint("0.0", 8, &amount));                                    
    BOOST_CHECK_EQUAL(amount, 0LL);                                                      │      BOOST_CHECK_EQUAL(amount, 0LL);                                                     
    BOOST_CHECK(ParseFixedPoint("-0.1", 8, &amount));                                    │      BOOST_CHECK(ParseFixedPoint("-0.1", 8, &amount));                                   
    BOOST_CHECK_EQUAL(amount, -10000000LL);                                              │      BOOST_CHECK_EQUAL(amount, -10000000LL);                                             
    BOOST_CHECK(ParseFixedPoint("1.1", 8, &amount));                                     │      BOOST_CHECK(ParseFixedPoint("1.1", 8, &amount));                                    
    BOOST_CHECK_EQUAL(amount, 110000000LL);                                              │      BOOST_CHECK_EQUAL(amount, 110000000LL);                                             
    BOOST_CHECK(ParseFixedPoint("1.10000000000000000", 8, &amount));                     │      BOOST_CHECK(ParseFixedPoint("1.10000000000000000", 8, &amount));                    
    BOOST_CHECK_EQUAL(amount, 110000000LL);                                              │      BOOST_CHECK_EQUAL(amount, 110000000LL);                                             
    BOOST_CHECK(ParseFixedPoint("1.1e1", 8, &amount));                                   │      BOOST_CHECK(ParseFixedPoint("1.1e1", 8, &amount));                                  
    BOOST_CHECK_EQUAL(amount, 1100000000LL);                                             │      BOOST_CHECK_EQUAL(amount, 1100000000LL);                                            
    BOOST_CHECK(ParseFixedPoint("1.1e-1", 8, &amount));                                  │      BOOST_CHECK(ParseFixedPoint("1.1e-1", 8, &amount));                                 
    BOOST_CHECK_EQUAL(amount, 11000000LL);                                               │      BOOST_CHECK_EQUAL(amount, 11000000LL);                                              
    BOOST_CHECK(ParseFixedPoint("1000", 8, &amount));                                    │      BOOST_CHECK(ParseFixedPoint("1000", 8, &amount));                                   
    BOOST_CHECK_EQUAL(amount, 100000000000LL);                                           │      BOOST_CHECK_EQUAL(amount, 100000000000LL);                                          
    BOOST_CHECK(ParseFixedPoint("-1000", 8, &amount));                                   │      BOOST_CHECK(ParseFixedPoint("-1000", 8, &amount));                                  
    BOOST_CHECK_EQUAL(amount, -100000000000LL);                                          │      BOOST_CHECK_EQUAL(amount, -100000000000LL);                                         
    BOOST_CHECK(ParseFixedPoint("0.00000001", 8, &amount));                              │      BOOST_CHECK(ParseFixedPoint("0.00000001", 8, &amount));                             
    BOOST_CHECK_EQUAL(amount, 1LL);                                                      │      BOOST_CHECK_EQUAL(amount, 1LL);                                                     
    BOOST_CHECK(ParseFixedPoint("0.0000000100000000", 8, &amount));                      │      BOOST_CHECK(ParseFixedPoint("0.0000000100000000", 8, &amount));                     
    BOOST_CHECK_EQUAL(amount, 1LL);                                                      │      BOOST_CHECK_EQUAL(amount, 1LL);                                                     
    BOOST_CHECK(ParseFixedPoint("-0.00000001", 8, &amount));                             │      BOOST_CHECK(ParseFixedPoint("-0.00000001", 8, &amount));                            
    BOOST_CHECK_EQUAL(amount, -1LL);                                                     │      BOOST_CHECK_EQUAL(amount, -1LL);                                                    
    BOOST_CHECK(ParseFixedPoint("1000000000.00000001", 8, &amount));                     │      BOOST_CHECK(ParseFixedPoint("1000000000.00000001", 8, &amount));                    
    BOOST_CHECK_EQUAL(amount, 100000000000000001LL);                                     │      BOOST_CHECK_EQUAL(amount, 100000000000000001LL);                                    
    BOOST_CHECK(ParseFixedPoint("9999999999.99999999", 8, &amount));                     │      BOOST_CHECK(ParseFixedPoint("9999999999.99999999", 8, &amount));                    
    BOOST_CHECK_EQUAL(amount, 999999999999999999LL);                                     │      BOOST_CHECK_EQUAL(amount, 999999999999999999LL);                                    
    BOOST_CHECK(ParseFixedPoint("-9999999999.99999999", 8, &amount));                    │      BOOST_CHECK(ParseFixedPoint("-9999999999.99999999", 8, &amount));                   
    BOOST_CHECK_EQUAL(amount, -999999999999999999LL);                                    │      BOOST_CHECK_EQUAL(amount, -999999999999999999LL);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(!ParseFixedPoint("", 8, &amount));                                       │      BOOST_CHECK(!ParseFixedPoint("", 8, &amount));                                      
    BOOST_CHECK(!ParseFixedPoint("-", 8, &amount));                                      │      BOOST_CHECK(!ParseFixedPoint("-", 8, &amount));                                     
    BOOST_CHECK(!ParseFixedPoint("a-1000", 8, &amount));                                 │      BOOST_CHECK(!ParseFixedPoint("a-1000", 8, &amount));                                
    BOOST_CHECK(!ParseFixedPoint("-a1000", 8, &amount));                                 │      BOOST_CHECK(!ParseFixedPoint("-a1000", 8, &amount));                                
    BOOST_CHECK(!ParseFixedPoint("-1000a", 8, &amount));                                 │      BOOST_CHECK(!ParseFixedPoint("-1000a", 8, &amount));                                
    BOOST_CHECK(!ParseFixedPoint("-01000", 8, &amount));                                 │      BOOST_CHECK(!ParseFixedPoint("-01000", 8, &amount));                                
    BOOST_CHECK(!ParseFixedPoint("00.1", 8, &amount));                                   │      BOOST_CHECK(!ParseFixedPoint("00.1", 8, &amount));                                  
    BOOST_CHECK(!ParseFixedPoint(".1", 8, &amount));                                     │      BOOST_CHECK(!ParseFixedPoint(".1", 8, &amount));                                    
    BOOST_CHECK(!ParseFixedPoint("--0.1", 8, &amount));                                  │      BOOST_CHECK(!ParseFixedPoint("--0.1", 8, &amount));                                 
    BOOST_CHECK(!ParseFixedPoint("0.000000001", 8, &amount));                            │      BOOST_CHECK(!ParseFixedPoint("0.000000001", 8, &amount));                           
    BOOST_CHECK(!ParseFixedPoint("-0.000000001", 8, &amount));                           │      BOOST_CHECK(!ParseFixedPoint("-0.000000001", 8, &amount));                          
    BOOST_CHECK(!ParseFixedPoint("0.00000001000000001", 8, &amount));                    │      BOOST_CHECK(!ParseFixedPoint("0.00000001000000001", 8, &amount));                   
    BOOST_CHECK(!ParseFixedPoint("-10000000000.00000000", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-10000000000.00000000", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("10000000000.00000000", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("10000000000.00000000", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("-10000000000.00000001", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-10000000000.00000001", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("10000000000.00000001", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("10000000000.00000001", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("-10000000000.00000009", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-10000000000.00000009", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("10000000000.00000009", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("10000000000.00000009", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("-99999999999.99999999", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-99999999999.99999999", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("99999909999.09999999", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("99999909999.09999999", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("92233720368.54775807", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("92233720368.54775807", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("92233720368.54775808", 8, &amount));                   │      BOOST_CHECK(!ParseFixedPoint("92233720368.54775808", 8, &amount));                  
    BOOST_CHECK(!ParseFixedPoint("-92233720368.54775808", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-92233720368.54775808", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("-92233720368.54775809", 8, &amount));                  │      BOOST_CHECK(!ParseFixedPoint("-92233720368.54775809", 8, &amount));                 
    BOOST_CHECK(!ParseFixedPoint("1.1e", 8, &amount));                                   │      BOOST_CHECK(!ParseFixedPoint("1.1e", 8, &amount));                                  
    BOOST_CHECK(!ParseFixedPoint("1.1e-", 8, &amount));                                  │      BOOST_CHECK(!ParseFixedPoint("1.1e-", 8, &amount));                                 
    BOOST_CHECK(!ParseFixedPoint("1.", 8, &amount));                                     │      BOOST_CHECK(!ParseFixedPoint("1.", 8, &amount));                                    
                                                                                         │                                                                                          
                                                                                         │      // Test with 3 decimal places for fee rates in sat/vB.                              
                                                                                         │      BOOST_CHECK(ParseFixedPoint("0.001", 3, &amount));                                  
                                                                                         │      BOOST_CHECK_EQUAL(amount, CAmount{1});                                              
                                                                                         │      BOOST_CHECK(!ParseFixedPoint("0.0009", 3, &amount));                                
                                                                                         │      BOOST_CHECK(!ParseFixedPoint("31.00100001", 3, &amount));                           
                                                                                         │      BOOST_CHECK(!ParseFixedPoint("31.0011", 3, &amount));                               
                                                                                         │      BOOST_CHECK(!ParseFixedPoint("31.99999999", 3, &amount));                           
                                                                                         │      BOOST_CHECK(!ParseFixedPoint("31.999999999999999999999", 3, &amount));              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/allocator_tests.cpp:15                                                │ bitcoin/src/test/allocator_tests.cpp:19                                                  
                                                                                         │                                                                                          
    // Fake memory base address for testing                                              │      // Fake memory base address for testing                                             
    // without actually using memory.                                                    │      // without actually using memory.                                                   
    void *synth_base = reinterpret_cast<void*>(0x08000000);                              │      void *synth_base = reinterpret_cast<void*>(0x08000000);                             
    const size_t synth_size = 1024*1024;                                                 │      const size_t synth_size = 1024*1024;                                                
    Arena b(synth_base, synth_size, 16);                                                 │      Arena b(synth_base, synth_size, 16);                                                
    void *chunk = b.alloc(1000);                                                         │      void *chunk = b.alloc(1000);                                                        
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    BOOST_CHECK(chunk != nullptr);                                                       │      BOOST_CHECK(chunk != nullptr);                                                      
    BOOST_CHECK(b.stats().used == 1008); // Aligned to 16                                │      BOOST_CHECK(b.stats().used == 1008); // Aligned to 16                               
    BOOST_CHECK(b.stats().total == synth_size); // Nothing has disappeared?              │      BOOST_CHECK(b.stats().total == synth_size); // Nothing has disappeared?             
    b.free(chunk);                                                                       │      b.free(chunk);                                                                      
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    BOOST_CHECK(b.stats().used == 0);                                                    │      BOOST_CHECK(b.stats().used == 0);                                                   
    BOOST_CHECK(b.stats().free == synth_size);                                           │      BOOST_CHECK(b.stats().free == synth_size);                                          
    try { // Test exception on double-free                                               │      try { // Test exception on double-free                                              
        b.free(chunk);                                                                   │          b.free(chunk);                                                                  
        BOOST_CHECK(0);                                                                  │          BOOST_CHECK(0);                                                                 
    } catch(std::runtime_error &)                                                        │      } catch(std::runtime_error &)                                                       
    {                                                                                    │      {                                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    void *a0 = b.alloc(128);                                                             │      void *a0 = b.alloc(128);                                                            
    void *a1 = b.alloc(256);                                                             │      void *a1 = b.alloc(256);                                                            
    void *a2 = b.alloc(512);                                                             │      void *a2 = b.alloc(512);                                                            
    BOOST_CHECK(b.stats().used == 896);                                                  │      BOOST_CHECK(b.stats().used == 896);                                                 
    BOOST_CHECK(b.stats().total == synth_size);                                          │      BOOST_CHECK(b.stats().total == synth_size);                                         
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    b.free(a0);                                                                          │      b.free(a0);                                                                         
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    BOOST_CHECK(b.stats().used == 768);                                                  │      BOOST_CHECK(b.stats().used == 768);                                                 
    b.free(a1);                                                                          │      b.free(a1);                                                                         
    BOOST_CHECK(b.stats().used == 512);                                                  │      BOOST_CHECK(b.stats().used == 512);                                                 
    void *a3 = b.alloc(128);                                                             │      void *a3 = b.alloc(128);                                                            
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    BOOST_CHECK(b.stats().used == 640);                                                  │      BOOST_CHECK(b.stats().used == 640);                                                 
    b.free(a2);                                                                          │      b.free(a2);                                                                         
    BOOST_CHECK(b.stats().used == 128);                                                  │      BOOST_CHECK(b.stats().used == 128);                                                 
    b.free(a3);                                                                          │      b.free(a3);                                                                         
    BOOST_CHECK(b.stats().used == 0);                                                    │      BOOST_CHECK(b.stats().used == 0);                                                   
    BOOST_CHECK_EQUAL(b.stats().chunks_used, 0);                                         │      BOOST_CHECK_EQUAL(b.stats().chunks_used, 0U);                                       
    BOOST_CHECK(b.stats().total == synth_size);                                          │      BOOST_CHECK(b.stats().total == synth_size);                                         
    BOOST_CHECK(b.stats().free == synth_size);                                           │      BOOST_CHECK(b.stats().free == synth_size);                                          
    BOOST_CHECK_EQUAL(b.stats().chunks_free, 1);                                         │      BOOST_CHECK_EQUAL(b.stats().chunks_free, 1U);                                       
                                                                                         │                                                                                          
    std::vector<void*> addr;                                                             │      std::vector<void*> addr;                                                            
    BOOST_CHECK(b.alloc(0) == nullptr); // allocating 0 always returns nullptr           │      BOOST_CHECK(b.alloc(0) == nullptr); // allocating 0 always returns nullptr          
#ifdef ARENA_DEBUG                                                                       │  #ifdef ARENA_DEBUG                                                                      
    b.walk();                                                                            │      b.walk();                                                                           
#endif                                                                                   │  #endif                                                                                  
    // Sweeping allocate all memory                                                      │      // Sweeping allocate all memory                                                     
    for (int x=0; x<1024; ++x)                                                           │      for (int x=0; x<1024; ++x)                                                          
        addr.push_back(b.alloc(1024));                                                   │          addr.push_back(b.alloc(1024));                                                  
    BOOST_CHECK(b.stats().free == 0);                                                    │      BOOST_CHECK(b.stats().free == 0);                                                   
    BOOST_CHECK(b.alloc(1024) == nullptr); // memory is full, this must return nullptr   │      BOOST_CHECK(b.alloc(1024) == nullptr); // memory is full, this must return nullptr  
    BOOST_CHECK(b.alloc(0) == nullptr);                                                  │      BOOST_CHECK(b.alloc(0) == nullptr);                                                 
    for (int x=0; x<1024; ++x)                                                           │      for (int x=0; x<1024; ++x)                                                          
        b.free(addr[x]);                                                                 │          b.free(addr[x]);                                                                
    addr.clear();                                                                        │      addr.clear();                                                                       
    BOOST_CHECK(b.stats().total == synth_size);                                          │      BOOST_CHECK(b.stats().total == synth_size);                                         
    BOOST_CHECK(b.stats().free == synth_size);                                           │      BOOST_CHECK(b.stats().free == synth_size);                                          
                                                                                         │                                                                                          
    // Now in the other direction...                                                     │      // Now in the other direction...                                                    
    for (int x=0; x<1024; ++x)                                                           │      for (int x=0; x<1024; ++x)                                                          
        addr.push_back(b.alloc(1024));                                                   │          addr.push_back(b.alloc(1024));                                                  
    for (int x=0; x<1024; ++x)                                                           │      for (int x=0; x<1024; ++x)                                                          
        b.free(addr[1023-x]);                                                            │          b.free(addr[1023-x]);                                                           
    addr.clear();                                                                        │      addr.clear();                                                                       
                                                                                         │                                                                                          
    // Now allocate in smaller unequal chunks, then deallocate haphazardly               │      // Now allocate in smaller unequal chunks, then deallocate haphazardly              
    // Not all the chunks will succeed allocating, but freeing nullptr is                │      // Not all the chunks will succeed allocating, but freeing nullptr is               
    // allowed so that is no problem.                                                    │      // allowed so that is no problem.                                                   
    for (int x=0; x<2048; ++x)                                                           │      for (int x=0; x<2048; ++x)                                                          
        addr.push_back(b.alloc(x+1));                                                    │          addr.push_back(b.alloc(x+1));                                                   
    for (int x=0; x<2048; ++x)                                                           │      for (int x=0; x<2048; ++x)                                                          
        b.free(addr[((x*23)%2048)^242]);                                                 │          b.free(addr[((x*23)%2048)^242]);                                                
    addr.clear();                                                                        │      addr.clear();                                                                       
                                                                                         │                                                                                          
    // Go entirely wild: free and alloc interleaved,                                     │      // Go entirely wild: free and alloc interleaved,                                    
    // generate targets and sizes using pseudo-randomness.                               │      // generate targets and sizes using pseudo-randomness.                              
    for (int x=0; x<2048; ++x)                                                           │      for (int x=0; x<2048; ++x)                                                          
        addr.push_back(0);                                                               │          addr.push_back(nullptr);                                                        
    uint32_t s = 0x12345678;                                                             │      uint32_t s = 0x12345678;                                                            
    for (int x=0; x<5000; ++x) {                                                         │      for (int x=0; x<5000; ++x) {                                                        
        int idx = s & (addr.size()-1);                                                   │          int idx = s & (addr.size()-1);                                                  
        if (s & 0x80000000) {                                                            │          if (s & 0x80000000) {                                                           
            b.free(addr[idx]);                                                           │              b.free(addr[idx]);                                                          
            addr[idx] = 0;                                                               │              addr[idx] = nullptr;                                                        
        } else if(!addr[idx]) {                                                          │          } else if(!addr[idx]) {                                                         
            addr[idx] = b.alloc((s >> 16) & 2047);                                       │              addr[idx] = b.alloc((s >> 16) & 2047);                                      
        }                                                                                │          }                                                                               
        bool lsb = s & 1;                                                                │          bool lsb = s & 1;                                                               
        s >>= 1;                                                                         │          s >>= 1;                                                                        
        if (lsb)                                                                         │          if (lsb)                                                                        
            s ^= 0xf00f00f0; // LFSR period 0xf7ffffe0                                   │              s ^= 0xf00f00f0; // LFSR period 0xf7ffffe0                                  
    }                                                                                    │      }                                                                                   
    for (void *ptr: addr)                                                                │      for (void *ptr: addr)                                                               
        b.free(ptr);                                                                     │          b.free(ptr);                                                                    
    addr.clear();                                                                        │      addr.clear();                                                                       
                                                                                         │                                                                                          
    BOOST_CHECK(b.stats().total == synth_size);                                          │      BOOST_CHECK(b.stats().total == synth_size);                                         
    BOOST_CHECK(b.stats().free == synth_size);                                           │      BOOST_CHECK(b.stats().free == synth_size);                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactiontablemodel.cpp:100                                           │ bitcoin/src/qt/transactiontablemodel.cpp:133                                             
                                                                                         │                                                                                          
        qDebug() << "TransactionTablePriv::updateWallet: " + QString::fromStdString(hash │          qDebug() << "TransactionTablePriv::updateWallet: " + QString::fromStdString(hash
                                                                                         │                                                                                          
        // Find bounds of this transaction in model                                      │          // Find bounds of this transaction in model                                     
        QList<TransactionRecord>::iterator lower = qLowerBound(                          │          QList<TransactionRecord>::iterator lower = std::lower_bound(                    
            cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());               │              cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());              
        QList<TransactionRecord>::iterator upper = qUpperBound(                          │          QList<TransactionRecord>::iterator upper = std::upper_bound(                    
            cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());               │              cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan());              
        int lowerIndex = (lower - cachedWallet.begin());                                 │          int lowerIndex = (lower - cachedWallet.begin());                                
        int upperIndex = (upper - cachedWallet.begin());                                 │          int upperIndex = (upper - cachedWallet.begin());                                
        bool inModel = (lower != upper);                                                 │          bool inModel = (lower != upper);                                                
                                                                                         │                                                                                          
        if(status == CT_UPDATED)                                                         │          if(status == CT_UPDATED)                                                        
        {                                                                                │          {                                                                               
            if(showTransaction && !inModel)                                              │              if(showTransaction && !inModel)                                             
                status = CT_NEW; /* Not in model, but want to show, treat as new */      │                  status = CT_NEW; /* Not in model, but want to show, treat as new */     
            if(!showTransaction && inModel)                                              │              if(!showTransaction && inModel)                                             
                status = CT_DELETED; /* In model, but want to hide, treat as deleted */  │                  status = CT_DELETED; /* In model, but want to hide, treat as deleted */ 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        qDebug() << "    inModel=" + QString::number(inModel) +                          │          qDebug() << "    inModel=" + QString::number(inModel) +                         
                    " Index=" + QString::number(lowerIndex) + "-" + QString::number(uppe │                      " Index=" + QString::number(lowerIndex) + "-" + QString::number(uppe
                    " showTransaction=" + QString::number(showTransaction) + " derivedSt │                      " showTransaction=" + QString::number(showTransaction) + " derivedSt
                                                                                         │                                                                                          
        switch(status)                                                                   │          switch(status)                                                                  
        {                                                                                │          {                                                                               
        case CT_NEW:                                                                     │          case CT_NEW:                                                                    
            if(inModel)                                                                  │              if(inModel)                                                                 
            {                                                                            │              {                                                                           
                qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_NEW,  │                  qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_NEW, 
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            if(showTransaction)                                                          │              if(showTransaction)                                                         
            {                                                                            │              {                                                                           
                LOCK2(cs_main, wallet->cs_wallet);                                       │                                                                                          
                // Find transaction in wallet                                            │                  // Find transaction in wallet                                           
                std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(hash) │                  interfaces::WalletTx wtx = wallet.getWalletTx(hash);                    
                if(mi == wallet->mapWallet.end())                                        │                  if(!wtx.tx)                                                             
                {                                                                        │                  {                                                                       
                    qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_N │                      qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_N
                    break;                                                               │                      break;                                                              
                }                                                                        │                  }                                                                       
                // Added -- insert at the right position                                 │                  // Added -- insert at the right position                                
                QList<TransactionRecord> toInsert =                                      │                  QList<TransactionRecord> toInsert =                                     
                        TransactionRecord::decomposeTransaction(wallet, mi->second);     │                          TransactionRecord::decomposeTransaction(wtx);                   
                if(!toInsert.isEmpty()) /* only if something to insert */                │                  if(!toInsert.isEmpty()) /* only if something to insert */               
                {                                                                        │                  {                                                                       
                    parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex+toInse │                      parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex+toInse
                    int insert_idx = lowerIndex;                                         │                      int insert_idx = lowerIndex;                                        
                    Q_FOREACH(const TransactionRecord &rec, toInsert)                    │                      for (const TransactionRecord &rec : toInsert)                       
                    {                                                                    │                      {                                                                   
                        cachedWallet.insert(insert_idx, rec);                            │                          cachedWallet.insert(insert_idx, rec);                           
                        insert_idx += 1;                                                 │                          insert_idx += 1;                                                
                    }                                                                    │                      }                                                                   
                    parent->endInsertRows();                                             │                      parent->endInsertRows();                                            
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            break;                                                                       │              break;                                                                      
        case CT_DELETED:                                                                 │          case CT_DELETED:                                                                
            if(!inModel)                                                                 │              if(!inModel)                                                                
            {                                                                            │              {                                                                           
                qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_DELET │                  qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_DELET
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            // Removed -- remove entire transaction from table                           │              // Removed -- remove entire transaction from table                          
            parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);            │              parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);           
            cachedWallet.erase(lower, upper);                                            │              cachedWallet.erase(lower, upper);                                           
            parent->endRemoveRows();                                                     │              parent->endRemoveRows();                                                    
            break;                                                                       │              break;                                                                      
        case CT_UPDATED:                                                                 │          case CT_UPDATED:                                                                
            // Miscellaneous updates -- nothing to do, status update will take care of t │              // Miscellaneous updates -- nothing to do, status update will take care of t
            // visible transactions.                                                     │              // visible transactions.                                                    
                                                                                         │              for (int i = lowerIndex; i < upperIndex; i++) {                             
                                                                                         │                  TransactionRecord *rec = &cachedWallet[i];                              
                                                                                         │                  rec->status.needsUpdate = true;                                         
                                                                                         │              }                                                                           
            break;                                                                       │              break;                                                                      
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/merkle_tests.cpp:26                                                    │ dogecoin/src/consensus/merkle.cpp:46                                                     
                                                                                         │                                                                                          
    if (pbranch) pbranch->clear();                                                       │      if (pbranch) pbranch->clear();                                                      
    if (leaves.size() == 0) {                                                            │      if (leaves.size() == 0) {                                                           
        if (pmutated) *pmutated = false;                                                 │          if (pmutated) *pmutated = false;                                                
        if (proot) *proot = uint256();                                                   │          if (proot) *proot = uint256();                                                  
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
    bool mutated = false;                                                                │      bool mutated = false;                                                               
    // count is the number of leaves processed so far.                                   │      // count is the number of leaves processed so far.                                  
    uint32_t count = 0;                                                                  │      uint32_t count = 0;                                                                 
    // inner is an array of eagerly computed subtree hashes, indexed by tree             │      // inner is an array of eagerly computed subtree hashes, indexed by tree            
    // level (0 being the leaves).                                                       │      // level (0 being the leaves).                                                      
    // For example, when count is 25 (11001 in binary), inner[4] is the hash of          │      // For example, when count is 25 (11001 in binary), inner[4] is the hash of         
    // the first 16 leaves, inner[3] of the next 8 leaves, and inner[0] equal to         │      // the first 16 leaves, inner[3] of the next 8 leaves, and inner[0] equal to        
    // the last leaf. The other inner entries are undefined.                             │      // the last leaf. The other inner entries are undefined.                            
    uint256 inner[32];                                                                   │      uint256 inner[32];                                                                  
    // Which position in inner is a hash that depends on the matching leaf.              │      // Which position in inner is a hash that depends on the matching leaf.             
    int matchlevel = -1;                                                                 │      int matchlevel = -1;                                                                
    // First process all leaves into 'inner' values.                                     │      // First process all leaves into 'inner' values.                                    
    while (count < leaves.size()) {                                                      │      while (count < leaves.size()) {                                                     
        uint256 h = leaves[count];                                                       │          uint256 h = leaves[count];                                                      
        bool matchh = count == branchpos;                                                │          bool matchh = count == branchpos;                                               
        count++;                                                                         │          count++;                                                                        
        int level;                                                                       │          int level;                                                                      
        // For each of the lower bits in count that are 0, do 1 step. Each               │          // For each of the lower bits in count that are 0, do 1 step. Each              
        // corresponds to an inner value that existed before processing the              │          // corresponds to an inner value that existed before processing the             
        // current leaf, and each needs a hash to combine it.                            │          // current leaf, and each needs a hash to combine it.                           
        for (level = 0; !(count & (((uint32_t)1) << level)); level++) {                  │          for (level = 0; !(count & (((uint32_t)1) << level)); level++) {                 
            if (pbranch) {                                                               │              if (pbranch) {                                                              
                if (matchh) {                                                            │                  if (matchh) {                                                           
                    pbranch->push_back(inner[level]);                                    │                      pbranch->push_back(inner[level]);                                   
                } else if (matchlevel == level) {                                        │                  } else if (matchlevel == level) {                                       
                    pbranch->push_back(h);                                               │                      pbranch->push_back(h);                                              
                    matchh = true;                                                       │                      matchh = true;                                                      
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            mutated |= (inner[level] == h);                                              │              mutated |= (inner[level] == h);                                             
            CHash256().Write(inner[level]).Write(h).Finalize(h);                         │              CHash256().Write(inner[level].begin(), 32).Write(h.begin(), 32).Finalize(h.b
        }                                                                                │          }                                                                               
        // Store the resulting hash at inner position level.                             │          // Store the resulting hash at inner position level.                            
        inner[level] = h;                                                                │          inner[level] = h;                                                               
        if (matchh) {                                                                    │          if (matchh) {                                                                   
            matchlevel = level;                                                          │              matchlevel = level;                                                         
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    // Do a final 'sweep' over the rightmost branch of the tree to process               │      // Do a final 'sweep' over the rightmost branch of the tree to process              
    // odd levels, and reduce everything to a single top value.                          │      // odd levels, and reduce everything to a single top value.                         
    // Level is the level (counted from the bottom) up to which we've sweeped.           │      // Level is the level (counted from the bottom) up to which we've sweeped.          
    int level = 0;                                                                       │      int level = 0;                                                                      
    // As long as bit number level in count is zero, skip it. It means there             │      // As long as bit number level in count is zero, skip it. It means there            
    // is nothing left at this level.                                                    │      // is nothing left at this level.                                                   
    while (!(count & (((uint32_t)1) << level))) {                                        │      while (!(count & (((uint32_t)1) << level))) {                                       
        level++;                                                                         │          level++;                                                                        
    }                                                                                    │      }                                                                                   
    uint256 h = inner[level];                                                            │      uint256 h = inner[level];                                                           
    bool matchh = matchlevel == level;                                                   │      bool matchh = matchlevel == level;                                                  
    while (count != (((uint32_t)1) << level)) {                                          │      while (count != (((uint32_t)1) << level)) {                                         
        // If we reach this point, h is an inner value that is not the top.              │          // If we reach this point, h is an inner value that is not the top.             
        // We combine it with itself (Bitcoin's special rule for odd levels in           │          // We combine it with itself (Bitcoin's special rule for odd levels in          
        // the tree) to produce a higher level one.                                      │          // the tree) to produce a higher level one.                                     
        if (pbranch && matchh) {                                                         │          if (pbranch && matchh) {                                                        
            pbranch->push_back(h);                                                       │              pbranch->push_back(h);                                                      
        }                                                                                │          }                                                                               
        CHash256().Write(h).Write(h).Finalize(h);                                        │          CHash256().Write(h.begin(), 32).Write(h.begin(), 32).Finalize(h.begin());       
        // Increment count to the value it would have if two entries at this             │          // Increment count to the value it would have if two entries at this            
        // level had existed.                                                            │          // level had existed.                                                           
        count += (((uint32_t)1) << level);                                               │          count += (((uint32_t)1) << level);                                              
        level++;                                                                         │          level++;                                                                        
        // And propagate the result upwards accordingly.                                 │          // And propagate the result upwards accordingly.                                
        while (!(count & (((uint32_t)1) << level))) {                                    │          while (!(count & (((uint32_t)1) << level))) {                                   
            if (pbranch) {                                                               │              if (pbranch) {                                                              
                if (matchh) {                                                            │                  if (matchh) {                                                           
                    pbranch->push_back(inner[level]);                                    │                      pbranch->push_back(inner[level]);                                   
                } else if (matchlevel == level) {                                        │                  } else if (matchlevel == level) {                                       
                    pbranch->push_back(h);                                               │                      pbranch->push_back(h);                                              
                    matchh = true;                                                       │                      matchh = true;                                                      
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            CHash256().Write(inner[level]).Write(h).Finalize(h);                         │              CHash256().Write(inner[level].begin(), 32).Write(h.begin(), 32).Finalize(h.b
            level++;                                                                     │              level++;                                                                    
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    // Return result.                                                                    │      // Return result.                                                                   
    if (pmutated) *pmutated = mutated;                                                   │      if (pmutated) *pmutated = mutated;                                                  
    if (proot) *proot = h;                                                               │      if (proot) *proot = h;                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/scheduler_tests.cpp:44                                                │ bitcoin/src/test/scheduler_tests.cpp:32                                                  
                                                                                         │                                                                                          
    // Stress test: hundreds of microsecond-scheduled tasks,                             │      // Stress test: hundreds of microsecond-scheduled tasks,                            
    // serviced by 10 threads.                                                           │      // serviced by 10 threads.                                                          
    //                                                                                   │      //                                                                                  
    // So... ten shared counters, which if all the tasks execute                         │      // So... ten shared counters, which if all the tasks execute                        
    // properly will sum to the number of tasks done.                                    │      // properly will sum to the number of tasks done.                                   
    // Each task adds or subtracts a random amount from one of the                       │      // Each task adds or subtracts a random amount from one of the                      
    // counters, and then schedules another task 0-1000                                  │      // counters, and then schedules another task 0-1000                                 
    // microseconds in the future to subtract or add from                                │      // microseconds in the future to subtract or add from                               
    // the counter -random_amount+1, so in the end the shared                            │      // the counter -random_amount+1, so in the end the shared                           
    // counters should sum to the number of initial tasks performed.                     │      // counters should sum to the number of initial tasks performed.                    
    CScheduler microTasks;                                                               │      CScheduler microTasks;                                                              
                                                                                         │                                                                                          
    boost::mutex counterMutex[10];                                                       │      std::mutex counterMutex[10];                                                        
    int counter[10] = { 0 };                                                             │      int counter[10] = { 0 };                                                            
    boost::random::mt19937 rng(42);                                                      │      FastRandomContext rng{/*fDeterministic=*/true};                                     
    boost::random::uniform_int_distribution<> zeroToNine(0, 9);                          │      auto zeroToNine = [](FastRandomContext& rc) -> int { return rc.randrange(10); }; // 
    boost::random::uniform_int_distribution<> randomMsec(-11, 1000);                     │      auto randomMsec = [](FastRandomContext& rc) -> int { return -11 + (int)rc.randrange(
    boost::random::uniform_int_distribution<> randomDelta(-1000, 1000);                  │      auto randomDelta = [](FastRandomContext& rc) -> int { return -1000 + (int)rc.randran
                                                                                         │                                                                                          
    boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();  │      std::chrono::system_clock::time_point start = std::chrono::system_clock::now();     
    boost::chrono::system_clock::time_point now = start;                                 │      std::chrono::system_clock::time_point now = start;                                  
    boost::chrono::system_clock::time_point first, last;                                 │      std::chrono::system_clock::time_point first, last;                                  
    size_t nTasks = microTasks.getQueueInfo(first, last);                                │      size_t nTasks = microTasks.getQueueInfo(first, last);                               
    BOOST_CHECK(nTasks == 0);                                                            │      BOOST_CHECK(nTasks == 0);                                                           
                                                                                         │                                                                                          
    for (int i = 0; i < 100; i++) {                                                      │      for (int i = 0; i < 100; ++i) {                                                     
        boost::chrono::system_clock::time_point t = now + boost::chrono::microseconds(ra │          std::chrono::system_clock::time_point t = now + std::chrono::microseconds(random
        boost::chrono::system_clock::time_point tReschedule = now + boost::chrono::micro │          std::chrono::system_clock::time_point tReschedule = now + std::chrono::microseco
        int whichCounter = zeroToNine(rng);                                              │          int whichCounter = zeroToNine(rng);                                             
        CScheduler::Function f = boost::bind(µTask, boost::ref(microTasks),         │          CScheduler::Function f = std::bind(µTask, std::ref(microTasks),            
                                             boost::ref(counterMutex[whichCounter]), boo │                                               std::ref(counterMutex[whichCounter]), std::
                                             randomDelta(rng), tReschedule);             │                                               randomDelta(rng), tReschedule);            
        microTasks.schedule(f, t);                                                       │          microTasks.schedule(f, t);                                                      
    }                                                                                    │      }                                                                                   
    nTasks = microTasks.getQueueInfo(first, last);                                       │      nTasks = microTasks.getQueueInfo(first, last);                                      
    BOOST_CHECK(nTasks == 100);                                                          │      BOOST_CHECK(nTasks == 100);                                                         
    BOOST_CHECK(first < last);                                                           │      BOOST_CHECK(first < last);                                                          
    BOOST_CHECK(last > now);                                                             │      BOOST_CHECK(last > now);                                                            
                                                                                         │                                                                                          
    // As soon as these are created they will start running and servicing the queue      │      // As soon as these are created they will start running and servicing the queue     
    boost::thread_group microThreads;                                                    │      std::vector<std::thread> microThreads;                                              
    for (int i = 0; i < 5; i++)                                                          │      for (int i = 0; i < 5; i++)                                                         
        microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, µTasks)); │          microThreads.emplace_back(std::bind(&CScheduler::serviceQueue, µTasks));   
                                                                                         │                                                                                          
    MicroSleep(600);                                                                     │      UninterruptibleSleep(std::chrono::microseconds{600});                               
    now = boost::chrono::system_clock::now();                                            │      now = std::chrono::system_clock::now();                                             
                                                                                         │                                                                                          
    // More threads and more tasks:                                                      │      // More threads and more tasks:                                                     
    for (int i = 0; i < 5; i++)                                                          │      for (int i = 0; i < 5; i++)                                                         
        microThreads.create_thread(boost::bind(&CScheduler::serviceQueue, µTasks)); │          microThreads.emplace_back(std::bind(&CScheduler::serviceQueue, µTasks));   
    for (int i = 0; i < 100; i++) {                                                      │      for (int i = 0; i < 100; i++) {                                                     
        boost::chrono::system_clock::time_point t = now + boost::chrono::microseconds(ra │          std::chrono::system_clock::time_point t = now + std::chrono::microseconds(random
        boost::chrono::system_clock::time_point tReschedule = now + boost::chrono::micro │          std::chrono::system_clock::time_point tReschedule = now + std::chrono::microseco
        int whichCounter = zeroToNine(rng);                                              │          int whichCounter = zeroToNine(rng);                                             
        CScheduler::Function f = boost::bind(µTask, boost::ref(microTasks),         │          CScheduler::Function f = std::bind(µTask, std::ref(microTasks),            
                                             boost::ref(counterMutex[whichCounter]), boo │                                               std::ref(counterMutex[whichCounter]), std::
                                             randomDelta(rng), tReschedule);             │                                               randomDelta(rng), tReschedule);            
        microTasks.schedule(f, t);                                                       │          microTasks.schedule(f, t);                                                      
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Drain the task queue then exit threads                                            │      // Drain the task queue then exit threads                                           
    microTasks.stop(true);                                                               │      microTasks.StopWhenDrained();                                                       
    microThreads.join_all(); // ... wait until all the threads are done                  │      // wait until all the threads are done                                              
                                                                                         │      for (auto& thread: microThreads) {                                                  
                                                                                         │          if (thread.joinable()) thread.join();                                           
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
    int counterSum = 0;                                                                  │      int counterSum = 0;                                                                 
    for (int i = 0; i < 10; i++) {                                                       │      for (int i = 0; i < 10; i++) {                                                      
        BOOST_CHECK(counter[i] != 0);                                                    │          BOOST_CHECK(counter[i] != 0);                                                   
        counterSum += counter[i];                                                        │          counterSum += counter[i];                                                       
    }                                                                                    │      }                                                                                   
    BOOST_CHECK_EQUAL(counterSum, 200);                                                  │      BOOST_CHECK_EQUAL(counterSum, 200);                                                 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/key.cpp:63                                                                 │ bitcoin/src/key.cpp:94                                                                   
                                                                                         │                                                                                          
                                                                                         │      assert(*seckeylen >= CKey::SIZE);                                                   
    secp256k1_pubkey pubkey;                                                             │      secp256k1_pubkey pubkey;                                                            
    size_t pubkeylen = 0;                                                                │      size_t pubkeylen = 0;                                                               
    if (!secp256k1_ec_pubkey_create(ctx, &pubkey, key32)) {                              │      if (!secp256k1_ec_pubkey_create(ctx, &pubkey, key32)) {                             
        *privkeylen = 0;                                                                 │          *seckeylen = 0;                                                                 
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    if (compressed) {                                                                    │      if (compressed) {                                                                   
        static const unsigned char begin[] = {                                           │          static const unsigned char begin[] = {                                          
            0x30,0x81,0xD3,0x02,0x01,0x01,0x04,0x20                                      │              0x30,0x81,0xD3,0x02,0x01,0x01,0x04,0x20                                     
        };                                                                               │          };                                                                              
        static const unsigned char middle[] = {                                          │          static const unsigned char middle[] = {                                         
            0xA0,0x81,0x85,0x30,0x81,0x82,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0 │              0xA0,0x81,0x85,0x30,0x81,0x82,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0
            0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0 │              0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0
            0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0 │              0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0
            0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0 │              0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0
            0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0 │              0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0
            0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00             │              0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00            
        };                                                                               │          };                                                                              
        unsigned char *ptr = privkey;                                                    │          unsigned char *ptr = seckey;                                                    
        memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);                         │          memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);                        
        memcpy(ptr, key32, 32); ptr += 32;                                               │          memcpy(ptr, key32, 32); ptr += 32;                                              
        memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);                      │          memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);                     
        pubkeylen = CPubKey::COMPRESSED_SIZE;                                            │          pubkeylen = CPubKey::COMPRESSED_SIZE;                                           
        secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_COMPRE │          secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_COMPRE
        ptr += pubkeylen;                                                                │          ptr += pubkeylen;                                                               
        *privkeylen = ptr - privkey;                                                     │          *seckeylen = ptr - seckey;                                                      
                                                                                         │          assert(*seckeylen == CKey::COMPRESSED_SIZE);                                    
    } else {                                                                             │      } else {                                                                            
        static const unsigned char begin[] = {                                           │          static const unsigned char begin[] = {                                          
            0x30,0x82,0x01,0x13,0x02,0x01,0x01,0x04,0x20                                 │              0x30,0x82,0x01,0x13,0x02,0x01,0x01,0x04,0x20                                
        };                                                                               │          };                                                                              
        static const unsigned char middle[] = {                                          │          static const unsigned char middle[] = {                                         
            0xA0,0x81,0xA5,0x30,0x81,0xA2,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0 │              0xA0,0x81,0xA5,0x30,0x81,0xA2,0x02,0x01,0x01,0x30,0x2C,0x06,0x07,0x2A,0x86,0
            0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0 │              0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0
            0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0 │              0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0
            0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0 │              0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0
            0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0 │              0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0
            0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0 │              0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0
            0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0 │              0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0
            0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0 │              0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0
            0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00             │              0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00            
        };                                                                               │          };                                                                              
        unsigned char *ptr = privkey;                                                    │          unsigned char *ptr = seckey;                                                    
        memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);                         │          memcpy(ptr, begin, sizeof(begin)); ptr += sizeof(begin);                        
        memcpy(ptr, key32, 32); ptr += 32;                                               │          memcpy(ptr, key32, 32); ptr += 32;                                              
        memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);                      │          memcpy(ptr, middle, sizeof(middle)); ptr += sizeof(middle);                     
        pubkeylen = CPubKey::SIZE;                                                       │          pubkeylen = CPubKey::SIZE;                                                      
        secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_UNCOMP │          secp256k1_ec_pubkey_serialize(ctx, ptr, &pubkeylen, &pubkey, SECP256K1_EC_UNCOMP
        ptr += pubkeylen;                                                                │          ptr += pubkeylen;                                                               
        *privkeylen = ptr - privkey;                                                     │          *seckeylen = ptr - seckey;                                                      
                                                                                         │          assert(*seckeylen == CKey::SIZE);                                               
    }                                                                                    │      }                                                                                   
    return 1;                                                                            │      return 1;                                                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/pubkey.cpp:26                                                              │ bitcoin/src/pubkey.cpp:35                                                                
                                                                                         │                                                                                          
    size_t rpos, rlen, spos, slen;                                                       │      size_t rpos, rlen, spos, slen;                                                      
    size_t pos = 0;                                                                      │      size_t pos = 0;                                                                     
    size_t lenbyte;                                                                      │      size_t lenbyte;                                                                     
    unsigned char tmpsig[64] = {0};                                                      │      unsigned char tmpsig[64] = {0};                                                     
    int overflow = 0;                                                                    │      int overflow = 0;                                                                   
                                                                                         │                                                                                          
    /* Hack to initialize sig with a correctly-parsed but invalid signature. */          │      /* Hack to initialize sig with a correctly-parsed but invalid signature. */         
    secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);                           │      secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);                          
                                                                                         │                                                                                          
    /* Sequence tag byte */                                                              │      /* Sequence tag byte */                                                             
    if (pos == inputlen || input[pos] != 0x30) {                                         │      if (pos == inputlen || input[pos] != 0x30) {                                        
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    pos++;                                                                               │      pos++;                                                                              
                                                                                         │                                                                                          
    /* Sequence length bytes */                                                          │      /* Sequence length bytes */                                                         
    if (pos == inputlen) {                                                               │      if (pos == inputlen) {                                                              
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    lenbyte = input[pos++];                                                              │      lenbyte = input[pos++];                                                             
    if (lenbyte & 0x80) {                                                                │      if (lenbyte & 0x80) {                                                               
        lenbyte -= 0x80;                                                                 │          lenbyte -= 0x80;                                                                
        if (pos + lenbyte > inputlen) {                                                  │          if (lenbyte > inputlen - pos) {                                                 
            return 0;                                                                    │              return 0;                                                                   
        }                                                                                │          }                                                                               
        pos += lenbyte;                                                                  │          pos += lenbyte;                                                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /* Integer tag byte for R */                                                         │      /* Integer tag byte for R */                                                        
    if (pos == inputlen || input[pos] != 0x02) {                                         │      if (pos == inputlen || input[pos] != 0x02) {                                        
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    pos++;                                                                               │      pos++;                                                                              
                                                                                         │                                                                                          
    /* Integer length for R */                                                           │      /* Integer length for R */                                                          
    if (pos == inputlen) {                                                               │      if (pos == inputlen) {                                                              
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    lenbyte = input[pos++];                                                              │      lenbyte = input[pos++];                                                             
    if (lenbyte & 0x80) {                                                                │      if (lenbyte & 0x80) {                                                               
        lenbyte -= 0x80;                                                                 │          lenbyte -= 0x80;                                                                
        if (pos + lenbyte > inputlen) {                                                  │          if (lenbyte > inputlen - pos) {                                                 
            return 0;                                                                    │              return 0;                                                                   
        }                                                                                │          }                                                                               
        while (lenbyte > 0 && input[pos] == 0) {                                         │          while (lenbyte > 0 && input[pos] == 0) {                                        
            pos++;                                                                       │              pos++;                                                                      
            lenbyte--;                                                                   │              lenbyte--;                                                                  
        }                                                                                │          }                                                                               
        if (lenbyte >= sizeof(size_t)) {                                                 │          static_assert(sizeof(size_t) >= 4, "size_t too small");                         
                                                                                         │          if (lenbyte >= 4) {                                                             
            return 0;                                                                    │              return 0;                                                                   
        }                                                                                │          }                                                                               
        rlen = 0;                                                                        │          rlen = 0;                                                                       
        while (lenbyte > 0) {                                                            │          while (lenbyte > 0) {                                                           
            rlen = (rlen << 8) + input[pos];                                             │              rlen = (rlen << 8) + input[pos];                                            
            pos++;                                                                       │              pos++;                                                                      
            lenbyte--;                                                                   │              lenbyte--;                                                                  
        }                                                                                │          }                                                                               
    } else {                                                                             │      } else {                                                                            
        rlen = lenbyte;                                                                  │          rlen = lenbyte;                                                                 
    }                                                                                    │      }                                                                                   
    if (rlen > inputlen - pos) {                                                         │      if (rlen > inputlen - pos) {                                                        
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    rpos = pos;                                                                          │      rpos = pos;                                                                         
    pos += rlen;                                                                         │      pos += rlen;                                                                        
                                                                                         │                                                                                          
    /* Integer tag byte for S */                                                         │      /* Integer tag byte for S */                                                        
    if (pos == inputlen || input[pos] != 0x02) {                                         │      if (pos == inputlen || input[pos] != 0x02) {                                        
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    pos++;                                                                               │      pos++;                                                                              
                                                                                         │                                                                                          
    /* Integer length for S */                                                           │      /* Integer length for S */                                                          
    if (pos == inputlen) {                                                               │      if (pos == inputlen) {                                                              
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    lenbyte = input[pos++];                                                              │      lenbyte = input[pos++];                                                             
    if (lenbyte & 0x80) {                                                                │      if (lenbyte & 0x80) {                                                               
        lenbyte -= 0x80;                                                                 │          lenbyte -= 0x80;                                                                
        if (pos + lenbyte > inputlen) {                                                  │          if (lenbyte > inputlen - pos) {                                                 
            return 0;                                                                    │              return 0;                                                                   
        }                                                                                │          }                                                                               
        while (lenbyte > 0 && input[pos] == 0) {                                         │          while (lenbyte > 0 && input[pos] == 0) {                                        
            pos++;                                                                       │              pos++;                                                                      
            lenbyte--;                                                                   │              lenbyte--;                                                                  
        }                                                                                │          }                                                                               
        if (lenbyte >= sizeof(size_t)) {                                                 │          static_assert(sizeof(size_t) >= 4, "size_t too small");                         
                                                                                         │          if (lenbyte >= 4) {                                                             
            return 0;                                                                    │              return 0;                                                                   
        }                                                                                │          }                                                                               
        slen = 0;                                                                        │          slen = 0;                                                                       
        while (lenbyte > 0) {                                                            │          while (lenbyte > 0) {                                                           
            slen = (slen << 8) + input[pos];                                             │              slen = (slen << 8) + input[pos];                                            
            pos++;                                                                       │              pos++;                                                                      
            lenbyte--;                                                                   │              lenbyte--;                                                                  
        }                                                                                │          }                                                                               
    } else {                                                                             │      } else {                                                                            
        slen = lenbyte;                                                                  │          slen = lenbyte;                                                                 
    }                                                                                    │      }                                                                                   
    if (slen > inputlen - pos) {                                                         │      if (slen > inputlen - pos) {                                                        
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
    spos = pos;                                                                          │      spos = pos;                                                                         
    pos += slen;                                                                         │                                                                                          
                                                                                         │                                                                                          
    /* Ignore leading zeroes in R */                                                     │      /* Ignore leading zeroes in R */                                                    
    while (rlen > 0 && input[rpos] == 0) {                                               │      while (rlen > 0 && input[rpos] == 0) {                                              
        rlen--;                                                                          │          rlen--;                                                                         
        rpos++;                                                                          │          rpos++;                                                                         
    }                                                                                    │      }                                                                                   
    /* Copy R value */                                                                   │      /* Copy R value */                                                                  
    if (rlen > 32) {                                                                     │      if (rlen > 32) {                                                                    
        overflow = 1;                                                                    │          overflow = 1;                                                                   
    } else {                                                                             │      } else {                                                                            
        memcpy(tmpsig + 32 - rlen, input + rpos, rlen);                                  │          memcpy(tmpsig + 32 - rlen, input + rpos, rlen);                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /* Ignore leading zeroes in S */                                                     │      /* Ignore leading zeroes in S */                                                    
    while (slen > 0 && input[spos] == 0) {                                               │      while (slen > 0 && input[spos] == 0) {                                              
        slen--;                                                                          │          slen--;                                                                         
        spos++;                                                                          │          spos++;                                                                         
    }                                                                                    │      }                                                                                   
    /* Copy S value */                                                                   │      /* Copy S value */                                                                  
    if (slen > 32) {                                                                     │      if (slen > 32) {                                                                    
        overflow = 1;                                                                    │          overflow = 1;                                                                   
    } else {                                                                             │      } else {                                                                            
        memcpy(tmpsig + 64 - slen, input + spos, slen);                                  │          memcpy(tmpsig + 64 - slen, input + spos, slen);                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (!overflow) {                                                                     │      if (!overflow) {                                                                    
        overflow = !secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);           │          overflow = !secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);          
    }                                                                                    │      }                                                                                   
    if (overflow) {                                                                      │      if (overflow) {                                                                     
        /* Overwrite the result again with a correctly-parsed but invalid                │          /* Overwrite the result again with a correctly-parsed but invalid               
           signature if parsing failed. */                                               │             signature if parsing failed. */                                              
        memset(tmpsig, 0, 64);                                                           │          memset(tmpsig, 0, 64);                                                          
        secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);                       │          secp256k1_ecdsa_signature_parse_compact(ctx, sig, tmpsig);                      
    }                                                                                    │      }                                                                                   
    return 1;                                                                            │      return 1;                                                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:406                                                         │ bitcoin/src/validation.cpp:194                                                           
                                                                                         │                                                                                          
    AssertLockHeld(cs_main);                                                             │      assert(tip != nullptr);                                                             
    AssertLockHeld(mempool.cs);                                                          │                                                                                          
                                                                                         │                                                                                          
    CBlockIndex* tip = chainActive.Tip();                                                │                                                                                          
    CBlockIndex index;                                                                   │      CBlockIndex index;                                                                  
    index.pprev = tip;                                                                   │      index.pprev = tip;                                                                  
    // CheckSequenceLocks() uses chainActive.Height()+1 to evaluate                      │      // CheckSequenceLocksAtTip() uses active_chainstate.m_chain.Height()+1 to evaluate  
    // height based locks because when SequenceLocks() is called within                  │      // height based locks because when SequenceLocks() is called within                 
    // ConnectBlock(), the height of the block *being*                                   │      // ConnectBlock(), the height of the block *being*                                  
    // evaluated is what is used.                                                        │      // evaluated is what is used.                                                       
    // Thus if we want to know if a transaction can be part of the                       │      // Thus if we want to know if a transaction can be part of the                      
    // *next* block, we need to use one more than chainActive.Height()                   │      // *next* block, we need to use one more than active_chainstate.m_chain.Height()    
    index.nHeight = tip->nHeight + 1;                                                    │      index.nHeight = tip->nHeight + 1;                                                   
                                                                                         │                                                                                          
    std::pair<int, int64_t> lockPair;                                                    │      std::pair<int, int64_t> lockPair;                                                   
    if (useExistingLockPoints) {                                                         │      if (useExistingLockPoints) {                                                        
        assert(lp);                                                                      │          assert(lp);                                                                     
        lockPair.first = lp->height;                                                     │          lockPair.first = lp->height;                                                    
        lockPair.second = lp->time;                                                      │          lockPair.second = lp->time;                                                     
    }                                                                                    │      }                                                                                   
    else {                                                                               │      else {                                                                              
        // pcoinsTip contains the UTXO set for chainActive.Tip()                         │                                                                                          
        CCoinsViewMemPool viewMemPool(pcoinsTip, mempool);                               │                                                                                          
        std::vector<int> prevheights;                                                    │          std::vector<int> prevheights;                                                   
        prevheights.resize(tx.vin.size());                                               │          prevheights.resize(tx.vin.size());                                              
        for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {             │          for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {            
            const CTxIn& txin = tx.vin[txinIndex];                                       │              const CTxIn& txin = tx.vin[txinIndex];                                      
            CCoins coins;                                                                │              Coin coin;                                                                  
            if (!viewMemPool.GetCoins(txin.prevout.hash, coins)) {                       │              if (!coins_view.GetCoin(txin.prevout, coin)) {                              
                return error("%s: Missing input", __func__);                             │                  return error("%s: Missing input", __func__);                            
            }                                                                            │              }                                                                           
            if (coins.nHeight == MEMPOOL_HEIGHT) {                                       │              if (coin.nHeight == MEMPOOL_HEIGHT) {                                       
                // Assume all mempool transaction confirm in the next block              │                  // Assume all mempool transaction confirm in the next block             
                prevheights[txinIndex] = tip->nHeight + 1;                               │                  prevheights[txinIndex] = tip->nHeight + 1;                              
            } else {                                                                     │              } else {                                                                    
                prevheights[txinIndex] = coins.nHeight;                                  │                  prevheights[txinIndex] = coin.nHeight;                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        lockPair = CalculateSequenceLocks(tx, flags, &prevheights, index);               │          lockPair = CalculateSequenceLocks(tx, STANDARD_LOCKTIME_VERIFY_FLAGS, prevheight
        if (lp) {                                                                        │          if (lp) {                                                                       
            lp->height = lockPair.first;                                                 │              lp->height = lockPair.first;                                                
            lp->time = lockPair.second;                                                  │              lp->time = lockPair.second;                                                 
            // Also store the hash of the block with the highest height of               │              // Also store the hash of the block with the highest height of              
            // all the blocks which have sequence locked prevouts.                       │              // all the blocks which have sequence locked prevouts.                      
            // This hash needs to still be on the chain                                  │              // This hash needs to still be on the chain                                 
            // for these LockPoint calculations to be valid                              │              // for these LockPoint calculations to be valid                             
            // Note: It is impossible to correctly calculate a maxInputBlock             │              // Note: It is impossible to correctly calculate a maxInputBlock            
            // if any of the sequence locked inputs depend on unconfirmed txs,           │              // if any of the sequence locked inputs depend on unconfirmed txs,          
            // except in the special case where the relative lock time/height            │              // except in the special case where the relative lock time/height           
            // is 0, which is equivalent to no sequence lock. Since we assume            │              // is 0, which is equivalent to no sequence lock. Since we assume           
            // input height of tip+1 for mempool txs and test the resulting              │              // input height of tip+1 for mempool txs and test the resulting             
            // lockPair from CalculateSequenceLocks against tip+1.  We know              │              // lockPair from CalculateSequenceLocks against tip+1.  We know             
            // EvaluateSequenceLocks will fail if there was a non-zero sequence          │              // EvaluateSequenceLocks will fail if there was a non-zero sequence         
            // lock on a mempool input, so we can use the return value of                │              // lock on a mempool input, so we can use the return value of               
            // CheckSequenceLocks to indicate the LockPoints validity                    │              // CheckSequenceLocksAtTip to indicate the LockPoints validity              
            int maxInputHeight = 0;                                                      │              int maxInputHeight = 0;                                                     
            BOOST_FOREACH(int height, prevheights) {                                     │              for (const int height : prevheights) {                                      
                // Can ignore mempool inputs since we'll fail if they had non-zero locks │                  // Can ignore mempool inputs since we'll fail if they had non-zero locks
                if (height != tip->nHeight+1) {                                          │                  if (height != tip->nHeight+1) {                                         
                    maxInputHeight = std::max(maxInputHeight, height);                   │                      maxInputHeight = std::max(maxInputHeight, height);                  
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            lp->maxInputBlock = tip->GetAncestor(maxInputHeight);                        │              // tip->GetAncestor(maxInputHeight) should never return a nullptr           
                                                                                         │              // because maxInputHeight is always less than the tip height.               
                                                                                         │              // It would, however, be a bad bug to continue execution, since a           
                                                                                         │              // LockPoints object with the maxInputBlock member set to nullptr           
                                                                                         │              // signifies no relative lock time.                                         
                                                                                         │              lp->maxInputBlock = Assert(tip->GetAncestor(maxInputHeight));               
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return EvaluateSequenceLocks(index, lockPair);                                       │      return EvaluateSequenceLocks(index, lockPair);                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/cuckoocache_tests.cpp:213                                             │ bitcoin/src/test/cuckoocache_tests.cpp:188                                               
                                                                                         │                                                                                          
    double load = 1;                                                                     │      double load = 1;                                                                    
    insecure_rand = FastRandomContext(true);                                             │      SeedInsecureRand(SeedRand::ZEROS);                                                  
    std::vector<uint256> hashes;                                                         │      std::vector<uint256> hashes;                                                        
    Cache set{};                                                                         │      Cache set{};                                                                        
    size_t bytes = megabytes * (1 << 20);                                                │      size_t bytes = megabytes * (1 << 20);                                               
    set.setup_bytes(bytes);                                                              │      set.setup_bytes(bytes);                                                             
    uint32_t n_insert = static_cast<uint32_t>(load * (bytes / sizeof(uint256)));         │      uint32_t n_insert = static_cast<uint32_t>(load * (bytes / sizeof(uint256)));        
    hashes.resize(n_insert);                                                             │      hashes.resize(n_insert);                                                            
    for (uint32_t i = 0; i < n_insert; ++i) {                                            │      for (uint32_t i = 0; i < n_insert; ++i) {                                           
        uint32_t* ptr = (uint32_t*)hashes[i].begin();                                    │          uint32_t* ptr = (uint32_t*)hashes[i].begin();                                   
        for (uint8_t j = 0; j < 8; ++j)                                                  │          for (uint8_t j = 0; j < 8; ++j)                                                 
            *(ptr++) = insecure_rand.rand32();                                           │              *(ptr++) = InsecureRand32();                                                
    }                                                                                    │      }                                                                                   
    /** We make a copy of the hashes because future optimizations of the                 │      /** We make a copy of the hashes because future optimizations of the                
     * cuckoocache may overwrite the inserted element, so the test is                    │       * cuckoocache may overwrite the inserted element, so the test is                   
     * "future proofed".                                                                 │       * "future proofed".                                                                
     */                                                                                  │       */                                                                                 
    std::vector<uint256> hashes_insert_copy = hashes;                                    │      std::vector<uint256> hashes_insert_copy = hashes;                                   
    boost::shared_mutex mtx;                                                             │      std::shared_mutex mtx;                                                              
                                                                                         │                                                                                          
    {                                                                                    │      {                                                                                   
        /** Grab lock to make sure we release inserts */                                 │          /** Grab lock to make sure we release inserts */                                
        boost::unique_lock<boost::shared_mutex> l(mtx);                                  │          std::unique_lock<std::shared_mutex> l(mtx);                                     
        /** Insert the first half */                                                     │          /** Insert the first half */                                                    
        for (uint32_t i = 0; i < (n_insert / 2); ++i)                                    │          for (uint32_t i = 0; i < (n_insert / 2); ++i)                                   
            set.insert(hashes_insert_copy[i]);                                           │              set.insert(hashes_insert_copy[i]);                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /** Spin up 3 threads to run contains with erase.                                    │      /** Spin up 3 threads to run contains with erase.                                   
     */                                                                                  │       */                                                                                 
    std::vector<std::thread> threads;                                                    │      std::vector<std::thread> threads;                                                   
    /** Erase the first quarter */                                                       │      /** Erase the first quarter */                                                      
    for (uint32_t x = 0; x < 3; ++x)                                                     │      for (uint32_t x = 0; x < 3; ++x)                                                    
        /** Each thread is emplaced with x copy-by-value                                 │          /** Each thread is emplaced with x copy-by-value                                
        */                                                                               │          */                                                                              
        threads.emplace_back([&, x] {                                                    │          threads.emplace_back([&, x] {                                                   
            boost::shared_lock<boost::shared_mutex> l(mtx);                              │              std::shared_lock<std::shared_mutex> l(mtx);                                 
            size_t ntodo = (n_insert/4)/3;                                               │              size_t ntodo = (n_insert/4)/3;                                              
            size_t start = ntodo*x;                                                      │              size_t start = ntodo*x;                                                     
            size_t end = ntodo*(x+1);                                                    │              size_t end = ntodo*(x+1);                                                   
            for (uint32_t i = start; i < end; ++i)                                       │              for (uint32_t i = start; i < end; ++i) {                                    
                set.contains(hashes[i], true);                                           │                  bool contains = set.contains(hashes[i], true);                          
                                                                                         │                  assert(contains);                                                       
                                                                                         │              }                                                                           
        });                                                                              │          });                                                                             
                                                                                         │                                                                                          
    /** Wait for all threads to finish                                                   │      /** Wait for all threads to finish                                                  
     */                                                                                  │       */                                                                                 
    for (std::thread& t : threads)                                                       │      for (std::thread& t : threads)                                                      
        t.join();                                                                        │          t.join();                                                                       
    /** Grab lock to make sure we observe erases */                                      │      /** Grab lock to make sure we observe erases */                                     
    boost::unique_lock<boost::shared_mutex> l(mtx);                                      │      std::unique_lock<std::shared_mutex> l(mtx);                                         
    /** Insert the second half */                                                        │      /** Insert the second half */                                                       
    for (uint32_t i = (n_insert / 2); i < n_insert; ++i)                                 │      for (uint32_t i = (n_insert / 2); i < n_insert; ++i)                                
        set.insert(hashes_insert_copy[i]);                                               │          set.insert(hashes_insert_copy[i]);                                              
                                                                                         │                                                                                          
    /** elements that we marked erased but that are still there */                       │      /** elements that we marked erased but that are still there */                      
    size_t count_erased_but_contained = 0;                                               │      size_t count_erased_but_contained = 0;                                              
    /** elements that we did not erase but are older */                                  │      /** elements that we did not erase but are older */                                 
    size_t count_stale = 0;                                                              │      size_t count_stale = 0;                                                             
    /** elements that were most recently inserted */                                     │      /** elements that were most recently inserted */                                    
    size_t count_fresh = 0;                                                              │      size_t count_fresh = 0;                                                             
                                                                                         │                                                                                          
    for (uint32_t i = 0; i < (n_insert / 4); ++i)                                        │      for (uint32_t i = 0; i < (n_insert / 4); ++i)                                       
        count_erased_but_contained += set.contains(hashes[i], false);                    │          count_erased_but_contained += set.contains(hashes[i], false);                   
    for (uint32_t i = (n_insert / 4); i < (n_insert / 2); ++i)                           │      for (uint32_t i = (n_insert / 4); i < (n_insert / 2); ++i)                          
        count_stale += set.contains(hashes[i], false);                                   │          count_stale += set.contains(hashes[i], false);                                  
    for (uint32_t i = (n_insert / 2); i < n_insert; ++i)                                 │      for (uint32_t i = (n_insert / 2); i < n_insert; ++i)                                
        count_fresh += set.contains(hashes[i], false);                                   │          count_fresh += set.contains(hashes[i], false);                                  
                                                                                         │                                                                                          
    double hit_rate_erased_but_contained = double(count_erased_but_contained) / (double( │      double hit_rate_erased_but_contained = double(count_erased_but_contained) / (double(
    double hit_rate_stale = double(count_stale) / (double(n_insert) / 4.0);              │      double hit_rate_stale = double(count_stale) / (double(n_insert) / 4.0);             
    double hit_rate_fresh = double(count_fresh) / (double(n_insert) / 2.0);              │      double hit_rate_fresh = double(count_fresh) / (double(n_insert) / 2.0);             
                                                                                         │                                                                                          
    // Check that our hit_rate_fresh is perfect                                          │      // Check that our hit_rate_fresh is perfect                                         
    BOOST_CHECK_EQUAL(hit_rate_fresh, 1.0);                                              │      BOOST_CHECK_EQUAL(hit_rate_fresh, 1.0);                                             
    // Check that we have a more than 2x better hit rate on stale elements than          │      // Check that we have a more than 2x better hit rate on stale elements than         
    // erased elements.                                                                  │      // erased elements.                                                                 
    BOOST_CHECK(hit_rate_stale > 2 * hit_rate_erased_but_contained);                     │      BOOST_CHECK(hit_rate_stale > 2 * hit_rate_erased_but_contained);                    
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/util_tests.cpp:466                                                    │ bitcoin/src/test/util_tests.cpp:1958                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(FormatParagraph("", 79, 0), "");                                   │      BOOST_CHECK_EQUAL(FormatParagraph("", 79, 0), "");                                  
    BOOST_CHECK_EQUAL(FormatParagraph("test", 79, 0), "test");                           │      BOOST_CHECK_EQUAL(FormatParagraph("test", 79, 0), "test");                          
    BOOST_CHECK_EQUAL(FormatParagraph(" test", 79, 0), " test");                         │      BOOST_CHECK_EQUAL(FormatParagraph(" test", 79, 0), " test");                        
    BOOST_CHECK_EQUAL(FormatParagraph("test test", 79, 0), "test test");                 │      BOOST_CHECK_EQUAL(FormatParagraph("test test", 79, 0), "test test");                
    BOOST_CHECK_EQUAL(FormatParagraph("test test", 4, 0), "test\ntest");                 │      BOOST_CHECK_EQUAL(FormatParagraph("test test", 4, 0), "test\ntest");                
    BOOST_CHECK_EQUAL(FormatParagraph("testerde test", 4, 0), "testerde\ntest");         │      BOOST_CHECK_EQUAL(FormatParagraph("testerde test", 4, 0), "testerde\ntest");        
    BOOST_CHECK_EQUAL(FormatParagraph("test test", 4, 4), "test\n    test");             │      BOOST_CHECK_EQUAL(FormatParagraph("test test", 4, 4), "test\n    test");            
                                                                                         │                                                                                          
    // Make sure we don't indent a fully-new line following a too-long line ending       │      // Make sure we don't indent a fully-new line following a too-long line ending      
    BOOST_CHECK_EQUAL(FormatParagraph("test test\nabc", 4, 4), "test\n    test\nabc");   │      BOOST_CHECK_EQUAL(FormatParagraph("test test\nabc", 4, 4), "test\n    test\nabc");  
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(FormatParagraph("This_is_a_very_long_test_string_without_any_space │      BOOST_CHECK_EQUAL(FormatParagraph("This_is_a_very_long_test_string_without_any_space
                                                                                         │                                                                                          
    // Test wrap length is exact                                                         │      // Test wrap length is exact                                                        
    BOOST_CHECK_EQUAL(FormatParagraph("a b c d e f g h i j k l m n o p q r s t u v w x y │      BOOST_CHECK_EQUAL(FormatParagraph("a b c d e f g h i j k l m n o p q r s t u v w x y
    BOOST_CHECK_EQUAL(FormatParagraph("x\na b c d e f g h i j k l m n o p q r s t u v w  │      BOOST_CHECK_EQUAL(FormatParagraph("x\na b c d e f g h i j k l m n o p q r s t u v w 
    // Indent should be included in length of lines                                      │      // Indent should be included in length of lines                                     
    BOOST_CHECK_EQUAL(FormatParagraph("x\na b c d e f g h i j k l m n o p q r s t u v w  │      BOOST_CHECK_EQUAL(FormatParagraph("x\na b c d e f g h i j k l m n o p q r s t u v w 
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string. This is a second │      BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string. This is a second
    BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string.\nThis is a secon │      BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string.\nThis is a secon
    BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string.\n\nThis is a sec │      BOOST_CHECK_EQUAL(FormatParagraph("This is a very long test string.\n\nThis is a sec
    BOOST_CHECK_EQUAL(FormatParagraph("Testing that normal newlines do not get indented. │      BOOST_CHECK_EQUAL(FormatParagraph("Testing that normal newlines do not get indented.
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/pmt_tests.cpp:31                                                       │ dogecoin/src/test/pmt_tests.cpp:34                                                       
                                                                                         │                                                                                          
                                                                                         │      seed_insecure_rand(false);                                                          
    static const unsigned int nTxCounts[] = {1, 4, 7, 17, 56, 100, 127, 256, 312, 513, 1 │      static const unsigned int nTxCounts[] = {1, 4, 7, 17, 56, 100, 127, 256, 312, 513, 1
                                                                                         │                                                                                          
    for (int i = 0; i < 12; i++) {                                                       │      for (int i = 0; i < 12; i++) {                                                      
        unsigned int nTx = nTxCounts[i];                                                 │          unsigned int nTx = nTxCounts[i];                                                
                                                                                         │                                                                                          
        // build a block with some dummy transactions                                    │          // build a block with some dummy transactions                                   
        CBlock block;                                                                    │          CBlock block;                                                                   
        for (unsigned int j=0; j<nTx; j++) {                                             │          for (unsigned int j=0; j<nTx; j++) {                                            
            CMutableTransaction tx;                                                      │              CMutableTransaction tx;                                                     
            tx.nLockTime = j; // actual transaction data doesn't matter; just make the n │              tx.nLockTime = j; // actual transaction data doesn't matter; just make the n
            block.vtx.push_back(MakeTransactionRef(std::move(tx)));                      │              block.vtx.push_back(MakeTransactionRef(std::move(tx)));                     
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // calculate actual merkle root and height                                       │          // calculate actual merkle root and height                                      
        uint256 merkleRoot1 = BlockMerkleRoot(block);                                    │          uint256 merkleRoot1 = BlockMerkleRoot(block);                                   
        std::vector<uint256> vTxid(nTx, uint256());                                      │          std::vector<uint256> vTxid(nTx, uint256());                                     
        for (unsigned int j=0; j<nTx; j++)                                               │          for (unsigned int j=0; j<nTx; j++)                                              
            vTxid[j] = block.vtx[j]->GetHash();                                          │              vTxid[j] = block.vtx[j]->GetHash();                                         
        int nHeight = 1, nTx_ = nTx;                                                     │          int nHeight = 1, nTx_ = nTx;                                                    
        while (nTx_ > 1) {                                                               │          while (nTx_ > 1) {                                                              
            nTx_ = (nTx_+1)/2;                                                           │              nTx_ = (nTx_+1)/2;                                                          
            nHeight++;                                                                   │              nHeight++;                                                                  
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // check with random subsets with inclusion chances 1, 1/2, 1/4, ..., 1/128      │          // check with random subsets with inclusion chances 1, 1/2, 1/4, ..., 1/128     
        for (int att = 1; att < 15; att++) {                                             │          for (int att = 1; att < 15; att++) {                                            
            // build random subset of txid's                                             │              // build random subset of txid's                                            
            std::vector<bool> vMatch(nTx, false);                                        │              std::vector<bool> vMatch(nTx, false);                                       
            std::vector<uint256> vMatchTxid1;                                            │              std::vector<uint256> vMatchTxid1;                                           
            for (unsigned int j=0; j<nTx; j++) {                                         │              for (unsigned int j=0; j<nTx; j++) {                                        
                bool fInclude = InsecureRandBits(att / 2) == 0;                          │                  bool fInclude = (insecure_rand() & ((1 << (att/2)) - 1)) == 0;          
                vMatch[j] = fInclude;                                                    │                  vMatch[j] = fInclude;                                                   
                if (fInclude)                                                            │                  if (fInclude)                                                           
                    vMatchTxid1.push_back(vTxid[j]);                                     │                      vMatchTxid1.push_back(vTxid[j]);                                    
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            // build the partial merkle tree                                             │              // build the partial merkle tree                                            
            CPartialMerkleTree pmt1(vTxid, vMatch);                                      │              CPartialMerkleTree pmt1(vTxid, vMatch);                                     
                                                                                         │                                                                                          
            // serialize                                                                 │              // serialize                                                                
            CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);                               │              CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);                              
            ss << pmt1;                                                                  │              ss << pmt1;                                                                 
                                                                                         │                                                                                          
            // verify CPartialMerkleTree's size guarantees                               │              // verify CPartialMerkleTree's size guarantees                              
            unsigned int n = std::min<unsigned int>(nTx, 1 + vMatchTxid1.size()*nHeight) │              unsigned int n = std::min<unsigned int>(nTx, 1 + vMatchTxid1.size()*nHeight)
            BOOST_CHECK(ss.size() <= 10 + (258*n+7)/8);                                  │              BOOST_CHECK(ss.size() <= 10 + (258*n+7)/8);                                 
                                                                                         │                                                                                          
            // deserialize into a tester copy                                            │              // deserialize into a tester copy                                           
            CPartialMerkleTreeTester pmt2;                                               │              CPartialMerkleTreeTester pmt2;                                              
            ss >> pmt2;                                                                  │              ss >> pmt2;                                                                 
                                                                                         │                                                                                          
            // extract merkle root and matched txids from copy                           │              // extract merkle root and matched txids from copy                          
            std::vector<uint256> vMatchTxid2;                                            │              std::vector<uint256> vMatchTxid2;                                           
            std::vector<unsigned int> vIndex;                                            │              std::vector<unsigned int> vIndex;                                           
            uint256 merkleRoot2 = pmt2.ExtractMatches(vMatchTxid2, vIndex);              │              uint256 merkleRoot2 = pmt2.ExtractMatches(vMatchTxid2, vIndex);             
                                                                                         │                                                                                          
            // check that it has the same merkle root as the original, and a valid one   │              // check that it has the same merkle root as the original, and a valid one  
            BOOST_CHECK(merkleRoot1 == merkleRoot2);                                     │              BOOST_CHECK(merkleRoot1 == merkleRoot2);                                    
            BOOST_CHECK(!merkleRoot2.IsNull());                                          │              BOOST_CHECK(!merkleRoot2.IsNull());                                         
                                                                                         │                                                                                          
            // check that it contains the matched transactions (in the same order!)      │              // check that it contains the matched transactions (in the same order!)     
            BOOST_CHECK(vMatchTxid1 == vMatchTxid2);                                     │              BOOST_CHECK(vMatchTxid1 == vMatchTxid2);                                    
                                                                                         │                                                                                          
            // check that random bit flips break the authentication                      │              // check that random bit flips break the authentication                     
            for (int j=0; j<4; j++) {                                                    │              for (int j=0; j<4; j++) {                                                   
                CPartialMerkleTreeTester pmt3(pmt2);                                     │                  CPartialMerkleTreeTester pmt3(pmt2);                                    
                pmt3.Damage();                                                           │                  pmt3.Damage();                                                          
                std::vector<uint256> vMatchTxid3;                                        │                  std::vector<uint256> vMatchTxid3;                                       
                uint256 merkleRoot3 = pmt3.ExtractMatches(vMatchTxid3, vIndex);          │                  uint256 merkleRoot3 = pmt3.ExtractMatches(vMatchTxid3, vIndex);         
                BOOST_CHECK(merkleRoot3 != merkleRoot1);                                 │                  BOOST_CHECK(merkleRoot3 != merkleRoot1);                                
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:1300                                                 │ bitcoin/src/test/script_tests.cpp:1316                                                   
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2, tru │      BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2, tru
    BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCK │      BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCK
    BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2));   │      BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_NOP2));  
    BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCK │      BOOST_CHECK_EQUAL("OP_CHECKLOCKTIMEVERIFY", ScriptToAsmStr(CScript() << OP_CHECKLOCK
                                                                                         │                                                                                          
    std::string derSig("304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749 │      std::string derSig("304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749
    std::string pubKey("03b0da749730dc9b4b1f4a14d6902877a92541f5368778853d9c4a0cb7802dcf │      std::string pubKey("03b0da749730dc9b4b1f4a14d6902877a92541f5368778853d9c4a0cb7802dcf
    std::vector<unsigned char> vchPubKey = ToByteVector(ParseHex(pubKey));               │      std::vector<unsigned char> vchPubKey = ToByteVector(ParseHex(pubKey));              
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "[ALL] " + pubKey, ScriptToAsmStr(CScript() << ToByteVect │      BOOST_CHECK_EQUAL(derSig + "[ALL] " + pubKey, ScriptToAsmStr(CScript() << ToByteVect
    BOOST_CHECK_EQUAL(derSig + "[NONE] " + pubKey, ScriptToAsmStr(CScript() << ToByteVec │      BOOST_CHECK_EQUAL(derSig + "[NONE] " + pubKey, ScriptToAsmStr(CScript() << ToByteVec
    BOOST_CHECK_EQUAL(derSig + "[SINGLE] " + pubKey, ScriptToAsmStr(CScript() << ToByteV │      BOOST_CHECK_EQUAL(derSig + "[SINGLE] " + pubKey, ScriptToAsmStr(CScript() << ToByteV
    BOOST_CHECK_EQUAL(derSig + "[ALL|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript()  │      BOOST_CHECK_EQUAL(derSig + "[ALL|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() 
    BOOST_CHECK_EQUAL(derSig + "[NONE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript() │      BOOST_CHECK_EQUAL(derSig + "[NONE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript()
    BOOST_CHECK_EQUAL(derSig + "[SINGLE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript │      BOOST_CHECK_EQUAL(derSig + "[SINGLE|ANYONECANPAY] " + pubKey, ScriptToAsmStr(CScript
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "00 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "80 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "01 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "01 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "02 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "02 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "03 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "03 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "81 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "81 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "82 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "82 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
    BOOST_CHECK_EQUAL(derSig + "83 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector( │      BOOST_CHECK_EQUAL(derSig + "83 " + pubKey, ScriptToAsmStr(CScript() << ToByteVector(
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/script_p2sh_tests.cpp:51                                               │ dogecoin/src/test/script_P2SH_tests.cpp:51                                               
                                                                                         │                                                                                          
    LOCK(cs_main);                                                                       │      LOCK(cs_main);                                                                      
    // Pay-to-script-hash looks like this:                                               │      // Pay-to-script-hash looks like this:                                              
    // scriptSig:    <sig> <sig...> <serialized_script>                                  │      // scriptSig:    <sig> <sig...> <serialized_script>                                 
    // scriptPubKey: HASH160 <hash> EQUAL                                                │      // scriptPubKey: HASH160 <hash> EQUAL                                               
                                                                                         │                                                                                          
    // Test SignSignature() (and therefore the version of Solver() that signs transactio │      // Test SignSignature() (and therefore the version of Solver() that signs transactio
    FillableSigningProvider keystore;                                                    │      CBasicKeyStore keystore;                                                            
    CKey key[4];                                                                         │      CKey key[4];                                                                        
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
    {                                                                                    │      {                                                                                   
        key[i].MakeNewKey(true);                                                         │          key[i].MakeNewKey(true);                                                        
        BOOST_CHECK(keystore.AddKey(key[i]));                                            │          keystore.AddKey(key[i]);                                                        
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // 8 Scripts: checking all combinations of                                           │      // 8 Scripts: checking all combinations of                                          
    // different keys, straight/P2SH, pubkey/pubkeyhash                                  │      // different keys, straight/P2SH, pubkey/pubkeyhash                                 
    CScript standardScripts[4];                                                          │      CScript standardScripts[4];                                                         
    standardScripts[0] << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;               │      standardScripts[0] << ToByteVector(key[0].GetPubKey()) << OP_CHECKSIG;              
    standardScripts[1] = GetScriptForDestination(PKHash(key[1].GetPubKey()));            │      standardScripts[1] = GetScriptForDestination(key[1].GetPubKey().GetID());           
    standardScripts[2] << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG;               │      standardScripts[2] << ToByteVector(key[1].GetPubKey()) << OP_CHECKSIG;              
    standardScripts[3] = GetScriptForDestination(PKHash(key[2].GetPubKey()));            │      standardScripts[3] = GetScriptForDestination(key[2].GetPubKey().GetID());           
    CScript evalScripts[4];                                                              │      CScript evalScripts[4];                                                             
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
    {                                                                                    │      {                                                                                   
        BOOST_CHECK(keystore.AddCScript(standardScripts[i]));                            │          keystore.AddCScript(standardScripts[i]);                                        
        evalScripts[i] = GetScriptForDestination(ScriptHash(standardScripts[i]));        │          evalScripts[i] = GetScriptForDestination(CScriptID(standardScripts[i]));        
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    CMutableTransaction txFrom;  // Funding transaction:                                 │      CMutableTransaction txFrom;  // Funding transaction:                                
    std::string reason;                                                                  │      std::string reason;                                                                 
    txFrom.vout.resize(8);                                                               │      txFrom.vout.resize(8);                                                              
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
    {                                                                                    │      {                                                                                   
        txFrom.vout[i].scriptPubKey = evalScripts[i];                                    │          txFrom.vout[i].scriptPubKey = evalScripts[i];                                   
        txFrom.vout[i].nValue = COIN;                                                    │          txFrom.vout[i].nValue = COIN;                                                   
        txFrom.vout[i+4].scriptPubKey = standardScripts[i];                              │          txFrom.vout[i+4].scriptPubKey = standardScripts[i];                             
        txFrom.vout[i+4].nValue = COIN;                                                  │          txFrom.vout[i+4].nValue = COIN;                                                 
    }                                                                                    │      }                                                                                   
    BOOST_CHECK(IsStandardTx(CTransaction(txFrom), reason));                             │      BOOST_CHECK(IsStandardTx(txFrom, reason));                                          
                                                                                         │                                                                                          
    CMutableTransaction txTo[8]; // Spending transactions                                │      CMutableTransaction txTo[8]; // Spending transactions                               
    for (int i = 0; i < 8; i++)                                                          │      for (int i = 0; i < 8; i++)                                                         
    {                                                                                    │      {                                                                                   
        txTo[i].vin.resize(1);                                                           │          txTo[i].vin.resize(1);                                                          
        txTo[i].vout.resize(1);                                                          │          txTo[i].vout.resize(1);                                                         
        txTo[i].vin[0].prevout.n = i;                                                    │          txTo[i].vin[0].prevout.n = i;                                                   
        txTo[i].vin[0].prevout.hash = txFrom.GetHash();                                  │          txTo[i].vin[0].prevout.hash = txFrom.GetHash();                                 
        txTo[i].vout[0].nValue = 1;                                                      │          txTo[i].vout[0].nValue = 1;                                                     
                                                                                         │          BOOST_CHECK_MESSAGE(IsMine(keystore, txFrom.vout[i].scriptPubKey), strprintf("Is
    }                                                                                    │      }                                                                                   
    for (int i = 0; i < 8; i++)                                                          │      for (int i = 0; i < 8; i++)                                                         
    {                                                                                    │      {                                                                                   
        BOOST_CHECK_MESSAGE(SignSignature(keystore, CTransaction(txFrom), txTo[i], 0, SI │          BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0, SIGHASH_ALL), st
    }                                                                                    │      }                                                                                   
    // All of the above should be OK, and the txTos have valid signatures                │      // All of the above should be OK, and the txTos have valid signatures               
    // Check to make sure signature verification fails if we use the wrong ScriptSig:    │      // Check to make sure signature verification fails if we use the wrong ScriptSig:   
    for (int i = 0; i < 8; i++) {                                                        │      for (int i = 0; i < 8; i++) {                                                       
        PrecomputedTransactionData txdata(txTo[i]);                                      │          PrecomputedTransactionData txdata(txTo[i]);                                     
        for (int j = 0; j < 8; j++)                                                      │          for (int j = 0; j < 8; j++)                                                     
        {                                                                                │          {                                                                               
            CScript sigSave = txTo[i].vin[0].scriptSig;                                  │              CScript sigSave = txTo[i].vin[0].scriptSig;                                 
            txTo[i].vin[0].scriptSig = txTo[j].vin[0].scriptSig;                         │              txTo[i].vin[0].scriptSig = txTo[j].vin[0].scriptSig;                        
            bool sigOK = CScriptCheck(txFrom.vout[txTo[i].vin[0].prevout.n], CTransactio │              bool sigOK = CScriptCheck(CCoins(txFrom, 0), txTo[i], 0, SCRIPT_VERIFY_P2SH 
            if (i == j)                                                                  │              if (i == j)                                                                 
                BOOST_CHECK_MESSAGE(sigOK, strprintf("VerifySignature %d %d", i, j));    │                  BOOST_CHECK_MESSAGE(sigOK, strprintf("VerifySignature %d %d", i, j));   
            else                                                                         │              else                                                                        
                BOOST_CHECK_MESSAGE(!sigOK, strprintf("VerifySignature %d %d", i, j));   │                  BOOST_CHECK_MESSAGE(!sigOK, strprintf("VerifySignature %d %d", i, j));  
            txTo[i].vin[0].scriptSig = sigSave;                                          │              txTo[i].vin[0].scriptSig = sigSave;                                         
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:311                                                         │ bitcoin/src/consensus/tx_verify.cpp:40                                                   
                                                                                         │                                                                                          
    assert(prevHeights->size() == tx.vin.size());                                        │      assert(prevHeights.size() == tx.vin.size());                                        
                                                                                         │                                                                                          
    // Will be set to the equivalent height- and time-based nLockTime                    │      // Will be set to the equivalent height- and time-based nLockTime                   
    // values that would be necessary to satisfy all relative lock-                      │      // values that would be necessary to satisfy all relative lock-                     
    // time constraints given our view of block chain history.                           │      // time constraints given our view of block chain history.                          
    // The semantics of nLockTime are the last invalid height/time, so                   │      // The semantics of nLockTime are the last invalid height/time, so                  
    // use -1 to have the effect of any height or time being valid.                      │      // use -1 to have the effect of any height or time being valid.                     
    int nMinHeight = -1;                                                                 │      int nMinHeight = -1;                                                                
    int64_t nMinTime = -1;                                                               │      int64_t nMinTime = -1;                                                              
                                                                                         │                                                                                          
    // tx.nVersion is signed integer so requires cast to unsigned otherwise              │      // tx.nVersion is signed integer so requires cast to unsigned otherwise             
    // we would be doing a signed comparison and half the range of nVersion              │      // we would be doing a signed comparison and half the range of nVersion             
    // wouldn't support BIP 68.                                                          │      // wouldn't support BIP 68.                                                         
    bool fEnforceBIP68 = static_cast<uint32_t>(tx.nVersion) >= 2                         │      bool fEnforceBIP68 = static_cast<uint32_t>(tx.nVersion) >= 2                        
                      && flags & LOCKTIME_VERIFY_SEQUENCE;                               │                        && flags & LOCKTIME_VERIFY_SEQUENCE;                              
                                                                                         │                                                                                          
    // Do not enforce sequence numbers as a relative lock time                           │      // Do not enforce sequence numbers as a relative lock time                          
    // unless we have been instructed to                                                 │      // unless we have been instructed to                                                
    if (!fEnforceBIP68) {                                                                │      if (!fEnforceBIP68) {                                                               
        return std::make_pair(nMinHeight, nMinTime);                                     │          return std::make_pair(nMinHeight, nMinTime);                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {                 │      for (size_t txinIndex = 0; txinIndex < tx.vin.size(); txinIndex++) {                
        const CTxIn& txin = tx.vin[txinIndex];                                           │          const CTxIn& txin = tx.vin[txinIndex];                                          
                                                                                         │                                                                                          
        // Sequence numbers with the most significant bit set are not                    │          // Sequence numbers with the most significant bit set are not                   
        // treated as relative lock-times, nor are they given any                        │          // treated as relative lock-times, nor are they given any                       
        // consensus-enforced meaning at this point.                                     │          // consensus-enforced meaning at this point.                                    
        if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) {                    │          if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) {                   
            // The height of this input is not relevant for sequence locks               │              // The height of this input is not relevant for sequence locks              
            (*prevHeights)[txinIndex] = 0;                                               │              prevHeights[txinIndex] = 0;                                                 
            continue;                                                                    │              continue;                                                                   
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        int nCoinHeight = (*prevHeights)[txinIndex];                                     │          int nCoinHeight = prevHeights[txinIndex];                                       
                                                                                         │                                                                                          
        if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) {                       │          if (txin.nSequence & CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG) {                      
            int64_t nCoinTime = block.GetAncestor(std::max(nCoinHeight-1, 0))->GetMedian │              const int64_t nCoinTime{Assert(block.GetAncestor(std::max(nCoinHeight - 1, 0
            // NOTE: Subtract 1 to maintain nLockTime semantics                          │              // NOTE: Subtract 1 to maintain nLockTime semantics                         
            // BIP 68 relative lock times have the semantics of calculating              │              // BIP 68 relative lock times have the semantics of calculating             
            // the first block or time at which the transaction would be                 │              // the first block or time at which the transaction would be                
            // valid. When calculating the effective block time or height                │              // valid. When calculating the effective block time or height               
            // for the entire transaction, we switch to using the                        │              // for the entire transaction, we switch to using the                       
            // semantics of nLockTime which is the last invalid block                    │              // semantics of nLockTime which is the last invalid block                   
            // time or height.  Thus we subtract 1 from the calculated                   │              // time or height.  Thus we subtract 1 from the calculated                  
            // time or height.                                                           │              // time or height.                                                          
                                                                                         │                                                                                          
            // Time-based relative lock-times are measured from the                      │              // Time-based relative lock-times are measured from the                     
            // smallest allowed timestamp of the block containing the                    │              // smallest allowed timestamp of the block containing the                   
            // txout being spent, which is the median time past of the                   │              // txout being spent, which is the median time past of the                  
            // block prior.                                                              │              // block prior.                                                             
            nMinTime = std::max(nMinTime, nCoinTime + (int64_t)((txin.nSequence & CTxIn: │              nMinTime = std::max(nMinTime, nCoinTime + (int64_t)((txin.nSequence & CTxIn:
        } else {                                                                         │          } else {                                                                        
            nMinHeight = std::max(nMinHeight, nCoinHeight + (int)(txin.nSequence & CTxIn │              nMinHeight = std::max(nMinHeight, nCoinHeight + (int)(txin.nSequence & CTxIn
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return std::make_pair(nMinHeight, nMinTime);                                         │      return std::make_pair(nMinHeight, nMinTime);                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/modaloverlay.cpp:91                                                      │ dogecoin/src/qt/modaloverlay.cpp:78                                                      
                                                                                         │                                                                                          
    QDateTime currentDate = QDateTime::currentDateTime();                                │      QDateTime currentDate = QDateTime::currentDateTime();                               
                                                                                         │                                                                                          
    // keep a vector of samples of verification progress at height                       │      // keep a vector of samples of verification progress at height                      
    blockProcessTime.push_front(qMakePair(currentDate.toMSecsSinceEpoch(), nVerification │      blockProcessTime.push_front(qMakePair(currentDate.toMSecsSinceEpoch(), nVerification
                                                                                         │                                                                                          
    // show progress speed if we have more than one sample                               │      // show progress speed if we have more then one sample                              
    if (blockProcessTime.size() >= 2) {                                                  │      if (blockProcessTime.size() >= 2)                                                   
                                                                                         │      {                                                                                   
                                                                                         │          double progressStart = blockProcessTime[0].second;                              
        double progressDelta = 0;                                                        │          double progressDelta = 0;                                                       
        double progressPerHour = 0;                                                      │          double progressPerHour = 0;                                                     
        qint64 timeDelta = 0;                                                            │          qint64 timeDelta = 0;                                                           
        qint64 remainingMSecs = 0;                                                       │          qint64 remainingMSecs = 0;                                                      
        double remainingProgress = 1.0 - nVerificationProgress;                          │          double remainingProgress = 1.0 - nVerificationProgress;                         
        for (int i = 1; i < blockProcessTime.size(); i++) {                              │          for (int i = 1; i < blockProcessTime.size(); i++)                               
                                                                                         │          {                                                                               
            QPair<qint64, double> sample = blockProcessTime[i];                          │              QPair<qint64, double> sample = blockProcessTime[i];                         
                                                                                         │                                                                                          
            // take first sample after 500 seconds or last available one                 │              // take first sample after 500 seconds or last available one                
            if (sample.first < (currentDate.toMSecsSinceEpoch() - 500 * 1000) || i == bl │              if (sample.first < (currentDate.toMSecsSinceEpoch() - 500 * 1000) || i == bl
                progressDelta = blockProcessTime[0].second - sample.second;              │                  progressDelta = progressStart-sample.second;                            
                timeDelta = blockProcessTime[0].first - sample.first;                    │                  timeDelta = blockProcessTime[0].first - sample.first;                   
                progressPerHour = (progressDelta > 0) ? progressDelta / (double)timeDelt │                  progressPerHour = progressDelta/(double)timeDelta*1000*3600;            
                remainingMSecs = (progressDelta > 0) ? remainingProgress / progressDelta │                  remainingMSecs = remainingProgress / progressDelta * timeDelta;         
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        // show progress increase per hour                                               │          // show progress increase per hour                                              
        ui->progressIncreasePerH->setText(QString::number(progressPerHour * 100, 'f', 2) │          ui->progressIncreasePerH->setText(QString::number(progressPerHour > 0 ? progress
                                                                                         │                                                                                          
        // show expected remaining time                                                  │          // show expected remaining time, if we have a sample                            
        if(remainingMSecs >= 0) {                                                        │          if (remainingMSecs > 0)                                                         
            ui->expectedTimeLeft->setText(GUIUtil::formatNiceTimeOffset(remainingMSecs / │              ui->expectedTimeLeft->setText(GUIUtil::formatNiceTimeOffset(remainingMSecs/1
        } else {                                                                         │                                                                                          
            ui->expectedTimeLeft->setText(QObject::tr("unknown"));                       │                                                                                          
        }                                                                                │                                                                                          
                                                                                         │                                                                                          
        static const int MAX_SAMPLES = 5000;                                             │          static const int MAX_SAMPLES = 5000;                                            
        if (blockProcessTime.count() > MAX_SAMPLES) {                                    │          if (blockProcessTime.count() > MAX_SAMPLES)                                     
            blockProcessTime.remove(MAX_SAMPLES, blockProcessTime.count() - MAX_SAMPLES) │              blockProcessTime.remove(MAX_SAMPLES, blockProcessTime.count()-MAX_SAMPLES); 
        }                                                                                │                                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // show the last block date                                                          │      // show the last block date                                                         
    ui->newestBlockDate->setText(blockDate.toString());                                  │      ui->newestBlockDate->setText(blockDate.toString());                                 
                                                                                         │                                                                                          
    // show the percentage done according to nVerificationProgress                       │      // show the percentage done according to nVerificationProgress                      
    ui->percentageProgress->setText(QString::number(nVerificationProgress*100, 'f', 2)+" │      ui->percentageProgress->setText(QString::number(nVerificationProgress*100, 'f', 2)+"
                                                                                         │      ui->progressBar->setValue(nVerificationProgress*100);                               
                                                                                         │                                                                                          
    if (!bestHeaderDate.isValid())                                                       │      if (!bestHeaderDate.isValid())                                                      
        // not syncing                                                                   │          // not syncing                                                                  
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    // estimate the number of headers left based on nPowTargetSpacing                    │      // estimate the number of headers left based on nPowTargetSpacing                   
    // and check if the gui is not aware of the best header (happens rarely)             │      // and check if the GUI is not aware of the best header (happens rarely)            
    int estimateNumHeadersLeft = bestHeaderDate.secsTo(currentDate) / Params().GetConsen │      int estimateNumHeadersLeft = bestHeaderDate.secsTo(currentDate) / Params().GetConsen
    bool hasBestHeader = bestHeaderHeight >= count;                                      │      bool hasBestHeader = bestHeaderHeight >= count;                                     
                                                                                         │                                                                                          
    // show remaining number of blocks                                                   │      // show remaining number of blocks                                                  
    if (estimateNumHeadersLeft < HEADER_HEIGHT_DELTA_SYNC && hasBestHeader) {            │      if (estimateNumHeadersLeft < HEADER_HEIGHT_DELTA_SYNC && hasBestHeader) {           
        ui->numberOfBlocksLeft->setText(QString::number(bestHeaderHeight - count));      │          ui->numberOfBlocksLeft->setText(QString::number(bestHeaderHeight - count));     
    } else {                                                                             │      } else {                                                                            
        UpdateHeaderSyncLabel();                                                         │          ui->numberOfBlocksLeft->setText(tr("Unknown. Syncing Headers (%1)...").arg(bestH
        ui->expectedTimeLeft->setText(tr("Unknown…"));                                   │          ui->expectedTimeLeft->setText(tr("Unknown..."));                                
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/util/strencodings.cpp:344                                                   │ dogecoin/src/utilstrencodings.cpp:614                                                    
                                                                                         │                                                                                          
    int64_t mantissa = 0;                                                                │      int64_t mantissa = 0;                                                               
    int64_t exponent = 0;                                                                │      int64_t exponent = 0;                                                               
    int mantissa_tzeros = 0;                                                             │      int mantissa_tzeros = 0;                                                            
    bool mantissa_sign = false;                                                          │      bool mantissa_sign = false;                                                         
    bool exponent_sign = false;                                                          │      bool exponent_sign = false;                                                         
    int ptr = 0;                                                                         │      int ptr = 0;                                                                        
    int end = val.size();                                                                │      int end = val.size();                                                               
    int point_ofs = 0;                                                                   │      int point_ofs = 0;                                                                  
                                                                                         │                                                                                          
    if (ptr < end && val[ptr] == '-') {                                                  │      if (ptr < end && val[ptr] == '-') {                                                 
        mantissa_sign = true;                                                            │          mantissa_sign = true;                                                           
        ++ptr;                                                                           │          ++ptr;                                                                          
    }                                                                                    │      }                                                                                   
    if (ptr < end)                                                                       │      if (ptr < end)                                                                      
    {                                                                                    │      {                                                                                   
        if (val[ptr] == '0') {                                                           │          if (val[ptr] == '0') {                                                          
            /* pass single 0 */                                                          │              /* pass single 0 */                                                         
            ++ptr;                                                                       │              ++ptr;                                                                      
        } else if (val[ptr] >= '1' && val[ptr] <= '9') {                                 │          } else if (val[ptr] >= '1' && val[ptr] <= '9') {                                
            while (ptr < end && IsDigit(val[ptr])) {                                     │              while (ptr < end && val[ptr] >= '0' && val[ptr] <= '9') {                   
                if (!ProcessMantissaDigit(val[ptr], mantissa, mantissa_tzeros))          │                  if (!ProcessMantissaDigit(val[ptr], mantissa, mantissa_tzeros))         
                    return false; /* overflow */                                         │                      return false; /* overflow */                                        
                ++ptr;                                                                   │                  ++ptr;                                                                  
            }                                                                            │              }                                                                           
        } else return false; /* missing expected digit */                                │          } else return false; /* missing expected digit */                               
    } else return false; /* empty string or loose '-' */                                 │      } else return false; /* empty string or loose '-' */                                
    if (ptr < end && val[ptr] == '.')                                                    │      if (ptr < end && val[ptr] == '.')                                                   
    {                                                                                    │      {                                                                                   
        ++ptr;                                                                           │          ++ptr;                                                                          
        if (ptr < end && IsDigit(val[ptr]))                                              │          if (ptr < end && val[ptr] >= '0' && val[ptr] <= '9')                            
        {                                                                                │          {                                                                               
            while (ptr < end && IsDigit(val[ptr])) {                                     │              while (ptr < end && val[ptr] >= '0' && val[ptr] <= '9') {                   
                if (!ProcessMantissaDigit(val[ptr], mantissa, mantissa_tzeros))          │                  if (!ProcessMantissaDigit(val[ptr], mantissa, mantissa_tzeros))         
                    return false; /* overflow */                                         │                      return false; /* overflow */                                        
                ++ptr;                                                                   │                  ++ptr;                                                                  
                ++point_ofs;                                                             │                  ++point_ofs;                                                            
            }                                                                            │              }                                                                           
        } else return false; /* missing expected digit */                                │          } else return false; /* missing expected digit */                               
    }                                                                                    │      }                                                                                   
    if (ptr < end && (val[ptr] == 'e' || val[ptr] == 'E'))                               │      if (ptr < end && (val[ptr] == 'e' || val[ptr] == 'E'))                              
    {                                                                                    │      {                                                                                   
        ++ptr;                                                                           │          ++ptr;                                                                          
        if (ptr < end && val[ptr] == '+')                                                │          if (ptr < end && val[ptr] == '+')                                               
            ++ptr;                                                                       │              ++ptr;                                                                      
        else if (ptr < end && val[ptr] == '-') {                                         │          else if (ptr < end && val[ptr] == '-') {                                        
            exponent_sign = true;                                                        │              exponent_sign = true;                                                       
            ++ptr;                                                                       │              ++ptr;                                                                      
        }                                                                                │          }                                                                               
        if (ptr < end && IsDigit(val[ptr])) {                                            │          if (ptr < end && val[ptr] >= '0' && val[ptr] <= '9') {                          
            while (ptr < end && IsDigit(val[ptr])) {                                     │              while (ptr < end && val[ptr] >= '0' && val[ptr] <= '9') {                   
                if (exponent > (UPPER_BOUND / 10LL))                                     │                  if (exponent > (UPPER_BOUND / 10LL))                                    
                    return false; /* overflow */                                         │                      return false; /* overflow */                                        
                exponent = exponent * 10 + val[ptr] - '0';                               │                  exponent = exponent * 10 + val[ptr] - '0';                              
                ++ptr;                                                                   │                  ++ptr;                                                                  
            }                                                                            │              }                                                                           
        } else return false; /* missing expected digit */                                │          } else return false; /* missing expected digit */                               
    }                                                                                    │      }                                                                                   
    if (ptr != end)                                                                      │      if (ptr != end)                                                                     
        return false; /* trailing garbage */                                             │          return false; /* trailing garbage */                                            
                                                                                         │                                                                                          
    /* finalize exponent */                                                              │      /* finalize exponent */                                                             
    if (exponent_sign)                                                                   │      if (exponent_sign)                                                                  
        exponent = -exponent;                                                            │          exponent = -exponent;                                                           
    exponent = exponent - point_ofs + mantissa_tzeros;                                   │      exponent = exponent - point_ofs + mantissa_tzeros;                                  
                                                                                         │                                                                                          
    /* finalize mantissa */                                                              │      /* finalize mantissa */                                                             
    if (mantissa_sign)                                                                   │      if (mantissa_sign)                                                                  
        mantissa = -mantissa;                                                            │          mantissa = -mantissa;                                                           
                                                                                         │                                                                                          
    /* convert to one 64-bit fixed-point value */                                        │      /* convert to one 64-bit fixed-point value */                                       
    exponent += decimals;                                                                │      exponent += decimals;                                                               
    if (exponent < 0)                                                                    │      if (exponent < 0)                                                                   
        return false; /* cannot represent values smaller than 10^-decimals */            │          return false; /* cannot represent values smaller than 10^-decimals */           
    if (exponent >= 18)                                                                  │      if (exponent >= 18)                                                                 
        return false; /* cannot represent values larger than or equal to 10^(18-decimals │          return false; /* cannot represent values larger than or equal to 10^(18-decimals
                                                                                         │                                                                                          
    for (int i=0; i < exponent; ++i) {                                                   │      for (int i=0; i < exponent; ++i) {                                                  
        if (mantissa > (UPPER_BOUND / 10LL) || mantissa < -(UPPER_BOUND / 10LL))         │          if (mantissa > (UPPER_BOUND / 10LL) || mantissa < -(UPPER_BOUND / 10LL))        
            return false; /* overflow */                                                 │              return false; /* overflow */                                                
        mantissa *= 10;                                                                  │          mantissa *= 10;                                                                 
    }                                                                                    │      }                                                                                   
    if (mantissa > UPPER_BOUND || mantissa < -UPPER_BOUND)                               │      if (mantissa > UPPER_BOUND || mantissa < -UPPER_BOUND)                              
        return false; /* overflow */                                                     │          return false; /* overflow */                                                    
                                                                                         │                                                                                          
    if (amount_out)                                                                      │      if (amount_out)                                                                     
        *amount_out = mantissa;                                                          │          *amount_out = mantissa;                                                         
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/skiplist_tests.cpp:48                                                 │ bitcoin/src/test/skiplist_tests.cpp:46                                                   
                                                                                         │                                                                                          
    // Build a main chain 100000 blocks long.                                            │      // Build a main chain 100000 blocks long.                                           
    std::vector<uint256> vHashMain(100000);                                              │      std::vector<uint256> vHashMain(100000);                                             
    std::vector<CBlockIndex> vBlocksMain(100000);                                        │      std::vector<CBlockIndex> vBlocksMain(100000);                                       
    for (unsigned int i=0; i<vBlocksMain.size(); i++) {                                  │      for (unsigned int i=0; i<vBlocksMain.size(); i++) {                                 
        vHashMain[i] = ArithToUint256(i); // Set the hash equal to the height, so we can │          vHashMain[i] = ArithToUint256(i); // Set the hash equal to the height, so we can
        vBlocksMain[i].nHeight = i;                                                      │          vBlocksMain[i].nHeight = i;                                                     
        vBlocksMain[i].pprev = i ? &vBlocksMain[i - 1] : NULL;                           │          vBlocksMain[i].pprev = i ? &vBlocksMain[i - 1] : nullptr;                       
        vBlocksMain[i].phashBlock = &vHashMain[i];                                       │          vBlocksMain[i].phashBlock = &vHashMain[i];                                      
        vBlocksMain[i].BuildSkip();                                                      │          vBlocksMain[i].BuildSkip();                                                     
        BOOST_CHECK_EQUAL((int)UintToArith256(vBlocksMain[i].GetBlockHash()).GetLow64(), │          BOOST_CHECK_EQUAL((int)UintToArith256(vBlocksMain[i].GetBlockHash()).GetLow64(),
        BOOST_CHECK(vBlocksMain[i].pprev == NULL || vBlocksMain[i].nHeight == vBlocksMai │          BOOST_CHECK(vBlocksMain[i].pprev == nullptr || vBlocksMain[i].nHeight == vBlocks
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Build a branch that splits off at block 49999, 50000 blocks long.                 │      // Build a branch that splits off at block 49999, 50000 blocks long.                
    std::vector<uint256> vHashSide(50000);                                               │      std::vector<uint256> vHashSide(50000);                                              
    std::vector<CBlockIndex> vBlocksSide(50000);                                         │      std::vector<CBlockIndex> vBlocksSide(50000);                                        
    for (unsigned int i=0; i<vBlocksSide.size(); i++) {                                  │      for (unsigned int i=0; i<vBlocksSide.size(); i++) {                                 
        vHashSide[i] = ArithToUint256(i + 50000 + (arith_uint256(1) << 128)); // Add 1<< │          vHashSide[i] = ArithToUint256(i + 50000 + (arith_uint256(1) << 128)); // Add 1<<
        vBlocksSide[i].nHeight = i + 50000;                                              │          vBlocksSide[i].nHeight = i + 50000;                                             
        vBlocksSide[i].pprev = i ? &vBlocksSide[i - 1] : &vBlocksMain[49999];            │          vBlocksSide[i].pprev = i ? &vBlocksSide[i - 1] : (vBlocksMain.data()+49999);    
        vBlocksSide[i].phashBlock = &vHashSide[i];                                       │          vBlocksSide[i].phashBlock = &vHashSide[i];                                      
        vBlocksSide[i].BuildSkip();                                                      │          vBlocksSide[i].BuildSkip();                                                     
        BOOST_CHECK_EQUAL((int)UintToArith256(vBlocksSide[i].GetBlockHash()).GetLow64(), │          BOOST_CHECK_EQUAL((int)UintToArith256(vBlocksSide[i].GetBlockHash()).GetLow64(),
        BOOST_CHECK(vBlocksSide[i].pprev == NULL || vBlocksSide[i].nHeight == vBlocksSid │          BOOST_CHECK(vBlocksSide[i].pprev == nullptr || vBlocksSide[i].nHeight == vBlocks
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Build a CChain for the main branch.                                               │      // Build a CChain for the main branch.                                              
    CChain chain;                                                                        │      CChain chain;                                                                       
    chain.SetTip(&vBlocksMain.back());                                                   │      chain.SetTip(&vBlocksMain.back());                                                  
                                                                                         │                                                                                          
    // Test 100 random starting points for locators.                                     │      // Test 100 random starting points for locators.                                    
    for (int n=0; n<100; n++) {                                                          │      for (int n=0; n<100; n++) {                                                         
        int r = insecure_rand() % 150000;                                                │          int r = InsecureRandRange(150000);                                              
        CBlockIndex* tip = (r < 100000) ? &vBlocksMain[r] : &vBlocksSide[r - 100000];    │          CBlockIndex* tip = (r < 100000) ? &vBlocksMain[r] : &vBlocksSide[r - 100000];   
        CBlockLocator locator = chain.GetLocator(tip);                                   │          CBlockLocator locator = chain.GetLocator(tip);                                  
                                                                                         │                                                                                          
        // The first result must be the block itself, the last one must be genesis.      │          // The first result must be the block itself, the last one must be genesis.     
        BOOST_CHECK(locator.vHave.front() == tip->GetBlockHash());                       │          BOOST_CHECK(locator.vHave.front() == tip->GetBlockHash());                      
        BOOST_CHECK(locator.vHave.back() == vBlocksMain[0].GetBlockHash());              │          BOOST_CHECK(locator.vHave.back() == vBlocksMain[0].GetBlockHash());             
                                                                                         │                                                                                          
        // Entries 1 through 11 (inclusive) go back one step each.                       │          // Entries 1 through 11 (inclusive) go back one step each.                      
        for (unsigned int i = 1; i < 12 && i < locator.vHave.size() - 1; i++) {          │          for (unsigned int i = 1; i < 12 && i < locator.vHave.size() - 1; i++) {         
            BOOST_CHECK_EQUAL(UintToArith256(locator.vHave[i]).GetLow64(), tip->nHeight  │              BOOST_CHECK_EQUAL(UintToArith256(locator.vHave[i]).GetLow64(), tip->nHeight 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // The further ones (excluding the last one) go back with exponential steps.     │          // The further ones (excluding the last one) go back with exponential steps.    
        unsigned int dist = 2;                                                           │          unsigned int dist = 2;                                                          
        for (unsigned int i = 12; i < locator.vHave.size() - 1; i++) {                   │          for (unsigned int i = 12; i < locator.vHave.size() - 1; i++) {                  
            BOOST_CHECK_EQUAL(UintToArith256(locator.vHave[i - 1]).GetLow64() - UintToAr │              BOOST_CHECK_EQUAL(UintToArith256(locator.vHave[i - 1]).GetLow64() - UintToAr
            dist *= 2;                                                                   │              dist *= 2;                                                                  
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:2356                                                        │ bitcoin/src/validation.cpp:2768                                                          
                                                                                         │                                                                                          
                                                                                         │      AssertLockHeld(::cs_main);                                                          
    do {                                                                                 │      do {                                                                                
        CBlockIndex *pindexNew = NULL;                                                   │          CBlockIndex *pindexNew = nullptr;                                               
                                                                                         │                                                                                          
        // Find the best candidate header.                                               │          // Find the best candidate header.                                              
        {                                                                                │          {                                                                               
            std::set<CBlockIndex*, CBlockIndexWorkComparator>::reverse_iterator it = set │              std::set<CBlockIndex*, CBlockIndexWorkComparator>::reverse_iterator it = set
            if (it == setBlockIndexCandidates.rend())                                    │              if (it == setBlockIndexCandidates.rend())                                   
                return NULL;                                                             │                  return nullptr;                                                         
            pindexNew = *it;                                                             │              pindexNew = *it;                                                            
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // Check whether all blocks on the path between the currently active chain and t │          // Check whether all blocks on the path between the currently active chain and t
        // Just going until the active chain is an optimization, as we know all blocks i │          // Just going until the active chain is an optimization, as we know all blocks i
        CBlockIndex *pindexTest = pindexNew;                                             │          CBlockIndex *pindexTest = pindexNew;                                            
        bool fInvalidAncestor = false;                                                   │          bool fInvalidAncestor = false;                                                  
        while (pindexTest && !chainActive.Contains(pindexTest)) {                        │          while (pindexTest && !m_chain.Contains(pindexTest)) {                           
            assert(pindexTest->nChainTx || pindexTest->nHeight == 0);                    │              assert(pindexTest->HaveTxsDownloaded() || pindexTest->nHeight == 0);        
                                                                                         │                                                                                          
            // Pruned nodes may have entries in setBlockIndexCandidates for              │              // Pruned nodes may have entries in setBlockIndexCandidates for             
            // which block files have been deleted.  Remove those as candidates          │              // which block files have been deleted.  Remove those as candidates         
            // for the most work chain if we come across them; we can't switch           │              // for the most work chain if we come across them; we can't switch          
            // to a chain unless we have all the non-active-chain parent blocks.         │              // to a chain unless we have all the non-active-chain parent blocks.        
            bool fFailedChain = pindexTest->nStatus & BLOCK_FAILED_MASK;                 │              bool fFailedChain = pindexTest->nStatus & BLOCK_FAILED_MASK;                
            bool fMissingData = !(pindexTest->nStatus & BLOCK_HAVE_DATA);                │              bool fMissingData = !(pindexTest->nStatus & BLOCK_HAVE_DATA);               
            if (fFailedChain || fMissingData) {                                          │              if (fFailedChain || fMissingData) {                                         
                // Candidate chain is not usable (either invalid or missing data)        │                  // Candidate chain is not usable (either invalid or missing data)       
                if (fFailedChain && (pindexBestInvalid == NULL || pindexNew->nChainWork  │                  if (fFailedChain && (m_chainman.m_best_invalid == nullptr || pindexNew->
                    pindexBestInvalid = pindexNew;                                       │                      m_chainman.m_best_invalid = pindexNew;                              
                                                                                         │                  }                                                                       
                CBlockIndex *pindexFailed = pindexNew;                                   │                  CBlockIndex *pindexFailed = pindexNew;                                  
                // Remove the entire chain from the set.                                 │                  // Remove the entire chain from the set.                                
                while (pindexTest != pindexFailed) {                                     │                  while (pindexTest != pindexFailed) {                                    
                    if (fFailedChain) {                                                  │                      if (fFailedChain) {                                                 
                        pindexFailed->nStatus |= BLOCK_FAILED_CHILD;                     │                          pindexFailed->nStatus |= BLOCK_FAILED_CHILD;                    
                    } else if (fMissingData) {                                           │                      } else if (fMissingData) {                                          
                        // If we're missing data, then add back to mapBlocksUnlinked,    │                          // If we're missing data, then add back to m_blocks_unlinked,   
                        // so that if the block arrives in the future we can try adding  │                          // so that if the block arrives in the future we can try adding 
                        // to setBlockIndexCandidates again.                             │                          // to setBlockIndexCandidates again.                            
                        mapBlocksUnlinked.insert(std::make_pair(pindexFailed->pprev, pin │                          m_blockman.m_blocks_unlinked.insert(                            
                                                                                         │                              std::make_pair(pindexFailed->pprev, pindexFailed));         
                    }                                                                    │                      }                                                                   
                    setBlockIndexCandidates.erase(pindexFailed);                         │                      setBlockIndexCandidates.erase(pindexFailed);                        
                    pindexFailed = pindexFailed->pprev;                                  │                      pindexFailed = pindexFailed->pprev;                                 
                }                                                                        │                  }                                                                       
                setBlockIndexCandidates.erase(pindexTest);                               │                  setBlockIndexCandidates.erase(pindexTest);                              
                fInvalidAncestor = true;                                                 │                  fInvalidAncestor = true;                                                
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
            pindexTest = pindexTest->pprev;                                              │              pindexTest = pindexTest->pprev;                                             
        }                                                                                │          }                                                                               
        if (!fInvalidAncestor)                                                           │          if (!fInvalidAncestor)                                                          
            return pindexNew;                                                            │              return pindexNew;                                                           
    } while(true);                                                                       │      } while(true);                                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/test/uritests.cpp:13                                                     │ dogecoin/src/qt/test/uritests.cpp:13                                                     
                                                                                         │                                                                                          
    SendCoinsRecipient rv;                                                               │      SendCoinsRecipient rv;                                                              
    QUrl uri;                                                                            │      QUrl uri;                                                                           
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));   │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-dontexist="));  
    QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                        │      QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                       
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));       │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?dontexist="));      
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString());                                                      │      QVERIFY(rv.label == QString());                                                     
    QVERIFY(rv.amount == 0);                                                             │      QVERIFY(rv.amount == 0);                                                            
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Exam │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?label=Wikipedia Exam
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString("Wikipedia Example Address"));                           │      QVERIFY(rv.label == QString("Wikipedia Example Address"));                          
    QVERIFY(rv.amount == 0);                                                             │      QVERIFY(rv.amount == 0);                                                            
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));     │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=0.001"));    
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString());                                                      │      QVERIFY(rv.label == QString());                                                     
    QVERIFY(rv.amount == 100000);                                                        │      QVERIFY(rv.amount == 100000);                                                       
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));     │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1.001"));    
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString());                                                      │      QVERIFY(rv.label == QString());                                                     
    QVERIFY(rv.amount == 100100000);                                                     │      QVERIFY(rv.amount == 100100000);                                                    
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wik │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=100&label=Wik
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.amount == 10000000000LL);                                                 │      QVERIFY(rv.amount == 10000000000LL);                                                
    QVERIFY(rv.label == QString("Wikipedia Example"));                                   │      QVERIFY(rv.label == QString("Wikipedia Example"));                                  
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Ex │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?message=Wikipedia Ex
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString());                                                      │      QVERIFY(rv.label == QString());                                                     
                                                                                         │                                                                                          
    QVERIFY(GUIUtil::parseBitcoinURI("dogecoin://D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?mess │      QVERIFY(GUIUtil::parseBitcoinURI("dogecoin://D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?mess
    QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));                │      QVERIFY(rv.address == QString("D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"));               
    QVERIFY(rv.label == QString());                                                      │      QVERIFY(rv.label == QString());                                                     
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedi │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?req-message=Wikipedi
    QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                         │      QVERIFY(GUIUtil::parseBitcoinURI(uri, &rv));                                        
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=W │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000&label=W
    QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                        │      QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                       
                                                                                         │                                                                                          
    uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label │      uri.setUrl(QString("dogecoin:D75tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=1,000.0&label
    QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                        │      QVERIFY(!GUIUtil::parseBitcoinURI(uri, &rv));                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/addrman_tests.cpp:399                                                  │ bitcoin/src/test/addrman_tests.cpp:527                                                   
                                                                                         │                                                                                          
                                                                                         │      std::vector<bool> asmap = FromBytes(asmap_raw, sizeof(asmap_raw) * 8);              
                                                                                         │      NetGroupManager ngm_asmap{asmap};                                                   
                                                                                         │                                                                                          
    CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);             │      CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);            
    CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE);             │      CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE);            
                                                                                         │                                                                                          
    CNetAddr source1 = ResolveIP("250.1.2.1");                                           │      CNetAddr source1 = ResolveIP("250.1.2.1");                                          
                                                                                         │                                                                                          
    AddrInfo info1 = AddrInfo(addr1, source1);                                           │      AddrInfo info1 = AddrInfo(addr1, source1);                                          
                                                                                         │                                                                                          
    uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();               │      uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();              
    uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();               │      uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();              
                                                                                         │                                                                                          
    // Test: Make sure the buckets are what we expect                                    │      // Test: Make sure the buckets are what we expect                                   
    BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, EMPTY_NETGROUPMAN), 786);                │      BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, ngm_asmap), 795);                       
    BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, source1, EMPTY_NETGROUPMAN), 786);       │      BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, source1, ngm_asmap), 795);              
                                                                                         │                                                                                          
    // Test: Make sure key actually randomizes bucket placement. A fail on               │      // Test: Make sure key actually randomizes bucket placement. A fail on              
    //  this test could be a security issue.                                             │      //  this test could be a security issue.                                            
    BOOST_CHECK(info1.GetNewBucket(nKey1, EMPTY_NETGROUPMAN) != info1.GetNewBucket(nKey2 │      BOOST_CHECK(info1.GetNewBucket(nKey1, ngm_asmap) != info1.GetNewBucket(nKey2, ngm_as
                                                                                         │                                                                                          
    // Test: Ports should not affect bucket placement in the addr                        │      // Test: Ports should not affect bucket placement in the addr                       
    AddrInfo info2 = AddrInfo(addr2, source1);                                           │      AddrInfo info2 = AddrInfo(addr2, source1);                                          
    BOOST_CHECK(info1.GetKey() != info2.GetKey());                                       │      BOOST_CHECK(info1.GetKey() != info2.GetKey());                                      
    BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, EMPTY_NETGROUPMAN), info2.GetNewBucket(n │      BOOST_CHECK_EQUAL(info1.GetNewBucket(nKey1, ngm_asmap), info2.GetNewBucket(nKey1, ng
                                                                                         │                                                                                          
    std::set<int> buckets;                                                               │      std::set<int> buckets;                                                              
    for (int i = 0; i < 255; i++) {                                                      │      for (int i = 0; i < 255; i++) {                                                     
        AddrInfo infoi = AddrInfo(                                                       │          AddrInfo infoi = AddrInfo(                                                      
            CAddress(ResolveService("250.1.1." + ToString(i)), NODE_NONE),               │              CAddress(ResolveService("250.1.1." + ToString(i)), NODE_NONE),              
            ResolveIP("250.1.1." + ToString(i)));                                        │              ResolveIP("250.1.1." + ToString(i)));                                       
        int bucket = infoi.GetNewBucket(nKey1, EMPTY_NETGROUPMAN);                       │          int bucket = infoi.GetNewBucket(nKey1, ngm_asmap);                              
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test: IP addresses in the same group (\16 prefix for IPv4) should                 │      // Test: IP addresses in the same /16 prefix                                        
    //  always map to the same bucket.                                                   │      // usually map to the same bucket.                                                  
    BOOST_CHECK_EQUAL(buckets.size(), 1U);                                               │      BOOST_CHECK_EQUAL(buckets.size(), 1U);                                              
                                                                                         │                                                                                          
    buckets.clear();                                                                     │      buckets.clear();                                                                    
    for (int j = 0; j < 4 * 255; j++) {                                                  │      for (int j = 0; j < 4 * 255; j++) {                                                 
        AddrInfo infoj = AddrInfo(CAddress(                                              │          AddrInfo infoj = AddrInfo(CAddress(                                             
                                        ResolveService(                                  │                                          ResolveService(                                 
                                            ToString(250 + (j / 255)) + "." + ToString(j │                                              ToString(250 + (j / 255)) + "." + ToString(j
            ResolveIP("251.4.1.1"));                                                     │              ResolveIP("251.4.1.1"));                                                    
        int bucket = infoj.GetNewBucket(nKey1, EMPTY_NETGROUPMAN);                       │          int bucket = infoj.GetNewBucket(nKey1, ngm_asmap);                              
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test: IP addresses in the same source groups should map to NO MORE                │      // Test: IP addresses in the same source /16 prefix should not map to more          
    //  than 64 buckets.                                                                 │      // than 64 buckets.                                                                 
    BOOST_CHECK(buckets.size() <= 64);                                                   │      BOOST_CHECK(buckets.size() <= 64);                                                  
                                                                                         │                                                                                          
    buckets.clear();                                                                     │      buckets.clear();                                                                    
    for (int p = 0; p < 255; p++) {                                                      │      for (int p = 0; p < 255; p++) {                                                     
        AddrInfo infoj = AddrInfo(                                                       │          AddrInfo infoj = AddrInfo(                                                      
            CAddress(ResolveService("250.1.1.1"), NODE_NONE),                            │              CAddress(ResolveService("250.1.1.1"), NODE_NONE),                           
                                                                                         │              ResolveIP("101." + ToString(p) + ".1.1"));                                  
                                                                                         │          int bucket = infoj.GetNewBucket(nKey1, ngm_asmap);                              
                                                                                         │          buckets.insert(bucket);                                                         
                                                                                         │      }                                                                                   
                                                                                         │      // Test: IP addresses in the different source /16 prefixes usually map to MORE      
                                                                                         │      // than 1 bucket.                                                                   
                                                                                         │      BOOST_CHECK(buckets.size() > 1);                                                    
                                                                                         │                                                                                          
                                                                                         │      buckets.clear();                                                                    
                                                                                         │      for (int p = 0; p < 255; p++) {                                                     
                                                                                         │          AddrInfo infoj = AddrInfo(                                                      
                                                                                         │              CAddress(ResolveService("250.1.1.1"), NODE_NONE),                           
            ResolveIP("250." + ToString(p) + ".1.1"));                                   │              ResolveIP("250." + ToString(p) + ".1.1"));                                  
        int bucket = infoj.GetNewBucket(nKey1, EMPTY_NETGROUPMAN);                       │          int bucket = infoj.GetNewBucket(nKey1, ngm_asmap);                              
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test: IP addresses in the different source groups should map to MORE              │      // Test: IP addresses in the different source /16 prefixes sometimes map to NO MORE 
    //  than 64 buckets.                                                                 │      // than 1 bucket.                                                                   
    BOOST_CHECK(buckets.size() > 64);                                                    │      BOOST_CHECK(buckets.size() == 1);                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/rpc_tests.cpp:187                                                     │ bitcoin/src/test/rpc_tests.cpp:192                                                       
                                                                                         │                                                                                          
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.00000001")), UniValue);        │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("-0.00000001")), UniValue);       
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), 0LL);                       │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0")), 0LL);                      
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000000")), 0LL);              │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000000")), 0LL);             
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), 1LL);              │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001")), 1LL);             
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), 17622195LL);       │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.17622195")), 17622195LL);      
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 50000000LL);              │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.5")), 50000000LL);             
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.50000000")), 50000000LL);       │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.50000000")), 50000000LL);      
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.89898989")), 89898989LL);       │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.89898989")), 89898989LL);      
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), 100000000LL);      │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1.00000000")), 100000000LL);     
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), 209999999999 │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.9999999")), 209999999999
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), 20999999999 │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("20999999.99999999")), 20999999999
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), COIN/100000000);         │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("1e-8")), COIN/100000000);        
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), COIN/100000000);       │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.1e-7")), COIN/100000000);      
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), COIN/100000000);      │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.01e-6")), COIN/100000000);     
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000000000000000000000000000 │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000000000000000000000000000
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("100000000000000000000000000000000 │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("100000000000000000000000000000000
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000000000000000000000000000 │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.0000000000000000000000000000000
                                                                                         │                                                                                          
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); //should fail │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e-9")), UniValue); //should fail
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("0.000000019")), UniValue); //shou │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("0.000000019")), UniValue); //shou
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001000000")), 1LL); //shou │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.00000001000000")), 1LL); //shou
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("19e-9")), UniValue); //should fai │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("19e-9")), UniValue); //should fai
    BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.19e-6")), 19); //should pass, l │      BOOST_CHECK_EQUAL(AmountFromValue(ValueFromString("0.19e-6")), 19); //should pass, l
                                                                                         │                                                                                          
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("92233720368.54775808")), UniValue │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("92233720368.54775808")), UniValue
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e+11")), UniValue); //overflow e │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e+11")), UniValue); //overflow e
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e11")), UniValue); //overflow er │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("1e11")), UniValue); //overflow er
    BOOST_CHECK_THROW(AmountFromValue(ValueFromString("93e+9")), UniValue); //overflow e │      BOOST_CHECK_THROW(AmountFromValue(ValueFromString("93e+9")), UniValue); //overflow e
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/interpreter.cpp:107                                                  │ dogecoin/src/script/interpreter.cpp:110                                                  
                                                                                         │                                                                                          
    // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] [sighash]     │      // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] [sighash]    
    // * total-length: 1-byte length descriptor of everything that follows,              │      // * total-length: 1-byte length descriptor of everything that follows,             
    //   excluding the sighash byte.                                                     │      //   excluding the sighash byte.                                                    
    // * R-length: 1-byte length descriptor of the R value that follows.                 │      // * R-length: 1-byte length descriptor of the R value that follows.                
    // * R: arbitrary-length big-endian encoded R value. It must use the shortest        │      // * R: arbitrary-length big-endian encoded R value. It must use the shortest       
    //   possible encoding for a positive integer (which means no null bytes at          │      //   possible encoding for a positive integers (which means no null bytes at        
    //   the start, except a single one when the next byte has its highest bit set).     │      //   the start, except a single one when the next byte has its highest bit set).    
    // * S-length: 1-byte length descriptor of the S value that follows.                 │      // * S-length: 1-byte length descriptor of the S value that follows.                
    // * S: arbitrary-length big-endian encoded S value. The same rules apply.           │      // * S: arbitrary-length big-endian encoded S value. The same rules apply.          
    // * sighash: 1-byte value indicating what data is hashed (not part of the DER       │      // * sighash: 1-byte value indicating what data is hashed (not part of the DER      
    //   signature)                                                                      │      //   signature)                                                                     
                                                                                         │                                                                                          
    // Minimum and maximum size constraints.                                             │      // Minimum and maximum size constraints.                                            
    if (sig.size() < 9) return false;                                                    │      if (sig.size() < 9) return false;                                                   
    if (sig.size() > 73) return false;                                                   │      if (sig.size() > 73) return false;                                                  
                                                                                         │                                                                                          
    // A signature is of type 0x30 (compound).                                           │      // A signature is of type 0x30 (compound).                                          
    if (sig[0] != 0x30) return false;                                                    │      if (sig[0] != 0x30) return false;                                                   
                                                                                         │                                                                                          
    // Make sure the length covers the entire signature.                                 │      // Make sure the length covers the entire signature.                                
    if (sig[1] != sig.size() - 3) return false;                                          │      if (sig[1] != sig.size() - 3) return false;                                         
                                                                                         │                                                                                          
    // Extract the length of the R element.                                              │      // Extract the length of the R element.                                             
    unsigned int lenR = sig[3];                                                          │      unsigned int lenR = sig[3];                                                         
                                                                                         │                                                                                          
    // Make sure the length of the S element is still inside the signature.              │      // Make sure the length of the S element is still inside the signature.             
    if (5 + lenR >= sig.size()) return false;                                            │      if (5 + lenR >= sig.size()) return false;                                           
                                                                                         │                                                                                          
    // Extract the length of the S element.                                              │      // Extract the length of the S element.                                             
    unsigned int lenS = sig[5 + lenR];                                                   │      unsigned int lenS = sig[5 + lenR];                                                  
                                                                                         │                                                                                          
    // Verify that the length of the signature matches the sum of the length             │      // Verify that the length of the signature matches the sum of the length            
    // of the elements.                                                                  │      // of the elements.                                                                 
    if ((size_t)(lenR + lenS + 7) != sig.size()) return false;                           │      if ((size_t)(lenR + lenS + 7) != sig.size()) return false;                          
                                                                                         │                                                                                          
    // Check whether the R element is an integer.                                        │      // Check whether the R element is an integer.                                       
    if (sig[2] != 0x02) return false;                                                    │      if (sig[2] != 0x02) return false;                                                   
                                                                                         │                                                                                          
    // Zero-length integers are not allowed for R.                                       │      // Zero-length integers are not allowed for R.                                      
    if (lenR == 0) return false;                                                         │      if (lenR == 0) return false;                                                        
                                                                                         │                                                                                          
    // Negative numbers are not allowed for R.                                           │      // Negative numbers are not allowed for R.                                          
    if (sig[4] & 0x80) return false;                                                     │      if (sig[4] & 0x80) return false;                                                    
                                                                                         │                                                                                          
    // Null bytes at the start of R are not allowed, unless R would                      │      // Null bytes at the start of R are not allowed, unless R would                     
    // otherwise be interpreted as a negative number.                                    │      // otherwise be interpreted as a negative number.                                   
    if (lenR > 1 && (sig[4] == 0x00) && !(sig[5] & 0x80)) return false;                  │      if (lenR > 1 && (sig[4] == 0x00) && !(sig[5] & 0x80)) return false;                 
                                                                                         │                                                                                          
    // Check whether the S element is an integer.                                        │      // Check whether the S element is an integer.                                       
    if (sig[lenR + 4] != 0x02) return false;                                             │      if (sig[lenR + 4] != 0x02) return false;                                            
                                                                                         │                                                                                          
    // Zero-length integers are not allowed for S.                                       │      // Zero-length integers are not allowed for S.                                      
    if (lenS == 0) return false;                                                         │      if (lenS == 0) return false;                                                        
                                                                                         │                                                                                          
    // Negative numbers are not allowed for S.                                           │      // Negative numbers are not allowed for S.                                          
    if (sig[lenR + 6] & 0x80) return false;                                              │      if (sig[lenR + 6] & 0x80) return false;                                             
                                                                                         │                                                                                          
    // Null bytes at the start of S are not allowed, unless S would otherwise be         │      // Null bytes at the start of S are not allowed, unless S would otherwise be        
    // interpreted as a negative number.                                                 │      // interpreted as a negative number.                                                
    if (lenS > 1 && (sig[lenR + 6] == 0x00) && !(sig[lenR + 7] & 0x80)) return false;    │      if (lenS > 1 && (sig[lenR + 6] == 0x00) && !(sig[lenR + 7] & 0x80)) return false;   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/addrman.cpp:243                                                            │ bitcoin/src/addrman.cpp:542                                                              
                                                                                         │                                                                                          
                                                                                         │      AssertLockHeld(cs);                                                                 
                                                                                         │                                                                                          
    if (!addr.IsRoutable())                                                              │      if (!addr.IsRoutable())                                                             
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    bool fNew = false;                                                                   │                                                                                          
    int nId;                                                                             │      int nId;                                                                            
    CAddrInfo* pinfo = Find(addr, &nId);                                                 │      AddrInfo* pinfo = Find(addr, &nId);                                                 
                                                                                         │                                                                                          
    // Do not set a penalty for a source's self-announcement                             │      // Do not set a penalty for a source's self-announcement                            
    if (addr == source) {                                                                │      if (addr == source) {                                                               
        nTimePenalty = 0;                                                                │          nTimePenalty = 0;                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (pinfo) {                                                                         │      if (pinfo) {                                                                        
        // periodically update nTime                                                     │          // periodically update nTime                                                    
        bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60);         │          bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60);        
        int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60);           │          int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60);          
        if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval  │          if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval 
            pinfo->nTime = std::max((int64_t)0, addr.nTime - nTimePenalty);              │              pinfo->nTime = std::max((int64_t)0, addr.nTime - nTimePenalty);             
                                                                                         │                                                                                          
        // add services                                                                  │          // add services                                                                 
        pinfo->nServices = ServiceFlags(pinfo->nServices | addr.nServices);              │          pinfo->nServices = ServiceFlags(pinfo->nServices | addr.nServices);             
                                                                                         │                                                                                          
        // do not update if no new information is present                                │          // do not update if no new information is present                               
        if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime))                 │          if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime))                
            return false;                                                                │              return false;                                                               
                                                                                         │                                                                                          
        // do not update if the entry was already in the "tried" table                   │          // do not update if the entry was already in the "tried" table                  
        if (pinfo->fInTried)                                                             │          if (pinfo->fInTried)                                                            
            return false;                                                                │              return false;                                                               
                                                                                         │                                                                                          
        // do not update if the max reference count is reached                           │          // do not update if the max reference count is reached                          
        if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS)                         │          if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS)                        
            return false;                                                                │              return false;                                                               
                                                                                         │                                                                                          
        // stochastic test: previous nRefCount == N: 2^N times harder to increase it     │          // stochastic test: previous nRefCount == N: 2^N times harder to increase it    
        int nFactor = 1;                                                                 │          int nFactor = 1;                                                                
        for (int n = 0; n < pinfo->nRefCount; n++)                                       │          for (int n = 0; n < pinfo->nRefCount; n++)                                      
            nFactor *= 2;                                                                │              nFactor *= 2;                                                               
        if (nFactor > 1 && (RandomInt(nFactor) != 0))                                    │          if (nFactor > 1 && (insecure_rand.randrange(nFactor) != 0))                     
            return false;                                                                │              return false;                                                               
    } else {                                                                             │      } else {                                                                            
        pinfo = Create(addr, source, &nId);                                              │          pinfo = Create(addr, source, &nId);                                             
        pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty);       │          pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty);      
        nNew++;                                                                          │          nNew++;                                                                         
        fNew = true;                                                                     │                                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    int nUBucket = pinfo->GetNewBucket(nKey, source);                                    │      int nUBucket = pinfo->GetNewBucket(nKey, source, m_netgroupman);                    
    int nUBucketPos = pinfo->GetBucketPosition(nKey, true, nUBucket);                    │      int nUBucketPos = pinfo->GetBucketPosition(nKey, true, nUBucket);                   
                                                                                         │      bool fInsert = vvNew[nUBucket][nUBucketPos] == -1;                                  
    if (vvNew[nUBucket][nUBucketPos] != nId) {                                           │      if (vvNew[nUBucket][nUBucketPos] != nId) {                                          
        bool fInsert = vvNew[nUBucket][nUBucketPos] == -1;                               │                                                                                          
        if (!fInsert) {                                                                  │          if (!fInsert) {                                                                 
            CAddrInfo& infoExisting = mapInfo[vvNew[nUBucket][nUBucketPos]];             │              AddrInfo& infoExisting = mapInfo[vvNew[nUBucket][nUBucketPos]];             
            if (infoExisting.IsTerrible() || (infoExisting.nRefCount > 1 && pinfo->nRefC │              if (infoExisting.IsTerrible() || (infoExisting.nRefCount > 1 && pinfo->nRefC
                // Overwrite the existing new table entry.                               │                  // Overwrite the existing new table entry.                              
                fInsert = true;                                                          │                  fInsert = true;                                                         
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        if (fInsert) {                                                                   │          if (fInsert) {                                                                  
            ClearNew(nUBucket, nUBucketPos);                                             │              ClearNew(nUBucket, nUBucketPos);                                            
            pinfo->nRefCount++;                                                          │              pinfo->nRefCount++;                                                         
            vvNew[nUBucket][nUBucketPos] = nId;                                          │              vvNew[nUBucket][nUBucketPos] = nId;                                         
                                                                                         │              LogPrint(BCLog::ADDRMAN, "Added %s mapped to AS%i to new[%i][%i]\n",        
                                                                                         │                       addr.ToString(), m_netgroupman.GetMappedAS(addr), nUBucket, nUBucke
        } else {                                                                         │          } else {                                                                        
            if (pinfo->nRefCount == 0) {                                                 │              if (pinfo->nRefCount == 0) {                                                
                Delete(nId);                                                             │                  Delete(nId);                                                            
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return fNew;                                                                         │      return fInsert;                                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:258                                                  │ bitcoin/src/test/crypto_tests.cpp:261                                                    
                                                                                         │                                                                                          
    TestSHA512("",                                                                       │      TestSHA512("",                                                                      
               "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"        │                 "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"       
               "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e");      │                 "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e");     
    TestSHA512("abc",                                                                    │      TestSHA512("abc",                                                                   
               "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"        │                 "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"       
               "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");      │                 "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");     
    TestSHA512("message digest",                                                         │      TestSHA512("message digest",                                                        
               "107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f33"        │                 "107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f33"       
               "09e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c");      │                 "09e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c");     
    TestSHA512("secure hash algorithm",                                                  │      TestSHA512("secure hash algorithm",                                                 
               "7746d91f3de30c68cec0dd693120a7e8b04d8073cb699bdce1a3f64127bca7a3"        │                 "7746d91f3de30c68cec0dd693120a7e8b04d8073cb699bdce1a3f64127bca7a3"       
               "d5db502e814bb63c063a7a5043b2df87c61133395f4ad1edca7fcf4b30c3236e");      │                 "d5db502e814bb63c063a7a5043b2df87c61133395f4ad1edca7fcf4b30c3236e");     
    TestSHA512("SHA512 is considered to be safe",                                        │      TestSHA512("SHA512 is considered to be safe",                                       
               "099e6468d889e1c79092a89ae925a9499b5408e01b66cb5b0a3bd0dfa51a9964"        │                 "099e6468d889e1c79092a89ae925a9499b5408e01b66cb5b0a3bd0dfa51a9964"       
               "6b4a3901caab1318189f74cd8cf2e941829012f2449df52067d3dd5b978456c2");      │                 "6b4a3901caab1318189f74cd8cf2e941829012f2449df52067d3dd5b978456c2");     
    TestSHA512("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",               │      TestSHA512("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",              
               "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c335"        │                 "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c335"       
               "96fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445");      │                 "96fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445");     
    TestSHA512("For this sample, this 63-byte string will be used as input data",        │      TestSHA512("For this sample, this 63-byte string will be used as input data",       
               "b3de4afbc516d2478fe9b518d063bda6c8dd65fc38402dd81d1eb7364e72fb6e"        │                 "b3de4afbc516d2478fe9b518d063bda6c8dd65fc38402dd81d1eb7364e72fb6e"       
               "6663cf6d2771c8f5a6da09601712fb3d2a36c6ffea3e28b0818b05b0a8660766");      │                 "6663cf6d2771c8f5a6da09601712fb3d2a36c6ffea3e28b0818b05b0a8660766");     
    TestSHA512("This is exactly 64 bytes long, not counting the terminating byte",       │      TestSHA512("This is exactly 64 bytes long, not counting the terminating byte",      
               "70aefeaa0e7ac4f8fe17532d7185a289bee3b428d950c14fa8b713ca09814a38"        │                 "70aefeaa0e7ac4f8fe17532d7185a289bee3b428d950c14fa8b713ca09814a38"       
               "7d245870e007a80ad97c369d193e41701aa07f3221d15f0e65a1ff970cedf030");      │                 "7d245870e007a80ad97c369d193e41701aa07f3221d15f0e65a1ff970cedf030");     
    TestSHA512("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno"        │      TestSHA512("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno"       
               "ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",                       │                 "ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",                      
               "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"        │                 "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"       
               "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909");      │                 "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909");     
    TestSHA512(std::string(1000000, 'a'),                                                │      TestSHA512(std::string(1000000, 'a'),                                               
               "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"        │                 "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"       
               "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b");      │                 "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b");     
    TestSHA512(test1,                                                                    │      TestSHA512(test1,                                                                   
               "40cac46c147e6131c5193dd5f34e9d8bb4951395f27b08c558c65ff4ba2de594"        │                 "40cac46c147e6131c5193dd5f34e9d8bb4951395f27b08c558c65ff4ba2de594"       
               "37de8c3ef5459d76a52cedc02dc499a3c9ed9dedbfb3281afd9653b8a112fafc");      │                 "37de8c3ef5459d76a52cedc02dc499a3c9ed9dedbfb3281afd9653b8a112fafc");     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/streams_tests.cpp:16                                                   │ dogecoin/src/test/streams_tests.cpp:18                                                   
                                                                                         │                                                                                          
    unsigned char a(1);                                                                  │      unsigned char a(1);                                                                 
    unsigned char b(2);                                                                  │      unsigned char b(2);                                                                 
    unsigned char bytes[] = { 3, 4, 5, 6 };                                              │      unsigned char bytes[] = { 3, 4, 5, 6 };                                             
    std::vector<unsigned char> vch;                                                      │      std::vector<unsigned char> vch;                                                     
                                                                                         │                                                                                          
    // Each test runs twice. Serializing a second time at the same starting              │      // Each test runs twice. Serializing a second time at the same starting             
    // point should yield the same results, even if the first test grew the              │      // point should yield the same results, even if the first test grew the             
    // vector.                                                                           │      // vector.                                                                          
                                                                                         │                                                                                          
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));                            │      BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));                           
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));                            │      BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));                           
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));                      │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));                     
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));                      │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));                     
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    vch.resize(5, 0);                                                                    │      vch.resize(5, 0);                                                                   
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));                   │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));                  
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));                   │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));                  
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    vch.resize(4, 0);                                                                    │      vch.resize(4, 0);                                                                   
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 3, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 3, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));                   │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));                  
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 3, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 3, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));                   │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));                  
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    vch.resize(4, 0);                                                                    │      vch.resize(4, 0);                                                                   
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 4, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 4, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));                │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));               
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 4, a, b);                        │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 4, a, b);                       
    BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));                │      BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));               
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, bytes);                       │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, FLATDATA(bytes));            
    BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));                      │      BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));                     
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, bytes);                       │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 0, FLATDATA(bytes));            
    BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));                      │      BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));                     
    vch.clear();                                                                         │      vch.clear();                                                                        
                                                                                         │                                                                                          
    vch.resize(4, 8);                                                                    │      vch.resize(4, 8);                                                                   
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, bytes, b);                 │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, FLATDATA(bytes), b);      
    BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));          │      BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));         
    CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, bytes, b);                 │      CVectorWriter(SER_NETWORK, INIT_PROTO_VERSION, vch, 2, a, FLATDATA(bytes), b);      
    BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));          │      BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));         
    vch.clear();                                                                         │      vch.clear();                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/common/bloom.cpp:95                                                         │ dogecoin/src/bloom.cpp:135                                                               
                                                                                         │                                                                                          
    bool fFound = false;                                                                 │      bool fFound = false;                                                                
    // Match if the filter contains the hash of tx                                       │      // Match if the filter contains the hash of tx                                      
    //  for finding tx when they appear in a block                                       │      //  for finding tx when they appear in a block                                      
    if (vData.empty()) // zero-size = "match-all" filter                                 │      if (isFull)                                                                         
        return true;                                                                     │          return true;                                                                    
                                                                                         │      if (isEmpty)                                                                        
                                                                                         │          return false;                                                                   
    const uint256& hash = tx.GetHash();                                                  │      const uint256& hash = tx.GetHash();                                                 
    if (contains(hash))                                                                  │      if (contains(hash))                                                                 
        fFound = true;                                                                   │          fFound = true;                                                                  
                                                                                         │                                                                                          
    for (unsigned int i = 0; i < tx.vout.size(); i++)                                    │      for (unsigned int i = 0; i < tx.vout.size(); i++)                                   
    {                                                                                    │      {                                                                                   
        const CTxOut& txout = tx.vout[i];                                                │          const CTxOut& txout = tx.vout[i];                                               
        // Match if the filter contains any arbitrary script data element in any scriptP │          // Match if the filter contains any arbitrary script data element in any scriptP
        // If this matches, also add the specific output that was matched.               │          // If this matches, also add the specific output that was matched.              
        // This means clients don't have to update the filter themselves when a new rele │          // This means clients don't have to update the filter themselves when a new rele
        // is discovered in order to find spending transactions, which avoids round-trip │          // is discovered in order to find spending transactions, which avoids round-trip
        CScript::const_iterator pc = txout.scriptPubKey.begin();                         │          CScript::const_iterator pc = txout.scriptPubKey.begin();                        
        std::vector<unsigned char> data;                                                 │          std::vector<unsigned char> data;                                                
        while (pc < txout.scriptPubKey.end())                                            │          while (pc < txout.scriptPubKey.end())                                           
        {                                                                                │          {                                                                               
            opcodetype opcode;                                                           │              opcodetype opcode;                                                          
            if (!txout.scriptPubKey.GetOp(pc, opcode, data))                             │              if (!txout.scriptPubKey.GetOp(pc, opcode, data))                            
                break;                                                                   │                  break;                                                                  
            if (data.size() != 0 && contains(data))                                      │              if (data.size() != 0 && contains(data))                                     
            {                                                                            │              {                                                                           
                fFound = true;                                                           │                  fFound = true;                                                          
                if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_ALL)                    │                  if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_ALL)                   
                    insert(COutPoint(hash, i));                                          │                      insert(COutPoint(hash, i));                                         
                else if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_P2PUBKEY_ONLY)     │                  else if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_P2PUBKEY_ONLY)    
                {                                                                        │                  {                                                                       
                                                                                         │                      txnouttype type;                                                    
                    std::vector<std::vector<unsigned char> > vSolutions;                 │                      std::vector<std::vector<unsigned char> > vSolutions;                
                    TxoutType type = Solver(txout.scriptPubKey, vSolutions);             │                      if (Solver(txout.scriptPubKey, type, vSolutions) &&                 
                    if (type == TxoutType::PUBKEY || type == TxoutType::MULTISIG) {      │                              (type == TX_PUBKEY || type == TX_MULTISIG))                 
                        insert(COutPoint(hash, i));                                      │                          insert(COutPoint(hash, i));                                     
                    }                                                                    │                                                                                          
                }                                                                        │                  }                                                                       
                break;                                                                   │                  break;                                                                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (fFound)                                                                          │      if (fFound)                                                                         
        return true;                                                                     │          return true;                                                                    
                                                                                         │                                                                                          
    for (const CTxIn& txin : tx.vin)                                                     │      BOOST_FOREACH(const CTxIn& txin, tx.vin)                                            
    {                                                                                    │      {                                                                                   
        // Match if the filter contains an outpoint tx spends                            │          // Match if the filter contains an outpoint tx spends                           
        if (contains(txin.prevout))                                                      │          if (contains(txin.prevout))                                                     
            return true;                                                                 │              return true;                                                                
                                                                                         │                                                                                          
        // Match if the filter contains any arbitrary script data element in any scriptS │          // Match if the filter contains any arbitrary script data element in any scriptS
        CScript::const_iterator pc = txin.scriptSig.begin();                             │          CScript::const_iterator pc = txin.scriptSig.begin();                            
        std::vector<unsigned char> data;                                                 │          std::vector<unsigned char> data;                                                
        while (pc < txin.scriptSig.end())                                                │          while (pc < txin.scriptSig.end())                                               
        {                                                                                │          {                                                                               
            opcodetype opcode;                                                           │              opcodetype opcode;                                                          
            if (!txin.scriptSig.GetOp(pc, opcode, data))                                 │              if (!txin.scriptSig.GetOp(pc, opcode, data))                                
                break;                                                                   │                  break;                                                                  
            if (data.size() != 0 && contains(data))                                      │              if (data.size() != 0 && contains(data))                                     
                return true;                                                             │                  return true;                                                            
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return false;                                                                        │      return false;                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/blockchain.cpp:551                                                     │ dogecoin/src/rpc/blockchain.cpp:487                                                      
                                                                                         │                                                                                          
    if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {       │      if (request.fHelp || request.params.size() < 1 || request.params.size() > 2) {      
        throw runtime_error(                                                             │          throw runtime_error(                                                            
            "getmempooldescendants txid (verbose)\n"                                     │              "getmempoolancestors txid (verbose)\n"                                      
            "\nIf txid is in the mempool, returns all in-mempool descendants.\n"         │              "\nIf txid is in the mempool, returns all in-mempool ancestors.\n"          
            "\nArguments:\n"                                                             │              "\nArguments:\n"                                                            
            "1. \"txid\"                 (string, required) The transaction id (must be  │              "1. \"txid\"                 (string, required) The transaction id (must be 
            "2. verbose                  (boolean, optional, default=false) True for a j │              "2. verbose                  (boolean, optional, default=false) True for a j
            "\nResult (for verbose=false):\n"                                            │              "\nResult (for verbose=false):\n"                                           
            "[                       (json array of strings)\n"                          │              "[                       (json array of strings)\n"                         
            "  \"transactionid\"           (string) The transaction id of an in-mempool  │              "  \"transactionid\"           (string) The transaction id of an in-mempool 
            "  ,...\n"                                                                   │              "  ,...\n"                                                                  
            "]\n"                                                                        │              "]\n"                                                                       
            "\nResult (for verbose=true):\n"                                             │              "\nResult (for verbose=true):\n"                                            
            "{                           (json object)\n"                                │              "{                           (json object)\n"                               
            "  \"transactionid\" : {       (json object)\n"                              │              "  \"transactionid\" : {       (json object)\n"                             
            + EntryDescriptionString()                                                   │              + EntryDescriptionString()                                                  
            + "  }, ...\n"                                                               │              + "  }, ...\n"                                                              
            "}\n"                                                                        │              "}\n"                                                                       
            "\nExamples:\n"                                                              │              "\nExamples:\n"                                                             
            + HelpExampleCli("getmempooldescendants", "\"mytxid\"")                      │              + HelpExampleCli("getmempoolancestors", "\"mytxid\"")                       
            + HelpExampleRpc("getmempooldescendants", "\"mytxid\"")                      │              + HelpExampleRpc("getmempoolancestors", "\"mytxid\"")                       
            );                                                                           │              );                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    bool fVerbose = false;                                                               │      bool fVerbose = false;                                                              
    if (request.params.size() > 1)                                                       │      if (request.params.size() > 1)                                                      
        fVerbose = request.params[1].get_bool();                                         │          fVerbose = request.params[1].get_bool();                                        
                                                                                         │                                                                                          
    uint256 hash = ParseHashV(request.params[0], "parameter 1");                         │      uint256 hash = ParseHashV(request.params[0], "parameter 1");                        
                                                                                         │                                                                                          
    LOCK(mempool.cs);                                                                    │      LOCK(mempool.cs);                                                                   
                                                                                         │                                                                                          
    CTxMemPool::txiter it = mempool.mapTx.find(hash);                                    │      CTxMemPool::txiter it = mempool.mapTx.find(hash);                                   
    if (it == mempool.mapTx.end()) {                                                     │      if (it == mempool.mapTx.end()) {                                                    
        throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");    │          throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    CTxMemPool::setEntries setDescendants;                                               │      CTxMemPool::setEntries setAncestors;                                                
    mempool.CalculateDescendants(it, setDescendants);                                    │      uint64_t noLimit = std::numeric_limits<uint64_t>::max();                            
    // CTxMemPool::CalculateDescendants will include the given tx                        │      std::string dummy;                                                                  
    setDescendants.erase(it);                                                            │      mempool.CalculateMemPoolAncestors(*it, setAncestors, noLimit, noLimit, noLimit, noLi
                                                                                         │                                                                                          
    if (!fVerbose) {                                                                     │      if (!fVerbose) {                                                                    
        UniValue o(UniValue::VARR);                                                      │          UniValue o(UniValue::VARR);                                                     
        BOOST_FOREACH(CTxMemPool::txiter descendantIt, setDescendants) {                 │          BOOST_FOREACH(CTxMemPool::txiter ancestorIt, setAncestors) {                    
            o.push_back(descendantIt->GetTx().GetHash().ToString());                     │              o.push_back(ancestorIt->GetTx().GetHash().ToString());                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        return o;                                                                        │          return o;                                                                       
    } else {                                                                             │      } else {                                                                            
        UniValue o(UniValue::VOBJ);                                                      │          UniValue o(UniValue::VOBJ);                                                     
        BOOST_FOREACH(CTxMemPool::txiter descendantIt, setDescendants) {                 │          BOOST_FOREACH(CTxMemPool::txiter ancestorIt, setAncestors) {                    
            const CTxMemPoolEntry &e = *descendantIt;                                    │              const CTxMemPoolEntry &e = *ancestorIt;                                     
            const uint256& _hash = e.GetTx().GetHash();                                  │              const uint256& _hash = e.GetTx().GetHash();                                 
            UniValue info(UniValue::VOBJ);                                               │              UniValue info(UniValue::VOBJ);                                              
            entryToJSON(info, e);                                                        │              entryToJSON(info, e);                                                       
            o.pushKV(_hash.ToString(), info);                                            │              o.pushKV(_hash.ToString(), info);                                           
        }                                                                                │          }                                                                               
        return o;                                                                        │          return o;                                                                       
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/backup.cpp:1387                                                  │ bitcoin/src/wallet/rpc/backup.cpp:1681                                                   
                                                                                         │                                                                                          
        int64_t scannedTime = pwallet->RescanFromTime(nLowestTimestamp, reserver, true / │          int64_t scanned_time = pwallet->RescanFromTime(lowest_timestamp, reserver, true 
        {                                                                                │          {                                                                               
            LOCK(pwallet->cs_wallet);                                                    │              LOCK(pwallet->cs_wallet);                                                   
            pwallet->ReacceptWalletTransactions();                                       │              pwallet->ReacceptWalletTransactions();                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (pwallet->IsAbortingRescan()) {                                               │          if (pwallet->IsAbortingRescan()) {                                              
            throw JSONRPCError(RPC_MISC_ERROR, "Rescan aborted by user.");               │              throw JSONRPCError(RPC_MISC_ERROR, "Rescan aborted by user.");              
        }                                                                                │          }                                                                               
        if (scannedTime > nLowestTimestamp) {                                            │                                                                                          
                                                                                         │          if (scanned_time > lowest_timestamp) {                                          
            std::vector<UniValue> results = response.getValues();                        │              std::vector<UniValue> results = response.getValues();                       
            response.clear();                                                            │              response.clear();                                                           
            response.setArray();                                                         │              response.setArray();                                                        
            size_t i = 0;                                                                │                                                                                          
            for (const UniValue& request : requests.getValues()) {                       │              // Compose the response                                                     
                // If key creation date is within the successfully scanned               │              for (unsigned int i = 0; i < requests.size(); ++i) {                        
                                                                                         │                  const UniValue& request = requests.getValues().at(i);                   
                                                                                         │                                                                                          
                                                                                         │                  // If the descriptor timestamp is within the successfully scanned       
                // range, or if the import result already has an error set, let          │                  // range, or if the import result already has an error set, let         
                // the result stand unmodified. Otherwise replace the result             │                  // the result stand unmodified. Otherwise replace the result            
                // with an error message.                                                │                  // with an error message.                                               
                if (scannedTime <= GetImportTimestamp(request, now) || results.at(i).exi │                  if (scanned_time <= GetImportTimestamp(request, now) || results.at(i).ex
                    response.push_back(results.at(i));                                   │                      response.push_back(results.at(i));                                  
                } else {                                                                 │                  } else {                                                                
                    UniValue result = UniValue(UniValue::VOBJ);                          │                      UniValue result = UniValue(UniValue::VOBJ);                         
                    result.pushKV("success", UniValue(false));                           │                      result.pushKV("success", UniValue(false));                          
                    result.pushKV(                                                       │                      result.pushKV(                                                      
                        "error",                                                         │                          "error",                                                        
                        JSONRPCError(                                                    │                          JSONRPCError(                                                   
                            RPC_MISC_ERROR,                                              │                              RPC_MISC_ERROR,                                             
                            strprintf("Rescan failed for key with creation timestamp %d. │                              strprintf("Rescan failed for descriptor with timestamp %d. T
                                      "block from time %d, which is after or within %d s │                                        "block from time %d, which is after or within %d s
                                      "could contain transactions pertaining to the key. │                                        "could contain transactions pertaining to the desc
                                      "and coins using this key may not appear in the wa │                                        "and coins using this desc may not appear in the w
                                      "caused by pruning or data corruption (see bitcoin │                                        "caused by pruning or data corruption (see bitcoin
                                      "be dealt with by downloading and rescanning the r │                                        "be dealt with by downloading and rescanning the r
                                      "option and rescanblockchain RPC).",               │                                        "option and rescanblockchain RPC).",              
                                GetImportTimestamp(request, now), scannedTime - TIMESTAM │                                  GetImportTimestamp(request, now), scanned_time - TIMESTA
                    response.push_back(std::move(result));                               │                      response.push_back(std::move(result));                              
                }                                                                        │                  }                                                                       
                ++i;                                                                     │                                                                                          
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:68                                            │ bitcoin/src/test/arith_uint256_tests.cpp:69                                              
                                                                                         │                                                                                          
    BOOST_CHECK(1 == 0+1);                                                               │      BOOST_CHECK(1 == 0+1);                                                              
    // constructor arith_uint256(vector<char>):                                          │      // constructor arith_uint256(vector<char>):                                         
    BOOST_CHECK(R1L.ToString() == ArrayToString(R1Array,32));                            │      BOOST_CHECK(R1L.ToString() == ArrayToString(R1Array,32));                           
    BOOST_CHECK(R2L.ToString() == ArrayToString(R2Array,32));                            │      BOOST_CHECK(R2L.ToString() == ArrayToString(R2Array,32));                           
    BOOST_CHECK(ZeroL.ToString() == ArrayToString(ZeroArray,32));                        │      BOOST_CHECK(ZeroL.ToString() == ArrayToString(ZeroArray,32));                       
    BOOST_CHECK(OneL.ToString() == ArrayToString(OneArray,32));                          │      BOOST_CHECK(OneL.ToString() == ArrayToString(OneArray,32));                         
    BOOST_CHECK(MaxL.ToString() == ArrayToString(MaxArray,32));                          │      BOOST_CHECK(MaxL.ToString() == ArrayToString(MaxArray,32));                         
    BOOST_CHECK(OneL.ToString() != ArrayToString(ZeroArray,32));                         │      BOOST_CHECK(OneL.ToString() != ArrayToString(ZeroArray,32));                        
                                                                                         │                                                                                          
    // == and !=                                                                         │      // == and !=                                                                        
    BOOST_CHECK(R1L != R2L);                                                             │      BOOST_CHECK(R1L != R2L);                                                            
    BOOST_CHECK(ZeroL != OneL);                                                          │      BOOST_CHECK(ZeroL != OneL);                                                         
    BOOST_CHECK(OneL != ZeroL);                                                          │      BOOST_CHECK(OneL != ZeroL);                                                         
    BOOST_CHECK(MaxL != ZeroL);                                                          │      BOOST_CHECK(MaxL != ZeroL);                                                         
    BOOST_CHECK(~MaxL == ZeroL);                                                         │      BOOST_CHECK(~MaxL == ZeroL);                                                        
    BOOST_CHECK( ((R1L ^ R2L) ^ R1L) == R2L);                                            │      BOOST_CHECK( ((R1L ^ R2L) ^ R1L) == R2L);                                           
                                                                                         │                                                                                          
    uint64_t Tmp64 = 0xc4dab720d9c7acaaULL;                                              │      uint64_t Tmp64 = 0xc4dab720d9c7acaaULL;                                             
    for (unsigned int i = 0; i < 256; ++i)                                               │      for (unsigned int i = 0; i < 256; ++i)                                              
    {                                                                                    │      {                                                                                   
        BOOST_CHECK(ZeroL != (OneL << i));                                               │          BOOST_CHECK(ZeroL != (OneL << i));                                              
        BOOST_CHECK((OneL << i) != ZeroL);                                               │          BOOST_CHECK((OneL << i) != ZeroL);                                              
        BOOST_CHECK(R1L != (R1L ^ (OneL << i)));                                         │          BOOST_CHECK(R1L != (R1L ^ (OneL << i)));                                        
        BOOST_CHECK(((arith_uint256(Tmp64) ^ (OneL << i) ) != Tmp64 ));                  │          BOOST_CHECK(((arith_uint256(Tmp64) ^ (OneL << i) ) != Tmp64 ));                 
    }                                                                                    │      }                                                                                   
    BOOST_CHECK(ZeroL == (OneL << 256));                                                 │      BOOST_CHECK(ZeroL == (OneL << 256));                                                
                                                                                         │                                                                                          
    // String Constructor and Copy Constructor                                           │      // String Constructor and Copy Constructor                                          
    BOOST_CHECK(arith_uint256("0x"+R1L.ToString()) == R1L);                              │      BOOST_CHECK(arith_uint256("0x"+R1L.ToString()) == R1L);                             
    BOOST_CHECK(arith_uint256("0x"+R2L.ToString()) == R2L);                              │      BOOST_CHECK(arith_uint256("0x"+R2L.ToString()) == R2L);                             
    BOOST_CHECK(arith_uint256("0x"+ZeroL.ToString()) == ZeroL);                          │      BOOST_CHECK(arith_uint256("0x"+ZeroL.ToString()) == ZeroL);                         
    BOOST_CHECK(arith_uint256("0x"+OneL.ToString()) == OneL);                            │      BOOST_CHECK(arith_uint256("0x"+OneL.ToString()) == OneL);                           
    BOOST_CHECK(arith_uint256("0x"+MaxL.ToString()) == MaxL);                            │      BOOST_CHECK(arith_uint256("0x"+MaxL.ToString()) == MaxL);                           
    BOOST_CHECK(arith_uint256(R1L.ToString()) == R1L);                                   │      BOOST_CHECK(arith_uint256(R1L.ToString()) == R1L);                                  
    BOOST_CHECK(arith_uint256("   0x"+R1L.ToString()+"   ") == R1L);                     │      BOOST_CHECK(arith_uint256("   0x"+R1L.ToString()+"   ") == R1L);                    
    BOOST_CHECK(arith_uint256("") == ZeroL);                                             │      BOOST_CHECK(arith_uint256("") == ZeroL);                                            
    BOOST_CHECK(R1L == arith_uint256(R1ArrayHex));                                       │      BOOST_CHECK(R1L == arith_uint256(R1ArrayHex));                                      
    BOOST_CHECK(arith_uint256(R1L) == R1L);                                              │      BOOST_CHECK(arith_uint256(R1L) == R1L);                                             
    BOOST_CHECK((arith_uint256(R1L^R2L)^R2L) == R1L);                                    │      BOOST_CHECK((arith_uint256(R1L^R2L)^R2L) == R1L);                                   
    BOOST_CHECK(arith_uint256(ZeroL) == ZeroL);                                          │      BOOST_CHECK(arith_uint256(ZeroL) == ZeroL);                                         
    BOOST_CHECK(arith_uint256(OneL) == OneL);                                            │      BOOST_CHECK(arith_uint256(OneL) == OneL);                                           
                                                                                         │                                                                                          
    // uint64_t constructor                                                              │      // uint64_t constructor                                                             
    BOOST_CHECK( (R1L & arith_uint256("0xffffffffffffffff")) == arith_uint256(R1LLow64)) │      BOOST_CHECK( (R1L & arith_uint256("0xffffffffffffffff")) == arith_uint256(R1LLow64))
    BOOST_CHECK(ZeroL == arith_uint256(0));                                              │      BOOST_CHECK(ZeroL == arith_uint256(0));                                             
    BOOST_CHECK(OneL == arith_uint256(1));                                               │      BOOST_CHECK(OneL == arith_uint256(1));                                              
    BOOST_CHECK(arith_uint256("0xffffffffffffffff") == arith_uint256(0xffffffffffffffffU │      BOOST_CHECK(arith_uint256("0xffffffffffffffff") == arith_uint256(0xffffffffffffffffU
                                                                                         │                                                                                          
    // Assignment (from base_uint)                                                       │      // Assignment (from base_uint)                                                      
    arith_uint256 tmpL = ~ZeroL; BOOST_CHECK(tmpL == ~ZeroL);                            │      arith_uint256 tmpL = ~ZeroL; BOOST_CHECK(tmpL == ~ZeroL);                           
    tmpL = ~OneL; BOOST_CHECK(tmpL == ~OneL);                                            │      tmpL = ~OneL; BOOST_CHECK(tmpL == ~OneL);                                           
    tmpL = ~R1L; BOOST_CHECK(tmpL == ~R1L);                                              │      tmpL = ~R1L; BOOST_CHECK(tmpL == ~R1L);                                             
    tmpL = ~R2L; BOOST_CHECK(tmpL == ~R2L);                                              │      tmpL = ~R2L; BOOST_CHECK(tmpL == ~R2L);                                             
    tmpL = ~MaxL; BOOST_CHECK(tmpL == ~MaxL);                                            │      tmpL = ~MaxL; BOOST_CHECK(tmpL == ~MaxL);                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rpc/mempool.cpp:493                                                         │ bitcoin/src/rpc/mempool.cpp:429                                                          
                                                                                         │                                                                                          
    return RPCHelpMan{"getmempooldescendants",                                           │      return RPCHelpMan{"getmempoolancestors",                                            
        "\nIf txid is in the mempool, returns all in-mempool descendants.\n",            │          "\nIf txid is in the mempool, returns all in-mempool ancestors.\n",             
        {                                                                                │          {                                                                               
            {"txid", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The transaction id (m │              {"txid", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The transaction id (m
            {"verbose", RPCArg::Type::BOOL, RPCArg::Default{false}, "True for a json obj │              {"verbose", RPCArg::Type::BOOL, RPCArg::Default{false}, "True for a json obj
        },                                                                               │          },                                                                              
        {                                                                                │          {                                                                               
            RPCResult{"for verbose = false",                                             │              RPCResult{"for verbose = false",                                            
                RPCResult::Type::ARR, "", "",                                            │                  RPCResult::Type::ARR, "", "",                                           
                {{RPCResult::Type::STR_HEX, "", "The transaction id of an in-mempool des │                  {{RPCResult::Type::STR_HEX, "", "The transaction id of an in-mempool anc
            RPCResult{"for verbose = true",                                              │              RPCResult{"for verbose = true",                                             
                RPCResult::Type::OBJ_DYN, "", "",                                        │                  RPCResult::Type::OBJ_DYN, "", "",                                       
                {                                                                        │                  {                                                                       
                    {RPCResult::Type::OBJ, "transactionid", "", MempoolEntryDescription( │                      {RPCResult::Type::OBJ, "transactionid", "", MempoolEntryDescription(
                }},                                                                      │                  }},                                                                     
        },                                                                               │          },                                                                              
        RPCExamples{                                                                     │          RPCExamples{                                                                    
            HelpExampleCli("getmempooldescendants", "\"mytxid\"")                        │              HelpExampleCli("getmempoolancestors", "\"mytxid\"")                         
            + HelpExampleRpc("getmempooldescendants", "\"mytxid\"")                      │              + HelpExampleRpc("getmempoolancestors", "\"mytxid\"")                       
        },                                                                               │          },                                                                              
        [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue           │          [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue          
{                                                                                        │  {                                                                                       
    bool fVerbose = false;                                                               │      bool fVerbose = false;                                                              
    if (!request.params[1].isNull())                                                     │      if (!request.params[1].isNull())                                                    
        fVerbose = request.params[1].get_bool();                                         │          fVerbose = request.params[1].get_bool();                                        
                                                                                         │                                                                                          
    uint256 hash = ParseHashV(request.params[0], "parameter 1");                         │      uint256 hash = ParseHashV(request.params[0], "parameter 1");                        
                                                                                         │                                                                                          
    const CTxMemPool& mempool = EnsureAnyMemPool(request.context);                       │      const CTxMemPool& mempool = EnsureAnyMemPool(request.context);                      
    LOCK(mempool.cs);                                                                    │      LOCK(mempool.cs);                                                                   
                                                                                         │                                                                                          
    CTxMemPool::txiter it = mempool.mapTx.find(hash);                                    │      CTxMemPool::txiter it = mempool.mapTx.find(hash);                                   
    if (it == mempool.mapTx.end()) {                                                     │      if (it == mempool.mapTx.end()) {                                                    
        throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");    │          throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Transaction not in mempool");   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    CTxMemPool::setEntries setDescendants;                                               │      CTxMemPool::setEntries setAncestors;                                                
    mempool.CalculateDescendants(it, setDescendants);                                    │      uint64_t noLimit = std::numeric_limits<uint64_t>::max();                            
    // CTxMemPool::CalculateDescendants will include the given tx                        │      std::string dummy;                                                                  
    setDescendants.erase(it);                                                            │      mempool.CalculateMemPoolAncestors(*it, setAncestors, noLimit, noLimit, noLimit, noLi
                                                                                         │                                                                                          
    if (!fVerbose) {                                                                     │      if (!fVerbose) {                                                                    
        UniValue o(UniValue::VARR);                                                      │          UniValue o(UniValue::VARR);                                                     
        for (CTxMemPool::txiter descendantIt : setDescendants) {                         │          for (CTxMemPool::txiter ancestorIt : setAncestors) {                            
            o.push_back(descendantIt->GetTx().GetHash().ToString());                     │              o.push_back(ancestorIt->GetTx().GetHash().ToString());                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        return o;                                                                        │          return o;                                                                       
    } else {                                                                             │      } else {                                                                            
        UniValue o(UniValue::VOBJ);                                                      │          UniValue o(UniValue::VOBJ);                                                     
        for (CTxMemPool::txiter descendantIt : setDescendants) {                         │          for (CTxMemPool::txiter ancestorIt : setAncestors) {                            
            const CTxMemPoolEntry &e = *descendantIt;                                    │              const CTxMemPoolEntry &e = *ancestorIt;                                     
            const uint256& _hash = e.GetTx().GetHash();                                  │              const uint256& _hash = e.GetTx().GetHash();                                 
            UniValue info(UniValue::VOBJ);                                               │              UniValue info(UniValue::VOBJ);                                              
            entryToJSON(mempool, info, e);                                               │              entryToJSON(mempool, info, e);                                              
            o.pushKV(_hash.ToString(), info);                                            │              o.pushKV(_hash.ToString(), info);                                           
        }                                                                                │          }                                                                               
        return o;                                                                        │          return o;                                                                       
    }                                                                                    │      }                                                                                   
},                                                                                       │  },                                                                                      
    };                                                                                   │      };                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/interpreter.cpp:1569                                                 │ dogecoin/src/script/interpreter.cpp:1179                                                 
                                                                                         │                                                                                          
    assert(nIn < txTo.vin.size());                                                       │      if (sigversion == SIGVERSION_WITNESS_V0) {                                          
                                                                                         │                                                                                          
    if (sigversion == SigVersion::WITNESS_V0) {                                          │                                                                                          
        uint256 hashPrevouts;                                                            │          uint256 hashPrevouts;                                                           
        uint256 hashSequence;                                                            │          uint256 hashSequence;                                                           
        uint256 hashOutputs;                                                             │          uint256 hashOutputs;                                                            
        const bool cacheready = cache && cache->m_bip143_segwit_ready;                   │                                                                                          
                                                                                         │                                                                                          
        if (!(nHashType & SIGHASH_ANYONECANPAY)) {                                       │          if (!(nHashType & SIGHASH_ANYONECANPAY)) {                                      
            hashPrevouts = cacheready ? cache->hashPrevouts : SHA256Uint256(GetPrevoutsS │              hashPrevouts = cache ? cache->hashPrevouts : GetPrevoutHash(txTo);          
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (!(nHashType & SIGHASH_ANYONECANPAY) && (nHashType & 0x1f) != SIGHASH_SINGLE  │          if (!(nHashType & SIGHASH_ANYONECANPAY) && (nHashType & 0x1f) != SIGHASH_SINGLE 
            hashSequence = cacheready ? cache->hashSequence : SHA256Uint256(GetSequences │              hashSequence = cache ? cache->hashSequence : GetSequenceHash(txTo);         
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │                                                                                          
        if ((nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE)  │          if ((nHashType & 0x1f) != SIGHASH_SINGLE && (nHashType & 0x1f) != SIGHASH_NONE) 
            hashOutputs = cacheready ? cache->hashOutputs : SHA256Uint256(GetOutputsSHA2 │              hashOutputs = cache ? cache->hashOutputs : GetOutputsHash(txTo);            
        } else if ((nHashType & 0x1f) == SIGHASH_SINGLE && nIn < txTo.vout.size()) {     │          } else if ((nHashType & 0x1f) == SIGHASH_SINGLE && nIn < txTo.vout.size()) {    
            CHashWriter ss(SER_GETHASH, 0);                                              │              CHashWriter ss(SER_GETHASH, 0);                                             
            ss << txTo.vout[nIn];                                                        │              ss << txTo.vout[nIn];                                                       
            hashOutputs = ss.GetHash();                                                  │              hashOutputs = ss.GetHash();                                                 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        CHashWriter ss(SER_GETHASH, 0);                                                  │          CHashWriter ss(SER_GETHASH, 0);                                                 
        // Version                                                                       │          // Version                                                                      
        ss << txTo.nVersion;                                                             │          ss << txTo.nVersion;                                                            
        // Input prevouts/nSequence (none/all, depending on flags)                       │          // Input prevouts/nSequence (none/all, depending on flags)                      
        ss << hashPrevouts;                                                              │          ss << hashPrevouts;                                                             
        ss << hashSequence;                                                              │          ss << hashSequence;                                                             
        // The input being signed (replacing the scriptSig with scriptCode + amount)     │          // The input being signed (replacing the scriptSig with scriptCode + amount)    
        // The prevout may already be contained in hashPrevout, and the nSequence        │          // The prevout may already be contained in hashPrevout, and the nSequence       
        // may already be contain in hashSequence.                                       │          // may already be contain in hashSequence.                                      
        ss << txTo.vin[nIn].prevout;                                                     │          ss << txTo.vin[nIn].prevout;                                                    
        ss << scriptCode;                                                                │          ss << static_cast<const CScriptBase&>(scriptCode);                              
        ss << amount;                                                                    │          ss << amount;                                                                   
        ss << txTo.vin[nIn].nSequence;                                                   │          ss << txTo.vin[nIn].nSequence;                                                  
        // Outputs (none/one/all, depending on flags)                                    │          // Outputs (none/one/all, depending on flags)                                   
        ss << hashOutputs;                                                               │          ss << hashOutputs;                                                              
        // Locktime                                                                      │          // Locktime                                                                     
        ss << txTo.nLockTime;                                                            │          ss << txTo.nLockTime;                                                           
        // Sighash type                                                                  │          // Sighash type                                                                 
        ss << nHashType;                                                                 │          ss << nHashType;                                                                
                                                                                         │                                                                                          
        return ss.GetHash();                                                             │          return ss.GetHash();                                                            
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      static const uint256 one(uint256S("0000000000000000000000000000000000000000000000000
                                                                                         │      if (nIn >= txTo.vin.size()) {                                                       
                                                                                         │          //  nIn out of range                                                            
                                                                                         │          return one;                                                                     
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
    // Check for invalid use of SIGHASH_SINGLE                                           │      // Check for invalid use of SIGHASH_SINGLE                                          
    if ((nHashType & 0x1f) == SIGHASH_SINGLE) {                                          │      if ((nHashType & 0x1f) == SIGHASH_SINGLE) {                                         
        if (nIn >= txTo.vout.size()) {                                                   │          if (nIn >= txTo.vout.size()) {                                                  
            //  nOut out of range                                                        │              //  nOut out of range                                                       
            return uint256::ONE;                                                         │              return one;                                                                 
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Wrapper to serialize only the necessary parts of the transaction being signed     │      // Wrapper to serialize only the necessary parts of the transaction being signed    
    CTransactionSignatureSerializer<T> txTmp(txTo, scriptCode, nIn, nHashType);          │      CTransactionSignatureSerializer txTmp(txTo, scriptCode, nIn, nHashType);            
                                                                                         │                                                                                          
    // Serialize and hash                                                                │      // Serialize and hash                                                               
    CHashWriter ss(SER_GETHASH, 0);                                                      │      CHashWriter ss(SER_GETHASH, 0);                                                     
    ss << txTmp << nHashType;                                                            │      ss << txTmp << nHashType;                                                           
    return ss.GetHash();                                                                 │      return ss.GetHash();                                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/uint256_tests.cpp:76                                                  │ bitcoin/src/test/uint256_tests.cpp:76                                                    
                                                                                         │                                                                                          
    BOOST_CHECK(1 == 0+1);                                                               │      BOOST_CHECK(1 == 0+1);                                                              
    // constructor uint256(vector<char>):                                                │      // constructor uint256(vector<char>):                                               
    BOOST_CHECK(R1L.ToString() == ArrayToString(R1Array,32));                            │      BOOST_CHECK(R1L.ToString() == ArrayToString(R1Array,32));                           
    BOOST_CHECK(R1S.ToString() == ArrayToString(R1Array,20));                            │      BOOST_CHECK(R1S.ToString() == ArrayToString(R1Array,20));                           
    BOOST_CHECK(R2L.ToString() == ArrayToString(R2Array,32));                            │      BOOST_CHECK(R2L.ToString() == ArrayToString(R2Array,32));                           
    BOOST_CHECK(R2S.ToString() == ArrayToString(R2Array,20));                            │      BOOST_CHECK(R2S.ToString() == ArrayToString(R2Array,20));                           
    BOOST_CHECK(ZeroL.ToString() == ArrayToString(ZeroArray,32));                        │      BOOST_CHECK(ZeroL.ToString() == ArrayToString(ZeroArray,32));                       
    BOOST_CHECK(ZeroS.ToString() == ArrayToString(ZeroArray,20));                        │      BOOST_CHECK(ZeroS.ToString() == ArrayToString(ZeroArray,20));                       
    BOOST_CHECK(OneL.ToString() == ArrayToString(OneArray,32));                          │      BOOST_CHECK(OneL.ToString() == ArrayToString(OneArray,32));                         
    BOOST_CHECK(OneS.ToString() == ArrayToString(OneArray,20));                          │      BOOST_CHECK(OneS.ToString() == ArrayToString(OneArray,20));                         
    BOOST_CHECK(MaxL.ToString() == ArrayToString(MaxArray,32));                          │      BOOST_CHECK(MaxL.ToString() == ArrayToString(MaxArray,32));                         
    BOOST_CHECK(MaxS.ToString() == ArrayToString(MaxArray,20));                          │      BOOST_CHECK(MaxS.ToString() == ArrayToString(MaxArray,20));                         
    BOOST_CHECK(OneL.ToString() != ArrayToString(ZeroArray,32));                         │      BOOST_CHECK(OneL.ToString() != ArrayToString(ZeroArray,32));                        
    BOOST_CHECK(OneS.ToString() != ArrayToString(ZeroArray,20));                         │      BOOST_CHECK(OneS.ToString() != ArrayToString(ZeroArray,20));                        
                                                                                         │                                                                                          
    // == and !=                                                                         │      // == and !=                                                                        
    BOOST_CHECK(R1L != R2L && R1S != R2S);                                               │      BOOST_CHECK(R1L != R2L && R1S != R2S);                                              
    BOOST_CHECK(ZeroL != OneL && ZeroS != OneS);                                         │      BOOST_CHECK(ZeroL != OneL && ZeroS != OneS);                                        
    BOOST_CHECK(OneL != ZeroL && OneS != ZeroS);                                         │      BOOST_CHECK(OneL != ZeroL && OneS != ZeroS);                                        
    BOOST_CHECK(MaxL != ZeroL && MaxS != ZeroS);                                         │      BOOST_CHECK(MaxL != ZeroL && MaxS != ZeroS);                                        
                                                                                         │                                                                                          
    // String Constructor and Copy Constructor                                           │      // String Constructor and Copy Constructor                                          
    BOOST_CHECK(uint256S("0x"+R1L.ToString()) == R1L);                                   │      BOOST_CHECK(uint256S("0x"+R1L.ToString()) == R1L);                                  
    BOOST_CHECK(uint256S("0x"+R2L.ToString()) == R2L);                                   │      BOOST_CHECK(uint256S("0x"+R2L.ToString()) == R2L);                                  
    BOOST_CHECK(uint256S("0x"+ZeroL.ToString()) == ZeroL);                               │      BOOST_CHECK(uint256S("0x"+ZeroL.ToString()) == ZeroL);                              
    BOOST_CHECK(uint256S("0x"+OneL.ToString()) == OneL);                                 │      BOOST_CHECK(uint256S("0x"+OneL.ToString()) == OneL);                                
    BOOST_CHECK(uint256S("0x"+MaxL.ToString()) == MaxL);                                 │      BOOST_CHECK(uint256S("0x"+MaxL.ToString()) == MaxL);                                
    BOOST_CHECK(uint256S(R1L.ToString()) == R1L);                                        │      BOOST_CHECK(uint256S(R1L.ToString()) == R1L);                                       
    BOOST_CHECK(uint256S("   0x"+R1L.ToString()+"   ") == R1L);                          │      BOOST_CHECK(uint256S("   0x"+R1L.ToString()+"   ") == R1L);                         
    BOOST_CHECK(uint256S("") == ZeroL);                                                  │      BOOST_CHECK(uint256S("") == ZeroL);                                                 
    BOOST_CHECK(R1L == uint256S(R1ArrayHex));                                            │      BOOST_CHECK(R1L == uint256S(R1ArrayHex));                                           
    BOOST_CHECK(uint256(R1L) == R1L);                                                    │      BOOST_CHECK(uint256(R1L) == R1L);                                                   
    BOOST_CHECK(uint256(ZeroL) == ZeroL);                                                │      BOOST_CHECK(uint256(ZeroL) == ZeroL);                                               
    BOOST_CHECK(uint256(OneL) == OneL);                                                  │      BOOST_CHECK(uint256(OneL) == OneL);                                                 
                                                                                         │                                                                                          
    BOOST_CHECK(uint160S("0x"+R1S.ToString()) == R1S);                                   │      BOOST_CHECK(uint160S("0x"+R1S.ToString()) == R1S);                                  
    BOOST_CHECK(uint160S("0x"+R2S.ToString()) == R2S);                                   │      BOOST_CHECK(uint160S("0x"+R2S.ToString()) == R2S);                                  
    BOOST_CHECK(uint160S("0x"+ZeroS.ToString()) == ZeroS);                               │      BOOST_CHECK(uint160S("0x"+ZeroS.ToString()) == ZeroS);                              
    BOOST_CHECK(uint160S("0x"+OneS.ToString()) == OneS);                                 │      BOOST_CHECK(uint160S("0x"+OneS.ToString()) == OneS);                                
    BOOST_CHECK(uint160S("0x"+MaxS.ToString()) == MaxS);                                 │      BOOST_CHECK(uint160S("0x"+MaxS.ToString()) == MaxS);                                
    BOOST_CHECK(uint160S(R1S.ToString()) == R1S);                                        │      BOOST_CHECK(uint160S(R1S.ToString()) == R1S);                                       
    BOOST_CHECK(uint160S("   0x"+R1S.ToString()+"   ") == R1S);                          │      BOOST_CHECK(uint160S("   0x"+R1S.ToString()+"   ") == R1S);                         
    BOOST_CHECK(uint160S("") == ZeroS);                                                  │      BOOST_CHECK(uint160S("") == ZeroS);                                                 
    BOOST_CHECK(R1S == uint160S(R1ArrayHex));                                            │      BOOST_CHECK(R1S == uint160S(R1ArrayHex));                                           
                                                                                         │                                                                                          
    BOOST_CHECK(uint160(R1S) == R1S);                                                    │      BOOST_CHECK(uint160(R1S) == R1S);                                                   
    BOOST_CHECK(uint160(ZeroS) == ZeroS);                                                │      BOOST_CHECK(uint160(ZeroS) == ZeroS);                                               
    BOOST_CHECK(uint160(OneS) == OneS);                                                  │      BOOST_CHECK(uint160(OneS) == OneS);                                                 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/transaction_tests.cpp:266                                             │ bitcoin/src/test/transaction_tests.cpp:368                                               
                                                                                         │                                                                                          
    // Random real transaction (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff83 │      // Random real transaction (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff83
    unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x │      unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x
    std::vector<unsigned char> vch(ch, ch + sizeof(ch) -1);                              │      std::vector<unsigned char> vch(ch, ch + sizeof(ch) -1);                             
    CDataStream stream(vch, SER_DISK, CLIENT_VERSION);                                   │      CDataStream stream(vch, SER_DISK, CLIENT_VERSION);                                  
    CMutableTransaction tx;                                                              │      CMutableTransaction tx;                                                             
    stream >> tx;                                                                        │      stream >> tx;                                                                       
    CValidationState state;                                                              │      TxValidationState state;                                                            
    BOOST_CHECK_MESSAGE(CheckTransaction(tx, state) && state.IsValid(), "Simple deserial │      BOOST_CHECK_MESSAGE(CheckTransaction(CTransaction(tx), state) && state.IsValid(), "S
                                                                                         │                                                                                          
    // Check that duplicate txins fail                                                   │      // Check that duplicate txins fail                                                  
    tx.vin.push_back(tx.vin[0]);                                                         │      tx.vin.push_back(tx.vin[0]);                                                        
    BOOST_CHECK_MESSAGE(!CheckTransaction(tx, state) || !state.IsValid(), "Transaction w │      BOOST_CHECK_MESSAGE(!CheckTransaction(CTransaction(tx), state) || !state.IsValid(), 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/sendcoinsdialog.cpp:971                                                  │ dogecoin/src/qt/sendcoinsdialog.cpp:760                                                  
                                                                                         │                                                                                          
    if (model && model->getAddressTableModel())                                          │      if (model && model->getAddressTableModel())                                         
    {                                                                                    │      {                                                                                   
        // Default to no change address until verified                                   │          // Default to no change address until verified                                  
        m_coin_control->destChange = CNoDestination();                                   │          CoinControlDialog::coinControl->destChange = CNoDestination();                  
        ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");            │          ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:red;}");           
                                                                                         │                                                                                          
        const CTxDestination dest = DecodeDestination(text.toStdString());               │          CBitcoinAddress addr = CBitcoinAddress(text.toStdString());                     
                                                                                         │                                                                                          
        if (text.isEmpty()) // Nothing entered                                           │          if (text.isEmpty()) // Nothing entered                                          
        {                                                                                │          {                                                                               
            ui->labelCoinControlChangeLabel->setText("");                                │              ui->labelCoinControlChangeLabel->setText("");                               
        }                                                                                │          }                                                                               
        else if (!IsValidDestination(dest)) // Invalid address                           │          else if (!addr.IsValid()) // Invalid address                                    
        {                                                                                │          {                                                                               
            ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Bitcoin addres │              ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Dogecoin addre
        }                                                                                │          }                                                                               
        else // Valid address                                                            │          else // Valid address                                                           
        {                                                                                │          {                                                                               
            if (!model->wallet().isSpendable(dest)) {                                    │              CKeyID keyid;                                                               
                                                                                         │              addr.GetKeyID(keyid);                                                       
                                                                                         │              if (!model->havePrivKey(keyid)) // Unknown change address                   
                                                                                         │              {                                                                           
                ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change add │                  ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change add
                                                                                         │                                                                                          
                // confirmation dialog                                                   │                  // confirmation dialog                                                  
                QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr(" │                  QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr("
                    QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);        │                      QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel);       
                                                                                         │                                                                                          
                if(btnRetVal == QMessageBox::Yes)                                        │                  if(btnRetVal == QMessageBox::Yes)                                       
                    m_coin_control->destChange = dest;                                   │                      CoinControlDialog::coinControl->destChange = addr.Get();            
                else                                                                     │                  else                                                                    
                {                                                                        │                  {                                                                       
                    ui->lineEditCoinControlChange->setText("");                          │                      ui->lineEditCoinControlChange->setText("");                         
                    ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;} │                      ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}
                    ui->labelCoinControlChangeLabel->setText("");                        │                      ui->labelCoinControlChangeLabel->setText("");                       
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            else // Known change address                                                 │              else // Known change address                                                
            {                                                                            │              {                                                                           
                ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}");  │                  ui->labelCoinControlChangeLabel->setStyleSheet("QLabel{color:black;}"); 
                                                                                         │                                                                                          
                // Query label                                                           │                  // Query label                                                          
                QString associatedLabel = model->getAddressTableModel()->labelForAddress │                  QString associatedLabel = model->getAddressTableModel()->labelForAddress
                if (!associatedLabel.isEmpty())                                          │                  if (!associatedLabel.isEmpty())                                         
                    ui->labelCoinControlChangeLabel->setText(associatedLabel);           │                      ui->labelCoinControlChangeLabel->setText(associatedLabel);          
                else                                                                     │                  else                                                                    
                    ui->labelCoinControlChangeLabel->setText(tr("(no label)"));          │                      ui->labelCoinControlChangeLabel->setText(tr("(no label)"));         
                                                                                         │                                                                                          
                m_coin_control->destChange = dest;                                       │                  CoinControlDialog::coinControl->destChange = addr.Get();                
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/addresstablemodel.cpp:240                                               │ bitcoin/src/qt/addresstablemodel.cpp:238                                                 
                                                                                         │                                                                                          
    if(!index.isValid())                                                                 │      if(!index.isValid())                                                                
        return false;                                                                    │          return false;                                                                   
    AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());   │      AddressTableEntry *rec = static_cast<AddressTableEntry*>(index.internalPointer());  
    std::string strPurpose = (rec->type == AddressTableEntry::Sending ? "send" : "receiv │      std::string strPurpose = (rec->type == AddressTableEntry::Sending ? "send" : "receiv
    editStatus = OK;                                                                     │      editStatus = OK;                                                                    
                                                                                         │                                                                                          
    if(role == Qt::EditRole)                                                             │      if(role == Qt::EditRole)                                                            
    {                                                                                    │      {                                                                                   
        LOCK(wallet->cs_wallet); /* For SetAddressBook / DelAddressBook */               │          CTxDestination curAddress = DecodeDestination(rec->address.toStdString());      
        CTxDestination curAddress = CBitcoinAddress(rec->address.toStdString()).Get();   │                                                                                          
        if(index.column() == Label)                                                      │          if(index.column() == Label)                                                     
        {                                                                                │          {                                                                               
            // Do nothing, if old label == new label                                     │              // Do nothing, if old label == new label                                    
            if(rec->label == value.toString())                                           │              if(rec->label == value.toString())                                          
            {                                                                            │              {                                                                           
                editStatus = NO_CHANGES;                                                 │                  editStatus = NO_CHANGES;                                                
                return false;                                                            │                  return false;                                                           
            }                                                                            │              }                                                                           
            wallet->SetAddressBook(curAddress, value.toString().toStdString(), strPurpos │              walletModel->wallet().setAddressBook(curAddress, value.toString().toStdStrin
        } else if(index.column() == Address) {                                           │          } else if(index.column() == Address) {                                          
            CTxDestination newAddress = CBitcoinAddress(value.toString().toStdString()). │              CTxDestination newAddress = DecodeDestination(value.toString().toStdString()
            // Refuse to set invalid address, set error status and return false          │              // Refuse to set invalid address, set error status and return false         
            if(boost::get<CNoDestination>(&newAddress))                                  │              if(std::get_if<CNoDestination>(&newAddress))                                
            {                                                                            │              {                                                                           
                editStatus = INVALID_ADDRESS;                                            │                  editStatus = INVALID_ADDRESS;                                           
                return false;                                                            │                  return false;                                                           
            }                                                                            │              }                                                                           
            // Do nothing, if old address == new address                                 │              // Do nothing, if old address == new address                                
            else if(newAddress == curAddress)                                            │              else if(newAddress == curAddress)                                           
            {                                                                            │              {                                                                           
                editStatus = NO_CHANGES;                                                 │                  editStatus = NO_CHANGES;                                                
                return false;                                                            │                  return false;                                                           
            }                                                                            │              }                                                                           
            // Check for duplicate addresses to prevent accidental deletion of addresses │              // Check for duplicate addresses to prevent accidental deletion of addresses
            // to paste an existing address over another address (with a different label │              // to paste an existing address over another address (with a different label
            else if(wallet->mapAddressBook.count(newAddress))                            │              if (walletModel->wallet().getAddress(                                       
                                                                                         │                      newAddress, /* name= */ nullptr, /* is_mine= */ nullptr, /* purpose=
            {                                                                            │              {                                                                           
                editStatus = DUPLICATE_ADDRESS;                                          │                  editStatus = DUPLICATE_ADDRESS;                                         
                return false;                                                            │                  return false;                                                           
            }                                                                            │              }                                                                           
            // Double-check that we're not overwriting a receiving address               │              // Double-check that we're not overwriting a receiving address              
            else if(rec->type == AddressTableEntry::Sending)                             │              else if(rec->type == AddressTableEntry::Sending)                            
            {                                                                            │              {                                                                           
                // Remove old entry                                                      │                  // Remove old entry                                                     
                wallet->DelAddressBook(curAddress);                                      │                  walletModel->wallet().delAddressBook(curAddress);                       
                // Add new entry with new address                                        │                  // Add new entry with new address                                       
                wallet->SetAddressBook(newAddress, rec->label.toStdString(), strPurpose) │                  walletModel->wallet().setAddressBook(newAddress, value.toString().toStdS
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
    return false;                                                                        │      return false;                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:59                                                   │ bitcoin/src/test/script_tests.cpp:62                                                     
                                                                                         │                                                                                          
    {SCRIPT_ERR_OK, "OK"},                                                               │      {SCRIPT_ERR_OK, "OK"},                                                              
    {SCRIPT_ERR_UNKNOWN_ERROR, "UNKNOWN_ERROR"},                                         │      {SCRIPT_ERR_UNKNOWN_ERROR, "UNKNOWN_ERROR"},                                        
    {SCRIPT_ERR_EVAL_FALSE, "EVAL_FALSE"},                                               │      {SCRIPT_ERR_EVAL_FALSE, "EVAL_FALSE"},                                              
    {SCRIPT_ERR_OP_RETURN, "OP_RETURN"},                                                 │      {SCRIPT_ERR_OP_RETURN, "OP_RETURN"},                                                
    {SCRIPT_ERR_SCRIPT_SIZE, "SCRIPT_SIZE"},                                             │      {SCRIPT_ERR_SCRIPT_SIZE, "SCRIPT_SIZE"},                                            
    {SCRIPT_ERR_PUSH_SIZE, "PUSH_SIZE"},                                                 │      {SCRIPT_ERR_PUSH_SIZE, "PUSH_SIZE"},                                                
    {SCRIPT_ERR_OP_COUNT, "OP_COUNT"},                                                   │      {SCRIPT_ERR_OP_COUNT, "OP_COUNT"},                                                  
    {SCRIPT_ERR_STACK_SIZE, "STACK_SIZE"},                                               │      {SCRIPT_ERR_STACK_SIZE, "STACK_SIZE"},                                              
    {SCRIPT_ERR_SIG_COUNT, "SIG_COUNT"},                                                 │      {SCRIPT_ERR_SIG_COUNT, "SIG_COUNT"},                                                
    {SCRIPT_ERR_PUBKEY_COUNT, "PUBKEY_COUNT"},                                           │      {SCRIPT_ERR_PUBKEY_COUNT, "PUBKEY_COUNT"},                                          
    {SCRIPT_ERR_VERIFY, "VERIFY"},                                                       │      {SCRIPT_ERR_VERIFY, "VERIFY"},                                                      
    {SCRIPT_ERR_EQUALVERIFY, "EQUALVERIFY"},                                             │      {SCRIPT_ERR_EQUALVERIFY, "EQUALVERIFY"},                                            
    {SCRIPT_ERR_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY"},                             │      {SCRIPT_ERR_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY"},                            
    {SCRIPT_ERR_CHECKSIGVERIFY, "CHECKSIGVERIFY"},                                       │      {SCRIPT_ERR_CHECKSIGVERIFY, "CHECKSIGVERIFY"},                                      
    {SCRIPT_ERR_NUMEQUALVERIFY, "NUMEQUALVERIFY"},                                       │      {SCRIPT_ERR_NUMEQUALVERIFY, "NUMEQUALVERIFY"},                                      
    {SCRIPT_ERR_BAD_OPCODE, "BAD_OPCODE"},                                               │      {SCRIPT_ERR_BAD_OPCODE, "BAD_OPCODE"},                                              
    {SCRIPT_ERR_DISABLED_OPCODE, "DISABLED_OPCODE"},                                     │      {SCRIPT_ERR_DISABLED_OPCODE, "DISABLED_OPCODE"},                                    
    {SCRIPT_ERR_INVALID_STACK_OPERATION, "INVALID_STACK_OPERATION"},                     │      {SCRIPT_ERR_INVALID_STACK_OPERATION, "INVALID_STACK_OPERATION"},                    
    {SCRIPT_ERR_INVALID_ALTSTACK_OPERATION, "INVALID_ALTSTACK_OPERATION"},               │      {SCRIPT_ERR_INVALID_ALTSTACK_OPERATION, "INVALID_ALTSTACK_OPERATION"},              
    {SCRIPT_ERR_UNBALANCED_CONDITIONAL, "UNBALANCED_CONDITIONAL"},                       │      {SCRIPT_ERR_UNBALANCED_CONDITIONAL, "UNBALANCED_CONDITIONAL"},                      
    {SCRIPT_ERR_NEGATIVE_LOCKTIME, "NEGATIVE_LOCKTIME"},                                 │      {SCRIPT_ERR_NEGATIVE_LOCKTIME, "NEGATIVE_LOCKTIME"},                                
    {SCRIPT_ERR_UNSATISFIED_LOCKTIME, "UNSATISFIED_LOCKTIME"},                           │      {SCRIPT_ERR_UNSATISFIED_LOCKTIME, "UNSATISFIED_LOCKTIME"},                          
    {SCRIPT_ERR_SIG_HASHTYPE, "SIG_HASHTYPE"},                                           │      {SCRIPT_ERR_SIG_HASHTYPE, "SIG_HASHTYPE"},                                          
    {SCRIPT_ERR_SIG_DER, "SIG_DER"},                                                     │      {SCRIPT_ERR_SIG_DER, "SIG_DER"},                                                    
    {SCRIPT_ERR_MINIMALDATA, "MINIMALDATA"},                                             │      {SCRIPT_ERR_MINIMALDATA, "MINIMALDATA"},                                            
    {SCRIPT_ERR_SIG_PUSHONLY, "SIG_PUSHONLY"},                                           │      {SCRIPT_ERR_SIG_PUSHONLY, "SIG_PUSHONLY"},                                          
    {SCRIPT_ERR_SIG_HIGH_S, "SIG_HIGH_S"},                                               │      {SCRIPT_ERR_SIG_HIGH_S, "SIG_HIGH_S"},                                              
    {SCRIPT_ERR_SIG_NULLDUMMY, "SIG_NULLDUMMY"},                                         │      {SCRIPT_ERR_SIG_NULLDUMMY, "SIG_NULLDUMMY"},                                        
    {SCRIPT_ERR_PUBKEYTYPE, "PUBKEYTYPE"},                                               │      {SCRIPT_ERR_PUBKEYTYPE, "PUBKEYTYPE"},                                              
    {SCRIPT_ERR_CLEANSTACK, "CLEANSTACK"},                                               │      {SCRIPT_ERR_CLEANSTACK, "CLEANSTACK"},                                              
    {SCRIPT_ERR_MINIMALIF, "MINIMALIF"},                                                 │      {SCRIPT_ERR_MINIMALIF, "MINIMALIF"},                                                
    {SCRIPT_ERR_SIG_NULLFAIL, "NULLFAIL"},                                               │      {SCRIPT_ERR_SIG_NULLFAIL, "NULLFAIL"},                                              
    {SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS, "DISCOURAGE_UPGRADABLE_NOPS"},               │      {SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS, "DISCOURAGE_UPGRADABLE_NOPS"},              
    {SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM, "DISCOURAGE_UPGRADABLE_WITNESS_PR │      {SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM, "DISCOURAGE_UPGRADABLE_WITNESS_PR
    {SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH, "WITNESS_PROGRAM_WRONG_LENGTH"},           │      {SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH, "WITNESS_PROGRAM_WRONG_LENGTH"},          
    {SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY, "WITNESS_PROGRAM_WITNESS_EMPTY"},         │      {SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY, "WITNESS_PROGRAM_WITNESS_EMPTY"},        
    {SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH, "WITNESS_PROGRAM_MISMATCH"},                   │      {SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH, "WITNESS_PROGRAM_MISMATCH"},                  
    {SCRIPT_ERR_WITNESS_MALLEATED, "WITNESS_MALLEATED"},                                 │      {SCRIPT_ERR_WITNESS_MALLEATED, "WITNESS_MALLEATED"},                                
    {SCRIPT_ERR_WITNESS_MALLEATED_P2SH, "WITNESS_MALLEATED_P2SH"},                       │      {SCRIPT_ERR_WITNESS_MALLEATED_P2SH, "WITNESS_MALLEATED_P2SH"},                      
    {SCRIPT_ERR_WITNESS_UNEXPECTED, "WITNESS_UNEXPECTED"},                               │      {SCRIPT_ERR_WITNESS_UNEXPECTED, "WITNESS_UNEXPECTED"},                              
    {SCRIPT_ERR_WITNESS_PUBKEYTYPE, "WITNESS_PUBKEYTYPE"},                               │      {SCRIPT_ERR_WITNESS_PUBKEYTYPE, "WITNESS_PUBKEYTYPE"},                              
                                                                                         │      {SCRIPT_ERR_OP_CODESEPARATOR, "OP_CODESEPARATOR"},                                  
                                                                                         │      {SCRIPT_ERR_SIG_FINDANDDELETE, "SIG_FINDANDDELETE"},                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:450                                                    │ dogecoin/src/test/bloom_tests.cpp:471                                                    
                                                                                         │                                                                                          
    SeedInsecureRand(SeedRand::ZEROS);                                                   │                                                                                          
    g_mock_deterministic_tests = true;                                                   │                                                                                          
                                                                                         │                                                                                          
    // last-100-entry, 1% false positive:                                                │      // last-100-entry, 1% false positive:                                               
    CRollingBloomFilter rb1(100, 0.01);                                                  │      CRollingBloomFilter rb1(100, 0.01);                                                 
                                                                                         │                                                                                          
    // Overfill:                                                                         │      // Overfill:                                                                        
    static const int DATASIZE=399;                                                       │      static const int DATASIZE=399;                                                      
    std::vector<unsigned char> data[DATASIZE];                                           │      std::vector<unsigned char> data[DATASIZE];                                          
    for (int i = 0; i < DATASIZE; i++) {                                                 │      for (int i = 0; i < DATASIZE; i++) {                                                
        data[i] = RandomData();                                                          │          data[i] = RandomData();                                                         
        rb1.insert(data[i]);                                                             │          rb1.insert(data[i]);                                                            
    }                                                                                    │      }                                                                                   
    // Last 100 guaranteed to be remembered:                                             │      // Last 100 guaranteed to be remembered:                                            
    for (int i = 299; i < DATASIZE; i++) {                                               │      for (int i = 299; i < DATASIZE; i++) {                                              
        BOOST_CHECK(rb1.contains(data[i]));                                              │          BOOST_CHECK(rb1.contains(data[i]));                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // false positive rate is 1%, so we should get about 100 hits if                     │      // false positive rate is 1%, so we should get about 100 hits if                    
    // testing 10,000 random keys. We get worst-case false positive                      │      // testing 10,000 random keys. We get worst-case false positive                     
    // behavior when the filter is as full as possible, which is                         │      // behavior when the filter is as full as possible, which is                        
    // when we've inserted one minus an integer multiple of nElement*2.                  │      // when we've inserted one minus an integer multiple of nElement*2.                 
    unsigned int nHits = 0;                                                              │      unsigned int nHits = 0;                                                             
    for (int i = 0; i < 10000; i++) {                                                    │      for (int i = 0; i < 10000; i++) {                                                   
        if (rb1.contains(RandomData()))                                                  │          if (rb1.contains(RandomData()))                                                 
            ++nHits;                                                                     │              ++nHits;                                                                    
    }                                                                                    │      }                                                                                   
    // Expect about 100 hits                                                             │      // Run test_bitcoin with --log_level=message to see BOOST_TEST_MESSAGEs:            
    BOOST_CHECK_EQUAL(nHits, 75U);                                                       │      BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~100 exp
                                                                                         │                                                                                          
                                                                                         │      // Insanely unlikely to get a fp count outside this range:                          
                                                                                         │      BOOST_CHECK(nHits > 25);                                                            
                                                                                         │      BOOST_CHECK(nHits < 175);                                                           
                                                                                         │                                                                                          
    BOOST_CHECK(rb1.contains(data[DATASIZE-1]));                                         │      BOOST_CHECK(rb1.contains(data[DATASIZE-1]));                                        
    rb1.reset();                                                                         │      rb1.reset();                                                                        
    BOOST_CHECK(!rb1.contains(data[DATASIZE-1]));                                        │      BOOST_CHECK(!rb1.contains(data[DATASIZE-1]));                                       
                                                                                         │                                                                                          
    // Now roll through data, make sure last 100 entries                                 │      // Now roll through data, make sure last 100 entries                                
    // are always remembered:                                                            │      // are always remembered:                                                           
    for (int i = 0; i < DATASIZE; i++) {                                                 │      for (int i = 0; i < DATASIZE; i++) {                                                
        if (i >= 100)                                                                    │          if (i >= 100)                                                                   
            BOOST_CHECK(rb1.contains(data[i-100]));                                      │              BOOST_CHECK(rb1.contains(data[i-100]));                                     
        rb1.insert(data[i]);                                                             │          rb1.insert(data[i]);                                                            
        BOOST_CHECK(rb1.contains(data[i]));                                              │          BOOST_CHECK(rb1.contains(data[i]));                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Insert 999 more random entries:                                                   │      // Insert 999 more random entries:                                                  
    for (int i = 0; i < 999; i++) {                                                      │      for (int i = 0; i < 999; i++) {                                                     
        std::vector<unsigned char> d = RandomData();                                     │          std::vector<unsigned char> d = RandomData();                                    
        rb1.insert(d);                                                                   │          rb1.insert(d);                                                                  
        BOOST_CHECK(rb1.contains(d));                                                    │          BOOST_CHECK(rb1.contains(d));                                                   
    }                                                                                    │      }                                                                                   
    // Sanity check to make sure the filter isn't just filling up:                       │      // Sanity check to make sure the filter isn't just filling up:                      
    nHits = 0;                                                                           │      nHits = 0;                                                                          
    for (int i = 0; i < DATASIZE; i++) {                                                 │      for (int i = 0; i < DATASIZE; i++) {                                                
        if (rb1.contains(data[i]))                                                       │          if (rb1.contains(data[i]))                                                      
            ++nHits;                                                                     │              ++nHits;                                                                    
    }                                                                                    │      }                                                                                   
    // Expect about 5 false positives                                                    │      // Expect about 5 false positives, more than 100 means                              
    BOOST_CHECK_EQUAL(nHits, 6U);                                                        │      // something is definitely broken.                                                  
                                                                                         │      BOOST_TEST_MESSAGE("RollingBloomFilter got " << nHits << " false positives (~5 expec
                                                                                         │      BOOST_CHECK(nHits < 100);                                                           
                                                                                         │                                                                                          
    // last-1000-entry, 0.01% false positive:                                            │      // last-1000-entry, 0.01% false positive:                                           
    CRollingBloomFilter rb2(1000, 0.001);                                                │      CRollingBloomFilter rb2(1000, 0.001);                                               
    for (int i = 0; i < DATASIZE; i++) {                                                 │      for (int i = 0; i < DATASIZE; i++) {                                                
        rb2.insert(data[i]);                                                             │          rb2.insert(data[i]);                                                            
    }                                                                                    │      }                                                                                   
    // ... room for all of them:                                                         │      // ... room for all of them:                                                        
    for (int i = 0; i < DATASIZE; i++) {                                                 │      for (int i = 0; i < DATASIZE; i++) {                                                
        BOOST_CHECK(rb2.contains(data[i]));                                              │          BOOST_CHECK(rb2.contains(data[i]));                                             
    }                                                                                    │      }                                                                                   
    g_mock_deterministic_tests = false;                                                  │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/wallet/wallet.cpp:326                                                      │ bitcoin/src/wallet/wallet.cpp:477                                                        
                                                                                         │                                                                                          
                                                                                         │      bool fWasLocked = IsLocked();                                                       
                                                                                         │                                                                                          
                                                                                         │      {                                                                                   
        LOCK(cs_wallet);                                                                 │          LOCK(cs_wallet);                                                                
        Lock();                                                                          │          Lock();                                                                         
                                                                                         │                                                                                          
        CCrypter crypter;                                                                │          CCrypter crypter;                                                               
        CKeyingMaterial vMasterKey;                                                      │          CKeyingMaterial _vMasterKey;                                                    
        BOOST_FOREACH(MasterKeyMap::value_type& pMasterKey, mapMasterKeys)               │          for (MasterKeyMap::value_type& pMasterKey : mapMasterKeys)                      
        {                                                                                │          {                                                                               
            if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.v │              if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.v
                return false;                                                            │                  return false;                                                           
            if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, vMasterKey))           │              if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, _vMasterKey))         
                return false;                                                            │                  return false;                                                           
            if (CCryptoKeyStore::Unlock(vMasterKey))                                     │              if (Unlock(_vMasterKey))                                                    
            {                                                                            │              {                                                                           
                int64_t nStartTime = GetTimeMillis();                                    │                  int64_t nStartTime = GetTimeMillis();                                   
                crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.v │                  crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.v
                pMasterKey.second.nDeriveIterations = pMasterKey.second.nDeriveIteration │                  pMasterKey.second.nDeriveIterations = static_cast<unsigned int>(pMasterK
                                                                                         │                                                                                          
                nStartTime = GetTimeMillis();                                            │                  nStartTime = GetTimeMillis();                                           
                crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.v │                  crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.v
                pMasterKey.second.nDeriveIterations = (pMasterKey.second.nDeriveIteratio │                  pMasterKey.second.nDeriveIterations = (pMasterKey.second.nDeriveIteratio
                                                                                         │                                                                                          
                if (pMasterKey.second.nDeriveIterations < 25000)                         │                  if (pMasterKey.second.nDeriveIterations < 25000)                        
                    pMasterKey.second.nDeriveIterations = 25000;                         │                      pMasterKey.second.nDeriveIterations = 25000;                        
                                                                                         │                                                                                          
                LogPrintf("Wallet passphrase changed to an nDeriveIterations of %i\n", p │                  WalletLogPrintf("Wallet passphrase changed to an nDeriveIterations of %i
                                                                                         │                                                                                          
                if (!crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.sec │                  if (!crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.sec
                    return false;                                                        │                      return false;                                                       
                if (!crypter.Encrypt(vMasterKey, pMasterKey.second.vchCryptedKey))       │                  if (!crypter.Encrypt(_vMasterKey, pMasterKey.second.vchCryptedKey))     
                    return false;                                                        │                      return false;                                                       
                CWalletDB(strWalletFile).WriteMasterKey(pMasterKey.first, pMasterKey.sec │                  WalletBatch(GetDatabase()).WriteMasterKey(pMasterKey.first, pMasterKey.s
                if (fWasLocked)                                                          │                  if (fWasLocked)                                                         
                    Lock();                                                              │                      Lock();                                                             
                return true;                                                             │                  return true;                                                            
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
                                                                                         │      return false;                                                                       
                                                                                         │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/net_processing.cpp:3973                                                     │ dogecoin/src/net_processing.cpp:2502                                                     
                                                                                         │                                                                                          
        const auto ping_end = time_received;                                             │          int64_t pingUsecEnd = nTimeReceived;                                            
        uint64_t nonce = 0;                                                              │          uint64_t nonce = 0;                                                             
        size_t nAvail = vRecv.in_avail();                                                │          size_t nAvail = vRecv.in_avail();                                               
        bool bPingFinished = false;                                                      │          bool bPingFinished = false;                                                     
        std::string sProblem;                                                            │          std::string sProblem;                                                           
                                                                                         │                                                                                          
        if (nAvail >= sizeof(nonce)) {                                                   │          if (nAvail >= sizeof(nonce)) {                                                  
            vRecv >> nonce;                                                              │              vRecv >> nonce;                                                             
                                                                                         │                                                                                          
            // Only process pong message if there is an outstanding ping (old ping witho │              // Only process pong message if there is an outstanding ping (old ping witho
            if (peer->m_ping_nonce_sent != 0) {                                          │              if (pfrom->nPingNonceSent != 0) {                                           
                if (nonce == peer->m_ping_nonce_sent) {                                  │                  if (nonce == pfrom->nPingNonceSent) {                                   
                    // Matching pong received, this ping is no longer outstanding        │                      // Matching pong received, this ping is no longer outstanding       
                    bPingFinished = true;                                                │                      bPingFinished = true;                                               
                    const auto ping_time = ping_end - peer->m_ping_start.load();         │                      int64_t pingUsecTime = pingUsecEnd - pfrom->nPingUsecStart;         
                    if (ping_time.count() >= 0) {                                        │                      if (pingUsecTime > 0) {                                             
                        // Let connman know about this successful ping-pong              │                          // Successful ping time measurement, replace previous           
                        pfrom.PongReceived(ping_time);                                   │                          pfrom->nPingUsecTime = pingUsecTime;                            
                                                                                         │                          pfrom->nMinPingUsecTime = std::min(pfrom->nMinPingUsecTime.load(
                    } else {                                                             │                      } else {                                                            
                        // This should never happen                                      │                          // This should never happen                                     
                        sProblem = "Timing mishap";                                      │                          sProblem = "Timing mishap";                                     
                    }                                                                    │                      }                                                                   
                } else {                                                                 │                  } else {                                                                
                    // Nonce mismatches are normal when pings are overlapping            │                      // Nonce mismatches are normal when pings are overlapping           
                    sProblem = "Nonce mismatch";                                         │                      sProblem = "Nonce mismatch";                                        
                    if (nonce == 0) {                                                    │                      if (nonce == 0) {                                                   
                        // This is most likely a bug in another implementation somewhere │                          // This is most likely a bug in another implementation somewhere
                        bPingFinished = true;                                            │                          bPingFinished = true;                                           
                        sProblem = "Nonce zero";                                         │                          sProblem = "Nonce zero";                                        
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
            } else {                                                                     │              } else {                                                                    
                sProblem = "Unsolicited pong without ping";                              │                  sProblem = "Unsolicited pong without ping";                             
            }                                                                            │              }                                                                           
        } else {                                                                         │          } else {                                                                        
            // This is most likely a bug in another implementation somewhere; cancel thi │              // This is most likely a bug in another implementation somewhere; cancel thi
            bPingFinished = true;                                                        │              bPingFinished = true;                                                       
            sProblem = "Short payload";                                                  │              sProblem = "Short payload";                                                 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (!(sProblem.empty())) {                                                       │          if (!(sProblem.empty())) {                                                      
            LogPrint(BCLog::NET, "pong peer=%d: %s, %x expected, %x received, %u bytes\n │              LogPrint("net", "pong peer=%d: %s, %x expected, %x received, %u bytes\n",   
                pfrom.GetId(),                                                           │                  pfrom->id,                                                              
                sProblem,                                                                │                  sProblem,                                                               
                peer->m_ping_nonce_sent,                                                 │                  pfrom->nPingNonceSent,                                                  
                nonce,                                                                   │                  nonce,                                                                  
                nAvail);                                                                 │                  nAvail);                                                                
        }                                                                                │          }                                                                               
        if (bPingFinished) {                                                             │          if (bPingFinished) {                                                            
            peer->m_ping_nonce_sent = 0;                                                 │              pfrom->nPingNonceSent = 0;                                                  
        }                                                                                │          }                                                                               
        return;                                                                          │                                                                                          
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/coins.cpp:122                                                    │ bitcoin/src/wallet/rpc/coins.cpp:81                                                      
                                                                                         │                                                                                          
    return RPCHelpMan{"getreceivedbylabel",                                              │      return RPCHelpMan{"getreceivedbyaddress",                                           
                "\nReturns the total amount received by addresses with <label> in transa │                  "\nReturns the total amount received by the given address in transaction
                {                                                                        │                  {                                                                       
                    {"label", RPCArg::Type::STR, RPCArg::Optional::NO, "The selected lab │                      {"address", RPCArg::Type::STR, RPCArg::Optional::NO, "The bitcoin ad
                    {"minconf", RPCArg::Type::NUM, RPCArg::Default{1}, "Only include tra │                      {"minconf", RPCArg::Type::NUM, RPCArg::Default{1}, "Only include tra
                    {"include_immature_coinbase", RPCArg::Type::BOOL, RPCArg::Default{fa │                      {"include_immature_coinbase", RPCArg::Type::BOOL, RPCArg::Default{fa
                },                                                                       │                  },                                                                      
                RPCResult{                                                               │                  RPCResult{                                                              
                    RPCResult::Type::STR_AMOUNT, "amount", "The total amount in " + CURR │                      RPCResult::Type::STR_AMOUNT, "amount", "The total amount in " + CURR
                },                                                                       │                  },                                                                      
                RPCExamples{                                                             │                  RPCExamples{                                                            
            "\nAmount received by the default label with at least 1 confirmation\n"      │              "\nThe amount from transactions with at least 1 confirmation\n"             
            + HelpExampleCli("getreceivedbylabel", "\"\"") +                             │              + HelpExampleCli("getreceivedbyaddress", "\"" + EXAMPLE_ADDRESS[0] + "\"") +
            "\nAmount received at the tabby label including unconfirmed amounts with zer │              "\nThe amount including unconfirmed transactions, zero confirmations\n"     
            + HelpExampleCli("getreceivedbylabel", "\"tabby\" 0") +                      │              + HelpExampleCli("getreceivedbyaddress", "\"" + EXAMPLE_ADDRESS[0] + "\" 0")
            "\nThe amount with at least 6 confirmations\n"                               │              "\nThe amount with at least 6 confirmations\n"                              
            + HelpExampleCli("getreceivedbylabel", "\"tabby\" 6") +                      │              + HelpExampleCli("getreceivedbyaddress", "\"" + EXAMPLE_ADDRESS[0] + "\" 6")
            "\nThe amount with at least 6 confirmations including immature coinbase outp │              "\nThe amount with at least 6 confirmations including immature coinbase outp
            + HelpExampleCli("getreceivedbylabel", "\"tabby\" 6 true") +                 │              + HelpExampleCli("getreceivedbyaddress", "\"" + EXAMPLE_ADDRESS[0] + "\" 6 t
            "\nAs a JSON-RPC call\n"                                                     │              "\nAs a JSON-RPC call\n"                                                    
            + HelpExampleRpc("getreceivedbylabel", "\"tabby\", 6, true")                 │              + HelpExampleRpc("getreceivedbyaddress", "\"" + EXAMPLE_ADDRESS[0] + "\", 6"
                },                                                                       │                  },                                                                      
        [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue           │          [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue          
{                                                                                        │  {                                                                                       
    const std::shared_ptr<const CWallet> pwallet = GetWalletForJSONRPCRequest(request);  │      const std::shared_ptr<const CWallet> pwallet = GetWalletForJSONRPCRequest(request); 
    if (!pwallet) return NullUniValue;                                                   │      if (!pwallet) return NullUniValue;                                                  
                                                                                         │                                                                                          
    // Make sure the results are valid at least up to the most recent block              │      // Make sure the results are valid at least up to the most recent block             
    // the user could have gotten from another RPC command prior to now                  │      // the user could have gotten from another RPC command prior to now                 
    pwallet->BlockUntilSyncedToCurrentChain();                                           │      pwallet->BlockUntilSyncedToCurrentChain();                                          
                                                                                         │                                                                                          
    LOCK(pwallet->cs_wallet);                                                            │      LOCK(pwallet->cs_wallet);                                                           
                                                                                         │                                                                                          
    return ValueFromAmount(GetReceived(*pwallet, request.params, /*by_label=*/true));    │      return ValueFromAmount(GetReceived(*pwallet, request.params, /*by_label=*/false));  
},                                                                                       │  },                                                                                      
    };                                                                                   │      };                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/key_tests.cpp:78                                                       │ dogecoin/src/test/key_tests.cpp:110                                                      
                                                                                         │                                                                                          
        std::string strMsg = strprintf("Very secret message %i: 11", n);                 │          std::string strMsg = strprintf("Very secret message %i: 11", n);                
        uint256 hashMsg = Hash(strMsg);                                                  │          uint256 hashMsg = Hash(strMsg.begin(), strMsg.end());                           
                                                                                         │                                                                                          
        // normal signatures                                                             │          // normal signatures                                                            
                                                                                         │                                                                                          
        std::vector<unsigned char> sign1, sign2, sign1C, sign2C;                         │          std::vector<unsigned char> sign1, sign2, sign1C, sign2C;                        
                                                                                         │                                                                                          
        BOOST_CHECK(key1.Sign (hashMsg, sign1));                                         │          BOOST_CHECK(key1.Sign (hashMsg, sign1));                                        
        BOOST_CHECK(key2.Sign (hashMsg, sign2));                                         │          BOOST_CHECK(key2.Sign (hashMsg, sign2));                                        
        BOOST_CHECK(key1C.Sign(hashMsg, sign1C));                                        │          BOOST_CHECK(key1C.Sign(hashMsg, sign1C));                                       
        BOOST_CHECK(key2C.Sign(hashMsg, sign2C));                                        │          BOOST_CHECK(key2C.Sign(hashMsg, sign2C));                                       
                                                                                         │                                                                                          
        BOOST_CHECK( pubkey1.Verify(hashMsg, sign1));                                    │          BOOST_CHECK( pubkey1.Verify(hashMsg, sign1));                                   
        BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2));                                    │          BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2));                                   
        BOOST_CHECK( pubkey1.Verify(hashMsg, sign1C));                                   │          BOOST_CHECK( pubkey1.Verify(hashMsg, sign1C));                                  
        BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2C));                                   │          BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2C));                                  
                                                                                         │                                                                                          
        BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1));                                    │          BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1));                                   
        BOOST_CHECK( pubkey2.Verify(hashMsg, sign2));                                    │          BOOST_CHECK( pubkey2.Verify(hashMsg, sign2));                                   
        BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1C));                                   │          BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1C));                                  
        BOOST_CHECK( pubkey2.Verify(hashMsg, sign2C));                                   │          BOOST_CHECK( pubkey2.Verify(hashMsg, sign2C));                                  
                                                                                         │                                                                                          
        BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1));                                   │          BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1));                                  
        BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2));                                   │          BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2));                                  
        BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1C));                                  │          BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1C));                                 
        BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2C));                                  │          BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2C));                                 
                                                                                         │                                                                                          
        BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1));                                   │          BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1));                                  
        BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2));                                   │          BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2));                                  
        BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1C));                                  │          BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1C));                                 
        BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2C));                                  │          BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2C));                                 
                                                                                         │                                                                                          
        // compact signatures (with key recovery)                                        │          // compact signatures (with key recovery)                                       
                                                                                         │                                                                                          
        std::vector<unsigned char> csign1, csign2, csign1C, csign2C;                     │          std::vector<unsigned char> csign1, csign2, csign1C, csign2C;                    
                                                                                         │                                                                                          
        BOOST_CHECK(key1.SignCompact (hashMsg, csign1));                                 │          BOOST_CHECK(key1.SignCompact (hashMsg, csign1));                                
        BOOST_CHECK(key2.SignCompact (hashMsg, csign2));                                 │          BOOST_CHECK(key2.SignCompact (hashMsg, csign2));                                
        BOOST_CHECK(key1C.SignCompact(hashMsg, csign1C));                                │          BOOST_CHECK(key1C.SignCompact(hashMsg, csign1C));                               
        BOOST_CHECK(key2C.SignCompact(hashMsg, csign2C));                                │          BOOST_CHECK(key2C.SignCompact(hashMsg, csign2C));                               
                                                                                         │                                                                                          
        CPubKey rkey1, rkey2, rkey1C, rkey2C;                                            │          CPubKey rkey1, rkey2, rkey1C, rkey2C;                                           
                                                                                         │                                                                                          
        BOOST_CHECK(rkey1.RecoverCompact (hashMsg, csign1));                             │          BOOST_CHECK(rkey1.RecoverCompact (hashMsg, csign1));                            
        BOOST_CHECK(rkey2.RecoverCompact (hashMsg, csign2));                             │          BOOST_CHECK(rkey2.RecoverCompact (hashMsg, csign2));                            
        BOOST_CHECK(rkey1C.RecoverCompact(hashMsg, csign1C));                            │          BOOST_CHECK(rkey1C.RecoverCompact(hashMsg, csign1C));                           
        BOOST_CHECK(rkey2C.RecoverCompact(hashMsg, csign2C));                            │          BOOST_CHECK(rkey2C.RecoverCompact(hashMsg, csign2C));                           
                                                                                         │                                                                                          
        BOOST_CHECK(rkey1  == pubkey1);                                                  │          BOOST_CHECK(rkey1  == pubkey1);                                                 
        BOOST_CHECK(rkey2  == pubkey2);                                                  │          BOOST_CHECK(rkey2  == pubkey2);                                                 
        BOOST_CHECK(rkey1C == pubkey1C);                                                 │          BOOST_CHECK(rkey1C == pubkey1C);                                                
        BOOST_CHECK(rkey2C == pubkey2C);                                                 │          BOOST_CHECK(rkey2C == pubkey2C);                                                
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/policy/policy.cpp:60                                                       │ bitcoin/src/policy/policy.cpp:82                                                         
                                                                                         │                                                                                          
    if (tx.nVersion > CTransaction::MAX_STANDARD_VERSION || tx.nVersion < 1) {           │      if (tx.nVersion > TX_MAX_STANDARD_VERSION || tx.nVersion < 1) {                     
        reason = "version";                                                              │          reason = "version";                                                             
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Extremely large transactions with lots of inputs can cost the network             │      // Extremely large transactions with lots of inputs can cost the network            
    // almost as much to process as they cost the sender in fees, because                │      // almost as much to process as they cost the sender in fees, because               
    // computing signature hashes is O(ninputs*txsize). Limiting transactions            │      // computing signature hashes is O(ninputs*txsize). Limiting transactions           
    // to MAX_STANDARD_TX_WEIGHT mitigates CPU exhaustion attacks.                       │      // to MAX_STANDARD_TX_WEIGHT mitigates CPU exhaustion attacks.                      
    unsigned int sz = GetTransactionWeight(tx);                                          │      unsigned int sz = GetTransactionWeight(tx);                                         
    if (sz >= MAX_STANDARD_TX_WEIGHT) {                                                  │      if (sz > MAX_STANDARD_TX_WEIGHT) {                                                  
        reason = "tx-size";                                                              │          reason = "tx-size";                                                             
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    BOOST_FOREACH(const CTxIn& txin, tx.vin)                                             │      for (const CTxIn& txin : tx.vin)                                                    
    {                                                                                    │      {                                                                                   
        // Biggest 'standard' txin is a 15-of-15 P2SH multisig with compressed           │          // Biggest 'standard' txin involving only keys is a 15-of-15 P2SH               
        // keys (remember the 520 byte limit on redeemScript size). That works           │          // multisig with compressed keys (remember the 520 byte limit on                
        // out to a (15*(33+1))+3=513 byte redeemScript, 513+1+15*(73+1)+3=1627          │          // redeemScript size). That works out to a (15*(33+1))+3=513 byte               
        // bytes of scriptSig, which we round off to 1650 bytes for some minor           │          // redeemScript, 513+1+15*(73+1)+3=1627 bytes of scriptSig, which               
        // future-proofing. That's also enough to spend a 20-of-20                       │          // we round off to 1650(MAX_STANDARD_SCRIPTSIG_SIZE) bytes for                  
        // CHECKMULTISIG scriptPubKey, though such a scriptPubKey is not                 │          // some minor future-proofing. That's also enough to spend a                    
        // considered standard.                                                          │          // 20-of-20 CHECKMULTISIG scriptPubKey, though such a scriptPubKey              
        if (txin.scriptSig.size() > 1650) {                                              │          // is not considered standard.                                                  
                                                                                         │          if (txin.scriptSig.size() > MAX_STANDARD_SCRIPTSIG_SIZE) {                      
            reason = "scriptsig-size";                                                   │              reason = "scriptsig-size";                                                  
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
        if (!txin.scriptSig.IsPushOnly()) {                                              │          if (!txin.scriptSig.IsPushOnly()) {                                             
            reason = "scriptsig-not-pushonly";                                           │              reason = "scriptsig-not-pushonly";                                          
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    unsigned int nDataOut = 0;                                                           │      unsigned int nDataOut = 0;                                                          
    txnouttype whichType;                                                                │      TxoutType whichType;                                                                
    BOOST_FOREACH(const CTxOut& txout, tx.vout) {                                        │      for (const CTxOut& txout : tx.vout) {                                               
        if (!::IsStandard(txout.scriptPubKey, whichType, witnessEnabled)) {              │          if (!::IsStandard(txout.scriptPubKey, whichType)) {                             
            reason = "scriptpubkey";                                                     │              reason = "scriptpubkey";                                                    
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (whichType == TX_NULL_DATA)                                                   │          if (whichType == TxoutType::NULL_DATA)                                          
            nDataOut++;                                                                  │              nDataOut++;                                                                 
        else if ((whichType == TX_MULTISIG) && (!fIsBareMultisigStd)) {                  │          else if ((whichType == TxoutType::MULTISIG) && (!permit_bare_multisig)) {       
            reason = "bare-multisig";                                                    │              reason = "bare-multisig";                                                   
            return false;                                                                │              return false;                                                               
        } else if (txout.IsDust(nHardDustLimit)) {                                       │          } else if (IsDust(txout, dust_relay_fee)) {                                     
            reason = "dust";                                                             │              reason = "dust";                                                            
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // only one OP_RETURN txout is permitted                                             │      // only one OP_RETURN txout is permitted                                            
    if (nDataOut > 1) {                                                                  │      if (nDataOut > 1) {                                                                 
        reason = "multi-op-return";                                                      │          reason = "multi-op-return";                                                     
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/bench/verify_script.cpp:52                                                 │ bitcoin/src/bench/verify_script.cpp:20                                                   
                                                                                         │                                                                                          
    const int flags = SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH;                        │      const ECCVerifyHandle verify_handle;                                                
                                                                                         │      ECC_Start();                                                                        
                                                                                         │                                                                                          
                                                                                         │      const uint32_t flags{SCRIPT_VERIFY_WITNESS | SCRIPT_VERIFY_P2SH};                   
    const int witnessversion = 0;                                                        │      const int witnessversion = 0;                                                       
                                                                                         │                                                                                          
    // Keypair.                                                                          │      // Key pair.                                                                        
    CKey key;                                                                            │      CKey key;                                                                           
    const unsigned char vchKey[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, │      static const std::array<unsigned char, 32> vchKey = {                               
    key.Set(vchKey, vchKey + 32, false);                                                 │          {                                                                               
                                                                                         │              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
                                                                                         │          }                                                                               
                                                                                         │      };                                                                                  
                                                                                         │      key.Set(vchKey.begin(), vchKey.end(), false);                                       
    CPubKey pubkey = key.GetPubKey();                                                    │      CPubKey pubkey = key.GetPubKey();                                                   
    uint160 pubkeyHash;                                                                  │      uint160 pubkeyHash;                                                                 
    CHash160().Write(pubkey.begin(), pubkey.size()).Finalize(pubkeyHash.begin());        │      CHash160().Write(pubkey).Finalize(pubkeyHash);                                      
                                                                                         │                                                                                          
    // Script.                                                                           │      // Script.                                                                          
    CScript scriptPubKey = CScript() << witnessversion << ToByteVector(pubkeyHash);      │      CScript scriptPubKey = CScript() << witnessversion << ToByteVector(pubkeyHash);     
    CScript scriptSig;                                                                   │      CScript scriptSig;                                                                  
    CScript witScriptPubkey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkeyHa │      CScript witScriptPubkey = CScript() << OP_DUP << OP_HASH160 << ToByteVector(pubkeyHa
    CTransaction txCredit = BuildCreditingTransaction(scriptPubKey);                     │      const CMutableTransaction& txCredit = BuildCreditingTransaction(scriptPubKey, 1);   
    CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, txCredit);         │      CMutableTransaction txSpend = BuildSpendingTransaction(scriptSig, CScriptWitness(), 
    CScriptWitness& witness = txSpend.vin[0].scriptWitness;                              │      CScriptWitness& witness = txSpend.vin[0].scriptWitness;                             
    witness.stack.emplace_back();                                                        │      witness.stack.emplace_back();                                                       
    key.Sign(SignatureHash(witScriptPubkey, txSpend, 0, SIGHASH_ALL, txCredit.vout[0].nV │      key.Sign(SignatureHash(witScriptPubkey, txSpend, 0, SIGHASH_ALL, txCredit.vout[0].nV
    witness.stack.back().push_back(static_cast<unsigned char>(SIGHASH_ALL));             │      witness.stack.back().push_back(static_cast<unsigned char>(SIGHASH_ALL));            
    witness.stack.push_back(ToByteVector(pubkey));                                       │      witness.stack.push_back(ToByteVector(pubkey));                                      
                                                                                         │                                                                                          
    // Benchmark.                                                                        │      // Benchmark.                                                                       
    while (state.KeepRunning()) {                                                        │      bench.run([&] {                                                                     
        ScriptError err;                                                                 │          ScriptError err;                                                                
        bool success = VerifyScript(                                                     │          bool success = VerifyScript(                                                    
            txSpend.vin[0].scriptSig,                                                    │              txSpend.vin[0].scriptSig,                                                   
            txCredit.vout[0].scriptPubKey,                                               │              txCredit.vout[0].scriptPubKey,                                              
            &txSpend.vin[0].scriptWitness,                                               │              &txSpend.vin[0].scriptWitness,                                              
            flags,                                                                       │              flags,                                                                      
            MutableTransactionSignatureChecker(&txSpend, 0, txCredit.vout[0].nValue),    │              MutableTransactionSignatureChecker(&txSpend, 0, txCredit.vout[0].nValue, Mis
            &err);                                                                       │              &err);                                                                      
        assert(err == SCRIPT_ERR_OK);                                                    │          assert(err == SCRIPT_ERR_OK);                                                   
        assert(success);                                                                 │          assert(success);                                                                
                                                                                         │                                                                                          
#if defined(HAVE_CONSENSUS_LIB)                                                          │  #if defined(HAVE_CONSENSUS_LIB)                                                         
        CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                               │          CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                              
        stream << txSpend;                                                               │          stream << txSpend;                                                              
        int csuccess = bitcoinconsensus_verify_script_with_amount(                       │          int csuccess = bitcoinconsensus_verify_script_with_amount(                      
            txCredit.vout[0].scriptPubKey.data(),                                        │              txCredit.vout[0].scriptPubKey.data(),                                       
            txCredit.vout[0].scriptPubKey.size(),                                        │              txCredit.vout[0].scriptPubKey.size(),                                       
            txCredit.vout[0].nValue,                                                     │              txCredit.vout[0].nValue,                                                    
            (const unsigned char*)stream.data(), stream.size(), 0, flags, nullptr);      │              (const unsigned char*)stream.data(), stream.size(), 0, flags, nullptr);     
        assert(csuccess == 1);                                                           │          assert(csuccess == 1);                                                          
#endif                                                                                   │  #endif                                                                                  
    }                                                                                    │      });                                                                                 
                                                                                         │      ECC_Stop();                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:317                                                    │ dogecoin/src/test/bloom_tests.cpp:335                                                    
                                                                                         │                                                                                          
    // Random real block (000000000000dab0130bbcc991d3d7ae6b81aa6f50a798888dfe62337458dc │      // Random real block (000000000000dab0130bbcc991d3d7ae6b81aa6f50a798888dfe62337458dc
    // With one tx                                                                       │      // With one tx                                                                      
    CBlock block;                                                                        │      CBlock block;                                                                       
    CDataStream stream(ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b │      CDataStream stream(ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b
    stream >> block;                                                                     │      stream >> block;                                                                    
                                                                                         │                                                                                          
    CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                              │      CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL);                             
    // Match the only transaction                                                        │      // Match the only transaction                                                       
    filter.insert(uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669 │      filter.insert(uint256S("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669
                                                                                         │                                                                                          
    CMerkleBlock merkleBlock(block, filter);                                             │      CMerkleBlock merkleBlock(block, filter);                                            
    BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                        │      BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash());                       
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                    │      BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1);                                   
                                                                                         │                                                                                          
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x63194f18be0af63f2c6bc9d │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256S("0x63194f18be0af63f2c6bc9d
    BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                  │      BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0);                                 
                                                                                         │                                                                                          
    std::vector<uint256> vMatched;                                                       │      std::vector<uint256> vMatched;                                                      
    std::vector<unsigned int> vIndex;                                                    │      std::vector<unsigned int> vIndex;                                                   
    BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot │      BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched, vIndex) == block.hashMerkleRoot
    BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                      │      BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size());                     
    for (unsigned int i = 0; i < vMatched.size(); i++)                                   │      for (unsigned int i = 0; i < vMatched.size(); i++)                                  
        BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                   │          BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second);                  
                                                                                         │                                                                                          
    CDataStream merkleStream(SER_NETWORK, PROTOCOL_VERSION);                             │      CDataStream merkleStream(SER_NETWORK, PROTOCOL_VERSION);                            
    merkleStream << merkleBlock;                                                         │      merkleStream << merkleBlock;                                                        
                                                                                         │                                                                                          
    std::vector<uint8_t> expected = ParseHex("0100000079cda856b143d9db2c1caff01d1aecc863 │      std::vector<unsigned char> vch = ParseHex("0100000079cda856b143d9db2c1caff01d1aecc86
    auto result{MakeUCharSpan(merkleStream)};                                            │      std::vector<char> expected(vch.size());                                             
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), result.begin(), resu │      for (unsigned int i = 0; i < vch.size(); i++)                                       
                                                                                         │          expected[i] = (char)vch[i];                                                     
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), merkleStream.begin()
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/lib/univalue_get.cpp:19                                           │ bitcoin/src/univalue/lib/univalue_get.cpp:19                                             
                                                                                         │                                                                                          
static bool ParsePrechecks(const std::string& str)                                       │  static bool ParsePrechecks(const std::string& str)                                      
{                                                                                        │  {                                                                                       
    if (str.empty()) // No empty string allowed                                          │      if (str.empty()) // No empty string allowed                                         
        return false;                                                                    │          return false;                                                                   
    if (str.size() >= 1 && (json_isspace(str[0]) || json_isspace(str[str.size()-1]))) // │      if (str.size() >= 1 && (json_isspace(str[0]) || json_isspace(str[str.size()-1]))) //
        return false;                                                                    │          return false;                                                                   
    if (str.size() != strlen(str.c_str())) // No embedded NUL characters allowed         │      if (str.size() != strlen(str.c_str())) // No embedded NUL characters allowed        
        return false;                                                                    │          return false;                                                                   
    return true;                                                                         │      return true;                                                                        
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
bool ParseInt32(const std::string& str, int32_t *out)                                    │  bool ParseInt32(const std::string& str, int32_t *out)                                   
{                                                                                        │  {                                                                                       
    if (!ParsePrechecks(str))                                                            │      if (!ParsePrechecks(str))                                                           
        return false;                                                                    │          return false;                                                                   
    char *endp = nullptr;                                                                │      char *endp = nullptr;                                                               
    errno = 0; // strtol will not set errno if valid                                     │      errno = 0; // strtol will not set errno if valid                                    
    long int n = strtol(str.c_str(), &endp, 10);                                         │      long int n = strtol(str.c_str(), &endp, 10);                                        
    if(out) *out = (int32_t)n;                                                           │      if(out) *out = (int32_t)n;                                                          
    // Note that strtol returns a *long int*, so even if strtol doesn't report an over/u │      // Note that strtol returns a *long int*, so even if strtol doesn't report an over/u
    // we still have to check that the returned value is within the range of an *int32_t │      // we still have to check that the returned value is within the range of an *int32_t
    // platforms the size of these types may be different.                               │      // platforms the size of these types may be different.                              
    return endp && *endp == 0 && !errno &&                                               │      return endp && *endp == 0 && !errno &&                                              
        n >= std::numeric_limits<int32_t>::min() &&                                      │          n >= std::numeric_limits<int32_t>::min() &&                                     
        n <= std::numeric_limits<int32_t>::max();                                        │          n <= std::numeric_limits<int32_t>::max();                                       
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
bool ParseInt64(const std::string& str, int64_t *out)                                    │  bool ParseInt64(const std::string& str, int64_t *out)                                   
{                                                                                        │  {                                                                                       
    if (!ParsePrechecks(str))                                                            │      if (!ParsePrechecks(str))                                                           
        return false;                                                                    │          return false;                                                                   
    char *endp = nullptr;                                                                │      char *endp = nullptr;                                                               
    errno = 0; // strtoll will not set errno if valid                                    │      errno = 0; // strtoll will not set errno if valid                                   
    long long int n = strtoll(str.c_str(), &endp, 10);                                   │      long long int n = strtoll(str.c_str(), &endp, 10);                                  
    if(out) *out = (int64_t)n;                                                           │      if(out) *out = (int64_t)n;                                                          
    // Note that strtoll returns a *long long int*, so even if strtol doesn't report a o │      // Note that strtoll returns a *long long int*, so even if strtol doesn't report a o
    // we still have to check that the returned value is within the range of an *int64_t │      // we still have to check that the returned value is within the range of an *int64_t
    return endp && *endp == 0 && !errno &&                                               │      return endp && *endp == 0 && !errno &&                                              
        n >= std::numeric_limits<int64_t>::min() &&                                      │          n >= std::numeric_limits<int64_t>::min() &&                                     
        n <= std::numeric_limits<int64_t>::max();                                        │          n <= std::numeric_limits<int64_t>::max();                                       
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
bool ParseDouble(const std::string& str, double *out)                                    │  bool ParseDouble(const std::string& str, double *out)                                   
{                                                                                        │  {                                                                                       
    if (!ParsePrechecks(str))                                                            │      if (!ParsePrechecks(str))                                                           
        return false;                                                                    │          return false;                                                                   
    if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') // No hexadecimal floats allo │      if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') // No hexadecimal floats allo
        return false;                                                                    │          return false;                                                                   
    std::istringstream text(str);                                                        │      std::istringstream text(str);                                                       
    text.imbue(std::locale::classic());                                                  │      text.imbue(std::locale::classic());                                                 
    double result;                                                                       │      double result;                                                                      
    text >> result;                                                                      │      text >> result;                                                                     
    if(out) *out = result;                                                               │      if(out) *out = result;                                                              
    return text.eof() && !text.fail();                                                   │      return text.eof() && !text.fail();                                                  
}                                                                                        │  }                                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/transactions.cpp:466                                             │ bitcoin/src/wallet/rpc/transactions.cpp:578                                              
RPCResult::Type::OBJ, "", "", Cat(Cat<std::vector<RPCResult>>(                           │  RPCResult::Type::ARR, "transactions", "",                                               
                        {                                                                │                          {                                                               
                            {RPCResult::Type::BOOL, "involvesWatchonly", /*optional=*/tr │                              {RPCResult::Type::OBJ, "", "", Cat(Cat<std::vector<RPCResult
                            {RPCResult::Type::STR, "address", "The bitcoin address of th │                              {                                                           
                            {RPCResult::Type::STR, "category", "The transaction category │                                  {RPCResult::Type::BOOL, "involvesWatchonly", /*optional=
                                "\"send\"                  Transactions sent.\n"         │                                  {RPCResult::Type::STR, "address", "The bitcoin address o
                                "\"receive\"               Non-coinbase transactions rec │                                  {RPCResult::Type::STR, "category", "The transaction cate
                                "\"generate\"              Coinbase transactions receive │                                      "\"send\"                  Transactions sent.\n"    
                                "\"immature\"              Coinbase transactions receive │                                      "\"receive\"               Non-coinbase transactions
                                "\"orphan\"                Orphaned coinbase transaction │                                      "\"generate\"              Coinbase transactions rec
                            {RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + C │                                      "\"immature\"              Coinbase transactions rec
                                "for all other categories"},                             │                                      "\"orphan\"                Orphaned coinbase transac
                            {RPCResult::Type::STR, "label", /*optional=*/true, "A commen │                                  {RPCResult::Type::STR_AMOUNT, "amount", "The amount in "
                            {RPCResult::Type::NUM, "vout", "the vout value"},            │                                      "for all other categories"},                        
                            {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The │                                  {RPCResult::Type::NUM, "vout", "the vout value"},       
                                 "'send' category of transactions."},                    │                                  {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, 
                        },                                                               │                                       "'send' category of transactions."},               
                        TransactionDescriptionString()),                                 │                              },                                                          
                        {                                                                │                              TransactionDescriptionString()),                            
                            {RPCResult::Type::BOOL, "abandoned", /*optional=*/true, "'tr │                              {                                                           
                                 "'send' category of transactions."},                    │                                  {RPCResult::Type::BOOL, "abandoned", /*optional=*/true, 
                                                                                         │                                  {RPCResult::Type::STR, "label", /*optional=*/true, "A co
                                                                                         │                              })},                                                        
                                                                                         │                          }                                                               
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:783                                                 │ bitcoin/src/script/interpreter.cpp:957                                                   
                                                                                         │                                                                                          
                    // (x1 x2 -- out)                                                    │                      // (x1 x2 -- out)                                                   
                    if (stack.size() < 2)                                                │                      if (stack.size() < 2)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                    CScriptNum bn1(stacktop(-2), fRequireMinimal);                       │                      CScriptNum bn1(stacktop(-2), fRequireMinimal);                      
                    CScriptNum bn2(stacktop(-1), fRequireMinimal);                       │                      CScriptNum bn2(stacktop(-1), fRequireMinimal);                      
                    CScriptNum bn(0);                                                    │                      CScriptNum bn(0);                                                   
                    switch (opcode)                                                      │                      switch (opcode)                                                     
                    {                                                                    │                      {                                                                   
                    case OP_ADD:                                                         │                      case OP_ADD:                                                        
                        bn = bn1 + bn2;                                                  │                          bn = bn1 + bn2;                                                 
                        break;                                                           │                          break;                                                          
                                                                                         │                                                                                          
                    case OP_SUB:                                                         │                      case OP_SUB:                                                        
                        bn = bn1 - bn2;                                                  │                          bn = bn1 - bn2;                                                 
                        break;                                                           │                          break;                                                          
                                                                                         │                                                                                          
                    case OP_BOOLAND:             bn = (bn1 != bnZero && bn2 != bnZero);  │                      case OP_BOOLAND:             bn = (bn1 != bnZero && bn2 != bnZero); 
                    case OP_BOOLOR:              bn = (bn1 != bnZero || bn2 != bnZero);  │                      case OP_BOOLOR:              bn = (bn1 != bnZero || bn2 != bnZero); 
                    case OP_NUMEQUAL:            bn = (bn1 == bn2); break;               │                      case OP_NUMEQUAL:            bn = (bn1 == bn2); break;              
                    case OP_NUMEQUALVERIFY:      bn = (bn1 == bn2); break;               │                      case OP_NUMEQUALVERIFY:      bn = (bn1 == bn2); break;              
                    case OP_NUMNOTEQUAL:         bn = (bn1 != bn2); break;               │                      case OP_NUMNOTEQUAL:         bn = (bn1 != bn2); break;              
                    case OP_LESSTHAN:            bn = (bn1 < bn2); break;                │                      case OP_LESSTHAN:            bn = (bn1 < bn2); break;               
                    case OP_GREATERTHAN:         bn = (bn1 > bn2); break;                │                      case OP_GREATERTHAN:         bn = (bn1 > bn2); break;               
                    case OP_LESSTHANOREQUAL:     bn = (bn1 <= bn2); break;               │                      case OP_LESSTHANOREQUAL:     bn = (bn1 <= bn2); break;              
                    case OP_GREATERTHANOREQUAL:  bn = (bn1 >= bn2); break;               │                      case OP_GREATERTHANOREQUAL:  bn = (bn1 >= bn2); break;              
                    case OP_MIN:                 bn = (bn1 < bn2 ? bn1 : bn2); break;    │                      case OP_MIN:                 bn = (bn1 < bn2 ? bn1 : bn2); break;   
                    case OP_MAX:                 bn = (bn1 > bn2 ? bn1 : bn2); break;    │                      case OP_MAX:                 bn = (bn1 > bn2 ? bn1 : bn2); break;   
                    default:                     assert(!"invalid opcode"); break;       │                      default:                     assert(!"invalid opcode"); break;      
                    }                                                                    │                      }                                                                   
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                    stack.push_back(bn.getvch());                                        │                      stack.push_back(bn.getvch());                                       
                                                                                         │                                                                                          
                    if (opcode == OP_NUMEQUALVERIFY)                                     │                      if (opcode == OP_NUMEQUALVERIFY)                                    
                    {                                                                    │                      {                                                                   
                        if (CastToBool(stacktop(-1)))                                    │                          if (CastToBool(stacktop(-1)))                                   
                            popstack(stack);                                             │                              popstack(stack);                                            
                        else                                                             │                          else                                                            
                            return set_error(serror, SCRIPT_ERR_NUMEQUALVERIFY);         │                              return set_error(serror, SCRIPT_ERR_NUMEQUALVERIFY);        
                    }                                                                    │                      }                                                                   
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/addrman_tests.cpp:422                                                 │ bitcoin/src/test/addrman_tests.cpp:473                                                   
                                                                                         │                                                                                          
    CAddrManTest addrman;                                                                │      std::vector<bool> asmap = FromBytes(asmap_raw, sizeof(asmap_raw) * 8);              
                                                                                         │      NetGroupManager ngm_asmap{asmap};                                                   
    // Set addrman addr placement to be deterministic.                                   │                                                                                          
    addrman.MakeDeterministic();                                                         │                                                                                          
                                                                                         │                                                                                          
    CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE);             │      CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE);            
    CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE);             │      CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE);            
                                                                                         │                                                                                          
    CNetAddr source1 = ResolveIP("250.1.1.1");                                           │      CNetAddr source1 = ResolveIP("250.1.1.1");                                          
                                                                                         │                                                                                          
                                                                                         │                                                                                          
    CAddrInfo info1 = CAddrInfo(addr1, source1);                                         │      AddrInfo info1 = AddrInfo(addr1, source1);                                          
                                                                                         │                                                                                          
    uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();               │      uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();              
    uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();               │      uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();              
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_EQUAL(info1.GetTriedBucket(nKey1, ngm_asmap), 236);                     
                                                                                         │                                                                                          
    BOOST_CHECK(info1.GetTriedBucket(nKey1) == 40);                                      │      // Test: Make sure key actually randomizes bucket placement. A fail on              
                                                                                         │                                                                                          
    // Test 26: Make sure key actually randomizes bucket placement. A fail on            │                                                                                          
    //  this test could be a security issue.                                             │      //  this test could be a security issue.                                            
    BOOST_CHECK(info1.GetTriedBucket(nKey1) != info1.GetTriedBucket(nKey2));             │      BOOST_CHECK(info1.GetTriedBucket(nKey1, ngm_asmap) != info1.GetTriedBucket(nKey2, ng
                                                                                         │                                                                                          
    // Test 27: Two addresses with same IP but different ports can map to                │      // Test: Two addresses with same IP but different ports can map to                  
    //  different buckets because they have different keys.                              │      //  different buckets because they have different keys.                             
    CAddrInfo info2 = CAddrInfo(addr2, source1);                                         │      AddrInfo info2 = AddrInfo(addr2, source1);                                          
                                                                                         │                                                                                          
    BOOST_CHECK(info1.GetKey() != info2.GetKey());                                       │      BOOST_CHECK(info1.GetKey() != info2.GetKey());                                      
    BOOST_CHECK(info1.GetTriedBucket(nKey1) != info2.GetTriedBucket(nKey1));             │      BOOST_CHECK(info1.GetTriedBucket(nKey1, ngm_asmap) != info2.GetTriedBucket(nKey1, ng
                                                                                         │                                                                                          
    std::set<int> buckets;                                                               │      std::set<int> buckets;                                                              
    for (int i = 0; i < 255; i++) {                                                      │      for (int j = 0; j < 255; j++) {                                                     
        CAddrInfo infoi = CAddrInfo(                                                     │          AddrInfo infoj = AddrInfo(                                                      
            CAddress(ResolveService("250.1.1." + boost::to_string(i)), NODE_NONE),       │              CAddress(ResolveService("101." + ToString(j) + ".1.1"), NODE_NONE),         
            ResolveIP("250.1.1." + boost::to_string(i)));                                │              ResolveIP("101." + ToString(j) + ".1.1"));                                  
        int bucket = infoi.GetTriedBucket(nKey1);                                        │          int bucket = infoj.GetTriedBucket(nKey1, ngm_asmap);                            
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test 28: IP addresses in the same group (\16 prefix for IPv4) should              │      // Test: IP addresses in the different /16 prefix MAY map to more than              
    //  never get more than 8 buckets                                                    │      // 8 buckets.                                                                       
    BOOST_CHECK(buckets.size() == 8);                                                    │      BOOST_CHECK(buckets.size() > 8);                                                    
                                                                                         │                                                                                          
    buckets.clear();                                                                     │      buckets.clear();                                                                    
    for (int j = 0; j < 255; j++) {                                                      │      for (int j = 0; j < 255; j++) {                                                     
        CAddrInfo infoj = CAddrInfo(                                                     │          AddrInfo infoj = AddrInfo(                                                      
            CAddress(ResolveService("250." + boost::to_string(j) + ".1.1"), NODE_NONE),  │              CAddress(ResolveService("250." + ToString(j) + ".1.1"), NODE_NONE),         
            ResolveIP("250." + boost::to_string(j) + ".1.1"));                           │              ResolveIP("250." + ToString(j) + ".1.1"));                                  
        int bucket = infoj.GetTriedBucket(nKey1);                                        │          int bucket = infoj.GetTriedBucket(nKey1, ngm_asmap);                            
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test 29: IP addresses in the different groups should map to more than             │      // Test: IP addresses in the different /16 prefix MAY NOT map to more than          
    //  8 buckets.                                                                       │      // 8 buckets.                                                                       
    BOOST_CHECK(buckets.size() == 160);                                                  │      BOOST_CHECK(buckets.size() == 8);                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/addrman_tests.cpp:422                                                 │ bitcoin/src/test/addrman_tests.cpp:348                                                   
                                                                                         │                                                                                          
    CAddrManTest addrman;                                                                │                                                                                          
                                                                                         │                                                                                          
    // Set addrman addr placement to be deterministic.                                   │                                                                                          
    addrman.MakeDeterministic();                                                         │                                                                                          
                                                                                         │                                                                                          
    CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE);             │      CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE);            
    CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE);             │      CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE);            
                                                                                         │                                                                                          
    CNetAddr source1 = ResolveIP("250.1.1.1");                                           │      CNetAddr source1 = ResolveIP("250.1.1.1");                                          
                                                                                         │                                                                                          
                                                                                         │                                                                                          
    CAddrInfo info1 = CAddrInfo(addr1, source1);                                         │      AddrInfo info1 = AddrInfo(addr1, source1);                                          
                                                                                         │                                                                                          
    uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();               │      uint256 nKey1 = (uint256)(CHashWriter(SER_GETHASH, 0) << 1).GetHash();              
    uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();               │      uint256 nKey2 = (uint256)(CHashWriter(SER_GETHASH, 0) << 2).GetHash();              
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_EQUAL(info1.GetTriedBucket(nKey1, EMPTY_NETGROUPMAN), 40);              
                                                                                         │                                                                                          
    BOOST_CHECK(info1.GetTriedBucket(nKey1) == 40);                                      │      // Test: Make sure key actually randomizes bucket placement. A fail on              
                                                                                         │                                                                                          
    // Test 26: Make sure key actually randomizes bucket placement. A fail on            │                                                                                          
    //  this test could be a security issue.                                             │      //  this test could be a security issue.                                            
    BOOST_CHECK(info1.GetTriedBucket(nKey1) != info1.GetTriedBucket(nKey2));             │      BOOST_CHECK(info1.GetTriedBucket(nKey1, EMPTY_NETGROUPMAN) != info1.GetTriedBucket(n
                                                                                         │                                                                                          
    // Test 27: Two addresses with same IP but different ports can map to                │      // Test: Two addresses with same IP but different ports can map to                  
    //  different buckets because they have different keys.                              │      //  different buckets because they have different keys.                             
    CAddrInfo info2 = CAddrInfo(addr2, source1);                                         │      AddrInfo info2 = AddrInfo(addr2, source1);                                          
                                                                                         │                                                                                          
    BOOST_CHECK(info1.GetKey() != info2.GetKey());                                       │      BOOST_CHECK(info1.GetKey() != info2.GetKey());                                      
    BOOST_CHECK(info1.GetTriedBucket(nKey1) != info2.GetTriedBucket(nKey1));             │      BOOST_CHECK(info1.GetTriedBucket(nKey1, EMPTY_NETGROUPMAN) != info2.GetTriedBucket(n
                                                                                         │                                                                                          
    std::set<int> buckets;                                                               │      std::set<int> buckets;                                                              
    for (int i = 0; i < 255; i++) {                                                      │      for (int i = 0; i < 255; i++) {                                                     
        CAddrInfo infoi = CAddrInfo(                                                     │          AddrInfo infoi = AddrInfo(                                                      
            CAddress(ResolveService("250.1.1." + boost::to_string(i)), NODE_NONE),       │              CAddress(ResolveService("250.1.1." + ToString(i)), NODE_NONE),              
            ResolveIP("250.1.1." + boost::to_string(i)));                                │              ResolveIP("250.1.1." + ToString(i)));                                       
        int bucket = infoi.GetTriedBucket(nKey1);                                        │          int bucket = infoi.GetTriedBucket(nKey1, EMPTY_NETGROUPMAN);                    
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test 28: IP addresses in the same group (\16 prefix for IPv4) should              │      // Test: IP addresses in the same /16 prefix should                                 
    //  never get more than 8 buckets                                                    │      // never get more than 8 buckets with legacy grouping                               
    BOOST_CHECK(buckets.size() == 8);                                                    │      BOOST_CHECK_EQUAL(buckets.size(), 8U);                                              
                                                                                         │                                                                                          
    buckets.clear();                                                                     │      buckets.clear();                                                                    
    for (int j = 0; j < 255; j++) {                                                      │      for (int j = 0; j < 255; j++) {                                                     
        CAddrInfo infoj = CAddrInfo(                                                     │          AddrInfo infoj = AddrInfo(                                                      
            CAddress(ResolveService("250." + boost::to_string(j) + ".1.1"), NODE_NONE),  │              CAddress(ResolveService("250." + ToString(j) + ".1.1"), NODE_NONE),         
            ResolveIP("250." + boost::to_string(j) + ".1.1"));                           │              ResolveIP("250." + ToString(j) + ".1.1"));                                  
        int bucket = infoj.GetTriedBucket(nKey1);                                        │          int bucket = infoj.GetTriedBucket(nKey1, EMPTY_NETGROUPMAN);                    
        buckets.insert(bucket);                                                          │          buckets.insert(bucket);                                                         
    }                                                                                    │      }                                                                                   
    // Test 29: IP addresses in the different groups should map to more than             │      // Test: IP addresses in the different /16 prefix should map to more than           
    //  8 buckets.                                                                       │      // 8 buckets with legacy grouping                                                   
    BOOST_CHECK(buckets.size() == 160);                                                  │      BOOST_CHECK_EQUAL(buckets.size(), 160U);                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/coins_tests.cpp:349                                                    │ dogecoin/src/test/coins_tests.cpp:289                                                    
                                                                                         │                                                                                          
                                                                                         │                                                                                          
                COutPoint prevout;                                                       │                  uint256 prevouthash;                                                    
                // 1/20 times reconnect a previously disconnected tx                     │                  // 1/20 times reconnect a previously disconnected tx                    
                if (randiter % 20 == 2 && disconnected_coins.size()) {                   │                  if (randiter % 20 == 2 && disconnectedids.size()) {                     
                    auto utxod = FindRandomFrom(disconnected_coins);                     │                      TxData &txd = FindRandomFrom(disconnectedids);                      
                    tx = CMutableTransaction{std::get<0>(utxod->second)};                │                      tx = std::get<0>(txd);                                              
                    prevout = tx.vin[0].prevout;                                         │                      prevouthash = tx.vin[0].prevout.hash;                               
                    if (!CTransaction(tx).IsCoinBase() && !utxoset.count(prevout)) {     │                      if (!CTransaction(tx).IsCoinBase() && !utxoset.count(prevouthash)) {
                        disconnected_coins.erase(utxod->first);                          │                          disconnectedids.erase(tx.GetHash());                            
                        continue;                                                        │                          continue;                                                       
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    // If this tx is already IN the UTXO, then it must be a coinbase, an │                      // If this tx is already IN the UTXO, then it must be a coinbase, an
                    if (utxoset.count(utxod->first)) {                                   │                      if (utxoset.count(tx.GetHash())) {                                  
                        assert(CTransaction(tx).IsCoinBase());                           │                          assert(CTransaction(tx).IsCoinBase());                          
                        assert(duplicate_coins.count(utxod->first));                     │                          assert(duplicateids.count(tx.GetHash()));                       
                    }                                                                    │                      }                                                                   
                    disconnected_coins.erase(utxod->first);                              │                      disconnectedids.erase(tx.GetHash());                                
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
                // 16/20 times create a regular tx                                       │                  // 16/20 times create a regular tx                                      
                else {                                                                   │                  else {                                                                  
                    auto utxod = FindRandomFrom(utxoset);                                │                      TxData &txd = FindRandomFrom(utxoset);                              
                    prevout = utxod->first;                                              │                      prevouthash = std::get<0>(txd).GetHash();                           
                                                                                         │                                                                                          
                    // Construct the tx to spend the coins of prevouthash                │                      // Construct the tx to spend the coins of prevouthash               
                    tx.vin[0].prevout = prevout;                                         │                      tx.vin[0].prevout.hash = prevouthash;                               
                                                                                         │                      tx.vin[0].prevout.n = 0;                                            
                    assert(!CTransaction(tx).IsCoinBase());                              │                      assert(!CTransaction(tx).IsCoinBase());                             
                }                                                                        │                  }                                                                       
                // In this simple test coins only have two states, spent or unspent, sav │                  // In this simple test coins only have two states, spent or unspent, sav
                old_coin = result[prevout];                                              │                  oldcoins = result[prevouthash];                                         
                // Update the expected result of prevouthash to know these coins are spe │                  // Update the expected result of prevouthash to know these coins are spe
                result[prevout].Clear();                                                 │                  result[prevouthash].Clear();                                            
                                                                                         │                                                                                          
                utxoset.erase(prevout);                                                  │                  utxoset.erase(prevouthash);                                             
                                                                                         │                                                                                          
                // The test is designed to ensure spending a duplicate coinbase will wor │                  // The test is designed to ensure spending a duplicate coinbase will wor
                // if that ever happens and not resurrect the previously overwritten coi │                  // if that ever happens and not resurrect the previously overwritten coi
                if (duplicate_coins.count(prevout)) {                                    │                  if (duplicateids.count(prevouthash))                                    
                    spent_a_duplicate_coinbase = true;                                   │                      spent_a_duplicate_coinbase = true;                                  
                }                                                                        │                                                                                          
                                                                                         │                                                                                          
            }                                                                            │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/net_processing.cpp:2388                                                     │ bitcoin/src/net_processing.cpp:3482                                                      
                                                                                         │                                                                                          
                // We can add the wtxid of this transaction to our reject filter.        │                  // We can add the wtxid of this transaction to our reject filter.       
                // Do not add txids of witness transactions or witness-stripped          │                  // Do not add txids of witness transactions or witness-stripped         
                // transactions to the filter, as they can have been malleated;          │                  // transactions to the filter, as they can have been malleated;         
                // adding such txids to the reject filter would potentially              │                  // adding such txids to the reject filter would potentially             
                // interfere with relay of valid transactions from peers that            │                  // interfere with relay of valid transactions from peers that           
                // do not support wtxid-based relay. See                                 │                  // do not support wtxid-based relay. See                                
                // https://github.com/bitcoin/bitcoin/issues/8279 for details.           │                  // https://github.com/bitcoin/bitcoin/issues/8279 for details.          
                // We can remove this restriction (and always add wtxids to              │                  // We can remove this restriction (and always add wtxids to             
                // the filter even for witness stripped transactions) once               │                  // the filter even for witness stripped transactions) once              
                // wtxid-based relay is broadly deployed.                                │                  // wtxid-based relay is broadly deployed.                               
                // See also comments in https://github.com/bitcoin/bitcoin/pull/18044#di │                  // See also comments in https://github.com/bitcoin/bitcoin/pull/18044#di
                // for concerns around weakening security of unupgraded nodes            │                  // for concerns around weakening security of unupgraded nodes           
                // if we start doing this too early.                                     │                  // if we start doing this too early.                                    
                m_recent_rejects.insert(porphanTx->GetWitnessHash());                    │                  m_recent_rejects.insert(tx.GetWitnessHash());                           
                                                                                         │                  m_txrequest.ForgetTxHash(tx.GetWitnessHash());                          
                // If the transaction failed for TX_INPUTS_NOT_STANDARD,                 │                  // If the transaction failed for TX_INPUTS_NOT_STANDARD,                
                // then we know that the witness was irrelevant to the policy            │                  // then we know that the witness was irrelevant to the policy           
                // failure, since this check depends only on the txid                    │                  // failure, since this check depends only on the txid                   
                // (the scriptPubKey being spent is covered by the txid).                │                  // (the scriptPubKey being spent is covered by the txid).               
                // Add the txid to the reject filter to prevent repeated                 │                  // Add the txid to the reject filter to prevent repeated                
                // processing of this transaction in the event that child                │                  // processing of this transaction in the event that child               
                // transactions are later received (resulting in                         │                  // transactions are later received (resulting in                        
                // parent-fetching by txid via the orphan-handling logic).               │                  // parent-fetching by txid via the orphan-handling logic).              
                if (state.GetResult() == TxValidationResult::TX_INPUTS_NOT_STANDARD && p │                  if (state.GetResult() == TxValidationResult::TX_INPUTS_NOT_STANDARD && t
                    // We only add the txid if it differs from the wtxid, to             │                      m_recent_rejects.insert(tx.GetHash());                              
                    // avoid wasting entries in the rolling bloom filter.                │                      m_txrequest.ForgetTxHash(tx.GetHash());                             
                    m_recent_rejects.insert(porphanTx->GetHash());                       │                  }                                                                       
                                                                                         │                  if (RecursiveDynamicUsage(*ptx) < 100000) {                             
                                                                                         │                      AddToCompactExtraTransactions(ptx);                                 
                }                                                                        │                  }                                                                       
            }                                                                            │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/checkqueue_tests.cpp:383                                              │ bitcoin/src/test/checkqueue_tests.cpp:384                                                
                                                                                         │                                                                                          
    auto queue = std::unique_ptr<Standard_Queue>(new Standard_Queue{QUEUE_BATCH_SIZE});  │      auto queue = std::make_unique<Standard_Queue>(QUEUE_BATCH_SIZE);                    
    {                                                                                    │      {                                                                                   
        boost::thread_group tg;                                                          │          std::vector<std::thread> tg;                                                    
        std::atomic<int> nThreads {0};                                                   │          std::atomic<int> nThreads {0};                                                  
        std::atomic<int> fails {0};                                                      │          std::atomic<int> fails {0};                                                     
        for (size_t i = 0; i < 3; ++i) {                                                 │          for (size_t i = 0; i < 3; ++i) {                                                
            tg.create_thread(                                                            │              tg.emplace_back(                                                            
                    [&]{                                                                 │                      [&]{                                                                
                    CCheckQueueControl<FakeCheck> control(queue.get());                  │                      CCheckQueueControl<FakeCheck> control(queue.get());                 
                    // While sleeping, no other thread should execute to this point      │                      // While sleeping, no other thread should execute to this point     
                    auto observed = ++nThreads;                                          │                      auto observed = ++nThreads;                                         
                    MilliSleep(10);                                                      │                      UninterruptibleSleep(std::chrono::milliseconds{10});                
                    fails += observed  != nThreads;                                      │                      fails += observed  != nThreads;                                     
                    });                                                                  │                      });                                                                 
        }                                                                                │          }                                                                               
        tg.join_all();                                                                   │          for (auto& thread: tg) {                                                        
                                                                                         │              if (thread.joinable()) thread.join();                                       
                                                                                         │          }                                                                               
        BOOST_REQUIRE_EQUAL(fails, 0);                                                   │          BOOST_REQUIRE_EQUAL(fails, 0);                                                  
    }                                                                                    │      }                                                                                   
    {                                                                                    │      {                                                                                   
        boost::thread_group tg;                                                          │          std::vector<std::thread> tg;                                                    
        std::mutex m;                                                                    │          std::mutex m;                                                                   
        bool has_lock {false};                                                           │                                                                                          
        bool has_tried {false};                                                          │                                                                                          
        bool done {false};                                                               │                                                                                          
        bool done_ack {false};                                                           │                                                                                          
        std::condition_variable cv;                                                      │          std::condition_variable cv;                                                     
                                                                                         │          bool has_lock{false};                                                           
                                                                                         │          bool has_tried{false};                                                          
                                                                                         │          bool done{false};                                                               
                                                                                         │          bool done_ack{false};                                                           
        {                                                                                │          {                                                                               
            std::unique_lock<std::mutex> l(m);                                           │              std::unique_lock<std::mutex> l(m);                                          
            tg.create_thread([&]{                                                        │              tg.emplace_back([&]{                                                        
                    CCheckQueueControl<FakeCheck> control(queue.get());                  │                      CCheckQueueControl<FakeCheck> control(queue.get());                 
                    std::unique_lock<std::mutex> l(m);                                   │                      std::unique_lock<std::mutex> ll(m);                                 
                    has_lock = true;                                                     │                      has_lock = true;                                                    
                    cv.notify_one();                                                     │                      cv.notify_one();                                                    
                    cv.wait(l, [&]{return has_tried;});                                  │                      cv.wait(ll, [&]{return has_tried;});                                
                    done = true;                                                         │                      done = true;                                                        
                    cv.notify_one();                                                     │                      cv.notify_one();                                                    
                    // Wait until the done is acknowledged                               │                      // Wait until the done is acknowledged                              
                    //                                                                   │                      //                                                                  
                    cv.wait(l, [&]{return done_ack;});                                   │                      cv.wait(ll, [&]{return done_ack;});                                 
                    });                                                                  │                      });                                                                 
            // Wait for thread to get the lock                                           │              // Wait for thread to get the lock                                          
            cv.wait(l, [&](){return has_lock;});                                         │              cv.wait(l, [&](){return has_lock;});                                        
            bool fails = false;                                                          │              bool fails = false;                                                         
            for (auto x = 0; x < 100 && !fails; ++x) {                                   │              for (auto x = 0; x < 100 && !fails; ++x) {                                  
                fails = queue->ControlMutex.try_lock();                                  │                  fails = queue->m_control_mutex.try_lock();                              
            }                                                                            │              }                                                                           
            has_tried = true;                                                            │              has_tried = true;                                                           
            cv.notify_one();                                                             │              cv.notify_one();                                                            
            cv.wait(l, [&](){return done;});                                             │              cv.wait(l, [&](){return done;});                                            
            // Acknowledge the done                                                      │              // Acknowledge the done                                                     
            done_ack = true;                                                             │              done_ack = true;                                                            
            cv.notify_one();                                                             │              cv.notify_one();                                                            
            BOOST_REQUIRE(!fails);                                                       │              BOOST_REQUIRE(!fails);                                                      
        }                                                                                │          }                                                                               
        tg.join_all();                                                                   │          for (auto& thread: tg) {                                                        
                                                                                         │              if (thread.joinable()) thread.join();                                       
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/transactions.cpp:721                                             │ bitcoin/src/wallet/rpc/transactions.cpp:578                                              
RPCResult::Type::ARR, "details", "",                                                     │  RPCResult::Type::ARR, "transactions", "",                                               
                        {                                                                │                          {                                                               
                            {RPCResult::Type::OBJ, "", "",                               │                              {RPCResult::Type::OBJ, "", "", Cat(Cat<std::vector<RPCResult
                            {                                                            │                              {                                                           
                                {RPCResult::Type::BOOL, "involvesWatchonly", /*optional= │                                  {RPCResult::Type::BOOL, "involvesWatchonly", /*optional=
                                {RPCResult::Type::STR, "address", /*optional=*/true, "Th │                                  {RPCResult::Type::STR, "address", "The bitcoin address o
                                {RPCResult::Type::STR, "category", "The transaction cate │                                  {RPCResult::Type::STR, "category", "The transaction cate
                                    "\"send\"                  Transactions sent.\n"     │                                      "\"send\"                  Transactions sent.\n"    
                                    "\"receive\"               Non-coinbase transactions │                                      "\"receive\"               Non-coinbase transactions
                                    "\"generate\"              Coinbase transactions rec │                                      "\"generate\"              Coinbase transactions rec
                                    "\"immature\"              Coinbase transactions rec │                                      "\"immature\"              Coinbase transactions rec
                                    "\"orphan\"                Orphaned coinbase transac │                                      "\"orphan\"                Orphaned coinbase transac
                                {RPCResult::Type::STR_AMOUNT, "amount", "The amount in " │                                  {RPCResult::Type::STR_AMOUNT, "amount", "The amount in "
                                {RPCResult::Type::STR, "label", /*optional=*/true, "A co │                                      "for all other categories"},                        
                                {RPCResult::Type::NUM, "vout", "the vout value"},        │                                  {RPCResult::Type::NUM, "vout", "the vout value"},       
                                {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true,  │                                  {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, 
                                    "'send' category of transactions."},                 │                                       "'send' category of transactions."},               
                                                                                         │                              },                                                          
                                                                                         │                              TransactionDescriptionString()),                            
                                                                                         │                              {                                                           
                                {RPCResult::Type::BOOL, "abandoned", /*optional=*/true,  │                                  {RPCResult::Type::BOOL, "abandoned", /*optional=*/true, 
                                     "'send' category of transactions."},                │                                       "'send' category of transactions."},               
                            }},                                                          │                                  {RPCResult::Type::STR, "label", /*optional=*/true, "A co
                                                                                         │                              })},                                                        
                        }}                                                               │                          }                                                               
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/transactions.cpp:721                                             │ bitcoin/src/wallet/rpc/transactions.cpp:466                                              
RPCResult::Type::ARR, "details", "",                                                     │  RPCResult::Type::OBJ, "", "", Cat(Cat<std::vector<RPCResult>>(                          
                        {                                                                │                          {                                                               
                            {RPCResult::Type::OBJ, "", "",                               │                              {RPCResult::Type::BOOL, "involvesWatchonly", /*optional=*/tr
                            {                                                            │                              {RPCResult::Type::STR, "address", "The bitcoin address of th
                                {RPCResult::Type::BOOL, "involvesWatchonly", /*optional= │                              {RPCResult::Type::STR, "category", "The transaction category
                                {RPCResult::Type::STR, "address", /*optional=*/true, "Th │                                  "\"send\"                  Transactions sent.\n"        
                                {RPCResult::Type::STR, "category", "The transaction cate │                                  "\"receive\"               Non-coinbase transactions rec
                                    "\"send\"                  Transactions sent.\n"     │                                  "\"generate\"              Coinbase transactions receive
                                    "\"receive\"               Non-coinbase transactions │                                  "\"immature\"              Coinbase transactions receive
                                    "\"generate\"              Coinbase transactions rec │                                  "\"orphan\"                Orphaned coinbase transaction
                                    "\"immature\"              Coinbase transactions rec │                              {RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + C
                                    "\"orphan\"                Orphaned coinbase transac │                                  "for all other categories"},                            
                                {RPCResult::Type::STR_AMOUNT, "amount", "The amount in " │                              {RPCResult::Type::STR, "label", /*optional=*/true, "A commen
                                {RPCResult::Type::STR, "label", /*optional=*/true, "A co │                              {RPCResult::Type::NUM, "vout", "the vout value"},           
                                {RPCResult::Type::NUM, "vout", "the vout value"},        │                              {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The
                                {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true,  │                                   "'send' category of transactions."},                   
                                    "'send' category of transactions."},                 │                          },                                                              
                                {RPCResult::Type::BOOL, "abandoned", /*optional=*/true,  │                          TransactionDescriptionString()),                                
                                     "'send' category of transactions."},                │                          {                                                               
                            }},                                                          │                              {RPCResult::Type::BOOL, "abandoned", /*optional=*/true, "'tr
                                                                                         │                          })                                                              
 next prev up                                                                                                                                                                        
 dogecoin/src/core_write.cpp:74                                                          │ bitcoin/src/core_write.cpp:99                                                            
                                                                                         │                                                                                          
    std::string str;                                                                     │      std::string str;                                                                    
    opcodetype opcode;                                                                   │      opcodetype opcode;                                                                  
    std::vector<unsigned char> vch;                                                      │      std::vector<unsigned char> vch;                                                     
    CScript::const_iterator pc = script.begin();                                         │      CScript::const_iterator pc = script.begin();                                        
    while (pc < script.end()) {                                                          │      while (pc < script.end()) {                                                         
        if (!str.empty()) {                                                              │          if (!str.empty()) {                                                             
            str += " ";                                                                  │              str += " ";                                                                 
        }                                                                                │          }                                                                               
        if (!script.GetOp(pc, opcode, vch)) {                                            │          if (!script.GetOp(pc, opcode, vch)) {                                           
            str += "[error]";                                                            │              str += "[error]";                                                           
            return str;                                                                  │              return str;                                                                 
        }                                                                                │          }                                                                               
        if (0 <= opcode && opcode <= OP_PUSHDATA4) {                                     │          if (0 <= opcode && opcode <= OP_PUSHDATA4) {                                    
            if (vch.size() <= static_cast<std::vector<unsigned char>::size_type>(4)) {   │              if (vch.size() <= static_cast<std::vector<unsigned char>::size_type>(4)) {  
                str += strprintf("%d", CScriptNum(vch, false).getint());                 │                  str += strprintf("%d", CScriptNum(vch, false).getint());                
            } else {                                                                     │              } else {                                                                    
                // the IsUnspendable check makes sure not to try to decode OP_RETURN dat │                  // the IsUnspendable check makes sure not to try to decode OP_RETURN dat
                if (fAttemptSighashDecode && !script.IsUnspendable()) {                  │                  if (fAttemptSighashDecode && !script.IsUnspendable()) {                 
                    std::string strSigHashDecode;                                        │                      std::string strSigHashDecode;                                       
                    // goal: only attempt to decode a defined sighash type from data tha │                      // goal: only attempt to decode a defined sighash type from data tha
                    // this won't decode correctly formatted public keys in Pubkey or Mu │                      // this won't decode correctly formatted public keys in Pubkey or Mu
                    // the restrictions on the pubkey formats (see IsCompressedOrUncompr │                      // the restrictions on the pubkey formats (see IsCompressedOrUncompr
                    // checks in CheckSignatureEncoding.                                 │                      // checks in CheckSignatureEncoding.                                
                    if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, NULL)) {    │                      if (CheckSignatureEncoding(vch, SCRIPT_VERIFY_STRICTENC, nullptr)) {
                        const unsigned char chSigHashType = vch.back();                  │                          const unsigned char chSigHashType = vch.back();                 
                        if (mapSigHashTypes.count(chSigHashType)) {                      │                          const auto it = mapSigHashTypes.find(chSigHashType);            
                            strSigHashDecode = "[" + mapSigHashTypes.find(chSigHashType) │                          if (it != mapSigHashTypes.end()) {                              
                                                                                         │                              strSigHashDecode = "[" + it->second + "]";                  
                            vch.pop_back(); // remove the sighash type byte. it will be  │                              vch.pop_back(); // remove the sighash type byte. it will be 
                        }                                                                │                          }                                                               
                    }                                                                    │                      }                                                                   
                    str += HexStr(vch) + strSigHashDecode;                               │                      str += HexStr(vch) + strSigHashDecode;                              
                } else {                                                                 │                  } else {                                                                
                    str += HexStr(vch);                                                  │                      str += HexStr(vch);                                                 
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        } else {                                                                         │          } else {                                                                        
            str += GetOpName(opcode);                                                    │              str += GetOpName(opcode);                                                   
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return str;                                                                          │      return str;                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:1817                                                        │ bitcoin/src/validation.cpp:2034                                                          
                                                                                         │                                                                                          
        // We've been configured with the hash of a block which has been externally veri │          // We've been configured with the hash of a block which has been externally veri
        // A suitable default value is included with the software and updated from time  │          // A suitable default value is included with the software and updated from time 
        //  relative to a piece of software is an objective fact these defaults can be e │          //  relative to a piece of software is an objective fact these defaults can be e
        // This setting doesn't force the selection of any particular chain but makes va │          // This setting doesn't force the selection of any particular chain but makes va
        //  effectively caching the result of part of the verification.                  │          //  effectively caching the result of part of the verification.                 
        BlockMap::const_iterator  it = mapBlockIndex.find(hashAssumeValid);              │          BlockMap::const_iterator  it = m_blockman.m_block_index.find(hashAssumeValid);  
        if (it != mapBlockIndex.end()) {                                                 │          if (it != m_blockman.m_block_index.end()) {                                     
            if (it->second->GetAncestor(pindex->nHeight) == pindex &&                    │              if (it->second.GetAncestor(pindex->nHeight) == pindex &&                    
                pindexBestHeader->GetAncestor(pindex->nHeight) == pindex &&              │                  m_chainman.m_best_header->GetAncestor(pindex->nHeight) == pindex &&     
                pindexBestHeader->nChainWork >= UintToArith256(consensus.nMinimumChainWo │                  m_chainman.m_best_header->nChainWork >= nMinimumChainWork) {            
                // This block is a member of the assumed verified chain and an ancestor  │                  // This block is a member of the assumed verified chain and an ancestor 
                // The equivalent time check discourages hashpower from extorting the ne │                  // Script verification is skipped when connecting blocks under the      
                                                                                         │                  // assumevalid block. Assuming the assumevalid block is valid this      
                                                                                         │                  // is safe because block merkle hashes are still computed and checked,  
                                                                                         │                  // Of course, if an assumed valid block is invalid due to false scriptSi
                                                                                         │                  // this optimization would allow an invalid chain to be accepted.       
                                                                                         │                  // The equivalent time check discourages hash power from extorting the n
                //  into accepting an invalid block through telling users they must manu │                  //  into accepting an invalid block through telling users they must manu
                //  Requiring a software change or burying the invalid block, regardless │                  //  Requiring a software change or burying the invalid block, regardless
                //  it hard to hide the implication of the demand.  This also avoids hav │                  //  it hard to hide the implication of the demand.  This also avoids hav
                //  that are hardly doing any signature verification at all in testing w │                  //  that are hardly doing any signature verification at all in testing w
                //  artificially set the default assumed verified block further back.    │                  //  artificially set the default assumed verified block further back.   
                // The test against nMinimumChainWork prevents the skipping when denied  │                  // The test against nMinimumChainWork prevents the skipping when denied 
                //  least as good as the expected chain.                                 │                  //  least as good as the expected chain.                                
                fScriptChecks = (GetBlockProofEquivalentTime(*pindexBestHeader, *pindex, │                  fScriptChecks = (GetBlockProofEquivalentTime(*m_chainman.m_best_header, 
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/validation.cpp:3275                                                         │ dogecoin/src/validation.cpp:2781                                                         
                                                                                         │                                                                                          
    AssertLockHeld(cs_main);                                                             │                                                                                          
    pindexNew->nTx = block.vtx.size();                                                   │      pindexNew->nTx = block.vtx.size();                                                  
    pindexNew->nChainTx = 0;                                                             │      pindexNew->nChainTx = 0;                                                            
    pindexNew->nFile = pos.nFile;                                                        │      pindexNew->nFile = pos.nFile;                                                       
    pindexNew->nDataPos = pos.nPos;                                                      │      pindexNew->nDataPos = pos.nPos;                                                     
    pindexNew->nUndoPos = 0;                                                             │      pindexNew->nUndoPos = 0;                                                            
    pindexNew->nStatus |= BLOCK_HAVE_DATA;                                               │      pindexNew->nStatus |= BLOCK_HAVE_DATA;                                              
    if (DeploymentActiveAt(*pindexNew, m_params.GetConsensus(), Consensus::DEPLOYMENT_SE │      if (IsWitnessEnabled(pindexNew->pprev, Params().GetConsensus(pindexNew->nHeight))) {
        pindexNew->nStatus |= BLOCK_OPT_WITNESS;                                         │          pindexNew->nStatus |= BLOCK_OPT_WITNESS;                                        
    }                                                                                    │      }                                                                                   
    pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS);                                  │      pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS);                                 
    m_blockman.m_dirty_blockindex.insert(pindexNew);                                     │      setDirtyBlockIndex.insert(pindexNew);                                               
                                                                                         │                                                                                          
    if (pindexNew->pprev == nullptr || pindexNew->pprev->HaveTxsDownloaded()) {          │      if (pindexNew->pprev == NULL || pindexNew->pprev->nChainTx) {                       
        // If pindexNew is the genesis block or all parents are BLOCK_VALID_TRANSACTIONS │          // If pindexNew is the genesis block or all parents are BLOCK_VALID_TRANSACTIONS
        std::deque<CBlockIndex*> queue;                                                  │          std::deque<CBlockIndex*> queue;                                                 
        queue.push_back(pindexNew);                                                      │          queue.push_back(pindexNew);                                                     
                                                                                         │                                                                                          
        // Recursively process any descendant blocks that now may be eligible to be conn │          // Recursively process any descendant blocks that now may be eligible to be conn
        while (!queue.empty()) {                                                         │          while (!queue.empty()) {                                                        
            CBlockIndex *pindex = queue.front();                                         │              CBlockIndex *pindex = queue.front();                                        
            queue.pop_front();                                                           │              queue.pop_front();                                                          
            pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->n │              pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->n
            pindex->nSequenceId = nBlockSequenceId++;                                    │              {                                                                           
            if (m_chain.Tip() == nullptr || !setBlockIndexCandidates.value_comp()(pindex │                  LOCK(cs_nBlockSequenceId);                                              
                                                                                         │                  pindex->nSequenceId = nBlockSequenceId++;                               
                                                                                         │              }                                                                           
                                                                                         │              if (chainActive.Tip() == NULL || !setBlockIndexCandidates.value_comp()(pinde
                setBlockIndexCandidates.insert(pindex);                                  │                  setBlockIndexCandidates.insert(pindex);                                 
            }                                                                            │              }                                                                           
            std::pair<std::multimap<CBlockIndex*, CBlockIndex*>::iterator, std::multimap │              std::pair<std::multimap<CBlockIndex*, CBlockIndex*>::iterator, std::multimap
            while (range.first != range.second) {                                        │              while (range.first != range.second) {                                       
                std::multimap<CBlockIndex*, CBlockIndex*>::iterator it = range.first;    │                  std::multimap<CBlockIndex*, CBlockIndex*>::iterator it = range.first;   
                queue.push_back(it->second);                                             │                  queue.push_back(it->second);                                            
                range.first++;                                                           │                  range.first++;                                                          
                m_blockman.m_blocks_unlinked.erase(it);                                  │                  mapBlocksUnlinked.erase(it);                                            
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    } else {                                                                             │      } else {                                                                            
        if (pindexNew->pprev && pindexNew->pprev->IsValid(BLOCK_VALID_TREE)) {           │          if (pindexNew->pprev && pindexNew->pprev->IsValid(BLOCK_VALID_TREE)) {          
            m_blockman.m_blocks_unlinked.insert(std::make_pair(pindexNew->pprev, pindexN │              mapBlocksUnlinked.insert(std::make_pair(pindexNew->pprev, pindexNew));      
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:188                                               │ bitcoin/src/univalue/test/object.cpp:188                                                 
                                                                                         │                                                                                          
    UniValue arr(UniValue::VARR);                                                        │      UniValue arr(UniValue::VARR);                                                       
                                                                                         │                                                                                          
    UniValue v((int64_t)1023LL);                                                         │      UniValue v((int64_t)1023LL);                                                        
    BOOST_CHECK(arr.push_back(v));                                                       │      BOOST_CHECK(arr.push_back(v));                                                      
                                                                                         │                                                                                          
    std::string vStr("zippy");                                                           │      std::string vStr("zippy");                                                          
    BOOST_CHECK(arr.push_back(vStr));                                                    │      BOOST_CHECK(arr.push_back(vStr));                                                   
                                                                                         │                                                                                          
    const char *s = "pippy";                                                             │      const char *s = "pippy";                                                            
    BOOST_CHECK(arr.push_back(s));                                                       │      BOOST_CHECK(arr.push_back(s));                                                      
                                                                                         │                                                                                          
    std::vector<UniValue> vec;                                                           │      std::vector<UniValue> vec;                                                          
    v.setStr("boing");                                                                   │      v.setStr("boing");                                                                  
    vec.push_back(v);                                                                    │      vec.push_back(v);                                                                   
                                                                                         │                                                                                          
    v.setStr("going");                                                                   │      v.setStr("going");                                                                  
    vec.push_back(v);                                                                    │      vec.push_back(v);                                                                   
                                                                                         │                                                                                          
    BOOST_CHECK(arr.push_backV(vec));                                                    │      BOOST_CHECK(arr.push_backV(vec));                                                   
                                                                                         │                                                                                          
    BOOST_CHECK(arr.push_back((uint64_t) 400ULL));                                       │      BOOST_CHECK(arr.push_back((uint64_t) 400ULL));                                      
    BOOST_CHECK(arr.push_back((int64_t) -400LL));                                        │      BOOST_CHECK(arr.push_back((int64_t) -400LL));                                       
    BOOST_CHECK(arr.push_back((int) -401));                                              │      BOOST_CHECK(arr.push_back((int) -401));                                             
    BOOST_CHECK(arr.push_back(-40.1));                                                   │      BOOST_CHECK(arr.push_back(-40.1));                                                  
    BOOST_CHECK(arr.push_back(true));                                                    │      BOOST_CHECK(arr.push_back(true));                                                   
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(arr.empty(), false);                                               │      BOOST_CHECK_EQUAL(arr.empty(), false);                                              
    BOOST_CHECK_EQUAL(arr.size(), 10);                                                   │      BOOST_CHECK_EQUAL(arr.size(), 10);                                                  
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(arr[0].getValStr(), "1023");                                       │      BOOST_CHECK_EQUAL(arr[0].getValStr(), "1023");                                      
    BOOST_CHECK_EQUAL(arr[0].getType(), UniValue::VNUM);                                 │      BOOST_CHECK_EQUAL(arr[0].getType(), UniValue::VNUM);                                
    BOOST_CHECK_EQUAL(arr[1].getValStr(), "zippy");                                      │      BOOST_CHECK_EQUAL(arr[1].getValStr(), "zippy");                                     
    BOOST_CHECK_EQUAL(arr[1].getType(), UniValue::VSTR);                                 │      BOOST_CHECK_EQUAL(arr[1].getType(), UniValue::VSTR);                                
    BOOST_CHECK_EQUAL(arr[2].getValStr(), "pippy");                                      │      BOOST_CHECK_EQUAL(arr[2].getValStr(), "pippy");                                     
    BOOST_CHECK_EQUAL(arr[2].getType(), UniValue::VSTR);                                 │      BOOST_CHECK_EQUAL(arr[2].getType(), UniValue::VSTR);                                
    BOOST_CHECK_EQUAL(arr[3].getValStr(), "boing");                                      │      BOOST_CHECK_EQUAL(arr[3].getValStr(), "boing");                                     
    BOOST_CHECK_EQUAL(arr[3].getType(), UniValue::VSTR);                                 │      BOOST_CHECK_EQUAL(arr[3].getType(), UniValue::VSTR);                                
    BOOST_CHECK_EQUAL(arr[4].getValStr(), "going");                                      │      BOOST_CHECK_EQUAL(arr[4].getValStr(), "going");                                     
    BOOST_CHECK_EQUAL(arr[4].getType(), UniValue::VSTR);                                 │      BOOST_CHECK_EQUAL(arr[4].getType(), UniValue::VSTR);                                
    BOOST_CHECK_EQUAL(arr[5].getValStr(), "400");                                        │      BOOST_CHECK_EQUAL(arr[5].getValStr(), "400");                                       
    BOOST_CHECK_EQUAL(arr[5].getType(), UniValue::VNUM);                                 │      BOOST_CHECK_EQUAL(arr[5].getType(), UniValue::VNUM);                                
    BOOST_CHECK_EQUAL(arr[6].getValStr(), "-400");                                       │      BOOST_CHECK_EQUAL(arr[6].getValStr(), "-400");                                      
    BOOST_CHECK_EQUAL(arr[6].getType(), UniValue::VNUM);                                 │      BOOST_CHECK_EQUAL(arr[6].getType(), UniValue::VNUM);                                
    BOOST_CHECK_EQUAL(arr[7].getValStr(), "-401");                                       │      BOOST_CHECK_EQUAL(arr[7].getValStr(), "-401");                                      
    BOOST_CHECK_EQUAL(arr[7].getType(), UniValue::VNUM);                                 │      BOOST_CHECK_EQUAL(arr[7].getType(), UniValue::VNUM);                                
    BOOST_CHECK_EQUAL(arr[8].getValStr(), "-40.1");                                      │      BOOST_CHECK_EQUAL(arr[8].getValStr(), "-40.1");                                     
    BOOST_CHECK_EQUAL(arr[8].getType(), UniValue::VNUM);                                 │      BOOST_CHECK_EQUAL(arr[8].getType(), UniValue::VNUM);                                
    BOOST_CHECK_EQUAL(arr[9].getValStr(), "1");                                          │      BOOST_CHECK_EQUAL(arr[9].getValStr(), "1");                                         
    BOOST_CHECK_EQUAL(arr[9].getType(), UniValue::VBOOL);                                │      BOOST_CHECK_EQUAL(arr[9].getType(), UniValue::VBOOL);                               
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(arr[999].getValStr(), "");                                         │      BOOST_CHECK_EQUAL(arr[999].getValStr(), "");                                        
                                                                                         │                                                                                          
    arr.clear();                                                                         │      arr.clear();                                                                        
    BOOST_CHECK(arr.empty());                                                            │      BOOST_CHECK(arr.empty());                                                           
    BOOST_CHECK_EQUAL(arr.size(), 0);                                                    │      BOOST_CHECK_EQUAL(arr.size(), 0);                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:1311                                                │ bitcoin/src/script/interpreter.cpp:1739                                                  
                                                                                         │                                                                                          
    // Relative lock times are supported by comparing the passed                         │      // Relative lock times are supported by comparing the passed                        
    // in operand to the sequence number of the input.                                   │      // in operand to the sequence number of the input.                                  
    const int64_t txToSequence = (int64_t)txTo->vin[nIn].nSequence;                      │      const int64_t txToSequence = (int64_t)txTo->vin[nIn].nSequence;                     
                                                                                         │                                                                                          
    // Fail if the transaction's version number is not set high                          │      // Fail if the transaction's version number is not set high                         
    // enough to trigger BIP 68 rules.                                                   │      // enough to trigger BIP 68 rules.                                                  
    if (static_cast<uint32_t>(txTo->nVersion) < 2)                                       │      if (static_cast<uint32_t>(txTo->nVersion) < 2)                                      
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    // Sequence numbers with their most significant bit set are not                      │      // Sequence numbers with their most significant bit set are not                     
    // consensus constrained. Testing that the transaction's sequence                    │      // consensus constrained. Testing that the transaction's sequence                   
    // number do not have this bit set prevents using this property                      │      // number do not have this bit set prevents using this property                     
    // to get around a CHECKSEQUENCEVERIFY check.                                        │      // to get around a CHECKSEQUENCEVERIFY check.                                       
    if (txToSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG)                            │      if (txToSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG)                           
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    // Mask off any bits that do not have consensus-enforced meaning                     │      // Mask off any bits that do not have consensus-enforced meaning                    
    // before doing the integer comparisons                                              │      // before doing the integer comparisons                                             
    const uint32_t nLockTimeMask = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG | CTxIn::SEQUENCE_ │      const uint32_t nLockTimeMask = CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG | CTxIn::SEQUENCE_
    const int64_t txToSequenceMasked = txToSequence & nLockTimeMask;                     │      const int64_t txToSequenceMasked = txToSequence & nLockTimeMask;                    
    const CScriptNum nSequenceMasked = nSequence & nLockTimeMask;                        │      const CScriptNum nSequenceMasked = nSequence & nLockTimeMask;                       
                                                                                         │                                                                                          
    // There are two kinds of nSequence: lock-by-blockheight                             │      // There are two kinds of nSequence: lock-by-blockheight                            
    // and lock-by-blocktime, distinguished by whether                                   │      // and lock-by-blocktime, distinguished by whether                                  
    // nSequenceMasked < CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.                             │      // nSequenceMasked < CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.                            
    //                                                                                   │      //                                                                                  
    // We want to compare apples to apples, so fail the script                           │      // We want to compare apples to apples, so fail the script                          
    // unless the type of nSequenceMasked being tested is the same as                    │      // unless the type of nSequenceMasked being tested is the same as                   
    // the nSequenceMasked in the transaction.                                           │      // the nSequenceMasked in the transaction.                                          
    if (!(                                                                               │      if (!(                                                                              
        (txToSequenceMasked <  CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked <   │          (txToSequenceMasked <  CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked <  
        (txToSequenceMasked >= CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked >=  │          (txToSequenceMasked >= CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG && nSequenceMasked >= 
    )) {                                                                                 │      )) {                                                                                
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Now that we know we're comparing apples-to-apples, the                            │      // Now that we know we're comparing apples-to-apples, the                           
    // comparison is a simple numeric one.                                               │      // comparison is a simple numeric one.                                              
    if (nSequenceMasked > txToSequenceMasked)                                            │      if (nSequenceMasked > txToSequenceMasked)                                           
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/unitester.cpp:80                                             │ bitcoin/src/univalue/test/unitester.cpp:80                                               
                                                                                         │                                                                                          
        "fail10.json",                                                                   │          "fail10.json",                                                                  
        "fail11.json",                                                                   │          "fail11.json",                                                                  
        "fail12.json",                                                                   │          "fail12.json",                                                                  
        "fail13.json",                                                                   │          "fail13.json",                                                                  
        "fail14.json",                                                                   │          "fail14.json",                                                                  
        "fail15.json",                                                                   │          "fail15.json",                                                                  
        "fail16.json",                                                                   │          "fail16.json",                                                                  
        "fail17.json",                                                                   │          "fail17.json",                                                                  
        //"fail18.json",             // investigate                                      │          //"fail18.json",             // investigate                                     
        "fail19.json",                                                                   │          "fail19.json",                                                                  
        "fail1.json",                                                                    │          "fail1.json",                                                                   
        "fail20.json",                                                                   │          "fail20.json",                                                                  
        "fail21.json",                                                                   │          "fail21.json",                                                                  
        "fail22.json",                                                                   │          "fail22.json",                                                                  
        "fail23.json",                                                                   │          "fail23.json",                                                                  
        "fail24.json",                                                                   │          "fail24.json",                                                                  
        "fail25.json",                                                                   │          "fail25.json",                                                                  
        "fail26.json",                                                                   │          "fail26.json",                                                                  
        "fail27.json",                                                                   │          "fail27.json",                                                                  
        "fail28.json",                                                                   │          "fail28.json",                                                                  
        "fail29.json",                                                                   │          "fail29.json",                                                                  
        "fail2.json",                                                                    │          "fail2.json",                                                                   
        "fail30.json",                                                                   │          "fail30.json",                                                                  
        "fail31.json",                                                                   │          "fail31.json",                                                                  
        "fail32.json",                                                                   │          "fail32.json",                                                                  
        "fail33.json",                                                                   │          "fail33.json",                                                                  
        "fail34.json",                                                                   │          "fail34.json",                                                                  
        "fail35.json",                                                                   │          "fail35.json",                                                                  
        "fail36.json",                                                                   │          "fail36.json",                                                                  
        "fail37.json",                                                                   │          "fail37.json",                                                                  
        "fail38.json",               // invalid unicode: only first half of surrogate pa │          "fail38.json",               // invalid unicode: only first half of surrogate pa
        "fail39.json",               // invalid unicode: only second half of surrogate p │          "fail39.json",               // invalid unicode: only second half of surrogate p
        "fail40.json",               // invalid unicode: broken UTF-8                    │          "fail40.json",               // invalid unicode: broken UTF-8                   
        "fail41.json",               // invalid unicode: unfinished UTF-8                │          "fail41.json",               // invalid unicode: unfinished UTF-8               
        "fail42.json",               // valid json with garbage following a nul byte     │          "fail42.json",               // valid json with garbage following a nul byte    
        "fail44.json",               // unterminated string                              │          "fail44.json",               // unterminated string                             
        "fail45.json",               // nested beyond max depth                          │          "fail45.json",               // nested beyond max depth                         
        "fail3.json",                                                                    │          "fail3.json",                                                                   
        "fail4.json",                // extra comma                                      │          "fail4.json",                // extra comma                                     
        "fail5.json",                                                                    │          "fail5.json",                                                                   
        "fail6.json",                                                                    │          "fail6.json",                                                                   
        "fail7.json",                                                                    │          "fail7.json",                                                                   
        "fail8.json",                                                                    │          "fail8.json",                                                                   
        "fail9.json",               // extra comma                                       │          "fail9.json",               // extra comma                                      
        "pass1.json",                                                                    │          "pass1.json",                                                                   
        "pass2.json",                                                                    │          "pass2.json",                                                                   
        "pass3.json",                                                                    │          "pass3.json",                                                                   
        "pass4.json",                                                                    │          "pass4.json",                                                                   
        "round1.json",              // round-trip test                                   │          "round1.json",              // round-trip test                                  
        "round2.json",              // unicode                                           │          "round2.json",              // unicode                                          
        "round3.json",              // bare string                                       │          "round3.json",              // bare string                                      
        "round4.json",              // bare number                                       │          "round4.json",              // bare number                                      
        "round5.json",              // bare true                                         │          "round5.json",              // bare true                                        
        "round6.json",              // bare false                                        │          "round6.json",              // bare false                                       
        "round7.json",              // bare null                                         │          "round7.json",              // bare null                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/interpreter.cpp:522                                                  │ dogecoin/src/script/interpreter.cpp:351                                                  
                                                                                         │                                                                                          
                    if (!(flags & SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY)) {                  │                      if (!(flags & SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY)) {                 
                        // not enabled; treat as a NOP2                                  │                          // not enabled; treat as a NOP2                                 
                                                                                         │                          if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) {         
                                                                                         │                              return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NO
                                                                                         │                          }                                                               
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    if (stack.size() < 1)                                                │                      if (stack.size() < 1)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                                                                                         │                                                                                          
                    // Note that elsewhere numeric opcodes are limited to                │                      // Note that elsewhere numeric opcodes are limited to               
                    // operands in the range -2**31+1 to 2**31-1, however it is          │                      // operands in the range -2**31+1 to 2**31-1, however it is         
                    // legal for opcodes to produce results exceeding that               │                      // legal for opcodes to produce results exceeding that              
                    // range. This limitation is implemented by CScriptNum's             │                      // range. This limitation is implemented by CScriptNum's            
                    // default 4-byte limit.                                             │                      // default 4-byte limit.                                            
                    //                                                                   │                      //                                                                  
                    // If we kept to that limit we'd have a year 2038 problem,           │                      // If we kept to that limit we'd have a year 2038 problem,          
                    // even though the nLockTime field in transactions                   │                      // even though the nLockTime field in transactions                  
                    // themselves is uint32 which only becomes meaningless               │                      // themselves is uint32 which only becomes meaningless              
                    // after the year 2106.                                              │                      // after the year 2106.                                             
                    //                                                                   │                      //                                                                  
                    // Thus as a special case we tell CScriptNum to accept up            │                      // Thus as a special case we tell CScriptNum to accept up           
                    // to 5-byte bignums, which are good until 2**39-1, well             │                      // to 5-byte bignums, which are good until 2**39-1, well            
                    // beyond the 2**32-1 limit of the nLockTime field itself.           │                      // beyond the 2**32-1 limit of the nLockTime field itself.          
                    const CScriptNum nLockTime(stacktop(-1), fRequireMinimal, 5);        │                      const CScriptNum nLockTime(stacktop(-1), fRequireMinimal, 5);       
                                                                                         │                                                                                          
                    // In the rare event that the argument may be < 0 due to             │                      // In the rare event that the argument may be < 0 due to            
                    // some arithmetic being done first, you can always use              │                      // some arithmetic being done first, you can always use             
                    // 0 MAX CHECKLOCKTIMEVERIFY.                                        │                      // 0 MAX CHECKLOCKTIMEVERIFY.                                       
                    if (nLockTime < 0)                                                   │                      if (nLockTime < 0)                                                  
                        return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);          │                          return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);         
                                                                                         │                                                                                          
                    // Actually compare the specified lock time with the transaction.    │                      // Actually compare the specified lock time with the transaction.   
                    if (!checker.CheckLockTime(nLockTime))                               │                      if (!checker.CheckLockTime(nLockTime))                              
                        return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);       │                          return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);      
                                                                                         │                                                                                          
                    break;                                                               │                      break;                                                              
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:109                                                  │ bitcoin/src/test/crypto_tests.cpp:93                                                     
                                                                                         │                                                                                          
    std::vector<unsigned char> key = ParseHex(hexkey);                                   │      std::vector<unsigned char> key = ParseHex(hexkey);                                  
    std::vector<unsigned char> iv = ParseHex(hexiv);                                     │      std::vector<unsigned char> iv = ParseHex(hexiv);                                    
    std::vector<unsigned char> in = ParseHex(hexin);                                     │      std::vector<unsigned char> in = ParseHex(hexin);                                    
    std::vector<unsigned char> correctout = ParseHex(hexout);                            │      std::vector<unsigned char> correctout = ParseHex(hexout);                           
    std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                       │      std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                      
                                                                                         │                                                                                          
    // Encrypt the plaintext and verify that it equals the cipher                        │      // Encrypt the plaintext and verify that it equals the cipher                       
    AES128CBCEncrypt enc(&key[0], &iv[0], pad);                                          │      AES256CBCEncrypt enc(key.data(), iv.data(), pad);                                   
    int size = enc.Encrypt(&in[0], in.size(), &realout[0]);                              │      int size = enc.Encrypt(in.data(), in.size(), realout.data());                       
    realout.resize(size);                                                                │      realout.resize(size);                                                               
    BOOST_CHECK(realout.size() == correctout.size());                                    │      BOOST_CHECK(realout.size() == correctout.size());                                   
    BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h │      BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h
                                                                                         │                                                                                          
    // Decrypt the cipher and verify that it equals the plaintext                        │      // Decrypt the cipher and verify that it equals the plaintext                       
    std::vector<unsigned char> decrypted(correctout.size());                             │      std::vector<unsigned char> decrypted(correctout.size());                            
    AES128CBCDecrypt dec(&key[0], &iv[0], pad);                                          │      AES256CBCDecrypt dec(key.data(), iv.data(), pad);                                   
    size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]);                │      size = dec.Decrypt(correctout.data(), correctout.size(), decrypted.data());         
    decrypted.resize(size);                                                              │      decrypted.resize(size);                                                             
    BOOST_CHECK(decrypted.size() == in.size());                                          │      BOOST_CHECK(decrypted.size() == in.size());                                         
    BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin │      BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin
                                                                                         │                                                                                          
    // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac │      // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac
    for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)          │      for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)         
    {                                                                                    │      {                                                                                   
        std::vector<unsigned char> sub(i, in.end());                                     │          std::vector<unsigned char> sub(i, in.end());                                    
        std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                   │          std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                  
        int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]);                        │          int _size = enc.Encrypt(sub.data(), sub.size(), subout.data());                 
        if (_size != 0)                                                                  │          if (_size != 0)                                                                 
        {                                                                                │          {                                                                               
            subout.resize(_size);                                                        │              subout.resize(_size);                                                       
            std::vector<unsigned char> subdecrypted(subout.size());                      │              std::vector<unsigned char> subdecrypted(subout.size());                     
            _size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]);            │              _size = dec.Decrypt(subout.data(), subout.size(), subdecrypted.data());     
            subdecrypted.resize(_size);                                                  │              subdecrypted.resize(_size);                                                 
            BOOST_CHECK(decrypted.size() == in.size());                                  │              BOOST_CHECK(decrypted.size() == in.size());                                 
            BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string( │              BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:150                                                  │ bitcoin/src/test/crypto_tests.cpp:93                                                     
                                                                                         │                                                                                          
    std::vector<unsigned char> key = ParseHex(hexkey);                                   │      std::vector<unsigned char> key = ParseHex(hexkey);                                  
    std::vector<unsigned char> iv = ParseHex(hexiv);                                     │      std::vector<unsigned char> iv = ParseHex(hexiv);                                    
    std::vector<unsigned char> in = ParseHex(hexin);                                     │      std::vector<unsigned char> in = ParseHex(hexin);                                    
    std::vector<unsigned char> correctout = ParseHex(hexout);                            │      std::vector<unsigned char> correctout = ParseHex(hexout);                           
    std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                       │      std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                      
                                                                                         │                                                                                          
    // Encrypt the plaintext and verify that it equals the cipher                        │      // Encrypt the plaintext and verify that it equals the cipher                       
    AES256CBCEncrypt enc(&key[0], &iv[0], pad);                                          │      AES256CBCEncrypt enc(key.data(), iv.data(), pad);                                   
    int size = enc.Encrypt(&in[0], in.size(), &realout[0]);                              │      int size = enc.Encrypt(in.data(), in.size(), realout.data());                       
    realout.resize(size);                                                                │      realout.resize(size);                                                               
    BOOST_CHECK(realout.size() == correctout.size());                                    │      BOOST_CHECK(realout.size() == correctout.size());                                   
    BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h │      BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h
                                                                                         │                                                                                          
    // Decrypt the cipher and verify that it equals the plaintext                        │      // Decrypt the cipher and verify that it equals the plaintext                       
    std::vector<unsigned char> decrypted(correctout.size());                             │      std::vector<unsigned char> decrypted(correctout.size());                            
    AES256CBCDecrypt dec(&key[0], &iv[0], pad);                                          │      AES256CBCDecrypt dec(key.data(), iv.data(), pad);                                   
    size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]);                │      size = dec.Decrypt(correctout.data(), correctout.size(), decrypted.data());         
    decrypted.resize(size);                                                              │      decrypted.resize(size);                                                             
    BOOST_CHECK(decrypted.size() == in.size());                                          │      BOOST_CHECK(decrypted.size() == in.size());                                         
    BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin │      BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin
                                                                                         │                                                                                          
    // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac │      // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac
    for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)          │      for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)         
    {                                                                                    │      {                                                                                   
        std::vector<unsigned char> sub(i, in.end());                                     │          std::vector<unsigned char> sub(i, in.end());                                    
        std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                   │          std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                  
        int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]);                        │          int _size = enc.Encrypt(sub.data(), sub.size(), subout.data());                 
        if (_size != 0)                                                                  │          if (_size != 0)                                                                 
        {                                                                                │          {                                                                               
            subout.resize(_size);                                                        │              subout.resize(_size);                                                       
            std::vector<unsigned char> subdecrypted(subout.size());                      │              std::vector<unsigned char> subdecrypted(subout.size());                     
            _size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]);            │              _size = dec.Decrypt(subout.data(), subout.size(), subdecrypted.data());     
            subdecrypted.resize(_size);                                                  │              subdecrypted.resize(_size);                                                 
            BOOST_CHECK(decrypted.size() == in.size());                                  │              BOOST_CHECK(decrypted.size() == in.size());                                 
            BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string( │              BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:150                                                  │ dogecoin/src/test/crypto_tests.cpp:109                                                   
                                                                                         │                                                                                          
    std::vector<unsigned char> key = ParseHex(hexkey);                                   │      std::vector<unsigned char> key = ParseHex(hexkey);                                  
    std::vector<unsigned char> iv = ParseHex(hexiv);                                     │      std::vector<unsigned char> iv = ParseHex(hexiv);                                    
    std::vector<unsigned char> in = ParseHex(hexin);                                     │      std::vector<unsigned char> in = ParseHex(hexin);                                    
    std::vector<unsigned char> correctout = ParseHex(hexout);                            │      std::vector<unsigned char> correctout = ParseHex(hexout);                           
    std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                       │      std::vector<unsigned char> realout(in.size() + AES_BLOCKSIZE);                      
                                                                                         │                                                                                          
    // Encrypt the plaintext and verify that it equals the cipher                        │      // Encrypt the plaintext and verify that it equals the cipher                       
    AES256CBCEncrypt enc(&key[0], &iv[0], pad);                                          │      AES128CBCEncrypt enc(&key[0], &iv[0], pad);                                         
    int size = enc.Encrypt(&in[0], in.size(), &realout[0]);                              │      int size = enc.Encrypt(&in[0], in.size(), &realout[0]);                             
    realout.resize(size);                                                                │      realout.resize(size);                                                               
    BOOST_CHECK(realout.size() == correctout.size());                                    │      BOOST_CHECK(realout.size() == correctout.size());                                   
    BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h │      BOOST_CHECK_MESSAGE(realout == correctout, HexStr(realout) + std::string(" != ") + h
                                                                                         │                                                                                          
    // Decrypt the cipher and verify that it equals the plaintext                        │      // Decrypt the cipher and verify that it equals the plaintext                       
    std::vector<unsigned char> decrypted(correctout.size());                             │      std::vector<unsigned char> decrypted(correctout.size());                            
    AES256CBCDecrypt dec(&key[0], &iv[0], pad);                                          │      AES128CBCDecrypt dec(&key[0], &iv[0], pad);                                         
    size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]);                │      size = dec.Decrypt(&correctout[0], correctout.size(), &decrypted[0]);               
    decrypted.resize(size);                                                              │      decrypted.resize(size);                                                             
    BOOST_CHECK(decrypted.size() == in.size());                                          │      BOOST_CHECK(decrypted.size() == in.size());                                         
    BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin │      BOOST_CHECK_MESSAGE(decrypted == in, HexStr(decrypted) + std::string(" != ") + hexin
                                                                                         │                                                                                          
    // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac │      // Encrypt and re-decrypt substrings of the plaintext and verify that they equal eac
    for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)          │      for(std::vector<unsigned char>::iterator i(in.begin()); i != in.end(); ++i)         
    {                                                                                    │      {                                                                                   
        std::vector<unsigned char> sub(i, in.end());                                     │          std::vector<unsigned char> sub(i, in.end());                                    
        std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                   │          std::vector<unsigned char> subout(sub.size() + AES_BLOCKSIZE);                  
        int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]);                        │          int _size = enc.Encrypt(&sub[0], sub.size(), &subout[0]);                       
        if (_size != 0)                                                                  │          if (_size != 0)                                                                 
        {                                                                                │          {                                                                               
            subout.resize(_size);                                                        │              subout.resize(_size);                                                       
            std::vector<unsigned char> subdecrypted(subout.size());                      │              std::vector<unsigned char> subdecrypted(subout.size());                     
            _size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]);            │              _size = dec.Decrypt(&subout[0], subout.size(), &subdecrypted[0]);           
            subdecrypted.resize(_size);                                                  │              subdecrypted.resize(_size);                                                 
            BOOST_CHECK(decrypted.size() == in.size());                                  │              BOOST_CHECK(decrypted.size() == in.size());                                 
            BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string( │              BOOST_CHECK_MESSAGE(subdecrypted == sub, HexStr(subdecrypted) + std::string(
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/trafficgraphwidget.cpp:65                                               │ bitcoin/src/qt/trafficgraphwidget.cpp:64                                                 
                                                                                         │                                                                                          
    QPainter painter(this);                                                              │      QPainter painter(this);                                                             
    painter.fillRect(rect(), Qt::black);                                                 │      painter.fillRect(rect(), Qt::black);                                                
                                                                                         │                                                                                          
    if(fMax <= 0.0f) return;                                                             │      if(fMax <= 0.0f) return;                                                            
                                                                                         │                                                                                          
    QColor axisCol(Qt::gray);                                                            │      QColor axisCol(Qt::gray);                                                           
    int h = height() - YMARGIN * 2;                                                      │      int h = height() - YMARGIN * 2;                                                     
    painter.setPen(axisCol);                                                             │      painter.setPen(axisCol);                                                            
    painter.drawLine(XMARGIN, YMARGIN + h, width() - XMARGIN, YMARGIN + h);              │      painter.drawLine(XMARGIN, YMARGIN + h, width() - XMARGIN, YMARGIN + h);             
                                                                                         │                                                                                          
    // decide what order of magnitude we are                                             │      // decide what order of magnitude we are                                            
    int base = floor(log10(fMax));                                                       │      int base = floor(log10(fMax));                                                      
    float val = pow(10.0f, base);                                                        │      float val = pow(10.0f, base);                                                       
                                                                                         │                                                                                          
    const QString units     = tr("KB/s");                                                │      const QString units = tr("kB/s");                                                   
    const float yMarginText = 2.0;                                                       │      const float yMarginText = 2.0;                                                      
                                                                                         │                                                                                          
    // draw lines                                                                        │      // draw lines                                                                       
    painter.setPen(axisCol);                                                             │      painter.setPen(axisCol);                                                            
    painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1 %2") │      painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1 %2")
    for(float y = val; y < fMax; y += val) {                                             │      for(float y = val; y < fMax; y += val) {                                            
        int yy = YMARGIN + h - h * y / fMax;                                             │          int yy = YMARGIN + h - h * y / fMax;                                            
        painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy);                            │          painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy);                           
    }                                                                                    │      }                                                                                   
    // if we drew 3 or fewer lines, break them up at the next lower order of magnitude   │      // if we drew 3 or fewer lines, break them up at the next lower order of magnitude  
    if(fMax / val <= 3.0f) {                                                             │      if(fMax / val <= 3.0f) {                                                            
        axisCol = axisCol.darker();                                                      │          axisCol = axisCol.darker();                                                     
        val = pow(10.0f, base - 1);                                                      │          val = pow(10.0f, base - 1);                                                     
        painter.setPen(axisCol);                                                         │          painter.setPen(axisCol);                                                        
        painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1  │          painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1 
        int count = 1;                                                                   │          int count = 1;                                                                  
        for(float y = val; y < fMax; y += val, count++) {                                │          for(float y = val; y < fMax; y += val, count++) {                               
            // don't overwrite lines drawn above                                         │              // don't overwrite lines drawn above                                        
            if(count % 10 == 0)                                                          │              if(count % 10 == 0)                                                         
                continue;                                                                │                  continue;                                                               
            int yy = YMARGIN + h - h * y / fMax;                                         │              int yy = YMARGIN + h - h * y / fMax;                                        
            painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy);                        │              painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy);                       
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      painter.setRenderHint(QPainter::Antialiasing);                                      
    if(!vSamplesIn.empty()) {                                                            │      if(!vSamplesIn.empty()) {                                                           
        QPainterPath p;                                                                  │          QPainterPath p;                                                                 
        paintPath(p, vSamplesIn);                                                        │          paintPath(p, vSamplesIn);                                                       
        painter.fillPath(p, QColor(0, 255, 0, 128));                                     │          painter.fillPath(p, QColor(0, 255, 0, 128));                                    
        painter.setPen(Qt::green);                                                       │          painter.setPen(Qt::green);                                                      
        painter.drawPath(p);                                                             │          painter.drawPath(p);                                                            
    }                                                                                    │      }                                                                                   
    if(!vSamplesOut.empty()) {                                                           │      if(!vSamplesOut.empty()) {                                                          
        QPainterPath p;                                                                  │          QPainterPath p;                                                                 
        paintPath(p, vSamplesOut);                                                       │          paintPath(p, vSamplesOut);                                                      
        painter.fillPath(p, QColor(255, 0, 0, 128));                                     │          painter.fillPath(p, QColor(255, 0, 0, 128));                                    
        painter.setPen(Qt::red);                                                         │          painter.setPen(Qt::red);                                                        
        painter.drawPath(p);                                                             │          painter.drawPath(p);                                                            
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/torcontrol.cpp:137                                                         │ bitcoin/src/torcontrol.cpp:68                                                            
                                                                                         │                                                                                          
    TorControlConnection *self = (TorControlConnection*)ctx;                             │      TorControlConnection *self = static_cast<TorControlConnection*>(ctx);               
    struct evbuffer *input = bufferevent_get_input(bev);                                 │      struct evbuffer *input = bufferevent_get_input(bev);                                
    size_t n_read_out = 0;                                                               │      size_t n_read_out = 0;                                                              
    char *line;                                                                          │      char *line;                                                                         
    assert(input);                                                                       │      assert(input);                                                                      
    //  If there is not a whole line to read, evbuffer_readln returns NULL               │      //  If there is not a whole line to read, evbuffer_readln returns nullptr           
    while((line = evbuffer_readln(input, &n_read_out, EVBUFFER_EOL_CRLF)) != NULL)       │      while((line = evbuffer_readln(input, &n_read_out, EVBUFFER_EOL_CRLF)) != nullptr)   
    {                                                                                    │      {                                                                                   
        std::string s(line, n_read_out);                                                 │          std::string s(line, n_read_out);                                                
        free(line);                                                                      │          free(line);                                                                     
        if (s.size() < 4) // Short line                                                  │          if (s.size() < 4) // Short line                                                 
            continue;                                                                    │              continue;                                                                   
        // <status>(-|+| )<data><CRLF>                                                   │          // <status>(-|+| )<data><CRLF>                                                  
        self->message.code = atoi(s.substr(0,3));                                        │          self->message.code = LocaleIndependentAtoi<int>(s.substr(0,3));                 
        self->message.lines.push_back(s.substr(4));                                      │          self->message.lines.push_back(s.substr(4));                                     
        char ch = s[3]; // '-','+' or ' '                                                │          char ch = s[3]; // '-','+' or ' '                                               
        if (ch == ' ') {                                                                 │          if (ch == ' ') {                                                                
            // Final line, dispatch reply and clean up                                   │              // Final line, dispatch reply and clean up                                  
            if (self->message.code >= 600) {                                             │              if (self->message.code >= 600) {                                            
                // Dispatch async notifications to async handler                         │                  // Dispatch async notifications to async handler                        
                // Synchronous and asynchronous messages are never interleaved           │                  // Synchronous and asynchronous messages are never interleaved          
                self->async_handler(*self, self->message);                               │                  self->async_handler(*self, self->message);                              
            } else {                                                                     │              } else {                                                                    
                if (!self->reply_handlers.empty()) {                                     │                  if (!self->reply_handlers.empty()) {                                    
                    // Invoke reply handler with message                                 │                      // Invoke reply handler with message                                
                    self->reply_handlers.front()(*self, self->message);                  │                      self->reply_handlers.front()(*self, self->message);                 
                    self->reply_handlers.pop_front();                                    │                      self->reply_handlers.pop_front();                                   
                } else {                                                                 │                  } else {                                                                
                    LogPrint("tor", "tor: Received unexpected sync reply %i\n", self->me │                      LogPrint(BCLog::TOR, "tor: Received unexpected sync reply %i\n", sel
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            self->message.Clear();                                                       │              self->message.Clear();                                                      
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    //  Check for size of buffer - protect against memory exhaustion with very long line │      //  Check for size of buffer - protect against memory exhaustion with very long line
    //  Do this after evbuffer_readln to make sure all full lines have been              │      //  Do this after evbuffer_readln to make sure all full lines have been             
    //  removed from the buffer. Everything left is an incomplete line.                  │      //  removed from the buffer. Everything left is an incomplete line.                 
    if (evbuffer_get_length(input) > MAX_LINE_LENGTH) {                                  │      if (evbuffer_get_length(input) > MAX_LINE_LENGTH) {                                 
        LogPrintf("tor: Disconnecting because MAX_LINE_LENGTH exceeded\n");              │          LogPrintf("tor: Disconnecting because MAX_LINE_LENGTH exceeded\n");             
        self->Disconnect();                                                              │          self->Disconnect();                                                             
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/multisig_tests.cpp:139                                                 │ dogecoin/src/test/multisig_tests.cpp:142                                                 
                                                                                         │                                                                                          
    CKey key[4];                                                                         │      CKey key[4];                                                                        
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++)                                                         
        key[i].MakeNewKey(true);                                                         │          key[i].MakeNewKey(true);                                                        
                                                                                         │                                                                                          
    TxoutType whichType;                                                                 │      txnouttype whichType;                                                               
                                                                                         │                                                                                          
    CScript a_and_b;                                                                     │      CScript a_and_b;                                                                    
    a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey │      a_and_b << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey
    BOOST_CHECK(::IsStandard(a_and_b, whichType));                                       │      BOOST_CHECK(::IsStandard(a_and_b, whichType));                                      
                                                                                         │                                                                                          
    CScript a_or_b;                                                                      │      CScript a_or_b;                                                                     
    a_or_b  << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey │      a_or_b  << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey
    BOOST_CHECK(::IsStandard(a_or_b, whichType));                                        │      BOOST_CHECK(::IsStandard(a_or_b, whichType));                                       
                                                                                         │                                                                                          
    CScript escrow;                                                                      │      CScript escrow;                                                                     
    escrow << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey( │      escrow << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPubKey(
    BOOST_CHECK(::IsStandard(escrow, whichType));                                        │      BOOST_CHECK(::IsStandard(escrow, whichType));                                       
                                                                                         │                                                                                          
    CScript one_of_four;                                                                 │      CScript one_of_four;                                                                
    one_of_four << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPu │      one_of_four << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetPu
    BOOST_CHECK(!::IsStandard(one_of_four, whichType));                                  │      BOOST_CHECK(!::IsStandard(one_of_four, whichType));                                 
                                                                                         │                                                                                          
    CScript malformed[6];                                                                │      CScript malformed[6];                                                               
    malformed[0] << OP_3 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[0] << OP_3 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
    malformed[1] << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[1] << OP_2 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
    malformed[2] << OP_0 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[2] << OP_0 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
    malformed[3] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[3] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
    malformed[4] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[4] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
    malformed[5] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP │      malformed[5] << OP_1 << ToByteVector(key[0].GetPubKey()) << ToByteVector(key[1].GetP
                                                                                         │                                                                                          
    for (int i = 0; i < 6; i++)                                                          │      for (int i = 0; i < 6; i++)                                                         
        BOOST_CHECK(!::IsStandard(malformed[i], whichType));                             │          BOOST_CHECK(!::IsStandard(malformed[i], whichType));                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/net_processing.cpp:3265                                                    │ bitcoin/src/net_processing.cpp:5027                                                      
                                                                                         │                                                                                          
            // Detect whether this is a stalling initial-headers-sync peer               │              // Detect whether this is a stalling initial-headers-sync peer              
            if (pindexBestHeader->GetBlockTime() <= GetAdjustedTime() - 24*60*60) {      │              if (m_chainman.m_best_header->GetBlockTime() <= GetAdjustedTime() - 24 * 60 
                if (nNow > state.nHeadersSyncTimeout && nSyncStarted == 1 && (nPreferred │                  if (current_time > state.m_headers_sync_timeout && nSyncStarted == 1 && 
                    // Disconnect a (non-whitelisted) peer if it is our only sync peer,  │                      // Disconnect a peer (without NetPermissionFlags::NoBan permission) 
                    // and we have others we could be using instead.                     │                      // and we have others we could be using instead.                    
                    // Note: If all our peers are inbound, then we won't                 │                      // Note: If all our peers are inbound, then we won't                
                    // disconnect our sync peer for stalling; we have bigger             │                      // disconnect our sync peer for stalling; we have bigger            
                    // problems if we can't get any outbound peers.                      │                      // problems if we can't get any outbound peers.                     
                    if (!pto->fWhitelisted) {                                            │                      if (!pto->HasPermission(NetPermissionFlags::NoBan)) {               
                        LogPrintf("Timeout downloading headers from peer=%d, disconnecti │                          LogPrintf("Timeout downloading headers from peer=%d, disconnecti
                        pto->fDisconnect = true;                                         │                          pto->fDisconnect = true;                                        
                        return true;                                                     │                          return true;                                                    
                    } else {                                                             │                      } else {                                                            
                        LogPrintf("Timeout downloading headers from whitelisted peer=%d, │                          LogPrintf("Timeout downloading headers from noban peer=%d, not d
                        // Reset the headers sync state so that we have a                │                          // Reset the headers sync state so that we have a               
                        // chance to try downloading from a different peer.              │                          // chance to try downloading from a different peer.             
                        // Note: this will also result in at least one more              │                          // Note: this will also result in at least one more             
                        // getheaders message to be sent to                              │                          // getheaders message to be sent to                             
                        // this peer (eventually).                                       │                          // this peer (eventually).                                      
                        state.fSyncStarted = false;                                      │                          state.fSyncStarted = false;                                     
                        nSyncStarted--;                                                  │                          nSyncStarted--;                                                 
                        state.nHeadersSyncTimeout = 0;                                   │                          state.m_headers_sync_timeout = 0us;                             
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
            } else {                                                                     │              } else {                                                                    
                // After we've caught up once, reset the timeout so we can't trigger     │                  // After we've caught up once, reset the timeout so we can't trigger    
                // disconnect later.                                                     │                  // disconnect later.                                                    
                state.nHeadersSyncTimeout = std::numeric_limits<int64_t>::max();         │                  state.m_headers_sync_timeout = std::chrono::microseconds::max();        
            }                                                                            │              }                                                                           
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:954                                                  │ bitcoin/src/test/script_tests.cpp:934                                                    
                                                                                         │                                                                                          
    // Read tests from test/data/script_tests.json                                       │      // Read tests from test/data/script_tests.json                                      
    // Format is an array of arrays                                                      │      // Format is an array of arrays                                                     
    // Inner arrays are [ ["wit"..., nValue]?, "scriptSig", "scriptPubKey", "flags", "ex │      // Inner arrays are [ ["wit"..., nValue]?, "scriptSig", "scriptPubKey", "flags", "ex
    // ... where scriptSig and scriptPubKey are stringified                              │      // ... where scriptSig and scriptPubKey are stringified                             
    // scripts.                                                                          │      // scripts.                                                                         
    // If a witness is given, then the last value in the array should be the             │      // If a witness is given, then the last value in the array should be the            
    // amount (nValue) to use in the crediting tx                                        │      // amount (nValue) to use in the crediting tx                                       
    UniValue tests = read_json(std::string(json_tests::script_tests, json_tests::script_ │      UniValue tests = read_json(std::string(json_tests::script_tests, json_tests::script_
                                                                                         │                                                                                          
    for (unsigned int idx = 0; idx < tests.size(); idx++) {                              │      for (unsigned int idx = 0; idx < tests.size(); idx++) {                             
        UniValue test = tests[idx];                                                      │          UniValue test = tests[idx];                                                     
        std::string strTest = test.write();                                              │          std::string strTest = test.write();                                             
        CScriptWitness witness;                                                          │          CScriptWitness witness;                                                         
        CAmount nValue = 0;                                                              │          CAmount nValue = 0;                                                             
        unsigned int pos = 0;                                                            │          unsigned int pos = 0;                                                           
        if (test.size() > 0 && test[pos].isArray()) {                                    │          if (test.size() > 0 && test[pos].isArray()) {                                   
            unsigned int i=0;                                                            │              unsigned int i=0;                                                           
            for (i = 0; i < test[pos].size()-1; i++) {                                   │              for (i = 0; i < test[pos].size()-1; i++) {                                  
                witness.stack.push_back(ParseHex(test[pos][i].get_str()));               │                  witness.stack.push_back(ParseHex(test[pos][i].get_str()));              
            }                                                                            │              }                                                                           
            nValue = AmountFromValue(test[pos][i]);                                      │              nValue = AmountFromValue(test[pos][i]);                                     
            pos++;                                                                       │              pos++;                                                                      
        }                                                                                │          }                                                                               
        if (test.size() < 4 + pos) // Allow size > 3; extra stuff ignored (useful for co │          if (test.size() < 4 + pos) // Allow size > 3; extra stuff ignored (useful for co
        {                                                                                │          {                                                                               
            if (test.size() != 1) {                                                      │              if (test.size() != 1) {                                                     
                BOOST_ERROR("Bad test: " << strTest);                                    │                  BOOST_ERROR("Bad test: " << strTest);                                   
            }                                                                            │              }                                                                           
            continue;                                                                    │              continue;                                                                   
        }                                                                                │          }                                                                               
        std::string scriptSigString = test[pos++].get_str();                             │          std::string scriptSigString = test[pos++].get_str();                            
        CScript scriptSig = ParseScript(scriptSigString);                                │          CScript scriptSig = ParseScript(scriptSigString);                               
        std::string scriptPubKeyString = test[pos++].get_str();                          │          std::string scriptPubKeyString = test[pos++].get_str();                         
        CScript scriptPubKey = ParseScript(scriptPubKeyString);                          │          CScript scriptPubKey = ParseScript(scriptPubKeyString);                         
        unsigned int scriptflags = ParseScriptFlags(test[pos++].get_str());              │          unsigned int scriptflags = ParseScriptFlags(test[pos++].get_str());             
        int scriptError = ParseScriptError(test[pos++].get_str());                       │          int scriptError = ParseScriptError(test[pos++].get_str());                      
                                                                                         │                                                                                          
        DoTest(scriptPubKey, scriptSig, witness, scriptflags, strTest, scriptError, nVal │          DoTest(scriptPubKey, scriptSig, witness, scriptflags, strTest, scriptError, nVal
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/skiplist_tests.cpp:104                                                │ bitcoin/src/test/skiplist_tests.cpp:102                                                  
                                                                                         │                                                                                          
    std::vector<uint256> vHashMain(100000);                                              │      std::vector<uint256> vHashMain(100000);                                             
    std::vector<CBlockIndex> vBlocksMain(100000);                                        │      std::vector<CBlockIndex> vBlocksMain(100000);                                       
    for (unsigned int i=0; i<vBlocksMain.size(); i++) {                                  │      for (unsigned int i=0; i<vBlocksMain.size(); i++) {                                 
        vHashMain[i] = ArithToUint256(i); // Set the hash equal to the height            │          vHashMain[i] = ArithToUint256(i); // Set the hash equal to the height           
        vBlocksMain[i].nHeight = i;                                                      │          vBlocksMain[i].nHeight = i;                                                     
        vBlocksMain[i].pprev = i ? &vBlocksMain[i - 1] : NULL;                           │          vBlocksMain[i].pprev = i ? &vBlocksMain[i - 1] : nullptr;                       
        vBlocksMain[i].phashBlock = &vHashMain[i];                                       │          vBlocksMain[i].phashBlock = &vHashMain[i];                                      
        vBlocksMain[i].BuildSkip();                                                      │          vBlocksMain[i].BuildSkip();                                                     
        if (i < 10) {                                                                    │          if (i < 10) {                                                                   
            vBlocksMain[i].nTime = i;                                                    │              vBlocksMain[i].nTime = i;                                                   
            vBlocksMain[i].nTimeMax = i;                                                 │              vBlocksMain[i].nTimeMax = i;                                                
        } else {                                                                         │          } else {                                                                        
            // randomly choose something in the range [MTP, MTP*2]                       │              // randomly choose something in the range [MTP, MTP*2]                      
            int64_t medianTimePast = vBlocksMain[i].GetMedianTimePast();                 │              int64_t medianTimePast = vBlocksMain[i].GetMedianTimePast();                
            int r = insecure_rand() % medianTimePast;                                    │              int r{int(InsecureRandRange(medianTimePast))};                              
            vBlocksMain[i].nTime = r + medianTimePast;                                   │              vBlocksMain[i].nTime = uint32_t(r + medianTimePast);                        
            vBlocksMain[i].nTimeMax = std::max(vBlocksMain[i].nTime, vBlocksMain[i-1].nT │              vBlocksMain[i].nTimeMax = std::max(vBlocksMain[i].nTime, vBlocksMain[i-1].nT
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    // Check that we set nTimeMax up correctly.                                          │      // Check that we set nTimeMax up correctly.                                         
    unsigned int curTimeMax = 0;                                                         │      unsigned int curTimeMax = 0;                                                        
    for (unsigned int i=0; i<vBlocksMain.size(); ++i) {                                  │      for (unsigned int i=0; i<vBlocksMain.size(); ++i) {                                 
        curTimeMax = std::max(curTimeMax, vBlocksMain[i].nTime);                         │          curTimeMax = std::max(curTimeMax, vBlocksMain[i].nTime);                        
        BOOST_CHECK(curTimeMax == vBlocksMain[i].nTimeMax);                              │          BOOST_CHECK(curTimeMax == vBlocksMain[i].nTimeMax);                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Build a CChain for the main branch.                                               │      // Build a CChain for the main branch.                                              
    CChain chain;                                                                        │      CChain chain;                                                                       
    chain.SetTip(&vBlocksMain.back());                                                   │      chain.SetTip(&vBlocksMain.back());                                                  
                                                                                         │                                                                                          
    // Verify that FindEarliestAtLeast is correct.                                       │      // Verify that FindEarliestAtLeast is correct.                                      
    for (unsigned int i=0; i<10000; ++i) {                                               │      for (unsigned int i=0; i<10000; ++i) {                                              
        // Pick a random element in vBlocksMain.                                         │          // Pick a random element in vBlocksMain.                                        
        int r = insecure_rand() % vBlocksMain.size();                                    │          int r = InsecureRandRange(vBlocksMain.size());                                  
        int64_t test_time = vBlocksMain[r].nTime;                                        │          int64_t test_time = vBlocksMain[r].nTime;                                       
        CBlockIndex *ret = chain.FindEarliestAtLeast(test_time);                         │          CBlockIndex* ret = chain.FindEarliestAtLeast(test_time, 0);                     
        BOOST_CHECK(ret->nTimeMax >= test_time);                                         │          BOOST_CHECK(ret->nTimeMax >= test_time);                                        
        BOOST_CHECK((ret->pprev==NULL) || ret->pprev->nTimeMax < test_time);             │          BOOST_CHECK((ret->pprev==nullptr) || ret->pprev->nTimeMax < test_time);         
        BOOST_CHECK(vBlocksMain[r].GetAncestor(ret->nHeight) == ret);                    │          BOOST_CHECK(vBlocksMain[r].GetAncestor(ret->nHeight) == ret);                   
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rpc/blockchain.cpp:508                                                      │ bitcoin/src/rpc/blockchain.cpp:615                                                       
"for verbose = true",                                                                    │  "for verbosity = 1",                                                                    
                        RPCResult::Type::OBJ, "", "",                                    │                  RPCResult::Type::OBJ, "", "",                                           
                        {                                                                │                  {                                                                       
                            {RPCResult::Type::STR_HEX, "hash", "the block hash (same as  │                      {RPCResult::Type::STR_HEX, "hash", "the block hash (same as provided
                            {RPCResult::Type::NUM, "confirmations", "The number of confi │                      {RPCResult::Type::NUM, "confirmations", "The number of confirmations
                            {RPCResult::Type::NUM, "height", "The block height or index" │                      {RPCResult::Type::NUM, "size", "The block size"},                   
                            {RPCResult::Type::NUM, "version", "The block version"},      │                      {RPCResult::Type::NUM, "strippedsize", "The block size excluding wit
                            {RPCResult::Type::STR_HEX, "versionHex", "The block version  │                      {RPCResult::Type::NUM, "weight", "The block weight as defined in BIP
                            {RPCResult::Type::STR_HEX, "merkleroot", "The merkle root"}, │                      {RPCResult::Type::NUM, "height", "The block height or index"},      
                            {RPCResult::Type::NUM_TIME, "time", "The block time expresse │                      {RPCResult::Type::NUM, "version", "The block version"},             
                            {RPCResult::Type::NUM_TIME, "mediantime", "The median block  │                      {RPCResult::Type::STR_HEX, "versionHex", "The block version formatte
                            {RPCResult::Type::NUM, "nonce", "The nonce"},                │                      {RPCResult::Type::STR_HEX, "merkleroot", "The merkle root"},        
                            {RPCResult::Type::STR_HEX, "bits", "The bits"},              │                      {RPCResult::Type::ARR, "tx", "The transaction ids",                 
                            {RPCResult::Type::NUM, "difficulty", "The difficulty"},      │                          {{RPCResult::Type::STR_HEX, "", "The transaction id"}}},        
                            {RPCResult::Type::STR_HEX, "chainwork", "Expected number of  │                      {RPCResult::Type::NUM_TIME, "time",       "The block time expressed 
                            {RPCResult::Type::NUM, "nTx", "The number of transactions in │                      {RPCResult::Type::NUM_TIME, "mediantime", "The median block time exp
                            {RPCResult::Type::STR_HEX, "previousblockhash", /*optional=* │                      {RPCResult::Type::NUM, "nonce", "The nonce"},                       
                            {RPCResult::Type::STR_HEX, "nextblockhash", /*optional=*/tru │                      {RPCResult::Type::STR_HEX, "bits", "The bits"},                     
                                                                                         │                      {RPCResult::Type::STR_HEX, "chainwork", "Expected number of hashes r
                                                                                         │                      {RPCResult::Type::NUM, "nTx", "The number of transactions in the blo
                                                                                         │                      {RPCResult::Type::STR_HEX, "previousblockhash", /*optional=*/true, "
                                                                                         │                      {RPCResult::Type::STR_HEX, "nextblockhash", /*optional=*/true, "The 
                                                                                         │                  }                                                                       
 next prev up                                                                                                                                                                        
 dogecoin/src/test/scriptnum_tests.cpp:114                                               │ bitcoin/src/test/scriptnum_tests.cpp:110                                                 
                                                                                         │                                                                                          
    const CScriptNum10 bignum1(num1);                                                    │      const CScriptNum10 bignum1(num1);                                                   
    const CScriptNum10 bignum2(num2);                                                    │      const CScriptNum10 bignum2(num2);                                                   
    const CScriptNum scriptnum1(num1);                                                   │      const CScriptNum scriptnum1(num1);                                                  
    const CScriptNum scriptnum2(num2);                                                   │      const CScriptNum scriptnum2(num2);                                                  
                                                                                         │                                                                                          
    BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == scriptnum1));                     │      BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == scriptnum1));                    
    BOOST_CHECK((bignum1 != bignum1) ==  (scriptnum1 != scriptnum1));                    │      BOOST_CHECK((bignum1 != bignum1) ==  (scriptnum1 != scriptnum1));                   
    BOOST_CHECK((bignum1 < bignum1) ==  (scriptnum1 < scriptnum1));                      │      BOOST_CHECK((bignum1 < bignum1) ==  (scriptnum1 < scriptnum1));                     
    BOOST_CHECK((bignum1 > bignum1) ==  (scriptnum1 > scriptnum1));                      │      BOOST_CHECK((bignum1 > bignum1) ==  (scriptnum1 > scriptnum1));                     
    BOOST_CHECK((bignum1 >= bignum1) ==  (scriptnum1 >= scriptnum1));                    │      BOOST_CHECK((bignum1 >= bignum1) ==  (scriptnum1 >= scriptnum1));                   
    BOOST_CHECK((bignum1 <= bignum1) ==  (scriptnum1 <= scriptnum1));                    │      BOOST_CHECK((bignum1 <= bignum1) ==  (scriptnum1 <= scriptnum1));                   
                                                                                         │                                                                                          
    BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == num1));                           │      BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == num1));                          
    BOOST_CHECK((bignum1 != bignum1) ==  (scriptnum1 != num1));                          │      BOOST_CHECK((bignum1 != bignum1) ==  (scriptnum1 != num1));                         
    BOOST_CHECK((bignum1 < bignum1) ==  (scriptnum1 < num1));                            │      BOOST_CHECK((bignum1 < bignum1) ==  (scriptnum1 < num1));                           
    BOOST_CHECK((bignum1 > bignum1) ==  (scriptnum1 > num1));                            │      BOOST_CHECK((bignum1 > bignum1) ==  (scriptnum1 > num1));                           
    BOOST_CHECK((bignum1 >= bignum1) ==  (scriptnum1 >= num1));                          │      BOOST_CHECK((bignum1 >= bignum1) ==  (scriptnum1 >= num1));                         
    BOOST_CHECK((bignum1 <= bignum1) ==  (scriptnum1 <= num1));                          │      BOOST_CHECK((bignum1 <= bignum1) ==  (scriptnum1 <= num1));                         
                                                                                         │                                                                                          
    BOOST_CHECK((bignum1 == bignum2) ==  (scriptnum1 == scriptnum2));                    │      BOOST_CHECK((bignum1 == bignum2) ==  (scriptnum1 == scriptnum2));                   
    BOOST_CHECK((bignum1 != bignum2) ==  (scriptnum1 != scriptnum2));                    │      BOOST_CHECK((bignum1 != bignum2) ==  (scriptnum1 != scriptnum2));                   
    BOOST_CHECK((bignum1 < bignum2) ==  (scriptnum1 < scriptnum2));                      │      BOOST_CHECK((bignum1 < bignum2) ==  (scriptnum1 < scriptnum2));                     
    BOOST_CHECK((bignum1 > bignum2) ==  (scriptnum1 > scriptnum2));                      │      BOOST_CHECK((bignum1 > bignum2) ==  (scriptnum1 > scriptnum2));                     
    BOOST_CHECK((bignum1 >= bignum2) ==  (scriptnum1 >= scriptnum2));                    │      BOOST_CHECK((bignum1 >= bignum2) ==  (scriptnum1 >= scriptnum2));                   
    BOOST_CHECK((bignum1 <= bignum2) ==  (scriptnum1 <= scriptnum2));                    │      BOOST_CHECK((bignum1 <= bignum2) ==  (scriptnum1 <= scriptnum2));                   
                                                                                         │                                                                                          
    BOOST_CHECK((bignum1 == bignum2) ==  (scriptnum1 == num2));                          │      BOOST_CHECK((bignum1 == bignum2) ==  (scriptnum1 == num2));                         
    BOOST_CHECK((bignum1 != bignum2) ==  (scriptnum1 != num2));                          │      BOOST_CHECK((bignum1 != bignum2) ==  (scriptnum1 != num2));                         
    BOOST_CHECK((bignum1 < bignum2) ==  (scriptnum1 < num2));                            │      BOOST_CHECK((bignum1 < bignum2) ==  (scriptnum1 < num2));                           
    BOOST_CHECK((bignum1 > bignum2) ==  (scriptnum1 > num2));                            │      BOOST_CHECK((bignum1 > bignum2) ==  (scriptnum1 > num2));                           
    BOOST_CHECK((bignum1 >= bignum2) ==  (scriptnum1 >= num2));                          │      BOOST_CHECK((bignum1 >= bignum2) ==  (scriptnum1 >= num2));                         
    BOOST_CHECK((bignum1 <= bignum2) ==  (scriptnum1 <= num2));                          │      BOOST_CHECK((bignum1 <= bignum2) ==  (scriptnum1 <= num2));                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rpc/blockchain.cpp:253                                                      │ bitcoin/src/rpc/blockchain.cpp:341                                                       
                                                                                         │                                                                                          
    return RPCHelpMan{"waitfornewblock",                                                 │      return RPCHelpMan{"waitforblockheight",                                             
                "\nWaits for a specific new block and returns useful info about it.\n"   │                  "\nWaits for (at least) block height and returns the height and hash\n" 
                                                                                         │                  "of the current tip.\n"                                                 
                "\nReturns the current block on timeout or exit.\n",                     │                  "\nReturns the current block on timeout or exit.\n",                    
                {                                                                        │                  {                                                                       
                                                                                         │                      {"height", RPCArg::Type::NUM, RPCArg::Optional::NO, "Block height to
                    {"timeout", RPCArg::Type::NUM, RPCArg::Default{0}, "Time in millisec │                      {"timeout", RPCArg::Type::NUM, RPCArg::Default{0}, "Time in millisec
                },                                                                       │                  },                                                                      
                RPCResult{                                                               │                  RPCResult{                                                              
                    RPCResult::Type::OBJ, "", "",                                        │                      RPCResult::Type::OBJ, "", "",                                       
                    {                                                                    │                      {                                                                   
                        {RPCResult::Type::STR_HEX, "hash", "The blockhash"},             │                          {RPCResult::Type::STR_HEX, "hash", "The blockhash"},            
                        {RPCResult::Type::NUM, "height", "Block height"},                │                          {RPCResult::Type::NUM, "height", "Block height"},               
                    }},                                                                  │                      }},                                                                 
                RPCExamples{                                                             │                  RPCExamples{                                                            
                    HelpExampleCli("waitfornewblock", "1000")                            │                      HelpExampleCli("waitforblockheight", "100 1000")                    
            + HelpExampleRpc("waitfornewblock", "1000")                                  │              + HelpExampleRpc("waitforblockheight", "100, 1000")                         
                },                                                                       │                  },                                                                      
        [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue           │          [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue          
{                                                                                        │  {                                                                                       
    int timeout = 0;                                                                     │      int timeout = 0;                                                                    
    if (!request.params[0].isNull())                                                     │                                                                                          
        timeout = request.params[0].get_int();                                           │      int height = request.params[0].get_int();                                           
                                                                                         │                                                                                          
                                                                                         │      if (!request.params[1].isNull())                                                    
                                                                                         │          timeout = request.params[1].get_int();                                          
                                                                                         │                                                                                          
    CUpdatedBlock block;                                                                 │      CUpdatedBlock block;                                                                
    {                                                                                    │      {                                                                                   
        WAIT_LOCK(cs_blockchange, lock);                                                 │          WAIT_LOCK(cs_blockchange, lock);                                                
        block = latestblock;                                                             │                                                                                          
        if(timeout)                                                                      │          if(timeout)                                                                     
            cond_blockchange.wait_for(lock, std::chrono::milliseconds(timeout), [&block] │              cond_blockchange.wait_for(lock, std::chrono::milliseconds(timeout), [&height
        else                                                                             │          else                                                                            
            cond_blockchange.wait(lock, [&block]() EXCLUSIVE_LOCKS_REQUIRED(cs_blockchan │              cond_blockchange.wait(lock, [&height]() EXCLUSIVE_LOCKS_REQUIRED(cs_blockcha
        block = latestblock;                                                             │          block = latestblock;                                                            
    }                                                                                    │      }                                                                                   
    UniValue ret(UniValue::VOBJ);                                                        │      UniValue ret(UniValue::VOBJ);                                                       
    ret.pushKV("hash", block.hash.GetHex());                                             │      ret.pushKV("hash", block.hash.GetHex());                                            
    ret.pushKV("height", block.height);                                                  │      ret.pushKV("height", block.height);                                                 
    return ret;                                                                          │      return ret;                                                                         
},                                                                                       │  },                                                                                      
    };                                                                                   │      };                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/blockencodings.cpp:178                                                     │ bitcoin/src/blockencodings.cpp:176                                                       
                                                                                         │                                                                                          
    assert(!header.IsNull());                                                            │      assert(!header.IsNull());                                                           
    uint256 hash = header.GetHash();                                                     │      uint256 hash = header.GetHash();                                                    
    block = header;                                                                      │      block = header;                                                                     
    block.vtx.resize(txn_available.size());                                              │      block.vtx.resize(txn_available.size());                                             
                                                                                         │                                                                                          
    size_t tx_missing_offset = 0;                                                        │      size_t tx_missing_offset = 0;                                                       
    for (size_t i = 0; i < txn_available.size(); i++) {                                  │      for (size_t i = 0; i < txn_available.size(); i++) {                                 
        if (!txn_available[i]) {                                                         │          if (!txn_available[i]) {                                                        
            if (vtx_missing.size() <= tx_missing_offset)                                 │              if (vtx_missing.size() <= tx_missing_offset)                                
                return READ_STATUS_INVALID;                                              │                  return READ_STATUS_INVALID;                                             
            block.vtx[i] = vtx_missing[tx_missing_offset++];                             │              block.vtx[i] = vtx_missing[tx_missing_offset++];                            
        } else                                                                           │          } else                                                                          
            block.vtx[i] = std::move(txn_available[i]);                                  │              block.vtx[i] = std::move(txn_available[i]);                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Make sure we can't call FillBlock again.                                          │      // Make sure we can't call FillBlock again.                                         
    header.SetNull();                                                                    │      header.SetNull();                                                                   
    txn_available.clear();                                                               │      txn_available.clear();                                                              
                                                                                         │                                                                                          
    if (vtx_missing.size() != tx_missing_offset)                                         │      if (vtx_missing.size() != tx_missing_offset)                                        
        return READ_STATUS_INVALID;                                                      │          return READ_STATUS_INVALID;                                                     
                                                                                         │                                                                                          
    CValidationState state;                                                              │      BlockValidationState state;                                                         
    // TODO: Make sure lack of block height doesn't cause verification problems          │      if (!CheckBlock(block, state, Params().GetConsensus())) {                           
    if (!CheckBlock(block, state)) {                                                     │                                                                                          
        // TODO: We really want to just check merkle tree manually here,                 │          // TODO: We really want to just check merkle tree manually here,                
        // but that is expensive, and CheckBlock caches a block's                        │          // but that is expensive, and CheckBlock caches a block's                       
        // "checked-status" (in the CBlock?). CBlock should be able to                   │          // "checked-status" (in the CBlock?). CBlock should be able to                  
        // check its own merkle root and cache that check.                               │          // check its own merkle root and cache that check.                              
        if (state.CorruptionPossible())                                                  │          if (state.GetResult() == BlockValidationResult::BLOCK_MUTATED)                  
            return READ_STATUS_FAILED; // Possible Short ID collision                    │              return READ_STATUS_FAILED; // Possible Short ID collision                   
        return READ_STATUS_CHECKBLOCK_FAILED;                                            │          return READ_STATUS_CHECKBLOCK_FAILED;                                           
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    LogPrint("cmpctblock", "Successfully reconstructed block %s with %lu txn prefilled,  │      LogPrint(BCLog::CMPCTBLOCK, "Successfully reconstructed block %s with %lu txn prefil
    if (vtx_missing.size() < 5) {                                                        │      if (vtx_missing.size() < 5) {                                                       
        for (const auto& tx : vtx_missing)                                               │          for (const auto& tx : vtx_missing) {                                            
            LogPrint("cmpctblock", "Reconstructed block %s required tx %s\n", hash.ToStr │              LogPrint(BCLog::CMPCTBLOCK, "Reconstructed block %s required tx %s\n", hash.
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return READ_STATUS_OK;                                                               │      return READ_STATUS_OK;                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/sighash_tests.cpp:28                                                   │ dogecoin/src/test/sighash_tests.cpp:29                                                   
                                                                                         │                                                                                          
                                                                                         │      static const uint256 one(uint256S("0000000000000000000000000000000000000000000000000
    if (nIn >= txTo.vin.size())                                                          │      if (nIn >= txTo.vin.size())                                                         
    {                                                                                    │      {                                                                                   
        return uint256::ONE;                                                             │          printf("ERROR: SignatureHash(): nIn=%d out of range\n", nIn);                   
                                                                                         │          return one;                                                                     
    }                                                                                    │      }                                                                                   
    CMutableTransaction txTmp(txTo);                                                     │      CMutableTransaction txTmp(txTo);                                                    
                                                                                         │                                                                                          
    // In case concatenating two scripts ends up with two codeseparators,                │      // In case concatenating two scripts ends up with two codeseparators,               
    // or an extra one at the end, this prevents all those possible incompatibilities.   │      // or an extra one at the end, this prevents all those possible incompatibilities.  
    FindAndDelete(scriptCode, CScript(OP_CODESEPARATOR));                                │      scriptCode.FindAndDelete(CScript(OP_CODESEPARATOR));                                
                                                                                         │                                                                                          
    // Blank out other inputs' signatures                                                │      // Blank out other inputs' signatures                                               
    for (unsigned int i = 0; i < txTmp.vin.size(); i++)                                  │      for (unsigned int i = 0; i < txTmp.vin.size(); i++)                                 
        txTmp.vin[i].scriptSig = CScript();                                              │          txTmp.vin[i].scriptSig = CScript();                                             
    txTmp.vin[nIn].scriptSig = scriptCode;                                               │      txTmp.vin[nIn].scriptSig = scriptCode;                                              
                                                                                         │                                                                                          
    // Blank out some of the outputs                                                     │      // Blank out some of the outputs                                                    
    if ((nHashType & 0x1f) == SIGHASH_NONE)                                              │      if ((nHashType & 0x1f) == SIGHASH_NONE)                                             
    {                                                                                    │      {                                                                                   
        // Wildcard payee                                                                │          // Wildcard payee                                                               
        txTmp.vout.clear();                                                              │          txTmp.vout.clear();                                                             
                                                                                         │                                                                                          
        // Let the others update at will                                                 │          // Let the others update at will                                                
        for (unsigned int i = 0; i < txTmp.vin.size(); i++)                              │          for (unsigned int i = 0; i < txTmp.vin.size(); i++)                             
            if (i != nIn)                                                                │              if (i != nIn)                                                               
                txTmp.vin[i].nSequence = 0;                                              │                  txTmp.vin[i].nSequence = 0;                                             
    }                                                                                    │      }                                                                                   
    else if ((nHashType & 0x1f) == SIGHASH_SINGLE)                                       │      else if ((nHashType & 0x1f) == SIGHASH_SINGLE)                                      
    {                                                                                    │      {                                                                                   
        // Only lock-in the txout payee at same index as txin                            │          // Only lock-in the txout payee at same index as txin                           
        unsigned int nOut = nIn;                                                         │          unsigned int nOut = nIn;                                                        
        if (nOut >= txTmp.vout.size())                                                   │          if (nOut >= txTmp.vout.size())                                                  
        {                                                                                │          {                                                                               
            return uint256::ONE;                                                         │              printf("ERROR: SignatureHash(): nOut=%d out of range\n", nOut);             
                                                                                         │              return one;                                                                 
        }                                                                                │          }                                                                               
        txTmp.vout.resize(nOut+1);                                                       │          txTmp.vout.resize(nOut+1);                                                      
        for (unsigned int i = 0; i < nOut; i++)                                          │          for (unsigned int i = 0; i < nOut; i++)                                         
            txTmp.vout[i].SetNull();                                                     │              txTmp.vout[i].SetNull();                                                    
                                                                                         │                                                                                          
        // Let the others update at will                                                 │          // Let the others update at will                                                
        for (unsigned int i = 0; i < txTmp.vin.size(); i++)                              │          for (unsigned int i = 0; i < txTmp.vin.size(); i++)                             
            if (i != nIn)                                                                │              if (i != nIn)                                                               
                txTmp.vin[i].nSequence = 0;                                              │                  txTmp.vin[i].nSequence = 0;                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Blank out other inputs completely, not recommended for open transactions          │      // Blank out other inputs completely, not recommended for open transactions         
    if (nHashType & SIGHASH_ANYONECANPAY)                                                │      if (nHashType & SIGHASH_ANYONECANPAY)                                               
    {                                                                                    │      {                                                                                   
        txTmp.vin[0] = txTmp.vin[nIn];                                                   │          txTmp.vin[0] = txTmp.vin[nIn];                                                  
        txTmp.vin.resize(1);                                                             │          txTmp.vin.resize(1);                                                            
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Serialize and hash                                                                │      // Serialize and hash                                                               
    CHashWriter ss(SER_GETHASH, SERIALIZE_TRANSACTION_NO_WITNESS);                       │      CHashWriter ss(SER_GETHASH, SERIALIZE_TRANSACTION_NO_WITNESS);                      
    ss << txTmp << nHashType;                                                            │      ss << txTmp << nHashType;                                                           
    return ss.GetHash();                                                                 │      return ss.GetHash();                                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/rpcconsole.cpp:609                                                       │ dogecoin/src/qt/rpcconsole.cpp:492                                                       
                                                                                         │                                                                                          
    if(event->type() == QEvent::KeyPress) // Special key handling                        │      if(event->type() == QEvent::KeyPress) // Special key handling                       
    {                                                                                    │      {                                                                                   
        QKeyEvent *keyevt = static_cast<QKeyEvent*>(event);                              │          QKeyEvent *keyevt = static_cast<QKeyEvent*>(event);                             
        int key = keyevt->key();                                                         │          int key = keyevt->key();                                                        
        Qt::KeyboardModifiers mod = keyevt->modifiers();                                 │          Qt::KeyboardModifiers mod = keyevt->modifiers();                                
        switch(key)                                                                      │          switch(key)                                                                     
        {                                                                                │          {                                                                               
        case Qt::Key_Up: if(obj == ui->lineEdit) { browseHistory(-1); return true; } bre │          case Qt::Key_Up: if(obj == ui->lineEdit) { browseHistory(-1); return true; } bre
        case Qt::Key_Down: if(obj == ui->lineEdit) { browseHistory(1); return true; } br │          case Qt::Key_Down: if(obj == ui->lineEdit) { browseHistory(1); return true; } br
        case Qt::Key_PageUp: /* pass paging keys to messages widget */                   │          case Qt::Key_PageUp: /* pass paging keys to messages widget */                  
        case Qt::Key_PageDown:                                                           │          case Qt::Key_PageDown:                                                          
            if (obj == ui->lineEdit) {                                                   │              if(obj == ui->lineEdit)                                                     
                QApplication::sendEvent(ui->messagesWidget, keyevt);                     │              {                                                                           
                                                                                         │                  QApplication::postEvent(ui->messagesWidget, new QKeyEvent(*keyevt));    
                return true;                                                             │                  return true;                                                            
            }                                                                            │              }                                                                           
            break;                                                                       │              break;                                                                      
        case Qt::Key_Return:                                                             │          case Qt::Key_Return:                                                            
        case Qt::Key_Enter:                                                              │          case Qt::Key_Enter:                                                             
            // forward these events to lineEdit                                          │              // forward these events to lineEdit                                         
            if (obj == autoCompleter->popup()) {                                         │              if(obj == autoCompleter->popup()) {                                         
                QApplication::sendEvent(ui->lineEdit, keyevt);                           │                  QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));          
                autoCompleter->popup()->hide();                                          │                                                                                          
                return true;                                                             │                  return true;                                                            
            }                                                                            │              }                                                                           
            break;                                                                       │              break;                                                                      
        default:                                                                         │          default:                                                                        
            // Typing in messages widget brings focus to line edit, and redirects key th │              // Typing in messages widget brings focus to line edit, and redirects key th
            // Exclude most combinations and keys that emit no text, except paste shortc │              // Exclude most combinations and keys that emit no text, except paste shortc
            if(obj == ui->messagesWidget && (                                            │              if(obj == ui->messagesWidget && (                                           
                  (!mod && !keyevt->text().isEmpty() && key != Qt::Key_Tab) ||           │                    (!mod && !keyevt->text().isEmpty() && key != Qt::Key_Tab) ||          
                  ((mod & Qt::ControlModifier) && key == Qt::Key_V) ||                   │                    ((mod & Qt::ControlModifier) && key == Qt::Key_V) ||                  
                  ((mod & Qt::ShiftModifier) && key == Qt::Key_Insert)))                 │                    ((mod & Qt::ShiftModifier) && key == Qt::Key_Insert)))                
            {                                                                            │              {                                                                           
                ui->lineEdit->setFocus();                                                │                  ui->lineEdit->setFocus();                                               
                QApplication::sendEvent(ui->lineEdit, keyevt);                           │                  QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));          
                return true;                                                             │                  return true;                                                            
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return QWidget::eventFilter(obj, event);                                             │      return QWidget::eventFilter(obj, event);                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:156                                           │ bitcoin/src/test/arith_uint256_tests.cpp:157                                             
 // "<<"  ">>"  "<<="  ">>="                                                             │   // "<<"  ">>"  "<<="  ">>="                                                            
    unsigned char TmpArray[32];                                                          │      unsigned char TmpArray[32];                                                         
    arith_uint256 TmpL;                                                                  │      arith_uint256 TmpL;                                                                 
    for (unsigned int i = 0; i < 256; ++i)                                               │      for (unsigned int i = 0; i < 256; ++i)                                              
    {                                                                                    │      {                                                                                   
        shiftArrayLeft(TmpArray, OneArray, 32, i);                                       │          shiftArrayLeft(TmpArray, OneArray, 32, i);                                      
        BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) ==  │          BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == 
        TmpL = OneL; TmpL <<= i;                                                         │          TmpL = OneL; TmpL <<= i;                                                        
        BOOST_CHECK(TmpL == (OneL << i));                                                │          BOOST_CHECK(TmpL == (OneL << i));                                               
        BOOST_CHECK((HalfL >> (255-i)) == (OneL << i));                                  │          BOOST_CHECK((HalfL >> (255-i)) == (OneL << i));                                 
        TmpL = HalfL; TmpL >>= (255-i);                                                  │          TmpL = HalfL; TmpL >>= (255-i);                                                 
        BOOST_CHECK(TmpL == (OneL << i));                                                │          BOOST_CHECK(TmpL == (OneL << i));                                               
                                                                                         │                                                                                          
        shiftArrayLeft(TmpArray, R1Array, 32, i);                                        │          shiftArrayLeft(TmpArray, R1Array, 32, i);                                       
        BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) ==  │          BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == 
        TmpL = R1L; TmpL <<= i;                                                          │          TmpL = R1L; TmpL <<= i;                                                         
        BOOST_CHECK(TmpL == (R1L << i));                                                 │          BOOST_CHECK(TmpL == (R1L << i));                                                
                                                                                         │                                                                                          
        shiftArrayRight(TmpArray, R1Array, 32, i);                                       │          shiftArrayRight(TmpArray, R1Array, 32, i);                                      
        BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) ==  │          BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == 
        TmpL = R1L; TmpL >>= i;                                                          │          TmpL = R1L; TmpL >>= i;                                                         
        BOOST_CHECK(TmpL == (R1L >> i));                                                 │          BOOST_CHECK(TmpL == (R1L >> i));                                                
                                                                                         │                                                                                          
        shiftArrayLeft(TmpArray, MaxArray, 32, i);                                       │          shiftArrayLeft(TmpArray, MaxArray, 32, i);                                      
        BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) ==  │          BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == 
        TmpL = MaxL; TmpL <<= i;                                                         │          TmpL = MaxL; TmpL <<= i;                                                        
        BOOST_CHECK(TmpL == (MaxL << i));                                                │          BOOST_CHECK(TmpL == (MaxL << i));                                               
                                                                                         │                                                                                          
        shiftArrayRight(TmpArray, MaxArray, 32, i);                                      │          shiftArrayRight(TmpArray, MaxArray, 32, i);                                     
        BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) ==  │          BOOST_CHECK(arith_uint256V(std::vector<unsigned char>(TmpArray,TmpArray+32)) == 
        TmpL = MaxL; TmpL >>= i;                                                         │          TmpL = MaxL; TmpL >>= i;                                                        
        BOOST_CHECK(TmpL == (MaxL >> i));                                                │          BOOST_CHECK(TmpL == (MaxL >> i));                                               
    }                                                                                    │      }                                                                                   
    arith_uint256 c1L = arith_uint256(0x0123456789abcdefULL);                            │      arith_uint256 c1L = arith_uint256(0x0123456789abcdefULL);                           
    arith_uint256 c2L = c1L << 128;                                                      │      arith_uint256 c2L = c1L << 128;                                                     
    for (unsigned int i = 0; i < 128; ++i) {                                             │      for (unsigned int i = 0; i < 128; ++i) {                                            
        BOOST_CHECK((c1L << i) == (c2L >> (128-i)));                                     │          BOOST_CHECK((c1L << i) == (c2L >> (128-i)));                                    
    }                                                                                    │      }                                                                                   
    for (unsigned int i = 128; i < 256; ++i) {                                           │      for (unsigned int i = 128; i < 256; ++i) {                                          
        BOOST_CHECK((c1L << i) == (c2L << (i-128)));                                     │          BOOST_CHECK((c1L << i) == (c2L << (i-128)));                                    
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/blockencodings_tests.cpp:68                                           │ bitcoin/src/test/blockencodings_tests.cpp:66                                             
                                                                                         │                                                                                          
        CBlockHeaderAndShortTxIDs shortIDs(block, true);                                 │          CBlockHeaderAndShortTxIDs shortIDs(block, true);                                
                                                                                         │                                                                                          
        CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                               │          CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                              
        stream << shortIDs;                                                              │          stream << shortIDs;                                                             
                                                                                         │                                                                                          
        CBlockHeaderAndShortTxIDs shortIDs2;                                             │          CBlockHeaderAndShortTxIDs shortIDs2;                                            
        stream >> shortIDs2;                                                             │          stream >> shortIDs2;                                                            
                                                                                         │                                                                                          
        PartiallyDownloadedBlock partialBlock(&pool);                                    │          PartiallyDownloadedBlock partialBlock(&pool);                                   
        BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);      │          BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);     
        BOOST_CHECK( partialBlock.IsTxAvailable(0));                                     │          BOOST_CHECK( partialBlock.IsTxAvailable(0));                                    
        BOOST_CHECK(!partialBlock.IsTxAvailable(1));                                     │          BOOST_CHECK(!partialBlock.IsTxAvailable(1));                                    
        BOOST_CHECK( partialBlock.IsTxAvailable(2));                                     │          BOOST_CHECK( partialBlock.IsTxAvailable(2));                                    
                                                                                         │                                                                                          
        BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_co │          BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[2]->GetHash())->GetSharedTx().use_co
                                                                                         │                                                                                          
        size_t poolSize = pool.size();                                                   │          size_t poolSize = pool.size();                                                  
        pool.removeRecursive(*block.vtx[2]);                                             │          pool.removeRecursive(*block.vtx[2], MemPoolRemovalReason::REPLACED);            
        BOOST_CHECK_EQUAL(pool.size(), poolSize - 1);                                    │          BOOST_CHECK_EQUAL(pool.size(), poolSize - 1);                                   
                                                                                         │                                                                                          
        CBlock block2;                                                                   │          CBlock block2;                                                                  
        {                                                                                │          {                                                                               
            PartiallyDownloadedBlock tmp = partialBlock;                                 │              PartiallyDownloadedBlock tmp = partialBlock;                                
            BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_INVALID); // N │              BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_INVALID); // N
            partialBlock = tmp;                                                          │              partialBlock = tmp;                                                         
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // Wrong transaction                                                             │          // Wrong transaction                                                            
        {                                                                                │          {                                                                               
            PartiallyDownloadedBlock tmp = partialBlock;                                 │              PartiallyDownloadedBlock tmp = partialBlock;                                
            partialBlock.FillBlock(block2, {block.vtx[2]}); // Current implementation do │              partialBlock.FillBlock(block2, {block.vtx[2]}); // Current implementation do
            partialBlock = tmp;                                                          │              partialBlock = tmp;                                                         
        }                                                                                │          }                                                                               
        bool mutated;                                                                    │          bool mutated;                                                                   
        BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated));          │          BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated));         
                                                                                         │                                                                                          
        CBlock block3;                                                                   │          CBlock block3;                                                                  
        BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[1]}) == READ_STATUS_OK);   │          BOOST_CHECK(partialBlock.FillBlock(block3, {block.vtx[1]}) == READ_STATUS_OK);  
        BOOST_CHECK_EQUAL(block.GetHash().ToString(), block3.GetHash().ToString());      │          BOOST_CHECK_EQUAL(block.GetHash().ToString(), block3.GetHash().ToString());     
        BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &muta │          BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block3, &muta
        BOOST_CHECK(!mutated);                                                           │          BOOST_CHECK(!mutated);                                                          
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:4280                                                        │ bitcoin/src/validation.cpp:4575                                                          
                                                                                         │                                                                                          
            // We are going to either move to a parent or a sibling of pindex.           │              // We are going to either move to a parent or a sibling of pindex.          
            // If pindex was the first with a certain property, unset the corresponding  │              // If pindex was the first with a certain property, unset the corresponding 
            if (pindex == pindexFirstInvalid) pindexFirstInvalid = NULL;                 │              if (pindex == pindexFirstInvalid) pindexFirstInvalid = nullptr;             
            if (pindex == pindexFirstMissing) pindexFirstMissing = NULL;                 │              if (pindex == pindexFirstMissing) pindexFirstMissing = nullptr;             
            if (pindex == pindexFirstNeverProcessed) pindexFirstNeverProcessed = NULL;   │              if (pindex == pindexFirstNeverProcessed) pindexFirstNeverProcessed = nullptr
            if (pindex == pindexFirstNotTreeValid) pindexFirstNotTreeValid = NULL;       │              if (pindex == pindexFirstNotTreeValid) pindexFirstNotTreeValid = nullptr;   
            if (pindex == pindexFirstNotTransactionsValid) pindexFirstNotTransactionsVal │              if (pindex == pindexFirstNotTransactionsValid) pindexFirstNotTransactionsVal
            if (pindex == pindexFirstNotChainValid) pindexFirstNotChainValid = NULL;     │              if (pindex == pindexFirstNotChainValid) pindexFirstNotChainValid = nullptr; 
            if (pindex == pindexFirstNotScriptsValid) pindexFirstNotScriptsValid = NULL; │              if (pindex == pindexFirstNotScriptsValid) pindexFirstNotScriptsValid = nullp
            // Find our parent.                                                          │              // Find our parent.                                                         
            CBlockIndex* pindexPar = pindex->pprev;                                      │              CBlockIndex* pindexPar = pindex->pprev;                                     
            // Find which child we just visited.                                         │              // Find which child we just visited.                                        
            std::pair<std::multimap<CBlockIndex*,CBlockIndex*>::iterator,std::multimap<C │              std::pair<std::multimap<CBlockIndex*,CBlockIndex*>::iterator,std::multimap<C
            while (rangePar.first->second != pindex) {                                   │              while (rangePar.first->second != pindex) {                                  
                assert(rangePar.first != rangePar.second); // Our parent must have at le │                  assert(rangePar.first != rangePar.second); // Our parent must have at le
                rangePar.first++;                                                        │                  rangePar.first++;                                                       
            }                                                                            │              }                                                                           
            // Proceed to the next one.                                                  │              // Proceed to the next one.                                                 
            rangePar.first++;                                                            │              rangePar.first++;                                                           
            if (rangePar.first != rangePar.second) {                                     │              if (rangePar.first != rangePar.second) {                                    
                // Move to the sibling.                                                  │                  // Move to the sibling.                                                 
                pindex = rangePar.first->second;                                         │                  pindex = rangePar.first->second;                                        
                break;                                                                   │                  break;                                                                  
            } else {                                                                     │              } else {                                                                    
                // Move up further.                                                      │                  // Move up further.                                                     
                pindex = pindexPar;                                                      │                  pindex = pindexPar;                                                     
                nHeight--;                                                               │                  nHeight--;                                                              
                continue;                                                                │                  continue;                                                               
            }                                                                            │              }                                                                           
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:289                                           │ bitcoin/src/test/arith_uint256_tests.cpp:283                                             
                                                                                         │                                                                                          
    arith_uint256 TmpL = 0;                                                              │      arith_uint256 TmpL = 0;                                                             
    BOOST_CHECK(R1L+R2L == arith_uint256(R1LplusR2L));                                   │      BOOST_CHECK(R1L+R2L == arith_uint256(R1LplusR2L));                                  
    TmpL += R1L;                                                                         │      TmpL += R1L;                                                                        
    BOOST_CHECK(TmpL == R1L);                                                            │      BOOST_CHECK(TmpL == R1L);                                                           
    TmpL += R2L;                                                                         │      TmpL += R2L;                                                                        
    BOOST_CHECK(TmpL == R1L + R2L);                                                      │      BOOST_CHECK(TmpL == R1L + R2L);                                                     
    BOOST_CHECK(OneL+MaxL == ZeroL);                                                     │      BOOST_CHECK(OneL+MaxL == ZeroL);                                                    
    BOOST_CHECK(MaxL+OneL == ZeroL);                                                     │      BOOST_CHECK(MaxL+OneL == ZeroL);                                                    
    for (unsigned int i = 1; i < 256; ++i) {                                             │      for (unsigned int i = 1; i < 256; ++i) {                                            
        BOOST_CHECK( (MaxL >> i) + OneL == (HalfL >> (i-1)) );                           │          BOOST_CHECK( (MaxL >> i) + OneL == (HalfL >> (i-1)) );                          
        BOOST_CHECK( OneL + (MaxL >> i) == (HalfL >> (i-1)) );                           │          BOOST_CHECK( OneL + (MaxL >> i) == (HalfL >> (i-1)) );                          
        TmpL = (MaxL>>i); TmpL += OneL;                                                  │          TmpL = (MaxL>>i); TmpL += OneL;                                                 
        BOOST_CHECK( TmpL == (HalfL >> (i-1)) );                                         │          BOOST_CHECK( TmpL == (HalfL >> (i-1)) );                                        
        TmpL = (MaxL>>i); TmpL += 1;                                                     │          TmpL = (MaxL>>i); TmpL += 1;                                                    
        BOOST_CHECK( TmpL == (HalfL >> (i-1)) );                                         │          BOOST_CHECK( TmpL == (HalfL >> (i-1)) );                                        
        TmpL = (MaxL>>i);                                                                │          TmpL = (MaxL>>i);                                                               
        BOOST_CHECK( TmpL++ == (MaxL>>i) );                                              │          BOOST_CHECK( TmpL++ == (MaxL>>i) );                                             
        BOOST_CHECK( TmpL == (HalfL >> (i-1)));                                          │          BOOST_CHECK( TmpL == (HalfL >> (i-1)));                                         
    }                                                                                    │      }                                                                                   
    BOOST_CHECK(arith_uint256(0xbedc77e27940a7ULL) + 0xee8d836fce66fbULL == arith_uint25 │      BOOST_CHECK(arith_uint256(0xbedc77e27940a7ULL) + 0xee8d836fce66fbULL == arith_uint25
    TmpL = arith_uint256(0xbedc77e27940a7ULL); TmpL += 0xee8d836fce66fbULL;              │      TmpL = arith_uint256(0xbedc77e27940a7ULL); TmpL += 0xee8d836fce66fbULL;             
    BOOST_CHECK(TmpL == arith_uint256(0xbedc77e27940a7ULL+0xee8d836fce66fbULL));         │      BOOST_CHECK(TmpL == arith_uint256(0xbedc77e27940a7ULL+0xee8d836fce66fbULL));        
    TmpL -= 0xee8d836fce66fbULL;  BOOST_CHECK(TmpL == 0xbedc77e27940a7ULL);              │      TmpL -= 0xee8d836fce66fbULL;  BOOST_CHECK(TmpL == 0xbedc77e27940a7ULL);             
    TmpL = R1L;                                                                          │      TmpL = R1L;                                                                         
    BOOST_CHECK(++TmpL == R1L+1);                                                        │      BOOST_CHECK(++TmpL == R1L+1);                                                       
                                                                                         │                                                                                          
    BOOST_CHECK(R1L -(-R2L) == R1L+R2L);                                                 │      BOOST_CHECK(R1L -(-R2L) == R1L+R2L);                                                
    BOOST_CHECK(R1L -(-OneL) == R1L+OneL);                                               │      BOOST_CHECK(R1L -(-OneL) == R1L+OneL);                                              
    BOOST_CHECK(R1L - OneL == R1L+(-OneL));                                              │      BOOST_CHECK(R1L - OneL == R1L+(-OneL));                                             
    for (unsigned int i = 1; i < 256; ++i) {                                             │      for (unsigned int i = 1; i < 256; ++i) {                                            
        BOOST_CHECK((MaxL>>i) - (-OneL)  == (HalfL >> (i-1)));                           │          BOOST_CHECK((MaxL>>i) - (-OneL)  == (HalfL >> (i-1)));                          
        BOOST_CHECK((HalfL >> (i-1)) - OneL == (MaxL>>i));                               │          BOOST_CHECK((HalfL >> (i-1)) - OneL == (MaxL>>i));                              
        TmpL = (HalfL >> (i-1));                                                         │          TmpL = (HalfL >> (i-1));                                                        
        BOOST_CHECK(TmpL-- == (HalfL >> (i-1)));                                         │          BOOST_CHECK(TmpL-- == (HalfL >> (i-1)));                                        
        BOOST_CHECK(TmpL == (MaxL >> i));                                                │          BOOST_CHECK(TmpL == (MaxL >> i));                                               
        TmpL = (HalfL >> (i-1));                                                         │          TmpL = (HalfL >> (i-1));                                                        
        BOOST_CHECK(--TmpL == (MaxL >> i));                                              │          BOOST_CHECK(--TmpL == (MaxL >> i));                                             
    }                                                                                    │      }                                                                                   
    TmpL = R1L;                                                                          │      TmpL = R1L;                                                                         
    BOOST_CHECK(--TmpL == R1L-1);                                                        │      BOOST_CHECK(--TmpL == R1L-1);                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/bitcoin-tx.cpp:795                                                          │ dogecoin/src/bitcoin-tx.cpp:754                                                          
                                                                                         │                                                                                          
    std::string strPrint;                                                                │      std::string strPrint;                                                               
    int nRet = 0;                                                                        │      int nRet = 0;                                                                       
    try {                                                                                │      try {                                                                               
        // Skip switches; Permit common stdin convention "-"                             │          // Skip switches; Permit common stdin convention "-"                            
        while (argc > 1 && IsSwitchChar(argv[1][0]) &&                                   │          while (argc > 1 && IsSwitchChar(argv[1][0]) &&                                  
               (argv[1][1] != 0)) {                                                      │                 (argv[1][1] != 0)) {                                                     
            argc--;                                                                      │              argc--;                                                                     
            argv++;                                                                      │              argv++;                                                                     
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        CMutableTransaction tx;                                                          │          CMutableTransaction tx;                                                         
        int startArg;                                                                    │          int startArg;                                                                   
                                                                                         │                                                                                          
        if (!fCreateBlank) {                                                             │          if (!fCreateBlank) {                                                            
            // require at least one param                                                │              // require at least one param                                               
            if (argc < 2)                                                                │              if (argc < 2)                                                               
                throw std::runtime_error("too few parameters");                          │                  throw std::runtime_error("too few parameters");                         
                                                                                         │                                                                                          
            // param: hex-encoded bitcoin transaction                                    │              // param: hex-encoded bitcoin transaction                                   
            std::string strHexTx(argv[1]);                                               │              std::string strHexTx(argv[1]);                                              
            if (strHexTx == "-")                 // "-" implies standard input           │              if (strHexTx == "-")                 // "-" implies standard input          
                strHexTx = readStdin();                                                  │                  strHexTx = readStdin();                                                 
                                                                                         │                                                                                          
            if (!DecodeHexTx(tx, strHexTx, true))                                        │              if (!DecodeHexTx(tx, strHexTx, true))                                       
                throw std::runtime_error("invalid transaction encoding");                │                  throw std::runtime_error("invalid transaction encoding");               
                                                                                         │                                                                                          
            startArg = 2;                                                                │              startArg = 2;                                                               
        } else                                                                           │          } else                                                                          
            startArg = 1;                                                                │              startArg = 1;                                                               
                                                                                         │                                                                                          
        for (int i = startArg; i < argc; i++) {                                          │          for (int i = startArg; i < argc; i++) {                                         
            std::string arg = argv[i];                                                   │              std::string arg = argv[i];                                                  
            std::string key, value;                                                      │              std::string key, value;                                                     
            size_t eqpos = arg.find('=');                                                │              size_t eqpos = arg.find('=');                                               
            if (eqpos == std::string::npos)                                              │              if (eqpos == std::string::npos)                                             
                key = arg;                                                               │                  key = arg;                                                              
            else {                                                                       │              else {                                                                      
                key = arg.substr(0, eqpos);                                              │                  key = arg.substr(0, eqpos);                                             
                value = arg.substr(eqpos + 1);                                           │                  value = arg.substr(eqpos + 1);                                          
            }                                                                            │              }                                                                           
                                                                                         │                                                                                          
            MutateTx(tx, key, value);                                                    │              MutateTx(tx, key, value);                                                   
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        OutputTx(CTransaction(tx));                                                      │          OutputTx(tx);                                                                   
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
                                                                                         │      catch (const boost::thread_interrupted&) {                                          
                                                                                         │          throw;                                                                          
    }                                                                                    │      }                                                                                   
    catch (const std::exception& e) {                                                    │      catch (const std::exception& e) {                                                   
        strPrint = std::string("error: ") + e.what();                                    │          strPrint = std::string("error: ") + e.what();                                   
        nRet = EXIT_FAILURE;                                                             │          nRet = EXIT_FAILURE;                                                            
    }                                                                                    │      }                                                                                   
    catch (...) {                                                                        │      catch (...) {                                                                       
        PrintExceptionContinue(nullptr, "CommandLineRawTx()");                           │          PrintExceptionContinue(NULL, "CommandLineRawTx()");                             
        throw;                                                                           │          throw;                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (strPrint != "") {                                                                │      if (strPrint != "") {                                                               
        tfm::format(nRet == 0 ? std::cout : std::cerr, "%s\n", strPrint);                │          fprintf((nRet == 0 ? stdout : stderr), "%s\n", strPrint.c_str());               
    }                                                                                    │      }                                                                                   
    return nRet;                                                                         │      return nRet;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/net.cpp:2124                                                               │ bitcoin/src/net.cpp:2456                                                                 
                                                                                         │                                                                                          
    if (!fDiscover)                                                                      │      if (!fDiscover)                                                                     
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
#ifdef WIN32                                                                             │  #ifdef WIN32                                                                            
    // Get local host IP                                                                 │      // Get local host IP                                                                
    char pszHostName[256] = "";                                                          │      char pszHostName[256] = "";                                                         
    if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR)                   │      if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR)                  
    {                                                                                    │      {                                                                                   
        std::vector<CNetAddr> vaddr;                                                     │          std::vector<CNetAddr> vaddr;                                                    
        if (LookupHost(pszHostName, vaddr, 0, true))                                     │          if (LookupHost(pszHostName, vaddr, 0, true))                                    
        {                                                                                │          {                                                                               
            BOOST_FOREACH (const CNetAddr &addr, vaddr)                                  │              for (const CNetAddr &addr : vaddr)                                          
            {                                                                            │              {                                                                           
                if (AddLocal(addr, LOCAL_IF))                                            │                  if (AddLocal(addr, LOCAL_IF))                                           
                    LogPrintf("%s: %s - %s\n", __func__, pszHostName, addr.ToString());  │                      LogPrintf("%s: %s - %s\n", __func__, pszHostName, addr.ToString()); 
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
#else                                                                                    │  #elif (HAVE_DECL_GETIFADDRS && HAVE_DECL_FREEIFADDRS)                                   
    // Get local host ip                                                                 │      // Get local host ip                                                                
    struct ifaddrs* myaddrs;                                                             │      struct ifaddrs* myaddrs;                                                            
    if (getifaddrs(&myaddrs) == 0)                                                       │      if (getifaddrs(&myaddrs) == 0)                                                      
    {                                                                                    │      {                                                                                   
        for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next)            │          for (struct ifaddrs* ifa = myaddrs; ifa != nullptr; ifa = ifa->ifa_next)        
        {                                                                                │          {                                                                               
            if (ifa->ifa_addr == NULL) continue;                                         │              if (ifa->ifa_addr == nullptr) continue;                                     
            if ((ifa->ifa_flags & IFF_UP) == 0) continue;                                │              if ((ifa->ifa_flags & IFF_UP) == 0) continue;                               
            if (strcmp(ifa->ifa_name, "lo") == 0) continue;                              │              if (strcmp(ifa->ifa_name, "lo") == 0) continue;                             
            if (strcmp(ifa->ifa_name, "lo0") == 0) continue;                             │              if (strcmp(ifa->ifa_name, "lo0") == 0) continue;                            
            if (ifa->ifa_addr->sa_family == AF_INET)                                     │              if (ifa->ifa_addr->sa_family == AF_INET)                                    
            {                                                                            │              {                                                                           
                struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr);           │                  struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr);          
                CNetAddr addr(s4->sin_addr);                                             │                  CNetAddr addr(s4->sin_addr);                                            
                if (AddLocal(addr, LOCAL_IF))                                            │                  if (AddLocal(addr, LOCAL_IF))                                           
                    LogPrintf("%s: IPv4 %s: %s\n", __func__, ifa->ifa_name, addr.ToStrin │                      LogPrintf("%s: IPv4 %s: %s\n", __func__, ifa->ifa_name, addr.ToStrin
            }                                                                            │              }                                                                           
            else if (ifa->ifa_addr->sa_family == AF_INET6)                               │              else if (ifa->ifa_addr->sa_family == AF_INET6)                              
            {                                                                            │              {                                                                           
                struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr);         │                  struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr);        
                CNetAddr addr(s6->sin6_addr);                                            │                  CNetAddr addr(s6->sin6_addr);                                           
                if (AddLocal(addr, LOCAL_IF))                                            │                  if (AddLocal(addr, LOCAL_IF))                                           
                    LogPrintf("%s: IPv6 %s: %s\n", __func__, ifa->ifa_name, addr.ToStrin │                      LogPrintf("%s: IPv6 %s: %s\n", __func__, ifa->ifa_name, addr.ToStrin
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        freeifaddrs(myaddrs);                                                            │          freeifaddrs(myaddrs);                                                           
    }                                                                                    │      }                                                                                   
#endif                                                                                   │  #endif                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/blockchain.cpp:314                                                     │ dogecoin/src/rpc/blockchain.cpp:272                                                      
                                                                                         │                                                                                          
    if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)         │      if (request.fHelp || request.params.size() < 1 || request.params.size() > 2)        
        throw runtime_error(                                                             │          throw runtime_error(                                                            
            "waitforblockheight <height> (timeout)\n"                                    │              "waitforblock <blockhash> (timeout)\n"                                      
            "\nWaits for (at least) block height and returns the height and hash\n"      │              "\nWaits for a specific new block and returns useful info about it.\n"      
            "of the current tip.\n"                                                      │                                                                                          
            "\nReturns the current block on timeout or exit.\n"                          │              "\nReturns the current block on timeout or exit.\n"                         
            "\nArguments:\n"                                                             │              "\nArguments:\n"                                                            
            "1. height  (required, int) Block height to wait for (int)\n"                │              "1. \"blockhash\" (required, string) Block hash to wait for.\n"             
            "2. timeout (int, optional, default=0) Time in milliseconds to wait for a re │              "2. timeout       (int, optional, default=0) Time in milliseconds to wait fo
            "\nResult:\n"                                                                │              "\nResult:\n"                                                               
            "{                           (json object)\n"                                │              "{                           (json object)\n"                               
            "  \"hash\" : {       (string) The blockhash\n"                              │              "  \"hash\" : {       (string) The blockhash\n"                             
            "  \"height\" : {     (int) Block height\n"                                  │              "  \"height\" : {     (int) Block height\n"                                 
            "}\n"                                                                        │              "}\n"                                                                       
            "\nExamples:\n"                                                              │              "\nExamples:\n"                                                             
            + HelpExampleCli("waitforblockheight", "\"100\", 1000")                      │              + HelpExampleCli("waitforblock", "\"0000000000079f8ef3d2c688c244eb7a4570b24c
            + HelpExampleRpc("waitforblockheight", "\"100\", 1000")                      │              + HelpExampleRpc("waitforblock", "\"0000000000079f8ef3d2c688c244eb7a4570b24c
        );                                                                               │          );                                                                              
    int timeout = 0;                                                                     │      int timeout = 0;                                                                    
                                                                                         │                                                                                          
    int height = request.params[0].get_int();                                            │      uint256 hash = uint256S(request.params[0].get_str());                               
                                                                                         │                                                                                          
    if (request.params.size() > 1)                                                       │      if (request.params.size() > 1)                                                      
        timeout = request.params[1].get_int();                                           │          timeout = request.params[1].get_int();                                          
                                                                                         │                                                                                          
    CUpdatedBlock block;                                                                 │      CUpdatedBlock block;                                                                
    {                                                                                    │      {                                                                                   
        std::unique_lock<std::mutex> lock(cs_blockchange);                               │          std::unique_lock<std::mutex> lock(cs_blockchange);                              
        if(timeout)                                                                      │          if(timeout)                                                                     
            cond_blockchange.wait_for(lock, std::chrono::milliseconds(timeout), [&height │              cond_blockchange.wait_for(lock, std::chrono::milliseconds(timeout), [&hash]{
        else                                                                             │          else                                                                            
            cond_blockchange.wait(lock, [&height]{return latestblock.height >= height || │              cond_blockchange.wait(lock, [&hash]{return latestblock.hash == hash || !IsRP
        block = latestblock;                                                             │          block = latestblock;                                                            
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    UniValue ret(UniValue::VOBJ);                                                        │      UniValue ret(UniValue::VOBJ);                                                       
    ret.pushKV("hash", block.hash.GetHex());                                             │      ret.pushKV("hash", block.hash.GetHex());                                            
    ret.pushKV("height", block.height);                                                  │      ret.pushKV("height", block.height);                                                 
    return ret;                                                                          │      return ret;                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/allocator_tests.cpp:162                                               │ bitcoin/src/test/allocator_tests.cpp:166                                                 
                                                                                         │                                                                                          
    // Test over three virtual arenas, of which one will succeed being locked            │      // Test over three virtual arenas, of which one will succeed being locked           
    std::unique_ptr<LockedPageAllocator> x(new TestLockedPageAllocator(3, 1));           │      std::unique_ptr<LockedPageAllocator> x = std::make_unique<TestLockedPageAllocator>(3
    LockedPool pool(std::move(x));                                                       │      LockedPool pool(std::move(x));                                                      
    BOOST_CHECK(pool.stats().total == 0);                                                │      BOOST_CHECK(pool.stats().total == 0);                                               
    BOOST_CHECK(pool.stats().locked == 0);                                               │      BOOST_CHECK(pool.stats().locked == 0);                                              
                                                                                         │                                                                                          
    // Ensure unreasonable requests are refused without allocating anything              │      // Ensure unreasonable requests are refused without allocating anything             
    void *invalid_toosmall = pool.alloc(0);                                              │      void *invalid_toosmall = pool.alloc(0);                                             
    BOOST_CHECK(invalid_toosmall == nullptr);                                            │      BOOST_CHECK(invalid_toosmall == nullptr);                                           
    BOOST_CHECK(pool.stats().used == 0);                                                 │      BOOST_CHECK(pool.stats().used == 0);                                                
    BOOST_CHECK(pool.stats().free == 0);                                                 │      BOOST_CHECK(pool.stats().free == 0);                                                
    void *invalid_toobig = pool.alloc(LockedPool::ARENA_SIZE+1);                         │      void *invalid_toobig = pool.alloc(LockedPool::ARENA_SIZE+1);                        
    BOOST_CHECK(invalid_toobig == nullptr);                                              │      BOOST_CHECK(invalid_toobig == nullptr);                                             
    BOOST_CHECK(pool.stats().used == 0);                                                 │      BOOST_CHECK(pool.stats().used == 0);                                                
    BOOST_CHECK(pool.stats().free == 0);                                                 │      BOOST_CHECK(pool.stats().free == 0);                                                
                                                                                         │                                                                                          
    void *a0 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a0 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a0);                                                                     │      BOOST_CHECK(a0);                                                                    
    BOOST_CHECK(pool.stats().locked == LockedPool::ARENA_SIZE);                          │      BOOST_CHECK(pool.stats().locked == LockedPool::ARENA_SIZE);                         
    void *a1 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a1 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a1);                                                                     │      BOOST_CHECK(a1);                                                                    
    void *a2 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a2 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a2);                                                                     │      BOOST_CHECK(a2);                                                                    
    void *a3 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a3 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a3);                                                                     │      BOOST_CHECK(a3);                                                                    
    void *a4 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a4 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a4);                                                                     │      BOOST_CHECK(a4);                                                                    
    void *a5 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                   │      void *a5 = pool.alloc(LockedPool::ARENA_SIZE / 2);                                  
    BOOST_CHECK(a5);                                                                     │      BOOST_CHECK(a5);                                                                    
    // We've passed a count of three arenas, so this allocation should fail              │      // We've passed a count of three arenas, so this allocation should fail             
    void *a6 = pool.alloc(16);                                                           │      void *a6 = pool.alloc(16);                                                          
    BOOST_CHECK(!a6);                                                                    │      BOOST_CHECK(!a6);                                                                   
                                                                                         │                                                                                          
    pool.free(a0);                                                                       │      pool.free(a0);                                                                      
    pool.free(a2);                                                                       │      pool.free(a2);                                                                      
    pool.free(a4);                                                                       │      pool.free(a4);                                                                      
    pool.free(a1);                                                                       │      pool.free(a1);                                                                      
    pool.free(a3);                                                                       │      pool.free(a3);                                                                      
    pool.free(a5);                                                                       │      pool.free(a5);                                                                      
    BOOST_CHECK(pool.stats().total == 3*LockedPool::ARENA_SIZE);                         │      BOOST_CHECK(pool.stats().total == 3*LockedPool::ARENA_SIZE);                        
    BOOST_CHECK(pool.stats().locked == LockedPool::ARENA_SIZE);                          │      BOOST_CHECK(pool.stats().locked == LockedPool::ARENA_SIZE);                         
    BOOST_CHECK(pool.stats().used == 0);                                                 │      BOOST_CHECK(pool.stats().used == 0);                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/bloom.cpp:218                                                              │ bitcoin/src/common/bloom.cpp:163                                                         
                                                                                         │                                                                                          
    double logFpRate = log(fpRate);                                                      │      double logFpRate = log(fpRate);                                                     
    /* The optimal number of hash functions is log(fpRate) / log(0.5), but               │      /* The optimal number of hash functions is log(fpRate) / log(0.5), but              
     * restrict it to the range 1-50. */                                                 │       * restrict it to the range 1-50. */                                                
    nHashFuncs = std::max(1, std::min((int)round(logFpRate / log(0.5)), 50));            │      nHashFuncs = std::max(1, std::min((int)round(logFpRate / log(0.5)), 50));           
    /* In this rolling bloom filter, we'll store between 2 and 3 generations of nElement │      /* In this rolling bloom filter, we'll store between 2 and 3 generations of nElement
    nEntriesPerGeneration = (nElements + 1) / 2;                                         │      nEntriesPerGeneration = (nElements + 1) / 2;                                        
    uint32_t nMaxElements = nEntriesPerGeneration * 3;                                   │      uint32_t nMaxElements = nEntriesPerGeneration * 3;                                  
    /* The maximum fpRate = pow(1.0 - exp(-nHashFuncs * nMaxElements / nFilterBits), nHa │      /* The maximum fpRate = pow(1.0 - exp(-nHashFuncs * nMaxElements / nFilterBits), nHa
     * =>          pow(fpRate, 1.0 / nHashFuncs) = 1.0 - exp(-nHashFuncs * nMaxElements  │       * =>          pow(fpRate, 1.0 / nHashFuncs) = 1.0 - exp(-nHashFuncs * nMaxElements 
     * =>          1.0 - pow(fpRate, 1.0 / nHashFuncs) = exp(-nHashFuncs * nMaxElements  │       * =>          1.0 - pow(fpRate, 1.0 / nHashFuncs) = exp(-nHashFuncs * nMaxElements 
     * =>          log(1.0 - pow(fpRate, 1.0 / nHashFuncs)) = -nHashFuncs * nMaxElements │       * =>          log(1.0 - pow(fpRate, 1.0 / nHashFuncs)) = -nHashFuncs * nMaxElements
     * =>          nFilterBits = -nHashFuncs * nMaxElements / log(1.0 - pow(fpRate, 1.0  │       * =>          nFilterBits = -nHashFuncs * nMaxElements / log(1.0 - pow(fpRate, 1.0 
     * =>          nFilterBits = -nHashFuncs * nMaxElements / log(1.0 - exp(logFpRate /  │       * =>          nFilterBits = -nHashFuncs * nMaxElements / log(1.0 - exp(logFpRate / 
     */                                                                                  │       */                                                                                 
    uint32_t nFilterBits = (uint32_t)ceil(-1.0 * nHashFuncs * nMaxElements / log(1.0 - e │      uint32_t nFilterBits = (uint32_t)ceil(-1.0 * nHashFuncs * nMaxElements / log(1.0 - e
    data.clear();                                                                        │      data.clear();                                                                       
    /* For each data element we need to store 2 bits. If both bits are 0, the            │      /* For each data element we need to store 2 bits. If both bits are 0, the           
     * bit is treated as unset. If the bits are (01), (10), or (11), the bit is          │       * bit is treated as unset. If the bits are (01), (10), or (11), the bit is         
     * treated as set in generation 1, 2, or 3 respectively.                             │       * treated as set in generation 1, 2, or 3 respectively.                            
     * These bits are stored in separate integers: position P corresponds to bit         │       * These bits are stored in separate integers: position P corresponds to bit        
     * (P & 63) of the integers data[(P >> 6) * 2] and data[(P >> 6) * 2 + 1]. */        │       * (P & 63) of the integers data[(P >> 6) * 2] and data[(P >> 6) * 2 + 1]. */       
    data.resize(((nFilterBits + 63) / 64) << 1);                                         │      data.resize(((nFilterBits + 63) / 64) << 1);                                        
    reset();                                                                             │      reset();                                                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactionview.cpp:432                                                 │ bitcoin/src/qt/transactionview.cpp:483                                                   
                                                                                         │                                                                                          
    if(!transactionView->selectionModel() ||!model)                                      │      if(!transactionView->selectionModel() ||!model)                                     
        return;                                                                          │          return;                                                                         
    QModelIndexList selection = transactionView->selectionModel()->selectedRows();       │      QModelIndexList selection = transactionView->selectionModel()->selectedRows();      
    if(!selection.isEmpty())                                                             │      if(!selection.isEmpty())                                                            
    {                                                                                    │      {                                                                                   
        AddressTableModel *addressBook = model->getAddressTableModel();                  │          AddressTableModel *addressBook = model->getAddressTableModel();                 
        if(!addressBook)                                                                 │          if(!addressBook)                                                                
            return;                                                                      │              return;                                                                     
        QString address = selection.at(0).data(TransactionTableModel::AddressRole).toStr │          QString address = selection.at(0).data(TransactionTableModel::AddressRole).toStr
        if(address.isEmpty())                                                            │          if(address.isEmpty())                                                           
        {                                                                                │          {                                                                               
            // If this transaction has no associated address, exit                       │              // If this transaction has no associated address, exit                      
            return;                                                                      │              return;                                                                     
        }                                                                                │          }                                                                               
        // Is address in address book? Address book can miss address when a transaction  │          // Is address in address book? Address book can miss address when a transaction 
        // sent from outside the UI.                                                     │          // sent from outside the UI.                                                    
        int idx = addressBook->lookupAddress(address);                                   │          int idx = addressBook->lookupAddress(address);                                  
        if(idx != -1)                                                                    │          if(idx != -1)                                                                   
        {                                                                                │          {                                                                               
            // Edit sending / receiving address                                          │              // Edit sending / receiving address                                         
            QModelIndex modelIdx = addressBook->index(idx, 0, QModelIndex());            │              QModelIndex modelIdx = addressBook->index(idx, 0, QModelIndex());           
            // Determine type of address, launch appropriate editor dialog type          │              // Determine type of address, launch appropriate editor dialog type         
            QString type = modelIdx.data(AddressTableModel::TypeRole).toString();        │              QString type = modelIdx.data(AddressTableModel::TypeRole).toString();       
                                                                                         │                                                                                          
            EditAddressDialog dlg(                                                       │              auto dlg = new EditAddressDialog(                                           
                type == AddressTableModel::Receive                                       │                  type == AddressTableModel::Receive                                      
                ? EditAddressDialog::EditReceivingAddress                                │                  ? EditAddressDialog::EditReceivingAddress                               
                : EditAddressDialog::EditSendingAddress, this);                          │                  : EditAddressDialog::EditSendingAddress, this);                         
            dlg.setModel(addressBook);                                                   │              dlg->setModel(addressBook);                                                 
            dlg.loadRow(idx);                                                            │              dlg->loadRow(idx);                                                          
            dlg.exec();                                                                  │              GUIUtil::ShowModalDialogAsynchronously(dlg);                                
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            // Add sending address                                                       │              // Add sending address                                                      
            EditAddressDialog dlg(EditAddressDialog::NewSendingAddress,                  │              auto dlg = new EditAddressDialog(EditAddressDialog::NewSendingAddress,      
                this);                                                                   │                  this);                                                                  
            dlg.setModel(addressBook);                                                   │              dlg->setModel(addressBook);                                                 
            dlg.setAddress(address);                                                     │              dlg->setAddress(address);                                                   
            dlg.exec();                                                                  │              GUIUtil::ShowModalDialogAsynchronously(dlg);                                
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:129                                               │ bitcoin/src/univalue/test/object.cpp:129                                                 
                                                                                         │                                                                                          
    UniValue v(UniValue::VSTR, "foo");                                                   │      UniValue v(UniValue::VSTR, "foo");                                                  
    v.clear();                                                                           │      v.clear();                                                                          
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
    BOOST_CHECK_EQUAL(v.getValStr(), "");                                                │      BOOST_CHECK_EQUAL(v.getValStr(), "");                                               
                                                                                         │                                                                                          
    BOOST_CHECK(v.setObject());                                                          │      BOOST_CHECK(v.setObject());                                                         
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
    BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                      │      BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                     
    BOOST_CHECK(v.empty());                                                              │      BOOST_CHECK(v.empty());                                                             
                                                                                         │                                                                                          
    BOOST_CHECK(v.setArray());                                                           │      BOOST_CHECK(v.setArray());                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK(v.setStr("zum"));                                                        │      BOOST_CHECK(v.setStr("zum"));                                                       
    BOOST_CHECK(v.isStr());                                                              │      BOOST_CHECK(v.isStr());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                             │      BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                            
                                                                                         │                                                                                          
    BOOST_CHECK(v.setFloat(-1.01));                                                      │      BOOST_CHECK(v.setFloat(-1.01));                                                     
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int)1023));                                                    │      BOOST_CHECK(v.setInt((int)1023));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int64_t)-1023LL));                                             │      BOOST_CHECK(v.setInt((int64_t)-1023LL));                                            
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                            │      BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                           
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNumStr("-688"));                                                    │      BOOST_CHECK(v.setNumStr("-688"));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(false));                                                       │      BOOST_CHECK(v.setBool(false));                                                      
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), false);                                                │      BOOST_CHECK_EQUAL(v.isTrue(), false);                                               
    BOOST_CHECK_EQUAL(v.isFalse(), true);                                                │      BOOST_CHECK_EQUAL(v.isFalse(), true);                                               
    BOOST_CHECK_EQUAL(v.getBool(), false);                                               │      BOOST_CHECK_EQUAL(v.getBool(), false);                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(true));                                                        │      BOOST_CHECK(v.setBool(true));                                                       
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), true);                                                 │      BOOST_CHECK_EQUAL(v.isTrue(), true);                                                
    BOOST_CHECK_EQUAL(v.isFalse(), false);                                               │      BOOST_CHECK_EQUAL(v.isFalse(), false);                                              
    BOOST_CHECK_EQUAL(v.getBool(), true);                                                │      BOOST_CHECK_EQUAL(v.getBool(), true);                                               
                                                                                         │                                                                                          
    BOOST_CHECK(!v.setNumStr("zombocom"));                                               │      BOOST_CHECK(!v.setNumStr("zombocom"));                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNull());                                                            │      BOOST_CHECK(v.setNull());                                                           
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:108                                                │ bitcoin/src/univalue/test/object.cpp:129                                                 
                                                                                         │                                                                                          
    UniValue v(UniValue::VSTR, "foo");                                                   │      UniValue v(UniValue::VSTR, "foo");                                                  
    v.clear();                                                                           │      v.clear();                                                                          
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
    BOOST_CHECK_EQUAL(v.getValStr(), "");                                                │      BOOST_CHECK_EQUAL(v.getValStr(), "");                                               
                                                                                         │                                                                                          
    BOOST_CHECK(v.setObject());                                                          │      BOOST_CHECK(v.setObject());                                                         
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
    BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                      │      BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                     
    BOOST_CHECK(v.empty());                                                              │      BOOST_CHECK(v.empty());                                                             
                                                                                         │                                                                                          
    BOOST_CHECK(v.setArray());                                                           │      BOOST_CHECK(v.setArray());                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK(v.setStr("zum"));                                                        │      BOOST_CHECK(v.setStr("zum"));                                                       
    BOOST_CHECK(v.isStr());                                                              │      BOOST_CHECK(v.isStr());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                             │      BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                            
                                                                                         │                                                                                          
    BOOST_CHECK(v.setFloat(-1.01));                                                      │      BOOST_CHECK(v.setFloat(-1.01));                                                     
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int)1023));                                                    │      BOOST_CHECK(v.setInt((int)1023));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int64_t)-1023LL));                                             │      BOOST_CHECK(v.setInt((int64_t)-1023LL));                                            
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                            │      BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                           
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNumStr("-688"));                                                    │      BOOST_CHECK(v.setNumStr("-688"));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(false));                                                       │      BOOST_CHECK(v.setBool(false));                                                      
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), false);                                                │      BOOST_CHECK_EQUAL(v.isTrue(), false);                                               
    BOOST_CHECK_EQUAL(v.isFalse(), true);                                                │      BOOST_CHECK_EQUAL(v.isFalse(), true);                                               
    BOOST_CHECK_EQUAL(v.getBool(), false);                                               │      BOOST_CHECK_EQUAL(v.getBool(), false);                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(true));                                                        │      BOOST_CHECK(v.setBool(true));                                                       
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), true);                                                 │      BOOST_CHECK_EQUAL(v.isTrue(), true);                                                
    BOOST_CHECK_EQUAL(v.isFalse(), false);                                               │      BOOST_CHECK_EQUAL(v.isFalse(), false);                                              
    BOOST_CHECK_EQUAL(v.getBool(), true);                                                │      BOOST_CHECK_EQUAL(v.getBool(), true);                                               
                                                                                         │                                                                                          
    BOOST_CHECK(!v.setNumStr("zombocom"));                                               │      BOOST_CHECK(!v.setNumStr("zombocom"));                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNull());                                                            │      BOOST_CHECK(v.setNull());                                                           
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:108                                                │ dogecoin/src/univalue/test/object.cpp:129                                                
                                                                                         │                                                                                          
    UniValue v(UniValue::VSTR, "foo");                                                   │      UniValue v(UniValue::VSTR, "foo");                                                  
    v.clear();                                                                           │      v.clear();                                                                          
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
    BOOST_CHECK_EQUAL(v.getValStr(), "");                                                │      BOOST_CHECK_EQUAL(v.getValStr(), "");                                               
                                                                                         │                                                                                          
    BOOST_CHECK(v.setObject());                                                          │      BOOST_CHECK(v.setObject());                                                         
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
    BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                      │      BOOST_CHECK_EQUAL(v.getType(), UniValue::VOBJ);                                     
    BOOST_CHECK(v.empty());                                                              │      BOOST_CHECK(v.empty());                                                             
                                                                                         │                                                                                          
    BOOST_CHECK(v.setArray());                                                           │      BOOST_CHECK(v.setArray());                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 0);                                                      │      BOOST_CHECK_EQUAL(v.size(), 0);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK(v.setStr("zum"));                                                        │      BOOST_CHECK(v.setStr("zum"));                                                       
    BOOST_CHECK(v.isStr());                                                              │      BOOST_CHECK(v.isStr());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                             │      BOOST_CHECK_EQUAL(v.getValStr(), "zum");                                            
                                                                                         │                                                                                          
    BOOST_CHECK(v.setFloat(-1.01));                                                      │      BOOST_CHECK(v.setFloat(-1.01));                                                     
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1.01");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int)1023));                                                    │      BOOST_CHECK(v.setInt((int)1023));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((int64_t)-1023LL));                                             │      BOOST_CHECK(v.setInt((int64_t)-1023LL));                                            
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                           │      BOOST_CHECK_EQUAL(v.getValStr(), "-1023");                                          
                                                                                         │                                                                                          
    BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                            │      BOOST_CHECK(v.setInt((uint64_t)1023ULL));                                           
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "1023");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNumStr("-688"));                                                    │      BOOST_CHECK(v.setNumStr("-688"));                                                   
    BOOST_CHECK(v.isNum());                                                              │      BOOST_CHECK(v.isNum());                                                             
    BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                            │      BOOST_CHECK_EQUAL(v.getValStr(), "-688");                                           
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(false));                                                       │      BOOST_CHECK(v.setBool(false));                                                      
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), false);                                                │      BOOST_CHECK_EQUAL(v.isTrue(), false);                                               
    BOOST_CHECK_EQUAL(v.isFalse(), true);                                                │      BOOST_CHECK_EQUAL(v.isFalse(), true);                                               
    BOOST_CHECK_EQUAL(v.getBool(), false);                                               │      BOOST_CHECK_EQUAL(v.getBool(), false);                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setBool(true));                                                        │      BOOST_CHECK(v.setBool(true));                                                       
    BOOST_CHECK_EQUAL(v.isBool(), true);                                                 │      BOOST_CHECK_EQUAL(v.isBool(), true);                                                
    BOOST_CHECK_EQUAL(v.isTrue(), true);                                                 │      BOOST_CHECK_EQUAL(v.isTrue(), true);                                                
    BOOST_CHECK_EQUAL(v.isFalse(), false);                                               │      BOOST_CHECK_EQUAL(v.isFalse(), false);                                              
    BOOST_CHECK_EQUAL(v.getBool(), true);                                                │      BOOST_CHECK_EQUAL(v.getBool(), true);                                               
                                                                                         │                                                                                          
    BOOST_CHECK(!v.setNumStr("zombocom"));                                               │      BOOST_CHECK(!v.setNumStr("zombocom"));                                              
                                                                                         │                                                                                          
    BOOST_CHECK(v.setNull());                                                            │      BOOST_CHECK(v.setNull());                                                           
    BOOST_CHECK(v.isNull());                                                             │      BOOST_CHECK(v.isNull());                                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/intro.cpp:68                                                             │ dogecoin/src/qt/intro.cpp:72                                                             
                                                                                         │                                                                                          
                                                                                         │      namespace fs = boost::filesystem;                                                   
    QString dataDirStr = intro->getPathToCheck();                                        │      QString dataDirStr = intro->getPathToCheck();                                       
    fs::path dataDir = GUIUtil::QStringToPath(dataDirStr);                               │      fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr);                         
    uint64_t freeBytesAvailable = 0;                                                     │      uint64_t freeBytesAvailable = 0;                                                    
    int replyStatus = ST_OK;                                                             │      int replyStatus = ST_OK;                                                            
    QString replyMessage = tr("A new data directory will be created.");                  │      QString replyMessage = tr("A new data directory will be created.");                 
                                                                                         │                                                                                          
    /* Find first parent that exists, so that fs::space does not fail */                 │      /* Find first parent that exists, so that fs::space does not fail */                
    fs::path parentDir = dataDir;                                                        │      fs::path parentDir = dataDir;                                                       
    fs::path parentDirOld = fs::path();                                                  │      fs::path parentDirOld = fs::path();                                                 
    while(parentDir.has_parent_path() && !fs::exists(parentDir))                         │      while(parentDir.has_parent_path() && !fs::exists(parentDir))                        
    {                                                                                    │      {                                                                                   
        parentDir = parentDir.parent_path();                                             │          parentDir = parentDir.parent_path();                                            
                                                                                         │                                                                                          
        /* Check if we make any progress, break if not to prevent an infinite loop here  │          /* Check if we make any progress, break if not to prevent an infinite loop here 
        if (parentDirOld == parentDir)                                                   │          if (parentDirOld == parentDir)                                                  
            break;                                                                       │              break;                                                                      
                                                                                         │                                                                                          
        parentDirOld = parentDir;                                                        │          parentDirOld = parentDir;                                                       
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    try {                                                                                │      try {                                                                               
        freeBytesAvailable = fs::space(parentDir).available;                             │          freeBytesAvailable = fs::space(parentDir).available;                            
        if(fs::exists(dataDir))                                                          │          if(fs::exists(dataDir))                                                         
        {                                                                                │          {                                                                               
            if(fs::is_directory(dataDir))                                                │              if(fs::is_directory(dataDir))                                               
            {                                                                            │              {                                                                           
                QString separator = "<code>" + QDir::toNativeSeparators("/") + tr("name" │                  QString separator = "<code>" + QDir::toNativeSeparators("/") + tr("name"
                replyStatus = ST_OK;                                                     │                  replyStatus = ST_OK;                                                    
                replyMessage = tr("Directory already exists. Add %1 if you intend to cre │                  replyMessage = tr("Directory already exists. Add %1 if you intend to cre
            } else {                                                                     │              } else {                                                                    
                replyStatus = ST_ERROR;                                                  │                  replyStatus = ST_ERROR;                                                 
                replyMessage = tr("Path already exists, and is not a directory.");       │                  replyMessage = tr("Path already exists, and is not a directory.");      
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    } catch (const fs::filesystem_error&)                                                │      } catch (const fs::filesystem_error&)                                               
    {                                                                                    │      {                                                                                   
        /* Parent directory does not exist or is not accessible */                       │          /* Parent directory does not exist or is not accessible */                      
        replyStatus = ST_ERROR;                                                          │          replyStatus = ST_ERROR;                                                         
        replyMessage = tr("Cannot create data directory here.");                         │          replyMessage = tr("Cannot create data directory here.");                        
    }                                                                                    │      }                                                                                   
    Q_EMIT reply(replyStatus, replyMessage, freeBytesAvailable);                         │      Q_EMIT reply(replyStatus, replyMessage, freeBytesAvailable);                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:1059                                                 │ bitcoin/src/test/script_tests.cpp:1061                                                   
                                                                                         │                                                                                          
    ScriptError err;                                                                     │      ScriptError err;                                                                    
    CKey key1, key2, key3;                                                               │      CKey key1, key2, key3;                                                              
    key1.MakeNewKey(true);                                                               │      key1.MakeNewKey(true);                                                              
    key2.MakeNewKey(false);                                                              │      key2.MakeNewKey(false);                                                             
    key3.MakeNewKey(true);                                                               │      key3.MakeNewKey(true);                                                              
                                                                                         │                                                                                          
    CScript scriptPubKey12;                                                              │      CScript scriptPubKey12;                                                             
    scriptPubKey12 << OP_1 << ToByteVector(key1.GetPubKey()) << ToByteVector(key2.GetPub │      scriptPubKey12 << OP_1 << ToByteVector(key1.GetPubKey()) << ToByteVector(key2.GetPub
                                                                                         │                                                                                          
    CMutableTransaction txFrom12 = BuildCreditingTransaction(scriptPubKey12);            │      const CTransaction txFrom12{BuildCreditingTransaction(scriptPubKey12)};             
    CMutableTransaction txTo12 = BuildSpendingTransaction(CScript(), CScriptWitness(), t │      CMutableTransaction txTo12 = BuildSpendingTransaction(CScript(), CScriptWitness(), t
                                                                                         │                                                                                          
    CScript goodsig1 = sign_multisig(scriptPubKey12, key1, txTo12);                      │      CScript goodsig1 = sign_multisig(scriptPubKey12, key1, CTransaction(txTo12));       
    BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey12, NULL, flags, MutableTransactionSi │      BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey12, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
    txTo12.vout[0].nValue = 2;                                                           │      txTo12.vout[0].nValue = 2;                                                          
    BOOST_CHECK(!VerifyScript(goodsig1, scriptPubKey12, NULL, flags, MutableTransactionS │      BOOST_CHECK(!VerifyScript(goodsig1, scriptPubKey12, nullptr, gFlags, MutableTransact
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
                                                                                         │                                                                                          
    CScript goodsig2 = sign_multisig(scriptPubKey12, key2, txTo12);                      │      CScript goodsig2 = sign_multisig(scriptPubKey12, key2, CTransaction(txTo12));       
    BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey12, NULL, flags, MutableTransactionSi │      BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey12, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                   │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_OK, ScriptErrorString(err));                  
                                                                                         │                                                                                          
    CScript badsig1 = sign_multisig(scriptPubKey12, key3, txTo12);                       │      CScript badsig1 = sign_multisig(scriptPubKey12, key3, CTransaction(txTo12));        
    BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey12, NULL, flags, MutableTransactionSi │      BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey12, nullptr, gFlags, MutableTransacti
    BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));           │      BOOST_CHECK_MESSAGE(err == SCRIPT_ERR_EVAL_FALSE, ScriptErrorString(err));          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/blockencodings_tests.cpp:235                                          │ bitcoin/src/test/blockencodings_tests.cpp:221                                            
                                                                                         │                                                                                          
        TestHeaderAndShortIDs shortIDs(block);                                           │          TestHeaderAndShortIDs shortIDs(block);                                          
        shortIDs.prefilledtxn.resize(2);                                                 │          shortIDs.prefilledtxn.resize(2);                                                
        shortIDs.prefilledtxn[0] = {0, block.vtx[0]};                                    │          shortIDs.prefilledtxn[0] = {0, block.vtx[0]};                                   
        shortIDs.prefilledtxn[1] = {1, block.vtx[2]}; // id == 1 as it is 1 after index  │          shortIDs.prefilledtxn[1] = {1, block.vtx[2]}; // id == 1 as it is 1 after index 
        shortIDs.shorttxids.resize(1);                                                   │          shortIDs.shorttxids.resize(1);                                                  
        shortIDs.shorttxids[0] = shortIDs.GetShortID(block.vtx[1]->GetHash());           │          shortIDs.shorttxids[0] = shortIDs.GetShortID(block.vtx[1]->GetHash());          
                                                                                         │                                                                                          
        CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                               │          CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                              
        stream << shortIDs;                                                              │          stream << shortIDs;                                                             
                                                                                         │                                                                                          
        CBlockHeaderAndShortTxIDs shortIDs2;                                             │          CBlockHeaderAndShortTxIDs shortIDs2;                                            
        stream >> shortIDs2;                                                             │          stream >> shortIDs2;                                                            
                                                                                         │                                                                                          
        PartiallyDownloadedBlock partialBlock(&pool);                                    │          PartiallyDownloadedBlock partialBlock(&pool);                                   
        BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);      │          BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);     
        BOOST_CHECK( partialBlock.IsTxAvailable(0));                                     │          BOOST_CHECK( partialBlock.IsTxAvailable(0));                                    
        BOOST_CHECK( partialBlock.IsTxAvailable(1));                                     │          BOOST_CHECK( partialBlock.IsTxAvailable(1));                                    
        BOOST_CHECK( partialBlock.IsTxAvailable(2));                                     │          BOOST_CHECK( partialBlock.IsTxAvailable(2));                                    
                                                                                         │                                                                                          
        BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[1]->GetHash())->GetSharedTx().use_co │          BOOST_CHECK_EQUAL(pool.mapTx.find(block.vtx[1]->GetHash())->GetSharedTx().use_co
                                                                                         │                                                                                          
        CBlock block2;                                                                   │          CBlock block2;                                                                  
        PartiallyDownloadedBlock partialBlockCopy = partialBlock;                        │          PartiallyDownloadedBlock partialBlockCopy = partialBlock;                       
        BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_OK);               │          BOOST_CHECK(partialBlock.FillBlock(block2, {}) == READ_STATUS_OK);              
        BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());      │          BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());     
        bool mutated;                                                                    │          bool mutated;                                                                   
        BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &muta │          BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &muta
        BOOST_CHECK(!mutated);                                                           │          BOOST_CHECK(!mutated);                                                          
                                                                                         │                                                                                          
        txhash = block.vtx[1]->GetHash();                                                │          txhash = block.vtx[1]->GetHash();                                               
        block.vtx.clear();                                                               │          block.vtx.clear();                                                              
        block2.vtx.clear();                                                              │          block2.vtx.clear();                                                             
        BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_ │          BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), SHARED_TX_
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/dbwrapper_tests.cpp:358                                                │ dogecoin/src/test/dbwrapper_tests.cpp:273                                                
                                                                                         │                                                                                          
    char buf[10];                                                                        │      char buf[10];                                                                       
                                                                                         │                                                                                          
    fs::path ph = m_args.GetDataDirBase() / "iterator_string_ordering";                  │      boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::files
    CDBWrapper dbw(ph, (1 << 20), true, false, false);                                   │      CDBWrapper dbw(ph, (1 << 20), true, false, false);                                  
    for (int x=0x00; x<10; ++x) {                                                        │      for (int x=0x00; x<10; ++x) {                                                       
        for (int y = 0; y < 10; y++) {                                                   │          for (int y = 0; y < 10; y++) {                                                  
            snprintf(buf, sizeof(buf), "%d", x);                                         │              sprintf(buf, "%d", x);                                                      
            StringContentsSerializer key(buf);                                           │              StringContentsSerializer key(buf);                                          
            for (int z = 0; z < y; z++)                                                  │              for (int z = 0; z < y; z++)                                                 
                key += key;                                                              │                  key += key;                                                             
            uint32_t value = x*x;                                                        │              uint32_t value = x*x;                                                       
            BOOST_CHECK(dbw.Write(key, value));                                          │              BOOST_CHECK(dbw.Write(key, value));                                         
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    std::unique_ptr<CDBIterator> it(const_cast<CDBWrapper&>(dbw).NewIterator());         │      std::unique_ptr<CDBIterator> it(const_cast<CDBWrapper*>(&dbw)->NewIterator());      
    for (const int seek_start : {0, 5}) {                                                │      for (int c=0; c<2; ++c) {                                                           
        snprintf(buf, sizeof(buf), "%d", seek_start);                                    │          int seek_start;                                                                 
                                                                                         │          if (c == 0)                                                                     
                                                                                         │              seek_start = 0;                                                             
                                                                                         │          else                                                                            
                                                                                         │              seek_start = 5;                                                             
                                                                                         │          sprintf(buf, "%d", seek_start);                                                 
        StringContentsSerializer seek_key(buf);                                          │          StringContentsSerializer seek_key(buf);                                         
        it->Seek(seek_key);                                                              │          it->Seek(seek_key);                                                             
        for (unsigned int x=seek_start; x<10; ++x) {                                     │          for (int x=seek_start; x<10; ++x) {                                             
            for (int y = 0; y < 10; y++) {                                               │              for (int y = 0; y < 10; y++) {                                              
                snprintf(buf, sizeof(buf), "%d", x);                                     │                  sprintf(buf, "%d", x);                                                  
                std::string exp_key(buf);                                                │                  std::string exp_key(buf);                                               
                for (int z = 0; z < y; z++)                                              │                  for (int z = 0; z < y; z++)                                             
                    exp_key += exp_key;                                                  │                      exp_key += exp_key;                                                 
                StringContentsSerializer key;                                            │                  StringContentsSerializer key;                                           
                uint32_t value;                                                          │                  uint32_t value;                                                         
                BOOST_CHECK(it->Valid());                                                │                  BOOST_CHECK(it->Valid());                                               
                if (!it->Valid()) // Avoid spurious errors about invalid iterator's key  │                  if (!it->Valid()) // Avoid spurious errors about invalid iterator's key 
                    break;                                                               │                      break;                                                              
                BOOST_CHECK(it->GetKey(key));                                            │                  BOOST_CHECK(it->GetKey(key));                                           
                BOOST_CHECK(it->GetValue(value));                                        │                  BOOST_CHECK(it->GetValue(value));                                       
                BOOST_CHECK_EQUAL(key.str, exp_key);                                     │                  BOOST_CHECK_EQUAL(key.str, exp_key);                                    
                BOOST_CHECK_EQUAL(value, x*x);                                           │                  BOOST_CHECK_EQUAL(value, x*x);                                          
                it->Next();                                                              │                  it->Next();                                                             
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        BOOST_CHECK(!it->Valid());                                                       │          BOOST_CHECK(!it->Valid());                                                      
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/sighash_tests.cpp:171                                                 │ bitcoin/src/test/sighash_tests.cpp:164                                                   
                                                                                         │                                                                                          
    UniValue tests = read_json(std::string(json_tests::sighash, json_tests::sighash + si │      UniValue tests = read_json(std::string(json_tests::sighash, json_tests::sighash + si
                                                                                         │                                                                                          
    for (unsigned int idx = 0; idx < tests.size(); idx++) {                              │      for (unsigned int idx = 0; idx < tests.size(); idx++) {                             
        UniValue test = tests[idx];                                                      │          UniValue test = tests[idx];                                                     
        std::string strTest = test.write();                                              │          std::string strTest = test.write();                                             
        if (test.size() < 1) // Allow for extra stuff (useful for comments)              │          if (test.size() < 1) // Allow for extra stuff (useful for comments)             
        {                                                                                │          {                                                                               
            BOOST_ERROR("Bad test: " << strTest);                                        │              BOOST_ERROR("Bad test: " << strTest);                                       
            continue;                                                                    │              continue;                                                                   
        }                                                                                │          }                                                                               
        if (test.size() == 1) continue; // comment                                       │          if (test.size() == 1) continue; // comment                                      
                                                                                         │                                                                                          
        std::string raw_tx, raw_script, sigHashHex;                                      │          std::string raw_tx, raw_script, sigHashHex;                                     
        int nIn, nHashType;                                                              │          int nIn, nHashType;                                                             
        uint256 sh;                                                                      │          uint256 sh;                                                                     
        CTransactionRef tx;                                                              │          CTransactionRef tx;                                                             
        CScript scriptCode = CScript();                                                  │          CScript scriptCode = CScript();                                                 
                                                                                         │                                                                                          
        try {                                                                            │          try {                                                                           
          // deserialize test data                                                       │            // deserialize test data                                                      
          raw_tx = test[0].get_str();                                                    │            raw_tx = test[0].get_str();                                                   
          raw_script = test[1].get_str();                                                │            raw_script = test[1].get_str();                                               
          nIn = test[2].get_int();                                                       │            nIn = test[2].get_int();                                                      
          nHashType = test[3].get_int();                                                 │            nHashType = test[3].get_int();                                                
          sigHashHex = test[4].get_str();                                                │            sigHashHex = test[4].get_str();                                               
                                                                                         │                                                                                          
          CDataStream stream(ParseHex(raw_tx), SER_NETWORK, PROTOCOL_VERSION);           │            CDataStream stream(ParseHex(raw_tx), SER_NETWORK, PROTOCOL_VERSION);          
          stream >> tx;                                                                  │            stream >> tx;                                                                 
                                                                                         │                                                                                          
          CValidationState state;                                                        │            TxValidationState state;                                                      
          BOOST_CHECK_MESSAGE(CheckTransaction(*tx, state), strTest);                    │            BOOST_CHECK_MESSAGE(CheckTransaction(*tx, state), strTest);                   
          BOOST_CHECK(state.IsValid());                                                  │            BOOST_CHECK(state.IsValid());                                                 
                                                                                         │                                                                                          
          std::vector<unsigned char> raw = ParseHex(raw_script);                         │            std::vector<unsigned char> raw = ParseHex(raw_script);                        
          scriptCode.insert(scriptCode.end(), raw.begin(), raw.end());                   │            scriptCode.insert(scriptCode.end(), raw.begin(), raw.end());                  
        } catch (...) {                                                                  │          } catch (...) {                                                                 
          BOOST_ERROR("Bad test, couldn't deserialize data: " << strTest);               │            BOOST_ERROR("Bad test, couldn't deserialize data: " << strTest);              
          continue;                                                                      │            continue;                                                                     
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        sh = SignatureHash(scriptCode, *tx, nIn, nHashType, 0, SIGVERSION_BASE);         │          sh = SignatureHash(scriptCode, *tx, nIn, nHashType, 0, SigVersion::BASE);       
        BOOST_CHECK_MESSAGE(sh.GetHex() == sigHashHex, strTest);                         │          BOOST_CHECK_MESSAGE(sh.GetHex() == sigHashHex, strTest);                        
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/addrman.cpp:143                                                            │ bitcoin/src/addrman.cpp:487                                                              
                                                                                         │                                                                                          
                                                                                         │      AssertLockHeld(cs);                                                                 
                                                                                         │                                                                                          
    // remove the entry from all new buckets                                             │      // remove the entry from all new buckets                                            
    for (int bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; bucket++) {                  │      const int start_bucket{info.GetNewBucket(nKey, m_netgroupman)};                     
        int pos = info.GetBucketPosition(nKey, true, bucket);                            │      for (int n = 0; n < ADDRMAN_NEW_BUCKET_COUNT; ++n) {                                
                                                                                         │          const int bucket{(start_bucket + n) % ADDRMAN_NEW_BUCKET_COUNT};                
                                                                                         │          const int pos{info.GetBucketPosition(nKey, true, bucket)};                      
        if (vvNew[bucket][pos] == nId) {                                                 │          if (vvNew[bucket][pos] == nId) {                                                
            vvNew[bucket][pos] = -1;                                                     │              vvNew[bucket][pos] = -1;                                                    
            info.nRefCount--;                                                            │              info.nRefCount--;                                                           
                                                                                         │              if (info.nRefCount == 0) break;                                             
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    nNew--;                                                                              │      nNew--;                                                                             
                                                                                         │                                                                                          
    assert(info.nRefCount == 0);                                                         │      assert(info.nRefCount == 0);                                                        
                                                                                         │                                                                                          
    // which tried bucket to move the entry to                                           │      // which tried bucket to move the entry to                                          
    int nKBucket = info.GetTriedBucket(nKey);                                            │      int nKBucket = info.GetTriedBucket(nKey, m_netgroupman);                            
    int nKBucketPos = info.GetBucketPosition(nKey, false, nKBucket);                     │      int nKBucketPos = info.GetBucketPosition(nKey, false, nKBucket);                    
                                                                                         │                                                                                          
    // first make space to add it (the existing tried entry there is moved to new, delet │      // first make space to add it (the existing tried entry there is moved to new, delet
    if (vvTried[nKBucket][nKBucketPos] != -1) {                                          │      if (vvTried[nKBucket][nKBucketPos] != -1) {                                         
        // find an item to evict                                                         │          // find an item to evict                                                        
        int nIdEvict = vvTried[nKBucket][nKBucketPos];                                   │          int nIdEvict = vvTried[nKBucket][nKBucketPos];                                  
        assert(mapInfo.count(nIdEvict) == 1);                                            │          assert(mapInfo.count(nIdEvict) == 1);                                           
        CAddrInfo& infoOld = mapInfo[nIdEvict];                                          │          AddrInfo& infoOld = mapInfo[nIdEvict];                                          
                                                                                         │                                                                                          
        // Remove the to-be-evicted item from the tried set.                             │          // Remove the to-be-evicted item from the tried set.                            
        infoOld.fInTried = false;                                                        │          infoOld.fInTried = false;                                                       
        vvTried[nKBucket][nKBucketPos] = -1;                                             │          vvTried[nKBucket][nKBucketPos] = -1;                                            
        nTried--;                                                                        │          nTried--;                                                                       
                                                                                         │                                                                                          
        // find which new bucket it belongs to                                           │          // find which new bucket it belongs to                                          
        int nUBucket = infoOld.GetNewBucket(nKey);                                       │          int nUBucket = infoOld.GetNewBucket(nKey, m_netgroupman);                       
        int nUBucketPos = infoOld.GetBucketPosition(nKey, true, nUBucket);               │          int nUBucketPos = infoOld.GetBucketPosition(nKey, true, nUBucket);              
        ClearNew(nUBucket, nUBucketPos);                                                 │          ClearNew(nUBucket, nUBucketPos);                                                
        assert(vvNew[nUBucket][nUBucketPos] == -1);                                      │          assert(vvNew[nUBucket][nUBucketPos] == -1);                                     
                                                                                         │                                                                                          
        // Enter it into the new set again.                                              │          // Enter it into the new set again.                                             
        infoOld.nRefCount = 1;                                                           │          infoOld.nRefCount = 1;                                                          
        vvNew[nUBucket][nUBucketPos] = nIdEvict;                                         │          vvNew[nUBucket][nUBucketPos] = nIdEvict;                                        
        nNew++;                                                                          │          nNew++;                                                                         
                                                                                         │          LogPrint(BCLog::ADDRMAN, "Moved %s from tried[%i][%i] to new[%i][%i] to make spa
                                                                                         │                   infoOld.ToString(), nKBucket, nKBucketPos, nUBucket, nUBucketPos);     
    }                                                                                    │      }                                                                                   
    assert(vvTried[nKBucket][nKBucketPos] == -1);                                        │      assert(vvTried[nKBucket][nKBucketPos] == -1);                                       
                                                                                         │                                                                                          
    vvTried[nKBucket][nKBucketPos] = nId;                                                │      vvTried[nKBucket][nKBucketPos] = nId;                                               
    nTried++;                                                                            │      nTried++;                                                                           
    info.fInTried = true;                                                                │      info.fInTried = true;                                                               
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/prevector_tests.cpp:43                                                 │ dogecoin/src/test/prevector_tests.cpp:42                                                 
                                                                                         │                                                                                          
        const pretype& const_pre_vector = pre_vector;                                    │          const pretype& const_pre_vector = pre_vector;                                   
        local_check_equal(real_vector.size(), pre_vector.size());                        │          local_check_equal(real_vector.size(), pre_vector.size());                       
        local_check_equal(real_vector.empty(), pre_vector.empty());                      │          local_check_equal(real_vector.empty(), pre_vector.empty());                     
        for (Size s = 0; s < real_vector.size(); s++) {                                  │          for (Size s = 0; s < real_vector.size(); s++) {                                 
             local_check(real_vector[s] == pre_vector[s]);                               │               local_check(real_vector[s] == pre_vector[s]);                              
             local_check(&(pre_vector[s]) == &(pre_vector.begin()[s]));                  │               local_check(&(pre_vector[s]) == &(pre_vector.begin()[s]));                 
             local_check(&(pre_vector[s]) == &*(pre_vector.begin() + s));                │               local_check(&(pre_vector[s]) == &*(pre_vector.begin() + s));               
             local_check(&(pre_vector[s]) == &*((pre_vector.end() + s) - real_vector.siz │               local_check(&(pre_vector[s]) == &*((pre_vector.end() + s) - real_vector.siz
        }                                                                                │          }                                                                               
        // local_check(realtype(pre_vector) == real_vector);                             │          // local_check(realtype(pre_vector) == real_vector);                            
        local_check(pretype(real_vector.begin(), real_vector.end()) == pre_vector);      │          local_check(pretype(real_vector.begin(), real_vector.end()) == pre_vector);     
        local_check(pretype(pre_vector.begin(), pre_vector.end()) == pre_vector);        │          local_check(pretype(pre_vector.begin(), pre_vector.end()) == pre_vector);       
        size_t pos = 0;                                                                  │          size_t pos = 0;                                                                 
        for (const T& v : pre_vector) {                                                  │          BOOST_FOREACH(const T& v, pre_vector) {                                         
             local_check(v == real_vector[pos++]);                                       │               local_check(v == real_vector[pos++]);                                      
        }                                                                                │          }                                                                               
        for (const T& v : reverse_iterate(pre_vector)) {                                 │          BOOST_REVERSE_FOREACH(const T& v, pre_vector) {                                 
             local_check(v == real_vector[--pos]);                                       │               local_check(v == real_vector[--pos]);                                      
        }                                                                                │          }                                                                               
        for (const T& v : const_pre_vector) {                                            │          BOOST_FOREACH(const T& v, const_pre_vector) {                                   
             local_check(v == real_vector[pos++]);                                       │               local_check(v == real_vector[pos++]);                                      
        }                                                                                │          }                                                                               
        for (const T& v : reverse_iterate(const_pre_vector)) {                           │          BOOST_REVERSE_FOREACH(const T& v, const_pre_vector) {                           
             local_check(v == real_vector[--pos]);                                       │               local_check(v == real_vector[--pos]);                                      
        }                                                                                │          }                                                                               
        CDataStream ss1(SER_DISK, 0);                                                    │          CDataStream ss1(SER_DISK, 0);                                                   
        CDataStream ss2(SER_DISK, 0);                                                    │          CDataStream ss2(SER_DISK, 0);                                                   
        ss1 << real_vector;                                                              │          ss1 << real_vector;                                                             
        ss2 << pre_vector;                                                               │          ss2 << pre_vector;                                                              
        local_check_equal(ss1.size(), ss2.size());                                       │          local_check_equal(ss1.size(), ss2.size());                                      
        for (Size s = 0; s < ss1.size(); s++) {                                          │          for (Size s = 0; s < ss1.size(); s++) {                                         
            local_check_equal(ss1[s], ss2[s]);                                           │              local_check_equal(ss1[s], ss2[s]);                                          
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/versionbits.cpp:109                                                        │ bitcoin/src/versionbits.cpp:141                                                          
                                                                                         │                                                                                          
                                                                                         │      int64_t start_time = BeginTime(params);                                             
                                                                                         │      if (start_time == Consensus::BIP9Deployment::ALWAYS_ACTIVE || start_time == Consensu
                                                                                         │          return 0;                                                                       
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
    const ThresholdState initialState = GetStateFor(pindexPrev, params, cache);          │      const ThresholdState initialState = GetStateFor(pindexPrev, params, cache);         
                                                                                         │                                                                                          
    // BIP 9 about state DEFINED: "The genesis block is by definition in this state for  │      // BIP 9 about state DEFINED: "The genesis block is by definition in this state for 
    if (initialState == THRESHOLD_DEFINED) {                                             │      if (initialState == ThresholdState::DEFINED) {                                      
        return 0;                                                                        │          return 0;                                                                       
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    const int nPeriod = Period(params);                                                  │      const int nPeriod = Period(params);                                                 
                                                                                         │                                                                                          
    // A block's state is always the same as that of the first of its period, so it is c │      // A block's state is always the same as that of the first of its period, so it is c
    // To ease understanding of the following height calculation, it helps to remember t │      // To ease understanding of the following height calculation, it helps to remember t
    // right now pindexPrev points to the block prior to the block that we are computing │      // right now pindexPrev points to the block prior to the block that we are computing
    // if we are computing for the last block of a period, then pindexPrev points to the │      // if we are computing for the last block of a period, then pindexPrev points to the
    // if we are computing for the first block of a period, then pindexPrev points to th │      // if we are computing for the first block of a period, then pindexPrev points to th
    // The parent of the genesis block is represented by NULL.                           │      // The parent of the genesis block is represented by nullptr.                       
    pindexPrev = pindexPrev->GetAncestor(pindexPrev->nHeight - ((pindexPrev->nHeight + 1 │      pindexPrev = Assert(pindexPrev->GetAncestor(pindexPrev->nHeight - ((pindexPrev->nHei
                                                                                         │                                                                                          
    const CBlockIndex* previousPeriodParent = pindexPrev->GetAncestor(pindexPrev->nHeigh │      const CBlockIndex* previousPeriodParent = pindexPrev->GetAncestor(pindexPrev->nHeigh
                                                                                         │                                                                                          
    while (previousPeriodParent != NULL && GetStateFor(previousPeriodParent, params, cac │      while (previousPeriodParent != nullptr && GetStateFor(previousPeriodParent, params, 
        pindexPrev = previousPeriodParent;                                               │          pindexPrev = previousPeriodParent;                                              
        previousPeriodParent = pindexPrev->GetAncestor(pindexPrev->nHeight - nPeriod);   │          previousPeriodParent = pindexPrev->GetAncestor(pindexPrev->nHeight - nPeriod);  
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Adjust the result because right now we point to the parent block.                 │      // Adjust the result because right now we point to the parent block.                
    return pindexPrev->nHeight + 1;                                                      │      return pindexPrev->nHeight + 1;                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/bitcoinaddressvalidator.cpp:24                                          │ bitcoin/src/qt/bitcoinaddressvalidator.cpp:24                                            
                                                                                         │                                                                                          
    Q_UNUSED(pos);                                                                       │      Q_UNUSED(pos);                                                                      
                                                                                         │                                                                                          
    // Empty address is "intermediate" input                                             │      // Empty address is "intermediate" input                                            
    if (input.isEmpty())                                                                 │      if (input.isEmpty())                                                                
        return QValidator::Intermediate;                                                 │          return QValidator::Intermediate;                                                
                                                                                         │                                                                                          
    // Correction                                                                        │      // Correction                                                                       
    for (int idx = 0; idx < input.size();)                                               │      for (int idx = 0; idx < input.size();)                                              
    {                                                                                    │      {                                                                                   
        bool removeChar = false;                                                         │          bool removeChar = false;                                                        
        QChar ch = input.at(idx);                                                        │          QChar ch = input.at(idx);                                                       
        // Corrections made are very conservative on purpose, to avoid                   │          // Corrections made are very conservative on purpose, to avoid                  
        // users unexpectedly getting away with typos that would normally                │          // users unexpectedly getting away with typos that would normally               
        // be detected, and thus sending to the wrong address.                           │          // be detected, and thus sending to the wrong address.                          
        switch(ch.unicode())                                                             │          switch(ch.unicode())                                                            
        {                                                                                │          {                                                                               
        // Qt categorizes these as "Other_Format" not "Separator_Space"                  │          // Qt categorizes these as "Other_Format" not "Separator_Space"                 
        case 0x200B: // ZERO WIDTH SPACE                                                 │          case 0x200B: // ZERO WIDTH SPACE                                                
        case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE                                        │          case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE                                       
            removeChar = true;                                                           │              removeChar = true;                                                          
            break;                                                                       │              break;                                                                      
        default:                                                                         │          default:                                                                        
            break;                                                                       │              break;                                                                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // Remove whitespace                                                             │          // Remove whitespace                                                            
        if (ch.isSpace())                                                                │          if (ch.isSpace())                                                               
            removeChar = true;                                                           │              removeChar = true;                                                          
                                                                                         │                                                                                          
        // To next character                                                             │          // To next character                                                            
        if (removeChar)                                                                  │          if (removeChar)                                                                 
            input.remove(idx, 1);                                                        │              input.remove(idx, 1);                                                       
        else                                                                             │          else                                                                            
            ++idx;                                                                       │              ++idx;                                                                      
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Validation                                                                        │      // Validation                                                                       
    QValidator::State state = QValidator::Acceptable;                                    │      QValidator::State state = QValidator::Acceptable;                                   
    for (int idx = 0; idx < input.size(); ++idx)                                         │      for (int idx = 0; idx < input.size(); ++idx)                                        
    {                                                                                    │      {                                                                                   
        int ch = input.at(idx).unicode();                                                │          int ch = input.at(idx).unicode();                                               
                                                                                         │                                                                                          
        if (((ch >= '0' && ch<='9') ||                                                   │          if (((ch >= '0' && ch<='9') ||                                                  
            (ch >= 'a' && ch<='z') ||                                                    │              (ch >= 'a' && ch<='z') ||                                                   
            (ch >= 'A' && ch<='Z')) &&                                                   │              (ch >= 'A' && ch<='Z')) &&                                                  
            ch != 'I' && ch != 'O') // Characters invalid in both Base58 and Bech32      │              ch != 'I' && ch != 'O') // Characters invalid in both Base58 and Bech32     
        {                                                                                │          {                                                                               
            // Alphanumeric and not a 'forbidden' character                              │              // Alphanumeric and not a 'forbidden' character                             
        }                                                                                │          }                                                                               
        else                                                                             │          else                                                                            
        {                                                                                │          {                                                                               
            state = QValidator::Invalid;                                                 │              state = QValidator::Invalid;                                                
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return state;                                                                        │      return state;                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/interpreter.cpp:561                                                  │ dogecoin/src/script/interpreter.cpp:393                                                  
                                                                                         │                                                                                          
                    if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) {                  │                      if (!(flags & SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) {                 
                        // not enabled; treat as a NOP3                                  │                          // not enabled; treat as a NOP3                                 
                                                                                         │                          if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) {         
                                                                                         │                              return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NO
                                                                                         │                          }                                                               
                        break;                                                           │                          break;                                                          
                    }                                                                    │                      }                                                                   
                                                                                         │                                                                                          
                    if (stack.size() < 1)                                                │                      if (stack.size() < 1)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                                                                                         │                                                                                          
                    // nSequence, like nLockTime, is a 32-bit unsigned integer           │                      // nSequence, like nLockTime, is a 32-bit unsigned integer          
                    // field. See the comment in CHECKLOCKTIMEVERIFY regarding           │                      // field. See the comment in CHECKLOCKTIMEVERIFY regarding          
                    // 5-byte numeric operands.                                          │                      // 5-byte numeric operands.                                         
                    const CScriptNum nSequence(stacktop(-1), fRequireMinimal, 5);        │                      const CScriptNum nSequence(stacktop(-1), fRequireMinimal, 5);       
                                                                                         │                                                                                          
                    // In the rare event that the argument may be < 0 due to             │                      // In the rare event that the argument may be < 0 due to            
                    // some arithmetic being done first, you can always use              │                      // some arithmetic being done first, you can always use             
                    // 0 MAX CHECKSEQUENCEVERIFY.                                        │                      // 0 MAX CHECKSEQUENCEVERIFY.                                       
                    if (nSequence < 0)                                                   │                      if (nSequence < 0)                                                  
                        return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);          │                          return set_error(serror, SCRIPT_ERR_NEGATIVE_LOCKTIME);         
                                                                                         │                                                                                          
                    // To provide for future soft-fork extensibility, if the             │                      // To provide for future soft-fork extensibility, if the            
                    // operand has the disabled lock-time flag set,                      │                      // operand has the disabled lock-time flag set,                     
                    // CHECKSEQUENCEVERIFY behaves as a NOP.                             │                      // CHECKSEQUENCEVERIFY behaves as a NOP.                            
                    if ((nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) != 0)        │                      if ((nSequence & CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG) != 0)       
                        break;                                                           │                          break;                                                          
                                                                                         │                                                                                          
                    // Compare the specified sequence number with the input.             │                      // Compare the specified sequence number with the input.            
                    if (!checker.CheckSequence(nSequence))                               │                      if (!checker.CheckSequence(nSequence))                              
                        return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);       │                          return set_error(serror, SCRIPT_ERR_UNSATISFIED_LOCKTIME);      
                                                                                         │                                                                                          
                    break;                                                               │                      break;                                                              
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:27                                                     │ dogecoin/src/test/bloom_tests.cpp:27                                                     
                                                                                         │                                                                                          
    CBloomFilter filter(3, 0.01, 0, BLOOM_UPDATE_ALL);                                   │      CBloomFilter filter(3, 0.01, 0, BLOOM_UPDATE_ALL);                                  
                                                                                         │                                                                                          
    BOOST_CHECK_MESSAGE( !filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f09 │                                                                                          
    filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                 │      filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                
    BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
    // One bit different in first byte                                                   │      // One bit different in first byte                                                  
    BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │                                                                                          
    filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                 │      filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e
                                                                                         │                                                                                          
    filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                 │      filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729 │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729
                                                                                         │                                                                                          
    CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                   │      CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                  
    stream << filter;                                                                    │      stream << filter;                                                                   
                                                                                         │                                                                                          
    std::vector<uint8_t> expected = ParseHex("03614e9b050000000000000001");              │      std::vector<unsigned char> vch = ParseHex("03614e9b050000000000000001");            
    auto result{MakeUCharSpan(stream)};                                                  │      std::vector<char> expected(vch.size());                                             
                                                                                         │                                                                                          
                                                                                         │      for (unsigned int i = 0; i < vch.size(); i++)                                       
                                                                                         │          expected[i] = (char)vch[i];                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect │      BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expect
                                                                                         │                                                                                          
    BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │      filter.clear();                                                                     
                                                                                         │      BOOST_CHECK_MESSAGE( !filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f09
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/recentrequeststablemodel.cpp:54                                         │ bitcoin/src/qt/recentrequeststablemodel.cpp:59                                           
                                                                                         │                                                                                          
    if(!index.isValid() || index.row() >= list.length())                                 │      if(!index.isValid() || index.row() >= list.length())                                
        return QVariant();                                                               │          return QVariant();                                                              
                                                                                         │                                                                                          
    const RecentRequestEntry *rec = &list[index.row()];                                  │                                                                                          
                                                                                         │                                                                                          
    if(role == Qt::DisplayRole || role == Qt::EditRole)                                  │      if(role == Qt::DisplayRole || role == Qt::EditRole)                                 
    {                                                                                    │      {                                                                                   
                                                                                         │          const RecentRequestEntry *rec = &list[index.row()];                             
        switch(index.column())                                                           │          switch(index.column())                                                          
        {                                                                                │          {                                                                               
        case Date:                                                                       │          case Date:                                                                      
            return GUIUtil::dateTimeStr(rec->date);                                      │              return GUIUtil::dateTimeStr(rec->date);                                     
        case Label:                                                                      │          case Label:                                                                     
            if(rec->recipient.label.isEmpty() && role == Qt::DisplayRole)                │              if(rec->recipient.label.isEmpty() && role == Qt::DisplayRole)               
            {                                                                            │              {                                                                           
                return tr("(no label)");                                                 │                  return tr("(no label)");                                                
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                return rec->recipient.label;                                             │                  return rec->recipient.label;                                            
            }                                                                            │              }                                                                           
        case Message:                                                                    │          case Message:                                                                   
            if(rec->recipient.message.isEmpty() && role == Qt::DisplayRole)              │              if(rec->recipient.message.isEmpty() && role == Qt::DisplayRole)             
            {                                                                            │              {                                                                           
                return tr("(no message)");                                               │                  return tr("(no message)");                                              
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                return rec->recipient.message;                                           │                  return rec->recipient.message;                                          
            }                                                                            │              }                                                                           
        case Amount:                                                                     │          case Amount:                                                                    
            if (rec->recipient.amount == 0 && role == Qt::DisplayRole)                   │              if (rec->recipient.amount == 0 && role == Qt::DisplayRole)                  
                return tr("(no amount requested)");                                      │                  return tr("(no amount requested)");                                     
            else if (role == Qt::EditRole)                                               │              else if (role == Qt::EditRole)                                              
                return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUn │                  return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUn
            else                                                                         │              else                                                                        
                return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUn │                  return BitcoinUnits::format(walletModel->getOptionsModel()->getDisplayUn
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    else if (role == Qt::TextAlignmentRole)                                              │      else if (role == Qt::TextAlignmentRole)                                             
    {                                                                                    │      {                                                                                   
        if (index.column() == Amount)                                                    │          if (index.column() == Amount)                                                   
            return (int)(Qt::AlignRight|Qt::AlignVCenter);                               │              return (int)(Qt::AlignRight|Qt::AlignVCenter);                              
    }                                                                                    │      }                                                                                   
    return QVariant();                                                                   │      return QVariant();                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/base58.cpp:22                                                              │ bitcoin/src/base58.cpp:39                                                                
                                                                                         │                                                                                          
    // Skip leading spaces.                                                              │      // Skip leading spaces.                                                             
    while (*psz && isspace(*psz))                                                        │      while (*psz && IsSpace(*psz))                                                       
        psz++;                                                                           │          psz++;                                                                          
    // Skip and count leading '1's.                                                      │      // Skip and count leading '1's.                                                     
    int zeroes = 0;                                                                      │      int zeroes = 0;                                                                     
    int length = 0;                                                                      │      int length = 0;                                                                     
    while (*psz == '1') {                                                                │      while (*psz == '1') {                                                               
        zeroes++;                                                                        │          zeroes++;                                                                       
                                                                                         │          if (zeroes > max_ret_len) return false;                                         
        psz++;                                                                           │          psz++;                                                                          
    }                                                                                    │      }                                                                                   
    // Allocate enough space in big-endian base256 representation.                       │      // Allocate enough space in big-endian base256 representation.                      
    int size = strlen(psz) * 733 /1000 + 1; // log(58) / log(256), rounded up.           │      int size = strlen(psz) * 733 /1000 + 1; // log(58) / log(256), rounded up.          
    std::vector<unsigned char> b256(size);                                               │      std::vector<unsigned char> b256(size);                                              
    // Process the characters.                                                           │      // Process the characters.                                                          
    while (*psz && !isspace(*psz)) {                                                     │      static_assert(std::size(mapBase58) == 256, "mapBase58.size() should be 256"); // gua
                                                                                         │      while (*psz && !IsSpace(*psz)) {                                                    
        // Decode base58 character                                                       │          // Decode base58 character                                                      
        const char* ch = strchr(pszBase58, *psz);                                        │          int carry = mapBase58[(uint8_t)*psz];                                           
        if (ch == NULL)                                                                  │          if (carry == -1)  // Invalid b58 character                                      
            return false;                                                                │              return false;                                                               
        // Apply "b256 = b256 * 58 + ch".                                                │                                                                                          
        int carry = ch - pszBase58;                                                      │                                                                                          
        int i = 0;                                                                       │          int i = 0;                                                                      
        for (std::vector<unsigned char>::reverse_iterator it = b256.rbegin(); (carry !=  │          for (std::vector<unsigned char>::reverse_iterator it = b256.rbegin(); (carry != 
            carry += 58 * (*it);                                                         │              carry += 58 * (*it);                                                        
            *it = carry % 256;                                                           │              *it = carry % 256;                                                          
            carry /= 256;                                                                │              carry /= 256;                                                               
        }                                                                                │          }                                                                               
        assert(carry == 0);                                                              │          assert(carry == 0);                                                             
        length = i;                                                                      │          length = i;                                                                     
                                                                                         │          if (length + zeroes > max_ret_len) return false;                                
        psz++;                                                                           │          psz++;                                                                          
    }                                                                                    │      }                                                                                   
    // Skip trailing spaces.                                                             │      // Skip trailing spaces.                                                            
    while (isspace(*psz))                                                                │      while (IsSpace(*psz))                                                               
        psz++;                                                                           │          psz++;                                                                          
    if (*psz != 0)                                                                       │      if (*psz != 0)                                                                      
        return false;                                                                    │          return false;                                                                   
    // Skip leading zeroes in b256.                                                      │      // Skip leading zeroes in b256.                                                     
    std::vector<unsigned char>::iterator it = b256.begin() + (size - length);            │      std::vector<unsigned char>::iterator it = b256.begin() + (size - length);           
    while (it != b256.end() && *it == 0)                                                 │                                                                                          
        it++;                                                                            │                                                                                          
    // Copy result into output vector.                                                   │      // Copy result into output vector.                                                  
    vch.reserve(zeroes + (b256.end() - it));                                             │      vch.reserve(zeroes + (b256.end() - it));                                            
    vch.assign(zeroes, 0x00);                                                            │      vch.assign(zeroes, 0x00);                                                           
    while (it != b256.end())                                                             │      while (it != b256.end())                                                            
        vch.push_back(*(it++));                                                          │          vch.push_back(*(it++));                                                         
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/addrman.cpp:740                                                             │ bitcoin/src/addrman.cpp:712                                                              
                                                                                         │                                                                                          
        // use a new node                                                                │          // use a tried node                                                             
        double fChanceFactor = 1.0;                                                      │          double fChanceFactor = 1.0;                                                     
        while (1) {                                                                      │          while (1) {                                                                     
            // Pick a new bucket, and an initial position in that bucket.                │              // Pick a tried bucket, and an initial position in that bucket.             
            int nUBucket = insecure_rand.randrange(ADDRMAN_NEW_BUCKET_COUNT);            │              int nKBucket = insecure_rand.randrange(ADDRMAN_TRIED_BUCKET_COUNT);         
            int nUBucketPos = insecure_rand.randrange(ADDRMAN_BUCKET_SIZE);              │              int nKBucketPos = insecure_rand.randrange(ADDRMAN_BUCKET_SIZE);             
            // Iterate over the positions of that bucket, starting at the initial one,   │              // Iterate over the positions of that bucket, starting at the initial one,  
            // and looping around.                                                       │              // and looping around.                                                      
            int i;                                                                       │              int i;                                                                      
            for (i = 0; i < ADDRMAN_BUCKET_SIZE; ++i) {                                  │              for (i = 0; i < ADDRMAN_BUCKET_SIZE; ++i) {                                 
                if (vvNew[nUBucket][(nUBucketPos + i) % ADDRMAN_BUCKET_SIZE] != -1) brea │                  if (vvTried[nKBucket][(nKBucketPos + i) % ADDRMAN_BUCKET_SIZE] != -1) br
            }                                                                            │              }                                                                           
            // If the bucket is entirely empty, start over with a (likely) different one │              // If the bucket is entirely empty, start over with a (likely) different one
            if (i == ADDRMAN_BUCKET_SIZE) continue;                                      │              if (i == ADDRMAN_BUCKET_SIZE) continue;                                     
            // Find the entry to return.                                                 │              // Find the entry to return.                                                
            int nId = vvNew[nUBucket][(nUBucketPos + i) % ADDRMAN_BUCKET_SIZE];          │              int nId = vvTried[nKBucket][(nKBucketPos + i) % ADDRMAN_BUCKET_SIZE];       
            const auto it_found{mapInfo.find(nId)};                                      │              const auto it_found{mapInfo.find(nId)};                                     
            assert(it_found != mapInfo.end());                                           │              assert(it_found != mapInfo.end());                                          
            const AddrInfo& info{it_found->second};                                      │              const AddrInfo& info{it_found->second};                                     
            // With probability GetChance() * fChanceFactor, return the entry.           │              // With probability GetChance() * fChanceFactor, return the entry.          
            if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30 │              if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30
                LogPrint(BCLog::ADDRMAN, "Selected %s from new\n", info.ToString());     │                  LogPrint(BCLog::ADDRMAN, "Selected %s from tried\n", info.ToString());  
                return {info, info.nLastTry};                                            │                  return {info, info.nLastTry};                                           
            }                                                                            │              }                                                                           
            // Otherwise start over with a (likely) different bucket, and increased chan │              // Otherwise start over with a (likely) different bucket, and increased chan
            fChanceFactor *= 1.2;                                                        │              fChanceFactor *= 1.2;                                                       
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactionview.cpp:332                                                 │ bitcoin/src/qt/transactionview.cpp:352                                                   
                                                                                         │                                                                                          
                                                                                         │      if (!model || !model->getOptionsModel()) {                                          
                                                                                         │          return;                                                                         
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
    // CSV is currently the only supported format                                        │      // CSV is currently the only supported format                                       
    QString filename = GUIUtil::getSaveFileName(this,                                    │      QString filename = GUIUtil::getSaveFileName(this,                                   
        tr("Export Transaction History"), QString(),                                     │          tr("Export Transaction History"), QString(),                                    
        tr("Comma separated file (*.csv)"), NULL);                                       │          /*: Expanded name of the CSV file format.                                       
                                                                                         │              See: https://en.wikipedia.org/wiki/Comma-separated_values. */               
                                                                                         │          tr("Comma separated file") + QLatin1String(" (*.csv)"), nullptr);               
                                                                                         │                                                                                          
    if (filename.isNull())                                                               │      if (filename.isNull())                                                              
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    CSVModelWriter writer(filename);                                                     │      CSVModelWriter writer(filename);                                                    
                                                                                         │                                                                                          
    // name, column, role                                                                │      // name, column, role                                                               
    writer.setModel(transactionProxyModel);                                              │      writer.setModel(transactionProxyModel);                                             
    writer.addColumn(tr("Confirmed"), 0, TransactionTableModel::ConfirmedRole);          │      writer.addColumn(tr("Confirmed"), 0, TransactionTableModel::ConfirmedRole);         
    if (model && model->haveWatchOnly())                                                 │      if (model->wallet().haveWatchOnly())                                                
        writer.addColumn(tr("Watch-only"), TransactionTableModel::Watchonly);            │          writer.addColumn(tr("Watch-only"), TransactionTableModel::Watchonly);           
    writer.addColumn(tr("Date"), 0, TransactionTableModel::DateRole);                    │      writer.addColumn(tr("Date"), 0, TransactionTableModel::DateRole);                   
    writer.addColumn(tr("Type"), TransactionTableModel::Type, Qt::EditRole);             │      writer.addColumn(tr("Type"), TransactionTableModel::Type, Qt::EditRole);            
    writer.addColumn(tr("Label"), 0, TransactionTableModel::LabelRole);                  │      writer.addColumn(tr("Label"), 0, TransactionTableModel::LabelRole);                 
    writer.addColumn(tr("Address"), 0, TransactionTableModel::AddressRole);              │      writer.addColumn(tr("Address"), 0, TransactionTableModel::AddressRole);             
    writer.addColumn(BitcoinUnits::getAmountColumnTitle(model->getOptionsModel()->getDis │      writer.addColumn(BitcoinUnits::getAmountColumnTitle(model->getOptionsModel()->getDis
    writer.addColumn(tr("ID"), 0, TransactionTableModel::TxIDRole);                      │      writer.addColumn(tr("ID"), 0, TransactionTableModel::TxHashRole);                   
                                                                                         │                                                                                          
    if(!writer.write()) {                                                                │      if(!writer.write()) {                                                               
        Q_EMIT message(tr("Exporting Failed"), tr("There was an error trying to save the │          Q_EMIT message(tr("Exporting Failed"), tr("There was an error trying to save the
            CClientUIInterface::MSG_ERROR);                                              │              CClientUIInterface::MSG_ERROR);                                             
    }                                                                                    │      }                                                                                   
    else {                                                                               │      else {                                                                              
        Q_EMIT message(tr("Exporting Successful"), tr("The transaction history was succe │          Q_EMIT message(tr("Exporting Successful"), tr("The transaction history was succe
            CClientUIInterface::MSG_INFORMATION);                                        │              CClientUIInterface::MSG_INFORMATION);                                       
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:87                                                │ bitcoin/src/univalue/test/object.cpp:87                                                  
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.setNumStr("1"));                                                      │      BOOST_CHECK(v1.setNumStr("1"));                                                     
    BOOST_CHECK(v1.isNum());                                                             │      BOOST_CHECK(v1.isNum());                                                            
    BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                                │      BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                               
                                                                                         │                                                                                          
    UniValue v2;                                                                         │      UniValue v2;                                                                        
    BOOST_CHECK(v2.setBool(true));                                                       │      BOOST_CHECK(v2.setBool(true));                                                      
    BOOST_CHECK_EQUAL(v2.get_bool(), true);                                              │      BOOST_CHECK_EQUAL(v2.get_bool(), true);                                             
    BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v3;                                                                         │      UniValue v3;                                                                        
    BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                   │      BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                  
    BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                               │      BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                              
    BOOST_CHECK(v3.setNumStr("1000"));                                                   │      BOOST_CHECK(v3.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                             │      BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                            
                                                                                         │                                                                                          
    UniValue v4;                                                                         │      UniValue v4;                                                                        
    BOOST_CHECK(v4.setNumStr("2147483648"));                                             │      BOOST_CHECK(v4.setNumStr("2147483648"));                                            
    BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                       │      BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                      
    BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                
    BOOST_CHECK(v4.setNumStr("1000"));                                                   │      BOOST_CHECK(v4.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                               │      BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                              
    BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                
    BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                              │      BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                             
    BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                
    BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v5;                                                                         │      UniValue v5;                                                                        
    BOOST_CHECK(v5.read("[true, 10]"));                                                  │      BOOST_CHECK(v5.read("[true, 10]"));                                                 
    BOOST_CHECK_NO_THROW(v5.get_array());                                                │      BOOST_CHECK_NO_THROW(v5.get_array());                                               
    std::vector<UniValue> vals = v5.getValues();                                         │      std::vector<UniValue> vals = v5.getValues();                                        
    BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                            │      BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                           
    BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                         │      BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                        
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                            │      BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                           
    BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                           │      BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:66                                                 │ bitcoin/src/univalue/test/object.cpp:87                                                  
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.setNumStr("1"));                                                      │      BOOST_CHECK(v1.setNumStr("1"));                                                     
    BOOST_CHECK(v1.isNum());                                                             │      BOOST_CHECK(v1.isNum());                                                            
    BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                                │      BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                               
                                                                                         │                                                                                          
    UniValue v2;                                                                         │      UniValue v2;                                                                        
    BOOST_CHECK(v2.setBool(true));                                                       │      BOOST_CHECK(v2.setBool(true));                                                      
    BOOST_CHECK_EQUAL(v2.get_bool(), true);                                              │      BOOST_CHECK_EQUAL(v2.get_bool(), true);                                             
    BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v3;                                                                         │      UniValue v3;                                                                        
    BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                   │      BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                  
    BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                               │      BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                              
    BOOST_CHECK(v3.setNumStr("1000"));                                                   │      BOOST_CHECK(v3.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                             │      BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                            
                                                                                         │                                                                                          
    UniValue v4;                                                                         │      UniValue v4;                                                                        
    BOOST_CHECK(v4.setNumStr("2147483648"));                                             │      BOOST_CHECK(v4.setNumStr("2147483648"));                                            
    BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                       │      BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                      
    BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                
    BOOST_CHECK(v4.setNumStr("1000"));                                                   │      BOOST_CHECK(v4.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                               │      BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                              
    BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                
    BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                              │      BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                             
    BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                
    BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v5;                                                                         │      UniValue v5;                                                                        
    BOOST_CHECK(v5.read("[true, 10]"));                                                  │      BOOST_CHECK(v5.read("[true, 10]"));                                                 
    BOOST_CHECK_NO_THROW(v5.get_array());                                                │      BOOST_CHECK_NO_THROW(v5.get_array());                                               
    std::vector<UniValue> vals = v5.getValues();                                         │      std::vector<UniValue> vals = v5.getValues();                                        
    BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                            │      BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                           
    BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                         │      BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                        
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                            │      BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                           
    BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                           │      BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:66                                                 │ dogecoin/src/univalue/test/object.cpp:87                                                 
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.setNumStr("1"));                                                      │      BOOST_CHECK(v1.setNumStr("1"));                                                     
    BOOST_CHECK(v1.isNum());                                                             │      BOOST_CHECK(v1.isNum());                                                            
    BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                                │      BOOST_CHECK_THROW(v1.get_bool(), std::runtime_error);                               
                                                                                         │                                                                                          
    UniValue v2;                                                                         │      UniValue v2;                                                                        
    BOOST_CHECK(v2.setBool(true));                                                       │      BOOST_CHECK(v2.setBool(true));                                                      
    BOOST_CHECK_EQUAL(v2.get_bool(), true);                                              │      BOOST_CHECK_EQUAL(v2.get_bool(), true);                                             
    BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v2.get_int(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v3;                                                                         │      UniValue v3;                                                                        
    BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                   │      BOOST_CHECK(v3.setNumStr("32482348723847471234"));                                  
    BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                               │      BOOST_CHECK_THROW(v3.get_int64(), std::runtime_error);                              
    BOOST_CHECK(v3.setNumStr("1000"));                                                   │      BOOST_CHECK(v3.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                             │      BOOST_CHECK_EQUAL(v3.get_int64(), 1000);                                            
                                                                                         │                                                                                          
    UniValue v4;                                                                         │      UniValue v4;                                                                        
    BOOST_CHECK(v4.setNumStr("2147483648"));                                             │      BOOST_CHECK(v4.setNumStr("2147483648"));                                            
    BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                       │      BOOST_CHECK_EQUAL(v4.get_int64(), 2147483648);                                      
    BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_int(), std::runtime_error);                                
    BOOST_CHECK(v4.setNumStr("1000"));                                                   │      BOOST_CHECK(v4.setNumStr("1000"));                                                  
    BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                               │      BOOST_CHECK_EQUAL(v4.get_int(), 1000);                                              
    BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_str(), std::runtime_error);                                
    BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                              │      BOOST_CHECK_EQUAL(v4.get_real(), 1000);                                             
    BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.get_array(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.getKeys(), std::runtime_error);                                
    BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                               │      BOOST_CHECK_THROW(v4.getValues(), std::runtime_error);                              
    BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                 │      BOOST_CHECK_THROW(v4.get_obj(), std::runtime_error);                                
                                                                                         │                                                                                          
    UniValue v5;                                                                         │      UniValue v5;                                                                        
    BOOST_CHECK(v5.read("[true, 10]"));                                                  │      BOOST_CHECK(v5.read("[true, 10]"));                                                 
    BOOST_CHECK_NO_THROW(v5.get_array());                                                │      BOOST_CHECK_NO_THROW(v5.get_array());                                               
    std::vector<UniValue> vals = v5.getValues();                                         │      std::vector<UniValue> vals = v5.getValues();                                        
    BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                            │      BOOST_CHECK_THROW(vals[0].get_int(), std::runtime_error);                           
    BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                         │      BOOST_CHECK_EQUAL(vals[0].get_bool(), true);                                        
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                            │      BOOST_CHECK_EQUAL(vals[1].get_int(), 10);                                           
    BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                           │      BOOST_CHECK_THROW(vals[1].get_bool(), std::runtime_error);                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/server.cpp:442                                                         │ bitcoin/src/rpc/server.cpp:391                                                           
                                                                                         │                                                                                          
    JSONRPCRequest out = in;                                                             │      JSONRPCRequest out = in;                                                            
    out.params = UniValue(UniValue::VARR);                                               │      out.params = UniValue(UniValue::VARR);                                              
    // Build a map of parameters, and remove ones that have been processed, so that we c │      // Build a map of parameters, and remove ones that have been processed, so that we c
    // there is an unknown one.                                                          │      // there is an unknown one.                                                         
    const std::vector<std::string>& keys = in.params.getKeys();                          │      const std::vector<std::string>& keys = in.params.getKeys();                         
    const std::vector<UniValue>& values = in.params.getValues();                         │      const std::vector<UniValue>& values = in.params.getValues();                        
    std::unordered_map<std::string, const UniValue*> argsIn;                             │      std::unordered_map<std::string, const UniValue*> argsIn;                            
    for (size_t i=0; i<keys.size(); ++i) {                                               │      for (size_t i=0; i<keys.size(); ++i) {                                              
        argsIn[keys[i]] = &values[i];                                                    │          argsIn[keys[i]] = &values[i];                                                   
    }                                                                                    │      }                                                                                   
    // Process expected parameters.                                                      │      // Process expected parameters.                                                     
    int hole = 0;                                                                        │      int hole = 0;                                                                       
    for (const std::string &argName: argNames) {                                         │      for (const std::string &argNamePattern: argNames) {                                 
        auto fr = argsIn.find(argName);                                                  │          std::vector<std::string> vargNames = SplitString(argNamePattern, '|');          
                                                                                         │          auto fr = argsIn.end();                                                         
                                                                                         │          for (const std::string & argName : vargNames) {                                 
                                                                                         │              fr = argsIn.find(argName);                                                  
                                                                                         │              if (fr != argsIn.end()) {                                                   
                                                                                         │                  break;                                                                  
                                                                                         │              }                                                                           
                                                                                         │          }                                                                               
        if (fr != argsIn.end()) {                                                        │          if (fr != argsIn.end()) {                                                       
            for (int i = 0; i < hole; ++i) {                                             │              for (int i = 0; i < hole; ++i) {                                            
                // Fill hole between specified parameters with JSON nulls,               │                  // Fill hole between specified parameters with JSON nulls,              
                // but not at the end (for backwards compatibility with calls            │                  // but not at the end (for backwards compatibility with calls           
                // that act based on number of specified parameters).                    │                  // that act based on number of specified parameters).                   
                out.params.push_back(UniValue());                                        │                  out.params.push_back(UniValue());                                       
            }                                                                            │              }                                                                           
            hole = 0;                                                                    │              hole = 0;                                                                   
            out.params.push_back(*fr->second);                                           │              out.params.push_back(*fr->second);                                          
            argsIn.erase(fr);                                                            │              argsIn.erase(fr);                                                           
        } else {                                                                         │          } else {                                                                        
            hole += 1;                                                                   │              hole += 1;                                                                  
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    // If there are still arguments in the argsIn map, this is an error.                 │      // If there are still arguments in the argsIn map, this is an error.                
    if (!argsIn.empty()) {                                                               │      if (!argsIn.empty()) {                                                              
        throw JSONRPCError(RPC_INVALID_PARAMETER, "Unknown named parameter " + argsIn.be │          throw JSONRPCError(RPC_INVALID_PARAMETER, "Unknown named parameter " + argsIn.be
    }                                                                                    │      }                                                                                   
    // Return request with named arguments transformed to positional arguments           │      // Return request with named arguments transformed to positional arguments          
    return out;                                                                          │      return out;                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/bitcoin.cpp:117                                                         │ bitcoin/src/qt/bitcoin.cpp:119                                                           
                                                                                         │                                                                                          
    // Remove old translators                                                            │      // Remove old translators                                                           
    QApplication::removeTranslator(&qtTranslatorBase);                                   │      QApplication::removeTranslator(&qtTranslatorBase);                                  
    QApplication::removeTranslator(&qtTranslator);                                       │      QApplication::removeTranslator(&qtTranslator);                                      
    QApplication::removeTranslator(&translatorBase);                                     │      QApplication::removeTranslator(&translatorBase);                                    
    QApplication::removeTranslator(&translator);                                         │      QApplication::removeTranslator(&translator);                                        
                                                                                         │                                                                                          
    // Get desired locale (e.g. "de_DE")                                                 │      // Get desired locale (e.g. "de_DE")                                                
    // 1) System default language                                                        │      // 1) System default language                                                       
    QString lang_territory = GetLangTerritory();                                         │      QString lang_territory = GetLangTerritory();                                        
                                                                                         │                                                                                          
    // Convert to "de" only by truncating "_DE"                                          │      // Convert to "de" only by truncating "_DE"                                         
    QString lang = lang_territory;                                                       │      QString lang = lang_territory;                                                      
    lang.truncate(lang_territory.lastIndexOf('_'));                                      │      lang.truncate(lang_territory.lastIndexOf('_'));                                     
                                                                                         │                                                                                          
    // Load language files for configured locale:                                        │      // Load language files for configured locale:                                       
    // - First load the translator for the base language, without territory              │      // - First load the translator for the base language, without territory             
    // - Then load the more specific locale translator                                   │      // - Then load the more specific locale translator                                  
                                                                                         │                                                                                          
    // Load e.g. qt_de.qm                                                                │      // Load e.g. qt_de.qm                                                               
    if (qtTranslatorBase.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::Transla │      if (qtTranslatorBase.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::Transla
        QApplication::installTranslator(&qtTranslatorBase);                              │          QApplication::installTranslator(&qtTranslatorBase);                             
                                                                                         │                                                                                          
    // Load e.g. qt_de_DE.qm                                                             │      // Load e.g. qt_de_DE.qm                                                            
    if (qtTranslator.load("qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::T │      if (qtTranslator.load("qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::T
        QApplication::installTranslator(&qtTranslator);                                  │          QApplication::installTranslator(&qtTranslator);                                 
                                                                                         │                                                                                          
    // Load e.g. bitcoin_de.qm (shortcut "de" needs to be defined in bitcoin.qrc)        │      // Load e.g. bitcoin_de.qm (shortcut "de" needs to be defined in bitcoin.qrc)       
    if (translatorBase.load(lang, ":/translations/"))                                    │      if (translatorBase.load(lang, ":/translations/"))                                   
        QApplication::installTranslator(&translatorBase);                                │          QApplication::installTranslator(&translatorBase);                               
                                                                                         │                                                                                          
    // Load e.g. bitcoin_de_DE.qm (shortcut "de_DE" needs to be defined in bitcoin.qrc)  │      // Load e.g. bitcoin_de_DE.qm (shortcut "de_DE" needs to be defined in bitcoin.qrc) 
    if (translator.load(lang_territory, ":/translations/"))                              │      if (translator.load(lang_territory, ":/translations/"))                             
        QApplication::installTranslator(&translator);                                    │          QApplication::installTranslator(&translator);                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/transactionview.cpp:268                                                  │ dogecoin/src/qt/transactionview.cpp:246                                                  
                                                                                         │                                                                                          
    if (!transactionProxyModel) return;                                                  │      if(!transactionProxyModel)                                                          
                                                                                         │          return;                                                                         
    QDate current = QDate::currentDate();                                                │      QDate current = QDate::currentDate();                                               
    dateRangeWidget->setVisible(false);                                                  │      dateRangeWidget->setVisible(false);                                                 
    switch(dateWidget->itemData(idx).toInt())                                            │      switch(dateWidget->itemData(idx).toInt())                                           
    {                                                                                    │      {                                                                                   
    case All:                                                                            │      case All:                                                                           
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                std::nullopt,                                                            │                  TransactionFilterProxy::MIN_DATE,                                       
                std::nullopt);                                                           │                  TransactionFilterProxy::MAX_DATE);                                      
        break;                                                                           │          break;                                                                          
    case Today:                                                                          │      case Today:                                                                         
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                GUIUtil::StartOfDay(current),                                            │                  QDateTime(current),                                                     
                std::nullopt);                                                           │                  TransactionFilterProxy::MAX_DATE);                                      
        break;                                                                           │          break;                                                                          
    case ThisWeek: {                                                                     │      case ThisWeek: {                                                                    
        // Find last Monday                                                              │          // Find last Monday                                                             
        QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1));                   │          QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1));                  
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                GUIUtil::StartOfDay(startOfWeek),                                        │                  QDateTime(startOfWeek),                                                 
                std::nullopt);                                                           │                  TransactionFilterProxy::MAX_DATE);                                      
                                                                                         │                                                                                          
        } break;                                                                         │          } break;                                                                        
    case ThisMonth:                                                                      │      case ThisMonth:                                                                     
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1)),          │                  QDateTime(QDate(current.year(), current.month(), 1)),                   
                std::nullopt);                                                           │                  TransactionFilterProxy::MAX_DATE);                                      
        break;                                                                           │          break;                                                                          
    case LastMonth:                                                                      │      case LastMonth:                                                                     
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1).addMonths( │                  QDateTime(QDate(current.year(), current.month(), 1).addMonths(-1)),     
                GUIUtil::StartOfDay(QDate(current.year(), current.month(), 1)));         │                  QDateTime(QDate(current.year(), current.month(), 1)));                  
        break;                                                                           │          break;                                                                          
    case ThisYear:                                                                       │      case ThisYear:                                                                      
        transactionProxyModel->setDateRange(                                             │          transactionProxyModel->setDateRange(                                            
                GUIUtil::StartOfDay(QDate(current.year(), 1, 1)),                        │                  QDateTime(QDate(current.year(), 1, 1)),                                 
                std::nullopt);                                                           │                  TransactionFilterProxy::MAX_DATE);                                      
        break;                                                                           │          break;                                                                          
    case Range:                                                                          │      case Range:                                                                         
        dateRangeWidget->setVisible(true);                                               │          dateRangeWidget->setVisible(true);                                              
        dateRangeChanged();                                                              │          dateRangeChanged();                                                             
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/blockencodings_tests.cpp:260                                           │ dogecoin/src/test/blockencodings_tests.cpp:274                                           
                                                                                         │                                                                                          
    CTxMemPool pool;                                                                     │      CTxMemPool pool(CFeeRate(0));                                                       
    CMutableTransaction coinbase;                                                        │      CMutableTransaction coinbase;                                                       
    coinbase.vin.resize(1);                                                              │      coinbase.vin.resize(1);                                                             
    coinbase.vin[0].scriptSig.resize(10);                                                │      coinbase.vin[0].scriptSig.resize(10);                                               
    coinbase.vout.resize(1);                                                             │      coinbase.vout.resize(1);                                                            
    coinbase.vout[0].nValue = 42;                                                        │      coinbase.vout[0].nValue = 42;                                                       
                                                                                         │                                                                                          
    CBlock block;                                                                        │      CBlock block;                                                                       
    block.vtx.resize(1);                                                                 │      block.vtx.resize(1);                                                                
    block.vtx[0] = MakeTransactionRef(std::move(coinbase));                              │      block.vtx[0] = MakeTransactionRef(std::move(coinbase));                             
    block.nVersion = 42;                                                                 │      block.nVersion = 1;                                                                 
    block.hashPrevBlock = InsecureRand256();                                             │      block.hashPrevBlock = GetRandHash();                                                
    block.nBits = 0x207fffff;                                                            │      block.nBits = 0x207fffff;                                                           
                                                                                         │                                                                                          
    bool mutated;                                                                        │      bool mutated;                                                                       
    block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);                             │      block.hashMerkleRoot = BlockMerkleRoot(block, &mutated);                            
    assert(!mutated);                                                                    │      assert(!mutated);                                                                   
    while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++b │      while (!CheckProofOfWork(block.GetPoWHash(), block.nBits, Params().GetConsensus(0)))
                                                                                         │                                                                                          
    // Test simple header round-trip with only coinbase                                  │      // Test simple header round-trip with only coinbase                                 
    {                                                                                    │      {                                                                                   
        CBlockHeaderAndShortTxIDs shortIDs(block, false);                                │          CBlockHeaderAndShortTxIDs shortIDs(block, false);                               
                                                                                         │                                                                                          
        CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                               │          CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                              
        stream << shortIDs;                                                              │          stream << shortIDs;                                                             
                                                                                         │                                                                                          
        CBlockHeaderAndShortTxIDs shortIDs2;                                             │          CBlockHeaderAndShortTxIDs shortIDs2;                                            
        stream >> shortIDs2;                                                             │          stream >> shortIDs2;                                                            
                                                                                         │                                                                                          
        PartiallyDownloadedBlock partialBlock(&pool);                                    │          PartiallyDownloadedBlock partialBlock(&pool);                                   
        BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);      │          BOOST_CHECK(partialBlock.InitData(shortIDs2, extra_txn) == READ_STATUS_OK);     
        BOOST_CHECK(partialBlock.IsTxAvailable(0));                                      │          BOOST_CHECK(partialBlock.IsTxAvailable(0));                                     
                                                                                         │                                                                                          
        CBlock block2;                                                                   │          CBlock block2;                                                                  
        std::vector<CTransactionRef> vtx_missing;                                        │          std::vector<CTransactionRef> vtx_missing;                                       
        BOOST_CHECK(partialBlock.FillBlock(block2, vtx_missing) == READ_STATUS_OK);      │          BOOST_CHECK(partialBlock.FillBlock(block2, vtx_missing) == READ_STATUS_OK);     
        BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());      │          BOOST_CHECK_EQUAL(block.GetHash().ToString(), block2.GetHash().ToString());     
        BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &muta │          BOOST_CHECK_EQUAL(block.hashMerkleRoot.ToString(), BlockMerkleRoot(block2, &muta
        BOOST_CHECK(!mutated);                                                           │          BOOST_CHECK(!mutated);                                                          
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:231                                           │ bitcoin/src/test/arith_uint256_tests.cpp:225                                             
                                                                                         │                                                                                          
    unsigned char TmpArray[32];                                                          │      unsigned char TmpArray[32];                                                         
                                                                                         │                                                                                          
    CHECKBITWISEOPERATOR(R1,R2,|)                                                        │      CHECKBITWISEOPERATOR(R1,R2,|)                                                       
    CHECKBITWISEOPERATOR(R1,R2,^)                                                        │      CHECKBITWISEOPERATOR(R1,R2,^)                                                       
    CHECKBITWISEOPERATOR(R1,R2,&)                                                        │      CHECKBITWISEOPERATOR(R1,R2,&)                                                       
    CHECKBITWISEOPERATOR(R1,Zero,|)                                                      │      CHECKBITWISEOPERATOR(R1,Zero,|)                                                     
    CHECKBITWISEOPERATOR(R1,Zero,^)                                                      │      CHECKBITWISEOPERATOR(R1,Zero,^)                                                     
    CHECKBITWISEOPERATOR(R1,Zero,&)                                                      │      CHECKBITWISEOPERATOR(R1,Zero,&)                                                     
    CHECKBITWISEOPERATOR(R1,Max,|)                                                       │      CHECKBITWISEOPERATOR(R1,Max,|)                                                      
    CHECKBITWISEOPERATOR(R1,Max,^)                                                       │      CHECKBITWISEOPERATOR(R1,Max,^)                                                      
    CHECKBITWISEOPERATOR(R1,Max,&)                                                       │      CHECKBITWISEOPERATOR(R1,Max,&)                                                      
    CHECKBITWISEOPERATOR(Zero,R1,|)                                                      │      CHECKBITWISEOPERATOR(Zero,R1,|)                                                     
    CHECKBITWISEOPERATOR(Zero,R1,^)                                                      │      CHECKBITWISEOPERATOR(Zero,R1,^)                                                     
    CHECKBITWISEOPERATOR(Zero,R1,&)                                                      │      CHECKBITWISEOPERATOR(Zero,R1,&)                                                     
    CHECKBITWISEOPERATOR(Max,R1,|)                                                       │      CHECKBITWISEOPERATOR(Max,R1,|)                                                      
    CHECKBITWISEOPERATOR(Max,R1,^)                                                       │      CHECKBITWISEOPERATOR(Max,R1,^)                                                      
    CHECKBITWISEOPERATOR(Max,R1,&)                                                       │      CHECKBITWISEOPERATOR(Max,R1,&)                                                      
                                                                                         │                                                                                          
    arith_uint256 TmpL;                                                                  │      arith_uint256 TmpL;                                                                 
    CHECKASSIGNMENTOPERATOR(R1,R2,|)                                                     │      CHECKASSIGNMENTOPERATOR(R1,R2,|)                                                    
    CHECKASSIGNMENTOPERATOR(R1,R2,^)                                                     │      CHECKASSIGNMENTOPERATOR(R1,R2,^)                                                    
    CHECKASSIGNMENTOPERATOR(R1,R2,&)                                                     │      CHECKASSIGNMENTOPERATOR(R1,R2,&)                                                    
    CHECKASSIGNMENTOPERATOR(R1,Zero,|)                                                   │      CHECKASSIGNMENTOPERATOR(R1,Zero,|)                                                  
    CHECKASSIGNMENTOPERATOR(R1,Zero,^)                                                   │      CHECKASSIGNMENTOPERATOR(R1,Zero,^)                                                  
    CHECKASSIGNMENTOPERATOR(R1,Zero,&)                                                   │      CHECKASSIGNMENTOPERATOR(R1,Zero,&)                                                  
    CHECKASSIGNMENTOPERATOR(R1,Max,|)                                                    │      CHECKASSIGNMENTOPERATOR(R1,Max,|)                                                   
    CHECKASSIGNMENTOPERATOR(R1,Max,^)                                                    │      CHECKASSIGNMENTOPERATOR(R1,Max,^)                                                   
    CHECKASSIGNMENTOPERATOR(R1,Max,&)                                                    │      CHECKASSIGNMENTOPERATOR(R1,Max,&)                                                   
    CHECKASSIGNMENTOPERATOR(Zero,R1,|)                                                   │      CHECKASSIGNMENTOPERATOR(Zero,R1,|)                                                  
    CHECKASSIGNMENTOPERATOR(Zero,R1,^)                                                   │      CHECKASSIGNMENTOPERATOR(Zero,R1,^)                                                  
    CHECKASSIGNMENTOPERATOR(Zero,R1,&)                                                   │      CHECKASSIGNMENTOPERATOR(Zero,R1,&)                                                  
    CHECKASSIGNMENTOPERATOR(Max,R1,|)                                                    │      CHECKASSIGNMENTOPERATOR(Max,R1,|)                                                   
    CHECKASSIGNMENTOPERATOR(Max,R1,^)                                                    │      CHECKASSIGNMENTOPERATOR(Max,R1,^)                                                   
    CHECKASSIGNMENTOPERATOR(Max,R1,&)                                                    │      CHECKASSIGNMENTOPERATOR(Max,R1,&)                                                   
                                                                                         │                                                                                          
    uint64_t Tmp64 = 0xe1db685c9a0b47a2ULL;                                              │      uint64_t Tmp64 = 0xe1db685c9a0b47a2ULL;                                             
    TmpL = R1L; TmpL |= Tmp64;  BOOST_CHECK(TmpL == (R1L | arith_uint256(Tmp64)));       │      TmpL = R1L; TmpL |= Tmp64;  BOOST_CHECK(TmpL == (R1L | arith_uint256(Tmp64)));      
    TmpL = R1L; TmpL |= 0; BOOST_CHECK(TmpL == R1L);                                     │      TmpL = R1L; TmpL |= 0; BOOST_CHECK(TmpL == R1L);                                    
    TmpL ^= 0; BOOST_CHECK(TmpL == R1L);                                                 │      TmpL ^= 0; BOOST_CHECK(TmpL == R1L);                                                
    TmpL ^= Tmp64;  BOOST_CHECK(TmpL == (R1L ^ arith_uint256(Tmp64)));                   │      TmpL ^= Tmp64;  BOOST_CHECK(TmpL == (R1L ^ arith_uint256(Tmp64)));                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/walletmodel.cpp:504                                                     │ dogecoin/src/qt/walletmodel.cpp:526                                                      
                                                                                         │                                                                                          
    // Connect signals to wallet                                                         │      // Disconnect signals from wallet                                                   
    wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this,  │      wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, thi
                                                    boost::placeholders::_1));           │                                                                                          
    wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, │                                                                                          
                                                         boost::placeholders::_1,        │                                                                                          
                                                         boost::placeholders::_2,        │                                                                                          
                                                         boost::placeholders::_3,        │                                                                                          
                                                         boost::placeholders::_4,        │                                                                                          
                                                         boost::placeholders::_5,        │                                                                                          
                                                         boost::placeholders::_6));      │                                                                                          
    wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, │                                                                                          
                                                         boost::placeholders::_1,        │                                                                                          
                                                         boost::placeholders::_2,        │                                                                                          
                                                         boost::placeholders::_3));      │                                                                                          
    wallet->ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1 │                                                                                          
                                             boost::placeholders::_2));                  │                                                                                          
    wallet->NotifyWatchonlyChanged.connect(boost::bind(NotifyWatchonlyChanged, this,     │                                                                                          
                                                       boost::placeholders::_1));        │                                                         boost::placeholders::_1));       
                                                                                         │      wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, th
                                                                                         │                                                              boost::placeholders::_1,    
                                                                                         │                                                              boost::placeholders::_2,    
                                                                                         │                                                              boost::placeholders::_3,    
                                                                                         │                                                              boost::placeholders::_4,    
                                                                                         │                                                              boost::placeholders::_5,    
                                                                                         │                                                              boost::placeholders::_6));  
                                                                                         │      wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, th
                                                                                         │                                                              boost::placeholders::_1,    
                                                                                         │                                                              boost::placeholders::_2,    
                                                                                         │                                                              boost::placeholders::_3));  
                                                                                         │      wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this,                     
                                                                                         │                                                  boost::placeholders::_1,                
                                                                                         │                                                  boost::placeholders::_2));              
                                                                                         │      wallet->NotifyWatchonlyChanged.disconnect(boost::bind(NotifyWatchonlyChanged, this, 
                                                                                         │                                                            boost::placeholders::_1));    
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:236                                                  │ bitcoin/src/test/crypto_tests.cpp:239                                                    
                                                                                         │                                                                                          
    TestSHA256("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");  │      TestSHA256("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); 
    TestSHA256("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" │      TestSHA256("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
    TestSHA256("message digest",                                                         │      TestSHA256("message digest",                                                        
               "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650");      │                 "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650");     
    TestSHA256("secure hash algorithm",                                                  │      TestSHA256("secure hash algorithm",                                                 
               "f30ceb2bb2829e79e4ca9753d35a8ecc00262d164cc077080295381cbd643f0d");      │                 "f30ceb2bb2829e79e4ca9753d35a8ecc00262d164cc077080295381cbd643f0d");     
    TestSHA256("SHA256 is considered to be safe",                                        │      TestSHA256("SHA256 is considered to be safe",                                       
               "6819d915c73f4d1e77e4e1b52d1fa0f9cf9beaead3939f15874bd988e2a23630");      │                 "6819d915c73f4d1e77e4e1b52d1fa0f9cf9beaead3939f15874bd988e2a23630");     
    TestSHA256("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",               │      TestSHA256("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",              
               "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");      │                 "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");     
    TestSHA256("For this sample, this 63-byte string will be used as input data",        │      TestSHA256("For this sample, this 63-byte string will be used as input data",       
               "f08a78cbbaee082b052ae0708f32fa1e50c5c421aa772ba5dbb406a2ea6be342");      │                 "f08a78cbbaee082b052ae0708f32fa1e50c5c421aa772ba5dbb406a2ea6be342");     
    TestSHA256("This is exactly 64 bytes long, not counting the terminating byte",       │      TestSHA256("This is exactly 64 bytes long, not counting the terminating byte",      
               "ab64eff7e88e2e46165e29f2bce41826bd4c7b3552f6b382a9e7d3af47c245f8");      │                 "ab64eff7e88e2e46165e29f2bce41826bd4c7b3552f6b382a9e7d3af47c245f8");     
    TestSHA256("As Bitcoin relies on 80 byte header hashes, we want to have an example f │      TestSHA256("As Bitcoin relies on 80 byte header hashes, we want to have an example f
               "7406e8de7d6e4fffc573daef05aefb8806e7790f55eab5576f31349743cca743");      │                 "7406e8de7d6e4fffc573daef05aefb8806e7790f55eab5576f31349743cca743");     
    TestSHA256(std::string(1000000, 'a'),                                                │      TestSHA256(std::string(1000000, 'a'),                                               
               "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");      │                 "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");     
    TestSHA256(test1, "a316d55510b49662420f49d145d42fb83f31ef8dc016aa4e32df049991a91e26" │      TestSHA256(test1, "a316d55510b49662420f49d145d42fb83f31ef8dc016aa4e32df049991a91e26"
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/serialize_tests.cpp:63                                                 │ dogecoin/src/test/serialize_tests.cpp:61                                                 
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(sizeof(unsigned char), GetSerializeSize((unsigned char)0, 0));     │      BOOST_CHECK_EQUAL(sizeof(char), GetSerializeSize(char(0), 0));                      
    BOOST_CHECK_EQUAL(sizeof(int8_t), GetSerializeSize(int8_t(0), 0));                   │      BOOST_CHECK_EQUAL(sizeof(int8_t), GetSerializeSize(int8_t(0), 0));                  
    BOOST_CHECK_EQUAL(sizeof(uint8_t), GetSerializeSize(uint8_t(0), 0));                 │      BOOST_CHECK_EQUAL(sizeof(uint8_t), GetSerializeSize(uint8_t(0), 0));                
    BOOST_CHECK_EQUAL(sizeof(int16_t), GetSerializeSize(int16_t(0), 0));                 │      BOOST_CHECK_EQUAL(sizeof(int16_t), GetSerializeSize(int16_t(0), 0));                
    BOOST_CHECK_EQUAL(sizeof(uint16_t), GetSerializeSize(uint16_t(0), 0));               │      BOOST_CHECK_EQUAL(sizeof(uint16_t), GetSerializeSize(uint16_t(0), 0));              
    BOOST_CHECK_EQUAL(sizeof(int32_t), GetSerializeSize(int32_t(0), 0));                 │      BOOST_CHECK_EQUAL(sizeof(int32_t), GetSerializeSize(int32_t(0), 0));                
    BOOST_CHECK_EQUAL(sizeof(uint32_t), GetSerializeSize(uint32_t(0), 0));               │      BOOST_CHECK_EQUAL(sizeof(uint32_t), GetSerializeSize(uint32_t(0), 0));              
    BOOST_CHECK_EQUAL(sizeof(int64_t), GetSerializeSize(int64_t(0), 0));                 │      BOOST_CHECK_EQUAL(sizeof(int64_t), GetSerializeSize(int64_t(0), 0));                
    BOOST_CHECK_EQUAL(sizeof(uint64_t), GetSerializeSize(uint64_t(0), 0));               │      BOOST_CHECK_EQUAL(sizeof(uint64_t), GetSerializeSize(uint64_t(0), 0));              
    // Bool is serialized as uint8_t                                                     │      BOOST_CHECK_EQUAL(sizeof(float), GetSerializeSize(float(0), 0));                    
    BOOST_CHECK_EQUAL(sizeof(uint8_t), GetSerializeSize(bool(0), 0));                    │      BOOST_CHECK_EQUAL(sizeof(double), GetSerializeSize(double(0), 0));                  
                                                                                         │      // Bool is serialized as char                                                       
                                                                                         │      BOOST_CHECK_EQUAL(sizeof(char), GetSerializeSize(bool(0), 0));                      
                                                                                         │                                                                                          
    // Sanity-check GetSerializeSize and c++ type matching                               │      // Sanity-check GetSerializeSize and c++ type matching                              
    BOOST_CHECK_EQUAL(GetSerializeSize((unsigned char)0, 0), 1U);                        │      BOOST_CHECK_EQUAL(GetSerializeSize(char(0), 0), 1);                                 
    BOOST_CHECK_EQUAL(GetSerializeSize(int8_t(0), 0), 1U);                               │      BOOST_CHECK_EQUAL(GetSerializeSize(int8_t(0), 0), 1);                               
    BOOST_CHECK_EQUAL(GetSerializeSize(uint8_t(0), 0), 1U);                              │      BOOST_CHECK_EQUAL(GetSerializeSize(uint8_t(0), 0), 1);                              
    BOOST_CHECK_EQUAL(GetSerializeSize(int16_t(0), 0), 2U);                              │      BOOST_CHECK_EQUAL(GetSerializeSize(int16_t(0), 0), 2);                              
    BOOST_CHECK_EQUAL(GetSerializeSize(uint16_t(0), 0), 2U);                             │      BOOST_CHECK_EQUAL(GetSerializeSize(uint16_t(0), 0), 2);                             
    BOOST_CHECK_EQUAL(GetSerializeSize(int32_t(0), 0), 4U);                              │      BOOST_CHECK_EQUAL(GetSerializeSize(int32_t(0), 0), 4);                              
    BOOST_CHECK_EQUAL(GetSerializeSize(uint32_t(0), 0), 4U);                             │      BOOST_CHECK_EQUAL(GetSerializeSize(uint32_t(0), 0), 4);                             
    BOOST_CHECK_EQUAL(GetSerializeSize(int64_t(0), 0), 8U);                              │      BOOST_CHECK_EQUAL(GetSerializeSize(int64_t(0), 0), 8);                              
    BOOST_CHECK_EQUAL(GetSerializeSize(uint64_t(0), 0), 8U);                             │      BOOST_CHECK_EQUAL(GetSerializeSize(uint64_t(0), 0), 8);                             
    BOOST_CHECK_EQUAL(GetSerializeSize(bool(0), 0), 1U);                                 │      BOOST_CHECK_EQUAL(GetSerializeSize(float(0), 0), 4);                                
                                                                                         │      BOOST_CHECK_EQUAL(GetSerializeSize(double(0), 0), 8);                               
                                                                                         │      BOOST_CHECK_EQUAL(GetSerializeSize(bool(0), 0), 1);                                 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/guiutil.cpp:143                                                          │ dogecoin/src/qt/guiutil.cpp:153                                                          
                                                                                         │                                                                                          
    // return if URI is not valid or is no bitcoin: URI                                  │      // return if URI is not valid or is no dogecoin: URI                                
    if(!uri.isValid() || uri.scheme() != QString("bitcoin"))                             │      if(!uri.isValid() || uri.scheme() != QString("dogecoin"))                           
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    SendCoinsRecipient rv;                                                               │      SendCoinsRecipient rv;                                                              
    rv.address = uri.path();                                                             │      rv.address = uri.path();                                                            
    // Trim any following forward slash which may have been added by the OS              │      // Trim any following forward slash which may have been added by the OS             
    if (rv.address.endsWith("/")) {                                                      │      if (rv.address.endsWith("/")) {                                                     
        rv.address.truncate(rv.address.length() - 1);                                    │          rv.address.truncate(rv.address.length() - 1);                                   
    }                                                                                    │      }                                                                                   
    rv.amount = 0;                                                                       │      rv.amount = 0;                                                                      
                                                                                         │                                                                                          
                                                                                         │  #if QT_VERSION < 0x050000                                                               
                                                                                         │      QList<QPair<QString, QString> > items = uri.queryItems();                           
                                                                                         │  #else                                                                                   
    QUrlQuery uriQuery(uri);                                                             │      QUrlQuery uriQuery(uri);                                                            
    QList<QPair<QString, QString> > items = uriQuery.queryItems();                       │      QList<QPair<QString, QString> > items = uriQuery.queryItems();                      
                                                                                         │  #endif                                                                                  
    for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end();  │      for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); 
    {                                                                                    │      {                                                                                   
        bool fShouldReturnFalse = false;                                                 │          bool fShouldReturnFalse = false;                                                
        if (i->first.startsWith("req-"))                                                 │          if (i->first.startsWith("req-"))                                                
        {                                                                                │          {                                                                               
            i->first.remove(0, 4);                                                       │              i->first.remove(0, 4);                                                      
            fShouldReturnFalse = true;                                                   │              fShouldReturnFalse = true;                                                  
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (i->first == "label")                                                         │          if (i->first == "label")                                                        
        {                                                                                │          {                                                                               
            rv.label = i->second;                                                        │              rv.label = i->second;                                                       
            fShouldReturnFalse = false;                                                  │              fShouldReturnFalse = false;                                                 
        }                                                                                │          }                                                                               
        if (i->first == "message")                                                       │          if (i->first == "message")                                                      
        {                                                                                │          {                                                                               
            rv.message = i->second;                                                      │              rv.message = i->second;                                                     
            fShouldReturnFalse = false;                                                  │              fShouldReturnFalse = false;                                                 
        }                                                                                │          }                                                                               
        else if (i->first == "amount")                                                   │          else if (i->first == "amount")                                                  
        {                                                                                │          {                                                                               
            if(!i->second.isEmpty())                                                     │              if(!i->second.isEmpty())                                                    
            {                                                                            │              {                                                                           
                if (!BitcoinUnits::parse(BitcoinUnit::BTC, i->second, &rv.amount)) {     │                  if(!BitcoinUnits::parse(BitcoinUnits::BTC, i->second, &rv.amount))      
                                                                                         │                  {                                                                       
                    return false;                                                        │                      return false;                                                       
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            fShouldReturnFalse = false;                                                  │              fShouldReturnFalse = false;                                                 
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        if (fShouldReturnFalse)                                                          │          if (fShouldReturnFalse)                                                         
            return false;                                                                │              return false;                                                               
    }                                                                                    │      }                                                                                   
    if(out)                                                                              │      if(out)                                                                             
    {                                                                                    │      {                                                                                   
        *out = rv;                                                                       │          *out = rv;                                                                      
    }                                                                                    │      }                                                                                   
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/merkleblock.cpp:95                                                          │ dogecoin/src/merkleblock.cpp:96                                                          
                                                                                         │                                                                                          
    if (nBitsUsed >= vBits.size()) {                                                     │      if (nBitsUsed >= vBits.size()) {                                                    
        // overflowed the bits array - failure                                           │          // overflowed the bits array - failure                                          
        fBad = true;                                                                     │          fBad = true;                                                                    
        return uint256();                                                                │          return uint256();                                                               
    }                                                                                    │      }                                                                                   
    bool fParentOfMatch = vBits[nBitsUsed++];                                            │      bool fParentOfMatch = vBits[nBitsUsed++];                                           
    if (height==0 || !fParentOfMatch) {                                                  │      if (height==0 || !fParentOfMatch) {                                                 
        // if at height 0, or nothing interesting below, use stored hash and do not desc │          // if at height 0, or nothing interesting below, use stored hash and do not desc
        if (nHashUsed >= vHash.size()) {                                                 │          if (nHashUsed >= vHash.size()) {                                                
            // overflowed the hash array - failure                                       │              // overflowed the hash array - failure                                      
            fBad = true;                                                                 │              fBad = true;                                                                
            return uint256();                                                            │              return uint256();                                                           
        }                                                                                │          }                                                                               
        const uint256 &hash = vHash[nHashUsed++];                                        │          const uint256 &hash = vHash[nHashUsed++];                                       
        if (height==0 && fParentOfMatch) { // in case of height 0, we have a matched txi │          if (height==0 && fParentOfMatch) { // in case of height 0, we have a matched txi
            vMatch.push_back(hash);                                                      │              vMatch.push_back(hash);                                                     
            vnIndex.push_back(pos);                                                      │              vnIndex.push_back(pos);                                                     
        }                                                                                │          }                                                                               
        return hash;                                                                     │          return hash;                                                                    
    } else {                                                                             │      } else {                                                                            
        // otherwise, descend into the subtrees to extract matched txids and hashes      │          // otherwise, descend into the subtrees to extract matched txids and hashes     
        uint256 left = TraverseAndExtract(height-1, pos*2, nBitsUsed, nHashUsed, vMatch, │          uint256 left = TraverseAndExtract(height-1, pos*2, nBitsUsed, nHashUsed, vMatch,
        if (pos*2+1 < CalcTreeWidth(height-1)) {                                         │          if (pos*2+1 < CalcTreeWidth(height-1)) {                                        
            right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch,  │              right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch, 
            if (right == left) {                                                         │              if (right == left) {                                                        
                // The left and right branches should never be identical, as the transac │                  // The left and right branches should never be identical, as the transac
                // hashes covered by them must each be unique.                           │                  // hashes covered by them must each be unique.                          
                fBad = true;                                                             │                  fBad = true;                                                            
            }                                                                            │              }                                                                           
        } else {                                                                         │          } else {                                                                        
            right = left;                                                                │              right = left;                                                               
        }                                                                                │          }                                                                               
        // and combine them before returning                                             │          // and combine them before returning                                            
        return Hash(left, right);                                                        │          return Hash(BEGIN(left), END(left), BEGIN(right), END(right));                  
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/clientmodel.cpp:333                                                     │ dogecoin/src/qt/clientmodel.cpp:355                                                      
                                                                                         │                                                                                          
    // Connect signals to client                                                         │      // Disconnect signals from client                                                   
    uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this,                     │      uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this,                 
                                                 boost::placeholders::_1,                │                                                                                          
                                                 boost::placeholders::_2));              │                                                                                          
    uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChan │                                                                                          
                                                                boost::placeholders::_1) │                                                                                          
    uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChange │                                                                                          
                                                               boost::placeholders::_1)) │                                                                                          
    uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this,         │                                                                                          
                                           boost::placeholders::_1,                      │                                                                                          
                                           boost::placeholders::_2));                    │                                                                                          
    uiInterface.BannedListChanged.connect(boost::bind(BannedListChanged, this));         │                                                                                          
    uiInterface.NotifyBlockTip.connect(boost::bind(BlockTipChanged, this,                │                                                                                          
                                                   boost::placeholders::_1,              │                                                                                          
                                                   boost::placeholders::_2, false));     │                                                                                          
    uiInterface.NotifyHeaderTip.connect(boost::bind(BlockTipChanged, this,               │                                                                                          
                                                    boost::placeholders::_1,             │                                                      boost::placeholders::_1,            
                                                    boost::placeholders::_2, true));     │                                                      boost::placeholders::_2));          
                                                                                         │      uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsC
                                                                                         │                                                                     boost::placeholders::
                                                                                         │      uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveCha
                                                                                         │                                                                    boost::placeholders::_
                                                                                         │      uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this,     
                                                                                         │                                                            boost::placeholders::_1,      
                                                                                         │                                                            boost::placeholders::_2));    
                                                                                         │      uiInterface.BannedListChanged.disconnect(boost::bind(BannedListChanged, this));     
                                                                                         │      uiInterface.NotifyBlockTip.disconnect(boost::bind(BlockTipChanged, this,            
                                                                                         │                                                        boost::placeholders::_1,          
                                                                                         │                                                        boost::placeholders::_2, false)); 
                                                                                         │      uiInterface.NotifyHeaderTip.disconnect(boost::bind(BlockTipChanged, this,           
                                                                                         │                                                         boost::placeholders::_1,         
                                                                                         │                                                         boost::placeholders::_2, true)); 
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/txmempool.cpp:1132                                                          │ dogecoin/src/txmempool.cpp:1108                                                          
                                                                                         │                                                                                          
        indexed_transaction_set::index<descendant_score>::type::iterator it = mapTx.get< │          indexed_transaction_set::index<descendant_score>::type::iterator it = mapTx.get<
                                                                                         │                                                                                          
        // We set the new mempool min fee to the feerate of the removed set, plus the    │          // We set the new mempool min fee to the feerate of the removed set, plus the   
        // "minimum reasonable fee rate" (ie some value under which we consider txn      │          // "minimum reasonable fee rate" (ie some value under which we consider txn     
        // to have 0 fee). This way, we don't allow txn to enter mempool with feerate    │          // to have 0 fee). This way, we don't allow txn to enter mempool with feerate   
        // equal to txn which were removed with no block in between.                     │          // equal to txn which were removed with no block in between.                    
        CFeeRate removed(it->GetModFeesWithDescendants(), it->GetSizeWithDescendants()); │          CFeeRate removed(it->GetModFeesWithDescendants(), it->GetSizeWithDescendants());
        removed += incrementalRelayFee;                                                  │          removed += incrementalRelayFee;                                                 
        trackPackageRemoved(removed);                                                    │          trackPackageRemoved(removed);                                                   
        maxFeeRateRemoved = std::max(maxFeeRateRemoved, removed);                        │          maxFeeRateRemoved = std::max(maxFeeRateRemoved, removed);                       
                                                                                         │                                                                                          
        setEntries stage;                                                                │          setEntries stage;                                                               
        CalculateDescendants(mapTx.project<0>(it), stage);                               │          CalculateDescendants(mapTx.project<0>(it), stage);                              
        nTxnRemoved += stage.size();                                                     │          nTxnRemoved += stage.size();                                                    
                                                                                         │                                                                                          
        std::vector<CTransaction> txn;                                                   │          std::vector<CTransaction> txn;                                                  
        if (pvNoSpendsRemaining) {                                                       │          if (pvNoSpendsRemaining) {                                                      
            txn.reserve(stage.size());                                                   │              txn.reserve(stage.size());                                                  
            for (txiter iter : stage)                                                    │              BOOST_FOREACH(txiter iter, stage)                                           
                txn.push_back(iter->GetTx());                                            │                  txn.push_back(iter->GetTx());                                           
        }                                                                                │          }                                                                               
        RemoveStaged(stage, false, MemPoolRemovalReason::SIZELIMIT);                     │          RemoveStaged(stage, false, MemPoolRemovalReason::SIZELIMIT);                    
        if (pvNoSpendsRemaining) {                                                       │          if (pvNoSpendsRemaining) {                                                      
            for (const CTransaction& tx : txn) {                                         │              BOOST_FOREACH(const CTransaction& tx, txn) {                                
                for (const CTxIn& txin : tx.vin) {                                       │                  BOOST_FOREACH(const CTxIn& txin, tx.vin) {                              
                    if (exists(GenTxid::Txid(txin.prevout.hash))) continue;              │                      if (exists(txin.prevout.hash))                                      
                    pvNoSpendsRemaining->push_back(txin.prevout);                        │                          continue;                                                       
                                                                                         │                      auto iter = mapNextTx.lower_bound(COutPoint(txin.prevout.hash, 0)); 
                                                                                         │                      if (iter == mapNextTx.end() || iter->first->hash != txin.prevout.has
                                                                                         │                          pvNoSpendsRemaining->push_back(txin.prevout.hash);              
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/script_tests.cpp:185                                                  │ bitcoin/src/test/script_tests.cpp:168                                                    
                                                                                         │                                                                                          
    // Parse the signature.                                                              │      // Parse the signature.                                                             
    std::vector<unsigned char> r, s;                                                     │      std::vector<unsigned char> r, s;                                                    
    r = std::vector<unsigned char>(vchSig.begin() + 4, vchSig.begin() + 4 + vchSig[3]);  │      r = std::vector<unsigned char>(vchSig.begin() + 4, vchSig.begin() + 4 + vchSig[3]); 
    s = std::vector<unsigned char>(vchSig.begin() + 6 + vchSig[3], vchSig.begin() + 6 +  │      s = std::vector<unsigned char>(vchSig.begin() + 6 + vchSig[3], vchSig.begin() + 6 + 
                                                                                         │                                                                                          
    // Really ugly to implement mod-n negation here, but it would be feature creep to ex │      // Really ugly to implement mod-n negation here, but it would be feature creep to ex
    static const unsigned char order[33] = {                                             │      static const unsigned char order[33] = {                                            
        0x00,                                                                            │          0x00,                                                                           
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,                                  │          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,                                 
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,                                  │          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,                                 
        0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,                                  │          0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,                                 
        0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41                                   │          0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41                                  
    };                                                                                   │      };                                                                                  
    while (s.size() < 33) {                                                              │      while (s.size() < 33) {                                                             
        s.insert(s.begin(), 0x00);                                                       │          s.insert(s.begin(), 0x00);                                                      
    }                                                                                    │      }                                                                                   
    int carry = 0;                                                                       │      int carry = 0;                                                                      
    for (int p = 32; p >= 1; p--) {                                                      │      for (int p = 32; p >= 1; p--) {                                                     
        int n = (int)order[p] - s[p] - carry;                                            │          int n = (int)order[p] - s[p] - carry;                                           
        s[p] = (n + 256) & 0xFF;                                                         │          s[p] = (n + 256) & 0xFF;                                                        
        carry = (n < 0);                                                                 │          carry = (n < 0);                                                                
    }                                                                                    │      }                                                                                   
    assert(carry == 0);                                                                  │      assert(carry == 0);                                                                 
    if (s.size() > 1 && s[0] == 0 && s[1] < 0x80) {                                      │      if (s.size() > 1 && s[0] == 0 && s[1] < 0x80) {                                     
        s.erase(s.begin());                                                              │          s.erase(s.begin());                                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Reconstruct the signature.                                                        │      // Reconstruct the signature.                                                       
    vchSig.clear();                                                                      │      vchSig.clear();                                                                     
    vchSig.push_back(0x30);                                                              │      vchSig.push_back(0x30);                                                             
    vchSig.push_back(4 + r.size() + s.size());                                           │      vchSig.push_back(4 + r.size() + s.size());                                          
    vchSig.push_back(0x02);                                                              │      vchSig.push_back(0x02);                                                             
    vchSig.push_back(r.size());                                                          │      vchSig.push_back(r.size());                                                         
    vchSig.insert(vchSig.end(), r.begin(), r.end());                                     │      vchSig.insert(vchSig.end(), r.begin(), r.end());                                    
    vchSig.push_back(0x02);                                                              │      vchSig.push_back(0x02);                                                             
    vchSig.push_back(s.size());                                                          │      vchSig.push_back(s.size());                                                         
    vchSig.insert(vchSig.end(), s.begin(), s.end());                                     │      vchSig.insert(vchSig.end(), s.begin(), s.end());                                    
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/bloom_tests.cpp:58                                                    │ dogecoin/src/test/bloom_tests.cpp:27                                                     
                                                                                         │                                                                                          
    // Same test as bloom_create_insert_serialize, but we add a nTweak of 100            │      CBloomFilter filter(3, 0.01, 0, BLOOM_UPDATE_ALL);                                  
    CBloomFilter filter(3, 0.01, 2147483649UL, BLOOM_UPDATE_ALL);                        │                                                                                          
                                                                                         │                                                                                          
    filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                 │      filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                
    BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
    // One bit different in first byte                                                   │      // One bit different in first byte                                                  
    BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │                                                                                          
    filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                 │      filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e
                                                                                         │                                                                                          
    filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                 │      filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729 │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729
                                                                                         │                                                                                          
    CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                   │      CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                  
    stream << filter;                                                                    │      stream << filter;                                                                   
                                                                                         │                                                                                          
    std::vector<unsigned char> vch = ParseHex("03ce4299050000000100008001");             │      std::vector<unsigned char> vch = ParseHex("03614e9b050000000000000001");            
    std::vector<char> expected(vch.size());                                              │      std::vector<char> expected(vch.size());                                             
                                                                                         │                                                                                          
    for (unsigned int i = 0; i < vch.size(); i++)                                        │      for (unsigned int i = 0; i < vch.size(); i++)                                       
        expected[i] = (char)vch[i];                                                      │          expected[i] = (char)vch[i];                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expect │      BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expect
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │      filter.clear();                                                                     
                                                                                         │      BOOST_CHECK_MESSAGE( !filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f09
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/serialize_tests.cpp:258                                               │ bitcoin/src/test/serialize_tests.cpp:182                                                 
                                                                                         │                                                                                          
    // Write some non-canonical CompactSize encodings, and                               │      // Write some non-canonical CompactSize encodings, and                              
    // make sure an exception is thrown when read back.                                  │      // make sure an exception is thrown when read back.                                 
    CDataStream ss(SER_DISK, 0);                                                         │      CDataStream ss(SER_DISK, 0);                                                        
    std::vector<char>::size_type n;                                                      │      std::vector<char>::size_type n;                                                     
                                                                                         │                                                                                          
    // zero encoded with three bytes:                                                    │      // zero encoded with three bytes:                                                   
    ss.write("\xfd\x00\x00", 3);                                                         │      ss.write(MakeByteSpan("\xfd\x00\x00").first(3));                                    
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
                                                                                         │                                                                                          
    // 0xfc encoded with three bytes:                                                    │      // 0xfc encoded with three bytes:                                                   
    ss.write("\xfd\xfc\x00", 3);                                                         │      ss.write(MakeByteSpan("\xfd\xfc\x00").first(3));                                    
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
                                                                                         │                                                                                          
    // 0xfd encoded with three bytes is OK:                                              │      // 0xfd encoded with three bytes is OK:                                             
    ss.write("\xfd\xfd\x00", 3);                                                         │      ss.write(MakeByteSpan("\xfd\xfd\x00").first(3));                                    
    n = ReadCompactSize(ss);                                                             │      n = ReadCompactSize(ss);                                                            
    BOOST_CHECK(n == 0xfd);                                                              │      BOOST_CHECK(n == 0xfd);                                                             
                                                                                         │                                                                                          
    // zero encoded with five bytes:                                                     │      // zero encoded with five bytes:                                                    
    ss.write("\xfe\x00\x00\x00\x00", 5);                                                 │      ss.write(MakeByteSpan("\xfe\x00\x00\x00\x00").first(5));                            
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
                                                                                         │                                                                                          
    // 0xffff encoded with five bytes:                                                   │      // 0xffff encoded with five bytes:                                                  
    ss.write("\xfe\xff\xff\x00\x00", 5);                                                 │      ss.write(MakeByteSpan("\xfe\xff\xff\x00\x00").first(5));                            
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
                                                                                         │                                                                                          
    // zero encoded with nine bytes:                                                     │      // zero encoded with nine bytes:                                                    
    ss.write("\xff\x00\x00\x00\x00\x00\x00\x00\x00", 9);                                 │      ss.write(MakeByteSpan("\xff\x00\x00\x00\x00\x00\x00\x00\x00").first(9));            
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
                                                                                         │                                                                                          
    // 0x01ffffff encoded with nine bytes:                                               │      // 0x01ffffff encoded with nine bytes:                                              
    ss.write("\xff\xff\xff\xff\x01\x00\x00\x00\x00", 9);                                 │      ss.write(MakeByteSpan("\xff\xff\xff\xff\x01\x00\x00\x00\x00").first(9));            
    BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept │      BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalExcept
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/util_tests.cpp:1928                                                    │ dogecoin/src/test/util_tests.cpp:406                                                     
                                                                                         │                                                                                          
    uint64_t n;                                                                          │      uint64_t n;                                                                         
    // Valid values                                                                      │      // Valid values                                                                     
    BOOST_CHECK(ParseUInt64("1234", nullptr));                                           │      BOOST_CHECK(ParseUInt64("1234", NULL));                                             
    BOOST_CHECK(ParseUInt64("0", &n) && n == 0LL);                                       │      BOOST_CHECK(ParseUInt64("0", &n) && n == 0LL);                                      
    BOOST_CHECK(ParseUInt64("1234", &n) && n == 1234LL);                                 │      BOOST_CHECK(ParseUInt64("1234", &n) && n == 1234LL);                                
    BOOST_CHECK(ParseUInt64("01234", &n) && n == 1234LL); // no octal                    │      BOOST_CHECK(ParseUInt64("01234", &n) && n == 1234LL); // no octal                   
    BOOST_CHECK(ParseUInt64("2147483647", &n) && n == 2147483647LL);                     │      BOOST_CHECK(ParseUInt64("2147483647", &n) && n == 2147483647LL);                    
    BOOST_CHECK(ParseUInt64("9223372036854775807", &n) && n == 9223372036854775807ULL);  │      BOOST_CHECK(ParseUInt64("9223372036854775807", &n) && n == 9223372036854775807ULL); 
    BOOST_CHECK(ParseUInt64("9223372036854775808", &n) && n == 9223372036854775808ULL);  │      BOOST_CHECK(ParseUInt64("9223372036854775808", &n) && n == 9223372036854775808ULL); 
    BOOST_CHECK(ParseUInt64("18446744073709551615", &n) && n == 18446744073709551615ULL) │      BOOST_CHECK(ParseUInt64("18446744073709551615", &n) && n == 18446744073709551615ULL)
    // Invalid values                                                                    │      // Invalid values                                                                   
    BOOST_CHECK(!ParseUInt64("", &n));                                                   │      BOOST_CHECK(!ParseUInt64("", &n));                                                  
    BOOST_CHECK(!ParseUInt64(" 1", &n)); // no padding inside                            │      BOOST_CHECK(!ParseUInt64(" 1", &n)); // no padding inside                           
    BOOST_CHECK(!ParseUInt64(" -1", &n));                                                │      BOOST_CHECK(!ParseUInt64(" -1", &n));                                               
    BOOST_CHECK(!ParseUInt64("1 ", &n));                                                 │      BOOST_CHECK(!ParseUInt64("1 ", &n));                                                
    BOOST_CHECK(!ParseUInt64("1a", &n));                                                 │      BOOST_CHECK(!ParseUInt64("1a", &n));                                                
    BOOST_CHECK(!ParseUInt64("aap", &n));                                                │      BOOST_CHECK(!ParseUInt64("aap", &n));                                               
    BOOST_CHECK(!ParseUInt64("0x1", &n)); // no hex                                      │      BOOST_CHECK(!ParseUInt64("0x1", &n)); // no hex                                     
    BOOST_CHECK(!ParseUInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n));                       │      const char test_bytes[] = {'1', 0, '1'};                                            
                                                                                         │      std::string teststr(test_bytes, sizeof(test_bytes));                                
                                                                                         │      BOOST_CHECK(!ParseUInt64(teststr, &n)); // no embedded NULs                         
    // Overflow and underflow                                                            │      // Overflow and underflow                                                           
    BOOST_CHECK(!ParseUInt64("-9223372036854775809", nullptr));                          │      BOOST_CHECK(!ParseUInt64("-9223372036854775809", NULL));                            
    BOOST_CHECK(!ParseUInt64("18446744073709551616", nullptr));                          │      BOOST_CHECK(!ParseUInt64("18446744073709551616", NULL));                            
    BOOST_CHECK(!ParseUInt64("-32482348723847471234", nullptr));                         │      BOOST_CHECK(!ParseUInt64("-32482348723847471234", NULL));                           
    BOOST_CHECK(!ParseUInt64("-2147483648", &n));                                        │      BOOST_CHECK(!ParseUInt64("-2147483648", &n));                                       
    BOOST_CHECK(!ParseUInt64("-9223372036854775808", &n));                               │      BOOST_CHECK(!ParseUInt64("-9223372036854775808", &n));                              
    BOOST_CHECK(!ParseUInt64("-1234", &n));                                              │      BOOST_CHECK(!ParseUInt64("-1234", &n));                                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/networkstyle.cpp:30                                                      │ dogecoin/src/qt/networkstyle.cpp:28                                                      
                                                                                         │                                                                                          
    // load pixmap                                                                       │      // load pixmap                                                                      
    QPixmap pixmap(":/icons/bitcoin");                                                   │      QPixmap pixmap(":/icons/bitcoin");                                                  
                                                                                         │                                                                                          
    if(iconColorHueShift != 0 && iconColorSaturationReduction != 0)                      │      if(iconColorHueShift != 0 && iconColorSaturationReduction != 0)                     
    {                                                                                    │      {                                                                                   
        // generate QImage from QPixmap                                                  │          // generate QImage from QPixmap                                                 
        QImage img = pixmap.toImage();                                                   │          QImage img = pixmap.toImage();                                                  
                                                                                         │                                                                                          
        int h,s,l,a;                                                                     │          int h,s,l,a;                                                                    
                                                                                         │                                                                                          
        // traverse though lines                                                         │          // traverse though lines                                                        
        for(int y=0;y<img.height();y++)                                                  │          for(int y=0;y<img.height();y++)                                                 
        {                                                                                │          {                                                                               
            QRgb *scL = reinterpret_cast< QRgb *>( img.scanLine( y ) );                  │              QRgb *scL = reinterpret_cast< QRgb *>( img.scanLine( y ) );                 
                                                                                         │                                                                                          
            // loop through pixels                                                       │              // loop through pixels                                                      
            for(int x=0;x<img.width();x++)                                               │              for(int x=0;x<img.width();x++)                                              
            {                                                                            │              {                                                                           
                // preserve alpha because QColor::getHsl doesn't return the alpha value  │                  // preserve alpha because QColor::getHsl doesen't return the alpha value
                a = qAlpha(scL[x]);                                                      │                  a = qAlpha(scL[x]);                                                     
                QColor col(scL[x]);                                                      │                  QColor col(scL[x]);                                                     
                                                                                         │                                                                                          
                // get hue value                                                         │                  // get hue value                                                        
                col.getHsl(&h,&s,&l);                                                    │                  col.getHsl(&h,&s,&l);                                                   
                                                                                         │                                                                                          
                // rotate color on RGB color circle                                      │                  // rotate color on RGB color circle                                     
                // 70° should end up with the typical "testnet" green                    │                  // 70° should end up with the typical "testnet" green                   
                h+=iconColorHueShift;                                                    │                  h+=iconColorHueShift;                                                   
                                                                                         │                                                                                          
                // change saturation value                                               │                  // change saturation value                                              
                if(s>iconColorSaturationReduction)                                       │                  if(s>iconColorSaturationReduction)                                      
                {                                                                        │                  {                                                                       
                    s -= iconColorSaturationReduction;                                   │                      s -= iconColorSaturationReduction;                                  
                }                                                                        │                  }                                                                       
                col.setHsl(h,s,l,a);                                                     │                  col.setHsl(h,s,l,a);                                                    
                                                                                         │                                                                                          
                // set the pixel                                                         │                  // set the pixel                                                        
                scL[x] = col.rgba();                                                     │                  scL[x] = col.rgba();                                                    
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        //convert back to QPixmap                                                        │          //convert back to QPixmap                                                       
                                                                                         │  #if QT_VERSION >= 0x040700                                                              
        pixmap.convertFromImage(img);                                                    │          pixmap.convertFromImage(img);                                                   
                                                                                         │  #else                                                                                   
                                                                                         │          pixmap = QPixmap::fromImage(img);                                               
                                                                                         │  #endif                                                                                  
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    appIcon             = QIcon(pixmap);                                                 │      appIcon             = QIcon(pixmap);                                                
    trayAndWindowIcon   = QIcon(pixmap.scaled(QSize(256,256)));                          │      trayAndWindowIcon   = QIcon(pixmap.scaled(QSize(256,256)));                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/editaddressdialog.cpp:97                                                 │ dogecoin/src/qt/editaddressdialog.cpp:94                                                 
                                                                                         │                                                                                          
    if(!model)                                                                           │      if(!model)                                                                          
        return;                                                                          │          return;                                                                         
                                                                                         │                                                                                          
    if(!saveCurrentRow())                                                                │      if(!saveCurrentRow())                                                               
    {                                                                                    │      {                                                                                   
        switch(model->getEditStatus())                                                   │          switch(model->getEditStatus())                                                  
        {                                                                                │          {                                                                               
        case AddressTableModel::OK:                                                      │          case AddressTableModel::OK:                                                     
            // Failed with unknown reason. Just reject.                                  │              // Failed with unknown reason. Just reject.                                 
            break;                                                                       │              break;                                                                      
        case AddressTableModel::NO_CHANGES:                                              │          case AddressTableModel::NO_CHANGES:                                             
            // No changes were made during edit operation. Just reject.                  │              // No changes were made during edit operation. Just reject.                 
            break;                                                                       │              break;                                                                      
        case AddressTableModel::INVALID_ADDRESS:                                         │          case AddressTableModel::INVALID_ADDRESS:                                        
            QMessageBox::warning(this, windowTitle(),                                    │              QMessageBox::warning(this, windowTitle(),                                   
                tr("The entered address \"%1\" is not a valid Bitcoin address.").arg(ui- │                  tr("The entered address \"%1\" is not a valid Dogecoin address.").arg(ui
                QMessageBox::Ok, QMessageBox::Ok);                                       │                  QMessageBox::Ok, QMessageBox::Ok);                                      
            break;                                                                       │              break;                                                                      
        case AddressTableModel::DUPLICATE_ADDRESS:                                       │          case AddressTableModel::DUPLICATE_ADDRESS:                                      
            QMessageBox::warning(this, windowTitle(),                                    │              QMessageBox::warning(this, windowTitle(),                                   
                getDuplicateAddressWarning(),                                            │                  tr("The entered address \"%1\" is already in the address book.").arg(ui-
                QMessageBox::Ok, QMessageBox::Ok);                                       │                  QMessageBox::Ok, QMessageBox::Ok);                                      
            break;                                                                       │              break;                                                                      
        case AddressTableModel::WALLET_UNLOCK_FAILURE:                                   │          case AddressTableModel::WALLET_UNLOCK_FAILURE:                                  
            QMessageBox::critical(this, windowTitle(),                                   │              QMessageBox::critical(this, windowTitle(),                                  
                tr("Could not unlock wallet."),                                          │                  tr("Could not unlock wallet."),                                         
                QMessageBox::Ok, QMessageBox::Ok);                                       │                  QMessageBox::Ok, QMessageBox::Ok);                                      
            break;                                                                       │              break;                                                                      
        case AddressTableModel::KEY_GENERATION_FAILURE:                                  │          case AddressTableModel::KEY_GENERATION_FAILURE:                                 
            QMessageBox::critical(this, windowTitle(),                                   │              QMessageBox::critical(this, windowTitle(),                                  
                tr("New key generation failed."),                                        │                  tr("New key generation failed."),                                       
                QMessageBox::Ok, QMessageBox::Ok);                                       │                  QMessageBox::Ok, QMessageBox::Ok);                                      
            break;                                                                       │              break;                                                                      
                                                                                         │                                                                                          
        }                                                                                │          }                                                                               
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
    QDialog::accept();                                                                   │      QDialog::accept();                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/validation.cpp:4358                                                         │ dogecoin/src/validation.cpp:4096                                                         
                                                                                         │                                                                                          
                    uint256 head = queue.front();                                        │                      uint256 head = queue.front();                                       
                    queue.pop_front();                                                   │                      queue.pop_front();                                                  
                    std::pair<std::multimap<uint256, FlatFilePos>::iterator, std::multim │                      std::pair<std::multimap<uint256, CDiskBlockPos>::iterator, std::mult
                    while (range.first != range.second) {                                │                      while (range.first != range.second) {                               
                        std::multimap<uint256, FlatFilePos>::iterator it = range.first;  │                          std::multimap<uint256, CDiskBlockPos>::iterator it = range.first
                        std::shared_ptr<CBlock> pblockrecursive = std::make_shared<CBloc │                          std::shared_ptr<CBlock> pblockrecursive = std::make_shared<CBloc
                        if (ReadBlockFromDisk(*pblockrecursive, it->second, m_params.Get │                          // TODO: Need a valid consensus height                          
                            LogPrint(BCLog::REINDEX, "%s: Processing out of order child  │                          if (ReadBlockFromDisk(*pblockrecursive, it->second, chainparams.
                                                                                         │                          {                                                               
                                                                                         │                              LogPrint("reindex", "%s: Processing out of order child %s of
                                    head.ToString());                                    │                                      head.ToString());                                   
                            LOCK(cs_main);                                               │                              LOCK(cs_main);                                              
                            BlockValidationState dummy;                                  │                              CValidationState dummy;                                     
                            if (AcceptBlock(pblockrecursive, dummy, nullptr, true, &it-> │                              if (AcceptBlock(pblockrecursive, dummy, chainparams, NULL, t
                                                                                         │                              {                                                           
                                nLoaded++;                                               │                                  nLoaded++;                                              
                                queue.push_back(pblockrecursive->GetHash());             │                                  queue.push_back(pblockrecursive->GetHash());            
                            }                                                            │                              }                                                           
                        }                                                                │                          }                                                               
                        range.first++;                                                   │                          range.first++;                                                  
                        mapBlocksUnknownParent.erase(it);                                │                          mapBlocksUnknownParent.erase(it);                               
                        NotifyHeaderTip(*this);                                          │                          NotifyHeaderTip();                                              
                    }                                                                    │                      }                                                                   
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/checkqueue_tests.cpp:343                                              │ bitcoin/src/test/checkqueue_tests.cpp:344                                                
                                                                                         │                                                                                          
    auto queue = std::unique_ptr<FrozenCleanup_Queue>(new FrozenCleanup_Queue {QUEUE_BAT │      auto queue = std::make_unique<FrozenCleanup_Queue>(QUEUE_BATCH_SIZE);               
    boost::thread_group tg;                                                              │                                                                                          
    bool fails = false;                                                                  │      bool fails = false;                                                                 
    for (auto x = 0; x < nScriptCheckThreads; ++x) {                                     │      queue->StartWorkerThreads(SCRIPT_CHECK_THREADS);                                    
        tg.create_thread([&]{queue->Thread();});                                         │                                                                                          
    }                                                                                    │                                                                                          
    std::thread t0([&]() {                                                               │      std::thread t0([&]() {                                                              
        CCheckQueueControl<FrozenCleanupCheck> control(queue.get());                     │          CCheckQueueControl<FrozenCleanupCheck> control(queue.get());                    
        std::vector<FrozenCleanupCheck> vChecks(1);                                      │          std::vector<FrozenCleanupCheck> vChecks(1);                                     
        // Freezing can't be the default initialized behavior given how the queue        │          // Freezing can't be the default initialized behavior given how the queue       
        // swaps in default initialized Checks (otherwise freezing destructor            │          // swaps in default initialized Checks (otherwise freezing destructor           
        // would get called twice).                                                      │          // would get called twice).                                                     
        vChecks[0].should_freeze = true;                                                 │          vChecks[0].should_freeze = true;                                                
        control.Add(vChecks);                                                            │          control.Add(vChecks);                                                           
        control.Wait(); // Hangs here                                                    │          bool waitResult = control.Wait(); // Hangs here                                 
                                                                                         │          assert(waitResult);                                                             
    });                                                                                  │      });                                                                                 
    {                                                                                    │      {                                                                                   
        std::unique_lock<std::mutex> l(FrozenCleanupCheck::m);                           │          std::unique_lock<std::mutex> l(FrozenCleanupCheck::m);                          
        // Wait until the queue has finished all jobs and frozen                         │          // Wait until the queue has finished all jobs and frozen                        
        FrozenCleanupCheck::cv.wait(l, [](){return FrozenCleanupCheck::nFrozen == 1;});  │          FrozenCleanupCheck::cv.wait(l, [](){return FrozenCleanupCheck::nFrozen == 1;}); 
        // Try to get control of the queue a bunch of times                              │      }                                                                                   
        for (auto x = 0; x < 100 && !fails; ++x) {                                       │      // Try to get control of the queue a bunch of times                                 
            fails = queue->ControlMutex.try_lock();                                      │      for (auto x = 0; x < 100 && !fails; ++x) {                                          
        }                                                                                │          fails = queue->m_control_mutex.try_lock();                                      
        // Unfreeze                                                                      │      }                                                                                   
                                                                                         │      {                                                                                   
                                                                                         │          // Unfreeze (we need lock n case of spurious wakeup)                            
                                                                                         │          std::unique_lock<std::mutex> l(FrozenCleanupCheck::m);                          
        FrozenCleanupCheck::nFrozen = 0;                                                 │          FrozenCleanupCheck::nFrozen = 0;                                                
    }                                                                                    │      }                                                                                   
    // Awaken frozen destructor                                                          │      // Awaken frozen destructor                                                         
    FrozenCleanupCheck::cv.notify_one();                                                 │      FrozenCleanupCheck::cv.notify_one();                                                
    // Wait for control to finish                                                        │      // Wait for control to finish                                                       
    t0.join();                                                                           │      t0.join();                                                                          
    tg.interrupt_all();                                                                  │                                                                                          
    tg.join_all();                                                                       │                                                                                          
    BOOST_REQUIRE(!fails);                                                               │      BOOST_REQUIRE(!fails);                                                              
                                                                                         │      queue->StopWorkerThreads();                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/hash_tests.cpp:61                                                     │ bitcoin/src/test/hash_tests.cpp:61                                                       
                                                                                         │                                                                                          
    0x726fdb47dd0e0e31, 0x74f839c593dc67fd, 0x0d6c8009d9a94f5a, 0x85676696d7fb7e2d,      │      0x726fdb47dd0e0e31, 0x74f839c593dc67fd, 0x0d6c8009d9a94f5a, 0x85676696d7fb7e2d,     
    0xcf2794e0277187b7, 0x18765564cd99a68d, 0xcbc9466e58fee3ce, 0xab0200f58b01d137,      │      0xcf2794e0277187b7, 0x18765564cd99a68d, 0xcbc9466e58fee3ce, 0xab0200f58b01d137,     
    0x93f5f5799a932462, 0x9e0082df0ba9e4b0, 0x7a5dbbc594ddb9f3, 0xf4b32f46226bada7,      │      0x93f5f5799a932462, 0x9e0082df0ba9e4b0, 0x7a5dbbc594ddb9f3, 0xf4b32f46226bada7,     
    0x751e8fbc860ee5fb, 0x14ea5627c0843d90, 0xf723ca908e7af2ee, 0xa129ca6149be45e5,      │      0x751e8fbc860ee5fb, 0x14ea5627c0843d90, 0xf723ca908e7af2ee, 0xa129ca6149be45e5,     
    0x3f2acc7f57c29bdb, 0x699ae9f52cbe4794, 0x4bc1b3f0968dd39c, 0xbb6dc91da77961bd,      │      0x3f2acc7f57c29bdb, 0x699ae9f52cbe4794, 0x4bc1b3f0968dd39c, 0xbb6dc91da77961bd,     
    0xbed65cf21aa2ee98, 0xd0f2cbb02e3b67c7, 0x93536795e3a33e88, 0xa80c038ccd5ccec8,      │      0xbed65cf21aa2ee98, 0xd0f2cbb02e3b67c7, 0x93536795e3a33e88, 0xa80c038ccd5ccec8,     
    0xb8ad50c6f649af94, 0xbce192de8a85b8ea, 0x17d835b85bbb15f3, 0x2f2e6163076bcfad,      │      0xb8ad50c6f649af94, 0xbce192de8a85b8ea, 0x17d835b85bbb15f3, 0x2f2e6163076bcfad,     
    0xde4daaaca71dc9a5, 0xa6a2506687956571, 0xad87a3535c49ef28, 0x32d892fad841c342,      │      0xde4daaaca71dc9a5, 0xa6a2506687956571, 0xad87a3535c49ef28, 0x32d892fad841c342,     
    0x7127512f72f27cce, 0xa7f32346f95978e3, 0x12e0b01abb051238, 0x15e034d40fa197ae,      │      0x7127512f72f27cce, 0xa7f32346f95978e3, 0x12e0b01abb051238, 0x15e034d40fa197ae,     
    0x314dffbe0815a3b4, 0x027990f029623981, 0xcadcd4e59ef40c4d, 0x9abfd8766a33735c,      │      0x314dffbe0815a3b4, 0x027990f029623981, 0xcadcd4e59ef40c4d, 0x9abfd8766a33735c,     
    0x0e3ea96b5304a7d0, 0xad0c42d6fc585992, 0x187306c89bc215a9, 0xd4a60abcf3792b95,      │      0x0e3ea96b5304a7d0, 0xad0c42d6fc585992, 0x187306c89bc215a9, 0xd4a60abcf3792b95,     
    0xf935451de4f21df2, 0xa9538f0419755787, 0xdb9acddff56ca510, 0xd06c98cd5c0975eb,      │      0xf935451de4f21df2, 0xa9538f0419755787, 0xdb9acddff56ca510, 0xd06c98cd5c0975eb,     
    0xe612a3cb9ecba951, 0xc766e62cfcadaf96, 0xee64435a9752fe72, 0xa192d576b245165a,      │      0xe612a3cb9ecba951, 0xc766e62cfcadaf96, 0xee64435a9752fe72, 0xa192d576b245165a,     
    0x0a8787bf8ecb74b2, 0x81b3e73d20b49b6f, 0x7fa8220ba3b2ecea, 0x245731c13ca42499,      │      0x0a8787bf8ecb74b2, 0x81b3e73d20b49b6f, 0x7fa8220ba3b2ecea, 0x245731c13ca42499,     
    0xb78dbfaf3a8d83bd, 0xea1ad565322a1a0b, 0x60e61c23a3795013, 0x6606d7e446282b93,      │      0xb78dbfaf3a8d83bd, 0xea1ad565322a1a0b, 0x60e61c23a3795013, 0x6606d7e446282b93,     
    0x6ca4ecb15c5f91e1, 0x9f626da15c9625f3, 0xe51b38608ef25f57, 0x958a324ceb064572       │      0x6ca4ecb15c5f91e1, 0x9f626da15c9625f3, 0xe51b38608ef25f57, 0x958a324ceb064572      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/utilstrencodings.cpp:513                                                   │ bitcoin/src/util/strencodings.cpp:275                                                    
                                                                                         │                                                                                          
                                                                                         │      assert(width >= indent);                                                            
    std::stringstream out;                                                               │      std::stringstream out;                                                              
    size_t ptr = 0;                                                                      │      size_t ptr = 0;                                                                     
    size_t indented = 0;                                                                 │      size_t indented = 0;                                                                
    while (ptr < in.size())                                                              │      while (ptr < in.size())                                                             
    {                                                                                    │      {                                                                                   
        size_t lineend = in.find_first_of('\n', ptr);                                    │          size_t lineend = in.find_first_of('\n', ptr);                                   
        if (lineend == std::string::npos) {                                              │          if (lineend == std::string::npos) {                                             
            lineend = in.size();                                                         │              lineend = in.size();                                                        
        }                                                                                │          }                                                                               
        const size_t linelen = lineend - ptr;                                            │          const size_t linelen = lineend - ptr;                                           
        const size_t rem_width = width - indented;                                       │          const size_t rem_width = width - indented;                                      
        if (linelen <= rem_width) {                                                      │          if (linelen <= rem_width) {                                                     
            out << in.substr(ptr, linelen + 1);                                          │              out << in.substr(ptr, linelen + 1);                                         
            ptr = lineend + 1;                                                           │              ptr = lineend + 1;                                                          
            indented = 0;                                                                │              indented = 0;                                                               
        } else {                                                                         │          } else {                                                                        
            size_t finalspace = in.find_last_of(" \n", ptr + rem_width);                 │              size_t finalspace = in.find_last_of(" \n", ptr + rem_width);                
            if (finalspace == std::string::npos || finalspace < ptr) {                   │              if (finalspace == std::string::npos || finalspace < ptr) {                  
                // No place to break; just include the entire word and move on           │                  // No place to break; just include the entire word and move on          
                finalspace = in.find_first_of("\n ", ptr);                               │                  finalspace = in.find_first_of("\n ", ptr);                              
                if (finalspace == std::string::npos) {                                   │                  if (finalspace == std::string::npos) {                                  
                    // End of the string, just add it and break                          │                      // End of the string, just add it and break                         
                    out << in.substr(ptr);                                               │                      out << in.substr(ptr);                                              
                    break;                                                               │                      break;                                                              
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            out << in.substr(ptr, finalspace - ptr) << "\n";                             │              out << in.substr(ptr, finalspace - ptr) << "\n";                            
            if (in[finalspace] == '\n') {                                                │              if (in[finalspace] == '\n') {                                               
                indented = 0;                                                            │                  indented = 0;                                                           
            } else if (indent) {                                                         │              } else if (indent) {                                                        
                out << std::string(indent, ' ');                                         │                  out << std::string(indent, ' ');                                        
                indented = indent;                                                       │                  indented = indent;                                                      
            }                                                                            │              }                                                                           
            ptr = finalspace + 1;                                                        │              ptr = finalspace + 1;                                                       
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return out.str();                                                                    │      return out.str();                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/bitcoinconsensus.cpp:13                                              │ dogecoin/src/script/bitcoinconsensus.cpp:13                                              
                                                                                         │                                                                                          
                                                                                         │                                                                                          
/** A class that deserializes a single CTransaction one time. */                         │  /** A class that deserializes a single CTransaction one time. */                        
class TxInputStream                                                                      │  class TxInputStream                                                                     
{                                                                                        │  {                                                                                       
public:                                                                                  │  public:                                                                                 
    TxInputStream(int nTypeIn, int nVersionIn, const unsigned char *txTo, size_t txToLen │      TxInputStream(int nTypeIn, int nVersionIn, const unsigned char *txTo, size_t txToLen
    m_type(nTypeIn),                                                                     │      m_type(nTypeIn),                                                                    
    m_version(nVersionIn),                                                               │      m_version(nVersionIn),                                                              
    m_data(txTo),                                                                        │      m_data(txTo),                                                                       
    m_remaining(txToLen)                                                                 │      m_remaining(txToLen)                                                                
    {}                                                                                   │      {}                                                                                  
                                                                                         │                                                                                          
    void read(char* pch, size_t nSize)                                                   │      void read(char* pch, size_t nSize)                                                  
    {                                                                                    │      {                                                                                   
        if (nSize > m_remaining)                                                         │          if (nSize > m_remaining)                                                        
            throw std::ios_base::failure(std::string(__func__) + ": end of data");       │              throw std::ios_base::failure(std::string(__func__) + ": end of data");      
                                                                                         │                                                                                          
        if (pch == NULL)                                                                 │          if (pch == NULL)                                                                
            throw std::ios_base::failure(std::string(__func__) + ": bad destination buff │              throw std::ios_base::failure(std::string(__func__) + ": bad destination buff
                                                                                         │                                                                                          
        if (m_data == NULL)                                                              │          if (m_data == NULL)                                                             
            throw std::ios_base::failure(std::string(__func__) + ": bad source buffer"); │              throw std::ios_base::failure(std::string(__func__) + ": bad source buffer");
                                                                                         │                                                                                          
        memcpy(pch, m_data, nSize);                                                      │          memcpy(pch, m_data, nSize);                                                     
        m_remaining -= nSize;                                                            │          m_remaining -= nSize;                                                           
        m_data += nSize;                                                                 │          m_data += nSize;                                                                
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    template<typename T>                                                                 │      template<typename T>                                                                
    TxInputStream& operator>>(T& obj)                                                    │      TxInputStream& operator>>(T& obj)                                                   
    {                                                                                    │      {                                                                                   
        ::Unserialize(*this, obj);                                                       │          ::Unserialize(*this, obj);                                                      
        return *this;                                                                    │          return *this;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    int GetVersion() const { return m_version; }                                         │      int GetVersion() const { return m_version; }                                        
    int GetType() const { return m_type; }                                               │      int GetType() const { return m_type; }                                              
private:                                                                                 │  private:                                                                                
    const int m_type;                                                                    │      const int m_type;                                                                   
    const int m_version;                                                                 │      const int m_version;                                                                
    const unsigned char* m_data;                                                         │      const unsigned char* m_data;                                                        
    size_t m_remaining;                                                                  │      size_t m_remaining;                                                                 
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
inline int set_error(bitcoinconsensus_error* ret, bitcoinconsensus_error serror)         │  inline int set_error(bitcoinconsensus_error* ret, bitcoinconsensus_error serror)        
{                                                                                        │  {                                                                                       
    if (ret)                                                                             │      if (ret)                                                                            
        *ret = serror;                                                                   │          *ret = serror;                                                                  
    return 0;                                                                            │      return 0;                                                                           
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
struct ECCryptoClosure                                                                   │  struct ECCryptoClosure                                                                  
{                                                                                        │  {                                                                                       
    ECCVerifyHandle handle;                                                              │      ECCVerifyHandle handle;                                                             
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
ECCryptoClosure instance_of_eccryptoclosure;                                             │  ECCryptoClosure instance_of_eccryptoclosure;                                            
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:1275                                                │ bitcoin/src/script/interpreter.cpp:1702                                                  
                                                                                         │                                                                                          
    // There are two kinds of nLockTime: lock-by-blockheight                             │      // There are two kinds of nLockTime: lock-by-blockheight                            
    // and lock-by-blocktime, distinguished by whether                                   │      // and lock-by-blocktime, distinguished by whether                                  
    // nLockTime < LOCKTIME_THRESHOLD.                                                   │      // nLockTime < LOCKTIME_THRESHOLD.                                                  
    //                                                                                   │      //                                                                                  
    // We want to compare apples to apples, so fail the script                           │      // We want to compare apples to apples, so fail the script                          
    // unless the type of nLockTime being tested is the same as                          │      // unless the type of nLockTime being tested is the same as                         
    // the nLockTime in the transaction.                                                 │      // the nLockTime in the transaction.                                                
    if (!(                                                                               │      if (!(                                                                              
        (txTo->nLockTime <  LOCKTIME_THRESHOLD && nLockTime <  LOCKTIME_THRESHOLD) ||    │          (txTo->nLockTime <  LOCKTIME_THRESHOLD && nLockTime <  LOCKTIME_THRESHOLD) ||   
        (txTo->nLockTime >= LOCKTIME_THRESHOLD && nLockTime >= LOCKTIME_THRESHOLD)       │          (txTo->nLockTime >= LOCKTIME_THRESHOLD && nLockTime >= LOCKTIME_THRESHOLD)      
    ))                                                                                   │      ))                                                                                  
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    // Now that we know we're comparing apples-to-apples, the                            │      // Now that we know we're comparing apples-to-apples, the                           
    // comparison is a simple numeric one.                                               │      // comparison is a simple numeric one.                                              
    if (nLockTime > (int64_t)txTo->nLockTime)                                            │      if (nLockTime > (int64_t)txTo->nLockTime)                                           
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    // Finally the nLockTime feature can be disabled and thus                            │      // Finally the nLockTime feature can be disabled in IsFinalTx()                     
    // CHECKLOCKTIMEVERIFY bypassed if every txin has been                               │      // and thus CHECKLOCKTIMEVERIFY bypassed if every txin has                          
    // finalized by setting nSequence to maxint. The                                     │      // been finalized by setting nSequence to maxint. The                               
    // transaction would be allowed into the blockchain, making                          │      // transaction would be allowed into the blockchain, making                         
    // the opcode ineffective.                                                           │      // the opcode ineffective.                                                          
    //                                                                                   │      //                                                                                  
    // Testing if this vin is not final is sufficient to                                 │      // Testing if this vin is not final is sufficient to                                
    // prevent this condition. Alternatively we could test all                           │      // prevent this condition. Alternatively we could test all                          
    // inputs, but testing just this input minimizes the data                            │      // inputs, but testing just this input minimizes the data                           
    // required to prove correct CHECKLOCKTIMEVERIFY execution.                          │      // required to prove correct CHECKLOCKTIMEVERIFY execution.                         
    if (CTxIn::SEQUENCE_FINAL == txTo->vin[nIn].nSequence)                               │      if (CTxIn::SEQUENCE_FINAL == txTo->vin[nIn].nSequence)                              
        return false;                                                                    │          return false;                                                                   
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/util.cpp:687                                                               │ bitcoin/src/util/system.cpp:1189                                                         
                                                                                         │                                                                                          
#if defined(WIN32)                                                                       │  #if defined(WIN32)                                                                      
    // Windows-specific version                                                          │      // Windows-specific version                                                         
    HANDLE hFile = (HANDLE)_get_osfhandle(_fileno(file));                                │      HANDLE hFile = (HANDLE)_get_osfhandle(_fileno(file));                               
    LARGE_INTEGER nFileSize;                                                             │      LARGE_INTEGER nFileSize;                                                            
    int64_t nEndPos = (int64_t)offset + length;                                          │      int64_t nEndPos = (int64_t)offset + length;                                         
    nFileSize.u.LowPart = nEndPos & 0xFFFFFFFF;                                          │      nFileSize.u.LowPart = nEndPos & 0xFFFFFFFF;                                         
    nFileSize.u.HighPart = nEndPos >> 32;                                                │      nFileSize.u.HighPart = nEndPos >> 32;                                               
    SetFilePointerEx(hFile, nFileSize, 0, FILE_BEGIN);                                   │      SetFilePointerEx(hFile, nFileSize, 0, FILE_BEGIN);                                  
    SetEndOfFile(hFile);                                                                 │      SetEndOfFile(hFile);                                                                
#elif defined(MAC_OSX)                                                                   │  #elif defined(MAC_OSX)                                                                  
    // OSX specific version                                                              │      // OSX specific version                                                             
                                                                                         │      // NOTE: Contrary to other OS versions, the OSX version assumes that                
                                                                                         │      // NOTE: offset is the size of the file.                                            
    fstore_t fst;                                                                        │      fstore_t fst;                                                                       
    fst.fst_flags = F_ALLOCATECONTIG;                                                    │      fst.fst_flags = F_ALLOCATECONTIG;                                                   
    fst.fst_posmode = F_PEOFPOSMODE;                                                     │      fst.fst_posmode = F_PEOFPOSMODE;                                                    
    fst.fst_offset = 0;                                                                  │      fst.fst_offset = 0;                                                                 
    fst.fst_length = (off_t)offset + length;                                             │      fst.fst_length = length; // mac os fst_length takes the # of free bytes to allocate,
    fst.fst_bytesalloc = 0;                                                              │      fst.fst_bytesalloc = 0;                                                             
    if (fcntl(fileno(file), F_PREALLOCATE, &fst) == -1) {                                │      if (fcntl(fileno(file), F_PREALLOCATE, &fst) == -1) {                               
        fst.fst_flags = F_ALLOCATEALL;                                                   │          fst.fst_flags = F_ALLOCATEALL;                                                  
        fcntl(fileno(file), F_PREALLOCATE, &fst);                                        │          fcntl(fileno(file), F_PREALLOCATE, &fst);                                       
    }                                                                                    │      }                                                                                   
    ftruncate(fileno(file), fst.fst_length);                                             │      ftruncate(fileno(file), static_cast<off_t>(offset) + length);                       
#elif defined(__linux__)                                                                 │  #else                                                                                   
                                                                                         │      #if defined(HAVE_POSIX_FALLOCATE)                                                   
    // Version using posix_fallocate                                                     │      // Version using posix_fallocate                                                    
    off_t nEndPos = (off_t)offset + length;                                              │      off_t nEndPos = (off_t)offset + length;                                             
    posix_fallocate(fileno(file), 0, nEndPos);                                           │      if (0 == posix_fallocate(fileno(file), 0, nEndPos)) return;                         
#else                                                                                    │      #endif                                                                              
    // Fallback version                                                                  │      // Fallback version                                                                 
    // TODO: just write one byte per block                                               │      // TODO: just write one byte per block                                              
    static const char buf[65536] = {};                                                   │      static const char buf[65536] = {};                                                  
    fseek(file, offset, SEEK_SET);                                                       │      if (fseek(file, offset, SEEK_SET)) {                                                
                                                                                         │          return;                                                                         
                                                                                         │      }                                                                                   
    while (length > 0) {                                                                 │      while (length > 0) {                                                                
        unsigned int now = 65536;                                                        │          unsigned int now = 65536;                                                       
        if (length < now)                                                                │          if (length < now)                                                               
            now = length;                                                                │              now = length;                                                               
        fwrite(buf, 1, now, file); // allowed to fail; this function is advisory anyway  │          fwrite(buf, 1, now, file); // allowed to fail; this function is advisory anyway 
        length -= now;                                                                   │          length -= now;                                                                  
    }                                                                                    │      }                                                                                   
#endif                                                                                   │  #endif                                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/sighash_tests.cpp:121                                                  │ dogecoin/src/test/sighash_tests.cpp:124                                                  
                                                                                         │                                                                                          
                                                                                         │      seed_insecure_rand(false);                                                          
                                                                                         │                                                                                          
    #if defined(PRINT_SIGHASH_JSON)                                                      │      #if defined(PRINT_SIGHASH_JSON)                                                     
    std::cout << "[\n";                                                                  │      std::cout << "[\n";                                                                 
    std::cout << "\t[\"raw_transaction, script, input_index, hashType, signature_hash (r │      std::cout << "\t[\"raw_transaction, script, input_index, hashType, signature_hash (r
    int nRandomTests = 500;                                                              │      #endif                                                                              
    #else                                                                                │                                                                                          
    int nRandomTests = 50000;                                                            │      int nRandomTests = 50000;                                                           
                                                                                         │                                                                                          
                                                                                         │      #if defined(PRINT_SIGHASH_JSON)                                                     
                                                                                         │      nRandomTests = 500;                                                                 
    #endif                                                                               │      #endif                                                                              
    for (int i=0; i<nRandomTests; i++) {                                                 │      for (int i=0; i<nRandomTests; i++) {                                                
        int nHashType{int(InsecureRand32())};                                            │          int nHashType = insecure_rand();                                                
        CMutableTransaction txTo;                                                        │          CMutableTransaction txTo;                                                       
        RandomTransaction(txTo, (nHashType & 0x1f) == SIGHASH_SINGLE);                   │          RandomTransaction(txTo, (nHashType & 0x1f) == SIGHASH_SINGLE);                  
        CScript scriptCode;                                                              │          CScript scriptCode;                                                             
        RandomScript(scriptCode);                                                        │          RandomScript(scriptCode);                                                       
        int nIn = InsecureRandRange(txTo.vin.size());                                    │          int nIn = insecure_rand() % txTo.vin.size();                                    
                                                                                         │                                                                                          
        uint256 sh, sho;                                                                 │          uint256 sh, sho;                                                                
        sho = SignatureHashOld(scriptCode, CTransaction(txTo), nIn, nHashType);          │          sho = SignatureHashOld(scriptCode, txTo, nIn, nHashType);                       
        sh = SignatureHash(scriptCode, txTo, nIn, nHashType, 0, SigVersion::BASE);       │          sh = SignatureHash(scriptCode, txTo, nIn, nHashType, 0, SIGVERSION_BASE);       
        #if defined(PRINT_SIGHASH_JSON)                                                  │          #if defined(PRINT_SIGHASH_JSON)                                                 
        CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);                                   │          CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);                                  
        ss << txTo;                                                                      │          ss << txTo;                                                                     
                                                                                         │                                                                                          
        std::cout << "\t[\"" ;                                                           │          std::cout << "\t[\"" ;                                                          
        std::cout << HexStr(ss) << "\", \"";                                             │          std::cout << HexStr(ss.begin(), ss.end()) << "\", \"";                          
        std::cout << HexStr(scriptCode) << "\", ";                                       │          std::cout << HexStr(scriptCode) << "\", ";                                      
        std::cout << nIn << ", ";                                                        │          std::cout << nIn << ", ";                                                       
        std::cout << nHashType << ", \"";                                                │          std::cout << nHashType << ", \"";                                               
        std::cout << sho.GetHex() << "\"]";                                              │          std::cout << sho.GetHex() << "\"]";                                             
        if (i+1 != nRandomTests) {                                                       │          if (i+1 != nRandomTests) {                                                      
          std::cout << ",";                                                              │            std::cout << ",";                                                             
        }                                                                                │          }                                                                               
        std::cout << "\n";                                                               │          std::cout << "\n";                                                              
        #endif                                                                           │          #endif                                                                          
        BOOST_CHECK(sh == sho);                                                          │          BOOST_CHECK(sh == sho);                                                         
    }                                                                                    │      }                                                                                   
    #if defined(PRINT_SIGHASH_JSON)                                                      │      #if defined(PRINT_SIGHASH_JSON)                                                     
    std::cout << "]\n";                                                                  │      std::cout << "]\n";                                                                 
    #endif                                                                               │      #endif                                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/notificator.cpp:173                                                     │ bitcoin/src/qt/notificator.cpp:145                                                       
                                                                                         │                                                                                          
    Q_UNUSED(cls);                                                                       │      // https://developer.gnome.org/notification-spec/                                   
    // Arguments for DBus call:                                                          │      // Arguments for DBus "Notify" call:                                                
    QList<QVariant> args;                                                                │      QList<QVariant> args;                                                               
                                                                                         │                                                                                          
    // Program Name:                                                                     │      // Program Name:                                                                    
    args.append(programName);                                                            │      args.append(programName);                                                           
                                                                                         │                                                                                          
    // Unique ID of this notification type:                                              │      // Replaces ID; A value of 0 means that this notification won't replace any existing
    args.append(0U);                                                                     │      args.append(0U);                                                                    
                                                                                         │                                                                                          
    // Application Icon, empty string                                                    │      // Application Icon, empty string                                                   
    args.append(QString());                                                              │      args.append(QString());                                                             
                                                                                         │                                                                                          
    // Summary                                                                           │      // Summary                                                                          
    args.append(title);                                                                  │      args.append(title);                                                                 
                                                                                         │                                                                                          
    // Body                                                                              │      // Body                                                                             
    args.append(text);                                                                   │      args.append(text);                                                                  
                                                                                         │                                                                                          
    // Actions (none, actions are deprecated)                                            │      // Actions (none, actions are deprecated)                                           
    QStringList actions;                                                                 │      QStringList actions;                                                                
    args.append(actions);                                                                │      args.append(actions);                                                               
                                                                                         │                                                                                          
    // Hints                                                                             │      // Hints                                                                            
    QVariantMap hints;                                                                   │      QVariantMap hints;                                                                  
                                                                                         │                                                                                          
    // If no icon specified, set icon based on class                                     │      // If no icon specified, set icon based on class                                    
    QIcon tmpicon;                                                                       │      QIcon tmpicon;                                                                      
    if(icon.isNull())                                                                    │      if(icon.isNull())                                                                   
    {                                                                                    │      {                                                                                   
        QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion;                    │          QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion;                   
        switch(cls)                                                                      │          switch(cls)                                                                     
        {                                                                                │          {                                                                               
        case Information: sicon = QStyle::SP_MessageBoxInformation; break;               │          case Information: sicon = QStyle::SP_MessageBoxInformation; break;              
        case Warning: sicon = QStyle::SP_MessageBoxWarning; break;                       │          case Warning: sicon = QStyle::SP_MessageBoxWarning; break;                      
        case Critical: sicon = QStyle::SP_MessageBoxCritical; break;                     │          case Critical: sicon = QStyle::SP_MessageBoxCritical; break;                    
        default: break;                                                                  │          default: break;                                                                 
        }                                                                                │          }                                                                               
        tmpicon = QApplication::style()->standardIcon(sicon);                            │          tmpicon = QApplication::style()->standardIcon(sicon);                           
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        tmpicon = icon;                                                                  │          tmpicon = icon;                                                                 
    }                                                                                    │      }                                                                                   
    hints["icon_data"] = FreedesktopImage::toVariant(tmpicon.pixmap(FREEDESKTOP_NOTIFICA │      hints["icon_data"] = FreedesktopImage::toVariant(tmpicon.pixmap(FREEDESKTOP_NOTIFICA
    args.append(hints);                                                                  │      args.append(hints);                                                                 
                                                                                         │                                                                                          
    // Timeout (in msec)                                                                 │      // Timeout (in msec)                                                                
    args.append(millisTimeout);                                                          │      args.append(millisTimeout);                                                         
                                                                                         │                                                                                          
    // "Fire and forget"                                                                 │      // "Fire and forget"                                                                
    interface->callWithArgumentList(QDBus::NoBlock, "Notify", args);                     │      interface->callWithArgumentList(QDBus::NoBlock, "Notify", args);                    
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/signverifymessagedialog.cpp:26                                           │ dogecoin/src/qt/signverifymessagedialog.cpp:28                                           
                                                                                         │                                                                                          
    ui->setupUi(this);                                                                   │      ui->setupUi(this);                                                                  
                                                                                         │                                                                                          
    ui->addressBookButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/address-bo │      ui->addressBookButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/address-bo
    ui->pasteButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/editpaste"));    │      ui->pasteButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/editpaste"));   
    ui->copySignatureButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/editcopy │      ui->copySignatureButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/editcopy
    ui->signMessageButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/edit"));   │      ui->signMessageButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/edit"));  
    ui->clearButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/remove"));       │      ui->clearButton_SM->setIcon(platformStyle->SingleColorIcon(":/icons/remove"));      
    ui->addressBookButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/address-bo │      ui->addressBookButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/address-bo
    ui->verifyMessageButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/transact │      ui->verifyMessageButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/transact
    ui->clearButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/remove"));       │      ui->clearButton_VM->setIcon(platformStyle->SingleColorIcon(":/icons/remove"));      
                                                                                         │                                                                                          
                                                                                         │  #if QT_VERSION >= 0x040700                                                              
                                                                                         │      ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signa
                                                                                         │  #endif                                                                                  
                                                                                         │                                                                                          
    GUIUtil::setupAddressWidget(ui->addressIn_SM, this);                                 │      GUIUtil::setupAddressWidget(ui->addressIn_SM, this);                                
    GUIUtil::setupAddressWidget(ui->addressIn_VM, this);                                 │      GUIUtil::setupAddressWidget(ui->addressIn_VM, this);                                
                                                                                         │                                                                                          
    ui->addressIn_SM->installEventFilter(this);                                          │      ui->addressIn_SM->installEventFilter(this);                                         
    ui->messageIn_SM->installEventFilter(this);                                          │      ui->messageIn_SM->installEventFilter(this);                                         
    ui->signatureOut_SM->installEventFilter(this);                                       │      ui->signatureOut_SM->installEventFilter(this);                                      
    ui->addressIn_VM->installEventFilter(this);                                          │      ui->addressIn_VM->installEventFilter(this);                                         
    ui->messageIn_VM->installEventFilter(this);                                          │      ui->messageIn_VM->installEventFilter(this);                                         
    ui->signatureIn_VM->installEventFilter(this);                                        │      ui->signatureIn_VM->installEventFilter(this);                                       
                                                                                         │                                                                                          
    ui->signatureOut_SM->setFont(GUIUtil::fixedPitchFont());                             │      ui->signatureOut_SM->setFont(GUIUtil::fixedPitchFont());                            
    ui->signatureIn_VM->setFont(GUIUtil::fixedPitchFont());                              │      ui->signatureIn_VM->setFont(GUIUtil::fixedPitchFont());                             
                                                                                         │                                                                                          
    GUIUtil::handleCloseWindowShortcut(this);                                            │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rest.cpp:434                                                                │ bitcoin/src/rest.cpp:237                                                                 
                                                                                         │                                                                                          
    case RESTResponseFormat::BINARY: {                                                   │      case RESTResponseFormat::BINARY: {                                                  
        CDataStream ssHeader{SER_NETWORK, PROTOCOL_VERSION};                             │          CDataStream ssHeader(SER_NETWORK, PROTOCOL_VERSION);                            
        for (const uint256& header : filter_headers) {                                   │          for (const CBlockIndex *pindex : headers) {                                     
            ssHeader << header;                                                          │              ssHeader << pindex->GetBlockHeader();                                       
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        std::string binaryHeader = ssHeader.str();                                       │          std::string binaryHeader = ssHeader.str();                                      
        req->WriteHeader("Content-Type", "application/octet-stream");                    │          req->WriteHeader("Content-Type", "application/octet-stream");                   
        req->WriteReply(HTTP_OK, binaryHeader);                                          │          req->WriteReply(HTTP_OK, binaryHeader);                                         
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::HEX: {                                                      │      case RESTResponseFormat::HEX: {                                                     
        CDataStream ssHeader{SER_NETWORK, PROTOCOL_VERSION};                             │          CDataStream ssHeader(SER_NETWORK, PROTOCOL_VERSION);                            
        for (const uint256& header : filter_headers) {                                   │          for (const CBlockIndex *pindex : headers) {                                     
            ssHeader << header;                                                          │              ssHeader << pindex->GetBlockHeader();                                       
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        std::string strHex = HexStr(ssHeader) + "\n";                                    │          std::string strHex = HexStr(ssHeader) + "\n";                                   
        req->WriteHeader("Content-Type", "text/plain");                                  │          req->WriteHeader("Content-Type", "text/plain");                                 
        req->WriteReply(HTTP_OK, strHex);                                                │          req->WriteReply(HTTP_OK, strHex);                                               
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
    case RESTResponseFormat::JSON: {                                                     │      case RESTResponseFormat::JSON: {                                                    
        UniValue jsonHeaders(UniValue::VARR);                                            │          UniValue jsonHeaders(UniValue::VARR);                                           
        for (const uint256& header : filter_headers) {                                   │          for (const CBlockIndex *pindex : headers) {                                     
            jsonHeaders.push_back(header.GetHex());                                      │              jsonHeaders.push_back(blockheaderToJSON(tip, pindex));                      
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        std::string strJSON = jsonHeaders.write() + "\n";                                │          std::string strJSON = jsonHeaders.write() + "\n";                               
        req->WriteHeader("Content-Type", "application/json");                            │          req->WriteHeader("Content-Type", "application/json");                           
        req->WriteReply(HTTP_OK, strJSON);                                               │          req->WriteReply(HTTP_OK, strJSON);                                              
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
    default: {                                                                           │      default: {                                                                          
        return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava │          return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava
    }                                                                                    │      }                                                                                   
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:54                                                     │ bitcoin/src/test/bloom_tests.cpp:27                                                      
                                                                                         │                                                                                          
    // Same test as bloom_create_insert_serialize, but we add a nTweak of 100            │      CBloomFilter filter(3, 0.01, 0, BLOOM_UPDATE_ALL);                                  
    CBloomFilter filter(3, 0.01, 2147483649UL, BLOOM_UPDATE_ALL);                        │                                                                                          
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_MESSAGE( !filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f09
    filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                 │      filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                
    BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
    // One bit different in first byte                                                   │      // One bit different in first byte                                                  
    BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │                                                                                          
    filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                 │      filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e
                                                                                         │                                                                                          
    filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                 │      filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729 │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729
                                                                                         │                                                                                          
    CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                   │      CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                  
    stream << filter;                                                                    │      stream << filter;                                                                   
                                                                                         │                                                                                          
    std::vector<uint8_t> expected = ParseHex("03ce4299050000000100008001");              │      std::vector<uint8_t> expected = ParseHex("03614e9b050000000000000001");             
    auto result{MakeUCharSpan(stream)};                                                  │      auto result{MakeUCharSpan(stream)};                                                 
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect │      BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/bloom_tests.cpp:54                                                     │ dogecoin/src/test/bloom_tests.cpp:58                                                     
                                                                                         │                                                                                          
    // Same test as bloom_create_insert_serialize, but we add a nTweak of 100            │      // Same test as bloom_create_insert_serialize, but we add a nTweak of 100           
    CBloomFilter filter(3, 0.01, 2147483649UL, BLOOM_UPDATE_ALL);                        │      CBloomFilter filter(3, 0.01, 2147483649UL, BLOOM_UPDATE_ALL);                       
                                                                                         │                                                                                          
    filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                 │      filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8"));                
    BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f095
    // One bit different in first byte                                                   │      // One bit different in first byte                                                  
    BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095 │      BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f095
                                                                                         │                                                                                          
    filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                 │      filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32e
                                                                                         │                                                                                          
    filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                 │      filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5"));                
    BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729 │      BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729
                                                                                         │                                                                                          
    CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                   │      CDataStream stream(SER_NETWORK, PROTOCOL_VERSION);                                  
    stream << filter;                                                                    │      stream << filter;                                                                   
                                                                                         │                                                                                          
    std::vector<uint8_t> expected = ParseHex("03ce4299050000000100008001");              │      std::vector<unsigned char> vch = ParseHex("03ce4299050000000100008001");            
    auto result{MakeUCharSpan(stream)};                                                  │      std::vector<char> expected(vch.size());                                             
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect │      for (unsigned int i = 0; i < vch.size(); i++)                                       
                                                                                         │          expected[i] = (char)vch[i];                                                     
                                                                                         │                                                                                          
                                                                                         │      BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expect
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/crypto/muhash.cpp:182                                                       │ bitcoin/src/crypto/muhash.cpp:219                                                        
                                                                                         │                                                                                          
    limb_t c0 = 0, c1 = 0, c2 = 0;                                                       │      limb_t c0 = 0, c1 = 0, c2 = 0;                                                      
    Num3072 tmp;                                                                         │      Num3072 tmp;                                                                        
                                                                                         │                                                                                          
    /* Compute limbs 0..N-2 of this*a into tmp, including one reduction. */              │      /* Compute limbs 0..N-2 of this*this into tmp, including one reduction. */          
    for (int j = 0; j < LIMBS - 1; ++j) {                                                │      for (int j = 0; j < LIMBS - 1; ++j) {                                               
        limb_t d0 = 0, d1 = 0, d2 = 0;                                                   │          limb_t d0 = 0, d1 = 0, d2 = 0;                                                  
        mul(d0, d1, this->limbs[1 + j], a.limbs[LIMBS + j - (1 + j)]);                   │          for (int i = 0; i < (LIMBS - 1 - j) / 2; ++i) muldbladd3(d0, d1, d2, this->limbs
        for (int i = 2 + j; i < LIMBS; ++i) muladd3(d0, d1, d2, this->limbs[i], a.limbs[ │          if ((j + 1) & 1) muladd3(d0, d1, d2, this->limbs[(LIMBS - 1 - j) / 2 + j + 1], t
        mulnadd3(c0, c1, c2, d0, d1, d2, MAX_PRIME_DIFF);                                │          mulnadd3(c0, c1, c2, d0, d1, d2, MAX_PRIME_DIFF);                               
        for (int i = 0; i < j + 1; ++i) muladd3(c0, c1, c2, this->limbs[i], a.limbs[j -  │          for (int i = 0; i < (j + 1) / 2; ++i) muldbladd3(c0, c1, c2, this->limbs[i], thi
                                                                                         │          if ((j + 1) & 1) muladd3(c0, c1, c2, this->limbs[(j + 1) / 2], this->limbs[j - (
        extract3(c0, c1, c2, tmp.limbs[j]);                                              │          extract3(c0, c1, c2, tmp.limbs[j]);                                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /* Compute limb N-1 of a*b into tmp. */                                              │                                                                                          
    assert(c2 == 0);                                                                     │      assert(c2 == 0);                                                                    
    for (int i = 0; i < LIMBS; ++i) muladd3(c0, c1, c2, this->limbs[i], a.limbs[LIMBS -  │      for (int i = 0; i < LIMBS / 2; ++i) muldbladd3(c0, c1, c2, this->limbs[i], this->lim
    extract3(c0, c1, c2, tmp.limbs[LIMBS - 1]);                                          │      extract3(c0, c1, c2, tmp.limbs[LIMBS - 1]);                                         
                                                                                         │                                                                                          
    /* Perform a second reduction. */                                                    │      /* Perform a second reduction. */                                                   
    muln2(c0, c1, MAX_PRIME_DIFF);                                                       │      muln2(c0, c1, MAX_PRIME_DIFF);                                                      
    for (int j = 0; j < LIMBS; ++j) {                                                    │      for (int j = 0; j < LIMBS; ++j) {                                                   
        addnextract2(c0, c1, tmp.limbs[j], this->limbs[j]);                              │          addnextract2(c0, c1, tmp.limbs[j], this->limbs[j]);                             
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    assert(c1 == 0);                                                                     │      assert(c1 == 0);                                                                    
    assert(c0 == 0 || c0 == 1);                                                          │      assert(c0 == 0 || c0 == 1);                                                         
                                                                                         │                                                                                          
    /* Perform up to two more reductions if the internal state has already               │      /* Perform up to two more reductions if the internal state has already              
     * overflown the MAX of Num3072 or if it is larger than the modulus or               │       * overflown the MAX of Num3072 or if it is larger than the modulus or              
     * if both are the case.                                                             │       * if both are the case.                                                            
     * */                                                                                │       * */                                                                               
    if (this->IsOverflow()) this->FullReduce();                                          │      if (this->IsOverflow()) this->FullReduce();                                         
    if (c0) this->FullReduce();                                                          │      if (c0) this->FullReduce();                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/arith_uint256_tests.cpp:378                                           │ bitcoin/src/test/arith_uint256_tests.cpp:372                                             
                                                                                         │                                                                                          
    BOOST_CHECK(R1L.GetHex() == R1L.ToString());                                         │      BOOST_CHECK(R1L.GetHex() == R1L.ToString());                                        
    BOOST_CHECK(R2L.GetHex() == R2L.ToString());                                         │      BOOST_CHECK(R2L.GetHex() == R2L.ToString());                                        
    BOOST_CHECK(OneL.GetHex() == OneL.ToString());                                       │      BOOST_CHECK(OneL.GetHex() == OneL.ToString());                                      
    BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());                                       │      BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());                                      
    arith_uint256 TmpL(R1L);                                                             │      arith_uint256 TmpL(R1L);                                                            
    BOOST_CHECK(TmpL == R1L);                                                            │      BOOST_CHECK(TmpL == R1L);                                                           
    TmpL.SetHex(R2L.ToString());   BOOST_CHECK(TmpL == R2L);                             │      TmpL.SetHex(R2L.ToString());   BOOST_CHECK(TmpL == R2L);                            
    TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == 0);                               │      TmpL.SetHex(ZeroL.ToString()); BOOST_CHECK(TmpL == 0);                              
    TmpL.SetHex(HalfL.ToString()); BOOST_CHECK(TmpL == HalfL);                           │      TmpL.SetHex(HalfL.ToString()); BOOST_CHECK(TmpL == HalfL);                          
                                                                                         │                                                                                          
    TmpL.SetHex(R1L.ToString());                                                         │      TmpL.SetHex(R1L.ToString());                                                        
    BOOST_CHECK(R1L.size() == 32);                                                       │      BOOST_CHECK(R1L.size() == 32);                                                      
    BOOST_CHECK(R2L.size() == 32);                                                       │      BOOST_CHECK(R2L.size() == 32);                                                      
    BOOST_CHECK(ZeroL.size() == 32);                                                     │      BOOST_CHECK(ZeroL.size() == 32);                                                    
    BOOST_CHECK(MaxL.size() == 32);                                                      │      BOOST_CHECK(MaxL.size() == 32);                                                     
    BOOST_CHECK(R1L.GetLow64()  == R1LLow64);                                            │      BOOST_CHECK(R1L.GetLow64()  == R1LLow64);                                           
    BOOST_CHECK(HalfL.GetLow64() ==0x0000000000000000ULL);                               │      BOOST_CHECK(HalfL.GetLow64() ==0x0000000000000000ULL);                              
    BOOST_CHECK(OneL.GetLow64() ==0x0000000000000001ULL);                                │      BOOST_CHECK(OneL.GetLow64() ==0x0000000000000001ULL);                               
                                                                                         │                                                                                          
    for (unsigned int i = 0; i < 255; ++i)                                               │      for (unsigned int i = 0; i < 255; ++i)                                              
    {                                                                                    │      {                                                                                   
        BOOST_CHECK((OneL << i).getdouble() == ldexp(1.0,i));                            │          BOOST_CHECK((OneL << i).getdouble() == ldexp(1.0,i));                           
    }                                                                                    │      }                                                                                   
    BOOST_CHECK(ZeroL.getdouble() == 0.0);                                               │      BOOST_CHECK(ZeroL.getdouble() == 0.0);                                              
    for (int i = 256; i > 53; --i)                                                       │      for (int i = 256; i > 53; --i)                                                      
        BOOST_CHECK(almostEqual((R1L>>(256-i)).getdouble(), ldexp(R1Ldouble,i)));        │          BOOST_CHECK(almostEqual((R1L>>(256-i)).getdouble(), ldexp(R1Ldouble,i)));       
    uint64_t R1L64part = (R1L>>192).GetLow64();                                          │      uint64_t R1L64part = (R1L>>192).GetLow64();                                         
    for (int i = 53; i > 0; --i) // doubles can store all integers in {0,...,2^54-1} exa │      for (int i = 53; i > 0; --i) // doubles can store all integers in {0,...,2^54-1} exa
    {                                                                                    │      {                                                                                   
        BOOST_CHECK((R1L>>(256-i)).getdouble() == (double)(R1L64part >> (64-i)));        │          BOOST_CHECK((R1L>>(256-i)).getdouble() == (double)(R1L64part >> (64-i)));       
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/sigopcount_tests.cpp:29                                               │ bitcoin/src/test/sigopcount_tests.cpp:29                                                 
                                                                                         │                                                                                          
    // Test CScript::GetSigOpCount()                                                     │      // Test CScript::GetSigOpCount()                                                    
    CScript s1;                                                                          │      CScript s1;                                                                         
    BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U);                                      │      BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U);                                     
    BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U);                                       │      BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U);                                      
                                                                                         │                                                                                          
    uint160 dummy;                                                                       │      uint160 dummy;                                                                      
    s1 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << OP_2 << OP_CHECKMULTISIG │      s1 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << OP_2 << OP_CHECKMULTISIG
    BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U);                                       │      BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U);                                      
    s1 << OP_IF << OP_CHECKSIG << OP_ENDIF;                                              │      s1 << OP_IF << OP_CHECKSIG << OP_ENDIF;                                             
    BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U);                                       │      BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U);                                      
    BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U);                                     │      BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U);                                    
                                                                                         │                                                                                          
    CScript p2sh = GetScriptForDestination(ScriptHash(s1));                              │      CScript p2sh = GetScriptForDestination(ScriptHash(s1));                             
    CScript scriptSig;                                                                   │      CScript scriptSig;                                                                  
    scriptSig << OP_0 << Serialize(s1);                                                  │      scriptSig << OP_0 << Serialize(s1);                                                 
    BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U);                                │      BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U);                               
                                                                                         │                                                                                          
    std::vector<CPubKey> keys;                                                           │      std::vector<CPubKey> keys;                                                          
    for (int i = 0; i < 3; i++)                                                          │      for (int i = 0; i < 3; i++)                                                         
    {                                                                                    │      {                                                                                   
        CKey k;                                                                          │          CKey k;                                                                         
        k.MakeNewKey(true);                                                              │          k.MakeNewKey(true);                                                             
        keys.push_back(k.GetPubKey());                                                   │          keys.push_back(k.GetPubKey());                                                  
    }                                                                                    │      }                                                                                   
    CScript s2 = GetScriptForMultisig(1, keys);                                          │      CScript s2 = GetScriptForMultisig(1, keys);                                         
    BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U);                                       │      BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U);                                      
    BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U);                                     │      BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U);                                    
                                                                                         │                                                                                          
    p2sh = GetScriptForDestination(ScriptHash(s2));                                      │      p2sh = GetScriptForDestination(ScriptHash(s2));                                     
    BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U);                                     │      BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U);                                    
    BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U);                                    │      BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U);                                   
    CScript scriptSig2;                                                                  │      CScript scriptSig2;                                                                 
    scriptSig2 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << Serialize(s2);   │      scriptSig2 << OP_1 << ToByteVector(dummy) << ToByteVector(dummy) << Serialize(s2);  
    BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U);                               │      BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U);                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/util_tests.cpp:1793                                                    │ dogecoin/src/test/util_tests.cpp:345                                                     
                                                                                         │                                                                                          
    int64_t n;                                                                           │      int64_t n;                                                                          
    // Valid values                                                                      │      // Valid values                                                                     
    BOOST_CHECK(ParseInt64("1234", nullptr));                                            │      BOOST_CHECK(ParseInt64("1234", NULL));                                              
    BOOST_CHECK(ParseInt64("0", &n) && n == 0LL);                                        │      BOOST_CHECK(ParseInt64("0", &n) && n == 0LL);                                       
    BOOST_CHECK(ParseInt64("1234", &n) && n == 1234LL);                                  │      BOOST_CHECK(ParseInt64("1234", &n) && n == 1234LL);                                 
    BOOST_CHECK(ParseInt64("01234", &n) && n == 1234LL); // no octal                     │      BOOST_CHECK(ParseInt64("01234", &n) && n == 1234LL); // no octal                    
    BOOST_CHECK(ParseInt64("2147483647", &n) && n == 2147483647LL);                      │      BOOST_CHECK(ParseInt64("2147483647", &n) && n == 2147483647LL);                     
    BOOST_CHECK(ParseInt64("-2147483648", &n) && n == -2147483648LL);                    │      BOOST_CHECK(ParseInt64("-2147483648", &n) && n == -2147483648LL);                   
    BOOST_CHECK(ParseInt64("9223372036854775807", &n) && n == (int64_t)92233720368547758 │      BOOST_CHECK(ParseInt64("9223372036854775807", &n) && n == (int64_t)92233720368547758
    BOOST_CHECK(ParseInt64("-9223372036854775808", &n) && n == (int64_t)-922337203685477 │      BOOST_CHECK(ParseInt64("-9223372036854775808", &n) && n == (int64_t)-922337203685477
    BOOST_CHECK(ParseInt64("-1234", &n) && n == -1234LL);                                │      BOOST_CHECK(ParseInt64("-1234", &n) && n == -1234LL);                               
    // Invalid values                                                                    │      // Invalid values                                                                   
    BOOST_CHECK(!ParseInt64("", &n));                                                    │      BOOST_CHECK(!ParseInt64("", &n));                                                   
    BOOST_CHECK(!ParseInt64(" 1", &n)); // no padding inside                             │      BOOST_CHECK(!ParseInt64(" 1", &n)); // no padding inside                            
    BOOST_CHECK(!ParseInt64("1 ", &n));                                                  │      BOOST_CHECK(!ParseInt64("1 ", &n));                                                 
    BOOST_CHECK(!ParseInt64("1a", &n));                                                  │      BOOST_CHECK(!ParseInt64("1a", &n));                                                 
    BOOST_CHECK(!ParseInt64("aap", &n));                                                 │      BOOST_CHECK(!ParseInt64("aap", &n));                                                
    BOOST_CHECK(!ParseInt64("0x1", &n)); // no hex                                       │      BOOST_CHECK(!ParseInt64("0x1", &n)); // no hex                                      
    BOOST_CHECK(!ParseInt64(STRING_WITH_EMBEDDED_NULL_CHAR, &n));                        │      const char test_bytes[] = {'1', 0, '1'};                                            
                                                                                         │      std::string teststr(test_bytes, sizeof(test_bytes));                                
                                                                                         │      BOOST_CHECK(!ParseInt64(teststr, &n)); // no embedded NULs                          
    // Overflow and underflow                                                            │      // Overflow and underflow                                                           
    BOOST_CHECK(!ParseInt64("-9223372036854775809", nullptr));                           │      BOOST_CHECK(!ParseInt64("-9223372036854775809", NULL));                             
    BOOST_CHECK(!ParseInt64("9223372036854775808", nullptr));                            │      BOOST_CHECK(!ParseInt64("9223372036854775808", NULL));                              
    BOOST_CHECK(!ParseInt64("-32482348723847471234", nullptr));                          │      BOOST_CHECK(!ParseInt64("-32482348723847471234", NULL));                            
    BOOST_CHECK(!ParseInt64("32482348723847471234", nullptr));                           │      BOOST_CHECK(!ParseInt64("32482348723847471234", NULL));                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/bitcoinamountfield.cpp:121                                               │ dogecoin/src/qt/bitcoinamountfield.cpp:95                                                
                                                                                         │                                                                                          
        if(cachedMinimumSizeHint.isEmpty())                                              │          if(cachedMinimumSizeHint.isEmpty())                                             
        {                                                                                │          {                                                                               
            ensurePolished();                                                            │              ensurePolished();                                                           
                                                                                         │                                                                                          
            const QFontMetrics fm(fontMetrics());                                        │              const QFontMetrics fm(fontMetrics());                                       
            int h = lineEdit()->minimumSizeHint().height();                              │              int h = lineEdit()->minimumSizeHint().height();                             
            int w = GUIUtil::TextWidth(fm, BitcoinUnits::format(BitcoinUnit::BTC, Bitcoi │              int w = fm.width(BitcoinUnits::format(BitcoinUnits::BTC, BitcoinUnits::maxMo
            w += 2; // cursor blinking space                                             │              w += 2; // cursor blinking space                                            
                                                                                         │                                                                                          
            QStyleOptionSpinBox opt;                                                     │              QStyleOptionSpinBox opt;                                                    
            initStyleOption(&opt);                                                       │              initStyleOption(&opt);                                                      
            QSize hint(w, h);                                                            │              QSize hint(w, h);                                                           
            QSize extra(35, 6);                                                          │              QSize extra(35, 6);                                                         
            opt.rect.setSize(hint + extra);                                              │              opt.rect.setSize(hint + extra);                                             
            extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,            │              extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,           
                                                    QStyle::SC_SpinBoxEditField, this).s │                                                      QStyle::SC_SpinBoxEditField, this).s
            // get closer to final result by repeating the calculation                   │              // get closer to final result by repeating the calculation                  
            opt.rect.setSize(hint + extra);                                              │              opt.rect.setSize(hint + extra);                                             
            extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,            │              extra += hint - style()->subControlRect(QStyle::CC_SpinBox, &opt,           
                                                    QStyle::SC_SpinBoxEditField, this).s │                                                      QStyle::SC_SpinBoxEditField, this).s
            hint += extra;                                                               │              hint += extra;                                                              
            hint.setHeight(h);                                                           │              hint.setHeight(h);                                                          
                                                                                         │                                                                                          
            opt.rect = rect();                                                           │              opt.rect = rect();                                                          
                                                                                         │                                                                                          
            cachedMinimumSizeHint = style()->sizeFromContents(QStyle::CT_SpinBox, &opt,  │              cachedMinimumSizeHint = style()->sizeFromContents(QStyle::CT_SpinBox, &opt, 
                                                                                         │                                      .expandedTo(QApplication::globalStrut());           
        }                                                                                │          }                                                                               
        return cachedMinimumSizeHint;                                                    │          return cachedMinimumSizeHint;                                                   
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/merkleblock.cpp:149                                                         │ dogecoin/src/merkleblock.cpp:150                                                         
                                                                                         │                                                                                          
    vMatch.clear();                                                                      │      vMatch.clear();                                                                     
    // An empty set will not work                                                        │      // An empty set will not work                                                       
    if (nTransactions == 0)                                                              │      if (nTransactions == 0)                                                             
        return uint256();                                                                │          return uint256();                                                               
    // check for excessively high numbers of transactions                                │      // check for excessively high numbers of transactions                               
    if (nTransactions > MAX_BLOCK_WEIGHT / MIN_TRANSACTION_WEIGHT)                       │      if (nTransactions > MAX_BLOCK_BASE_SIZE / 60) // 60 is the lower bound for the size 
        return uint256();                                                                │          return uint256();                                                               
    // there can never be more hashes provided than one for every txid                   │      // there can never be more hashes provided than one for every txid                  
    if (vHash.size() > nTransactions)                                                    │      if (vHash.size() > nTransactions)                                                   
        return uint256();                                                                │          return uint256();                                                               
    // there must be at least one bit per node in the partial tree, and at least one nod │      // there must be at least one bit per node in the partial tree, and at least one nod
    if (vBits.size() < vHash.size())                                                     │      if (vBits.size() < vHash.size())                                                    
        return uint256();                                                                │          return uint256();                                                               
    // calculate height of tree                                                          │      // calculate height of tree                                                         
    int nHeight = 0;                                                                     │      int nHeight = 0;                                                                    
    while (CalcTreeWidth(nHeight) > 1)                                                   │      while (CalcTreeWidth(nHeight) > 1)                                                  
        nHeight++;                                                                       │          nHeight++;                                                                      
    // traverse the partial tree                                                         │      // traverse the partial tree                                                        
    unsigned int nBitsUsed = 0, nHashUsed = 0;                                           │      unsigned int nBitsUsed = 0, nHashUsed = 0;                                          
    uint256 hashMerkleRoot = TraverseAndExtract(nHeight, 0, nBitsUsed, nHashUsed, vMatch │      uint256 hashMerkleRoot = TraverseAndExtract(nHeight, 0, nBitsUsed, nHashUsed, vMatch
    // verify that no problems occurred during the tree traversal                        │      // verify that no problems occurred during the tree traversal                       
    if (fBad)                                                                            │      if (fBad)                                                                           
        return uint256();                                                                │          return uint256();                                                               
    // verify that all bits were consumed (except for the padding caused by serializing  │      // verify that all bits were consumed (except for the padding caused by serializing 
    if ((nBitsUsed+7)/8 != (vBits.size()+7)/8)                                           │      if ((nBitsUsed+7)/8 != (vBits.size()+7)/8)                                          
        return uint256();                                                                │          return uint256();                                                               
    // verify that all hashes were consumed                                              │      // verify that all hashes were consumed                                             
    if (nHashUsed != vHash.size())                                                       │      if (nHashUsed != vHash.size())                                                      
        return uint256();                                                                │          return uint256();                                                               
    return hashMerkleRoot;                                                               │      return hashMerkleRoot;                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/test/ismine_tests.cpp:285                                            │ bitcoin/src/wallet/test/ismine_tests.cpp:311                                             
                                                                                         │                                                                                          
        CWallet keystore(chain.get(), "", m_args, CreateDummyWalletDatabase());          │          CWallet keystore(chain.get(), "", m_args, CreateDummyWalletDatabase());         
        keystore.SetupLegacyScriptPubKeyMan();                                           │          keystore.SetupLegacyScriptPubKeyMan();                                          
        LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);                          │          LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);                         
        BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));               │          BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));      
        BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));               │          BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));              
                                                                                         │                                                                                          
        CScript witnessScript = GetScriptForMultisig(2, {pubkeys[0], pubkeys[1]});       │          CScript witnessScript = GetScriptForMultisig(2, {uncompressedPubkey, pubkeys[1]}
        scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));      │          scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));     
                                                                                         │                                                                                          
        // Keystore has keys, but no witnessScript or P2SH redeemScript                  │          // Keystore has keys, but no witnessScript or P2SH redeemScript                 
        result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);              │          result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);             
        BOOST_CHECK_EQUAL(result, ISMINE_NO);                                            │          BOOST_CHECK_EQUAL(result, ISMINE_NO);                                           
                                                                                         │                                                                                          
        // Keystore has keys and witnessScript, but no P2SH redeemScript                 │          // Keystore has keys and witnessScript, but no P2SH redeemScript                
        BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));     │          BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));    
        result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);              │          result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);             
        BOOST_CHECK_EQUAL(result, ISMINE_NO);                                            │          BOOST_CHECK_EQUAL(result, ISMINE_NO);                                           
                                                                                         │                                                                                          
        // Keystore has keys, witnessScript, P2SH redeemScript                           │          // Keystore has keys, witnessScript, P2SH redeemScript                          
        BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));      │          BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));     
        result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);              │          result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);             
        BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);                                     │          BOOST_CHECK_EQUAL(result, ISMINE_NO);                                           
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/addrdb.cpp:122                                                             │ dogecoin/src/addrdb.cpp:25                                                               
                                                                                         │                                                                                          
    // Generate random temporary filename                                                │      // Generate random temporary filename                                               
    unsigned short randv = 0;                                                            │      unsigned short randv = 0;                                                           
    GetRandBytes((unsigned char*)&randv, sizeof(randv));                                 │      GetRandBytes((unsigned char*)&randv, sizeof(randv));                                
    std::string tmpfn = strprintf("peers.dat.%04x", randv);                              │      std::string tmpfn = strprintf("banlist.dat.%04x", randv);                           
                                                                                         │                                                                                          
    // serialize addresses, checksum data up to that point, then append csum             │      // serialize banlist, checksum data up to that point, then append csum              
    CDataStream ssPeers(SER_DISK, CLIENT_VERSION);                                       │      CDataStream ssBanlist(SER_DISK, CLIENT_VERSION);                                    
    ssPeers << FLATDATA(Params().MessageStart());                                        │      ssBanlist << FLATDATA(Params().MessageStart());                                     
    ssPeers << addr;                                                                     │      ssBanlist << banSet;                                                                
    uint256 hash = Hash(ssPeers.begin(), ssPeers.end());                                 │      uint256 hash = Hash(ssBanlist.begin(), ssBanlist.end());                            
    ssPeers << hash;                                                                     │      ssBanlist << hash;                                                                  
                                                                                         │                                                                                          
    // open temp output file, and associate with CAutoFile                               │      // open temp output file, and associate with CAutoFile                              
    boost::filesystem::path pathTmp = GetDataDir() / tmpfn;                              │      boost::filesystem::path pathTmp = GetDataDir() / tmpfn;                             
    FILE *file = fopen(pathTmp.string().c_str(), "wb");                                  │      FILE *file = fopen(pathTmp.string().c_str(), "wb");                                 
    CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);                                   │      CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);                                  
    if (fileout.IsNull())                                                                │      if (fileout.IsNull())                                                               
        return error("%s: Failed to open file %s", __func__, pathTmp.string());          │          return error("%s: Failed to open file %s", __func__, pathTmp.string());         
                                                                                         │                                                                                          
    // Write and commit header, data                                                     │      // Write and commit header, data                                                    
    try {                                                                                │      try {                                                                               
        fileout << ssPeers;                                                              │          fileout << ssBanlist;                                                           
    }                                                                                    │      }                                                                                   
    catch (const std::exception& e) {                                                    │      catch (const std::exception& e) {                                                   
        return error("%s: Serialize or I/O error - %s", __func__, e.what());             │          return error("%s: Serialize or I/O error - %s", __func__, e.what());            
    }                                                                                    │      }                                                                                   
    FileCommit(fileout.Get());                                                           │      FileCommit(fileout.Get());                                                          
    fileout.fclose();                                                                    │      fileout.fclose();                                                                   
                                                                                         │                                                                                          
    // replace existing peers.dat, if any, with new peers.dat.XXXX                       │      // replace existing banlist.dat, if any, with new banlist.dat.XXXX                  
    if (!RenameOver(pathTmp, pathAddr))                                                  │      if (!RenameOver(pathTmp, pathBanlist))                                              
        return error("%s: Rename-into-place failed", __func__);                          │          return error("%s: Rename-into-place failed", __func__);                         
                                                                                         │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/netbase.cpp:397                                                             │ dogecoin/src/netbase.cpp:315                                                             
                                                                                         │                                                                                          
        // Perform username/password authentication (as described in RFC1929)            │          // Perform username/password authentication (as described in RFC1929)           
        std::vector<uint8_t> vAuth;                                                      │          std::vector<uint8_t> vAuth;                                                     
        vAuth.push_back(0x01); // Current (and only) version of user/pass subnegotiation │          vAuth.push_back(0x01);                                                          
        if (auth->username.size() > 255 || auth->password.size() > 255)                  │          if (auth->username.size() > 255 || auth->password.size() > 255)                 
            return error("Proxy username or password too long");                         │              return error("Proxy username or password too long");                        
        vAuth.push_back(auth->username.size());                                          │          vAuth.push_back(auth->username.size());                                         
        vAuth.insert(vAuth.end(), auth->username.begin(), auth->username.end());         │          vAuth.insert(vAuth.end(), auth->username.begin(), auth->username.end());        
        vAuth.push_back(auth->password.size());                                          │          vAuth.push_back(auth->password.size());                                         
        vAuth.insert(vAuth.end(), auth->password.begin(), auth->password.end());         │          vAuth.insert(vAuth.end(), auth->password.begin(), auth->password.end());        
        ret = sock.Send(vAuth.data(), vAuth.size(), MSG_NOSIGNAL);                       │          ret = send(hSocket, (const char*)vAuth.data(), vAuth.size(), MSG_NOSIGNAL);     
        if (ret != (ssize_t)vAuth.size()) {                                              │          if (ret != (ssize_t)vAuth.size()) {                                             
                                                                                         │              CloseSocket(hSocket);                                                       
            return error("Error sending authentication to proxy");                       │              return error("Error sending authentication to proxy");                      
        }                                                                                │          }                                                                               
        LogPrint(BCLog::PROXY, "SOCKS5 sending proxy authentication %s:%s\n", auth->user │          LogPrint("proxy", "SOCKS5 sending proxy authentication %s:%s\n", auth->username,
        uint8_t pchRetA[2];                                                              │          char pchRetA[2];                                                                
        if ((recvr = InterruptibleRecv(pchRetA, 2, g_socks5_recv_timeout, sock)) != Intr │          if (( recvr = InterruptibleRecv(pchRetA, 2, SOCKS5_RECV_TIMEOUT, hSocket)) != In
                                                                                         │              CloseSocket(hSocket);                                                       
            return error("Error reading proxy authentication response");                 │              return error("Error reading proxy authentication response");                
        }                                                                                │          }                                                                               
        if (pchRetA[0] != 0x01 || pchRetA[1] != 0x00) {                                  │          if (pchRetA[0] != 0x01 || pchRetA[1] != 0x00) {                                 
                                                                                         │              CloseSocket(hSocket);                                                       
            return error("Proxy authentication unsuccessful");                           │              return error("Proxy authentication unsuccessful");                          
        }                                                                                │          }                                                                               
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/net_processing.cpp:934                                                      │ dogecoin/src/net_processing.cpp:339                                                      
                                                                                         │                                                                                          
    const uint256& hash{block.GetBlockHash()};                                           │                                                                                          
                                                                                         │                                                                                          
    CNodeState *state = State(nodeid);                                                   │      CNodeState *state = State(nodeid);                                                  
    assert(state != nullptr);                                                            │      assert(state != NULL);                                                              
                                                                                         │                                                                                          
    // Short-circuit most stuff in case it is from the same node                         │      // Short-circuit most stuff in case its from the same node                          
    std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::iterator it │      std::map<uint256, std::pair<NodeId, std::list<QueuedBlock>::iterator> >::iterator it
    if (itInFlight != mapBlocksInFlight.end() && itInFlight->second.first == nodeid) {   │      if (itInFlight != mapBlocksInFlight.end() && itInFlight->second.first == nodeid) {  
        if (pit) {                                                                       │          *pit = &itInFlight->second.second;                                              
            *pit = &itInFlight->second.second;                                           │                                                                                          
        }                                                                                │                                                                                          
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Make sure it's not listed somewhere already.                                      │      // Make sure it's not listed somewhere already.                                     
    RemoveBlockRequest(hash);                                                            │      MarkBlockAsReceived(hash);                                                          
                                                                                         │                                                                                          
    std::list<QueuedBlock>::iterator it = state->vBlocksInFlight.insert(state->vBlocksIn │      std::list<QueuedBlock>::iterator it = state->vBlocksInFlight.insert(state->vBlocksIn
            {&block, std::unique_ptr<PartiallyDownloadedBlock>(pit ? new PartiallyDownlo │              {hash, pindex, pindex != NULL, std::unique_ptr<PartiallyDownloadedBlock>(pit
    state->nBlocksInFlight++;                                                            │      state->nBlocksInFlight++;                                                           
                                                                                         │      state->nBlocksInFlightValidHeaders += it->fValidatedHeaders;                        
    if (state->nBlocksInFlight == 1) {                                                   │      if (state->nBlocksInFlight == 1) {                                                  
        // We're starting a block download (batch) from this peer.                       │          // We're starting a block download (batch) from this peer.                      
        state->m_downloading_since = GetTime<std::chrono::microseconds>();               │          state->nDownloadingSince = GetTimeMicros();                                     
        m_peers_downloading_from++;                                                      │      }                                                                                   
                                                                                         │      if (state->nBlocksInFlightValidHeaders == 1 && pindex != NULL) {                    
                                                                                         │          nPeersWithValidatedDownloads++;                                                 
    }                                                                                    │      }                                                                                   
    itInFlight = mapBlocksInFlight.insert(std::make_pair(hash, std::make_pair(nodeid, it │      itInFlight = mapBlocksInFlight.insert(std::make_pair(hash, std::make_pair(nodeid, it
    if (pit) {                                                                           │      if (pit)                                                                            
        *pit = &itInFlight->second.second;                                               │          *pit = &itInFlight->second.second;                                              
    }                                                                                    │                                                                                          
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/transaction_tests.cpp:346                                             │ bitcoin/src/test/transaction_tests.cpp:410                                               
                                                                                         │                                                                                          
    CMutableTransaction outputm;                                                         │      CMutableTransaction outputm;                                                        
    outputm.nVersion = 1;                                                                │      outputm.nVersion = 1;                                                               
    outputm.vin.resize(1);                                                               │      outputm.vin.resize(1);                                                              
    outputm.vin[0].prevout.SetNull();                                                    │      outputm.vin[0].prevout.SetNull();                                                   
    outputm.vin[0].scriptSig = CScript();                                                │      outputm.vin[0].scriptSig = CScript();                                               
    outputm.vout.resize(1);                                                              │      outputm.vout.resize(1);                                                             
    outputm.vout[0].nValue = 1;                                                          │      outputm.vout[0].nValue = 1;                                                         
    outputm.vout[0].scriptPubKey = outscript;                                            │      outputm.vout[0].scriptPubKey = outscript;                                           
    CDataStream ssout(SER_NETWORK, PROTOCOL_VERSION);                                    │      CDataStream ssout(SER_NETWORK, PROTOCOL_VERSION);                                   
    ssout << outputm;                                                                    │      ssout << outputm;                                                                   
    ssout >> output;                                                                     │      ssout >> output;                                                                    
    assert(output->vin.size() == 1);                                                     │      assert(output->vin.size() == 1);                                                    
    assert(output->vin[0] == outputm.vin[0]);                                            │      assert(output->vin[0] == outputm.vin[0]);                                           
    assert(output->vout.size() == 1);                                                    │      assert(output->vout.size() == 1);                                                   
    assert(output->vout[0] == outputm.vout[0]);                                          │      assert(output->vout[0] == outputm.vout[0]);                                         
                                                                                         │                                                                                          
    CMutableTransaction inputm;                                                          │      CMutableTransaction inputm;                                                         
    inputm.nVersion = 1;                                                                 │      inputm.nVersion = 1;                                                                
    inputm.vin.resize(1);                                                                │      inputm.vin.resize(1);                                                               
    inputm.vin[0].prevout.hash = output->GetHash();                                      │      inputm.vin[0].prevout.hash = output->GetHash();                                     
    inputm.vin[0].prevout.n = 0;                                                         │      inputm.vin[0].prevout.n = 0;                                                        
    inputm.vout.resize(1);                                                               │      inputm.vout.resize(1);                                                              
    inputm.vout[0].nValue = 1;                                                           │      inputm.vout[0].nValue = 1;                                                          
    inputm.vout[0].scriptPubKey = CScript();                                             │      inputm.vout[0].scriptPubKey = CScript();                                            
    bool ret = SignSignature(keystore, *output, inputm, 0, SIGHASH_ALL);                 │      bool ret = SignSignature(keystore, *output, inputm, 0, SIGHASH_ALL);                
    assert(ret == success);                                                              │      assert(ret == success);                                                             
    CDataStream ssin(SER_NETWORK, PROTOCOL_VERSION);                                     │      CDataStream ssin(SER_NETWORK, PROTOCOL_VERSION);                                    
    ssin << inputm;                                                                      │      ssin << inputm;                                                                     
    ssin >> input;                                                                       │      ssin >> input;                                                                      
    assert(input.vin.size() == 1);                                                       │      assert(input.vin.size() == 1);                                                      
    assert(input.vin[0] == inputm.vin[0]);                                               │      assert(input.vin[0] == inputm.vin[0]);                                              
    assert(input.vout.size() == 1);                                                      │      assert(input.vout.size() == 1);                                                     
    assert(input.vout[0] == inputm.vout[0]);                                             │      assert(input.vout[0] == inputm.vout[0]);                                            
    assert(input.vin[0].scriptWitness.stack == inputm.vin[0].scriptWitness.stack);       │      assert(input.vin[0].scriptWitness.stack == inputm.vin[0].scriptWitness.stack);      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/mining.cpp:1042                                                        │ dogecoin/src/rpc/mining.cpp:1192                                                         
                                                                                         │                                                                                          
            if (pindexPrev != chainActive.Tip())                                         │              LOCK(cs_main);                                                              
                                                                                         │              if (pindexPrev != chainActive.Tip()                                         
                                                                                         │                  || (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast        
                                                                                         │                      && GetTime() - nStart > 60))                                        
            {                                                                            │              {                                                                           
                // Clear old blocks since they're obsolete now.                          │                  if (pindexPrev != chainActive.Tip())                                    
                mapNewBlock.clear();                                                     │                  {                                                                       
                vNewBlockTemplate.clear();                                               │                      // Clear old blocks since they're obsolete now.                     
                curBlocks.clear();                                                       │                      mapNewBlock.clear();                                                
                pblock = nullptr;                                                        │                      vNewBlockTemplate.clear();                                          
            }                                                                            │                      pblock = nullptr;                                                   
                                                                                         │                  }                                                                       
                                                                                         │                                                                                          
            // Create new block with nonce = 0 and extraNonce = 1                        │                  // Create new block with nonce = 0 and extraNonce = 1                   
            std::unique_ptr<CBlockTemplate> newBlock                                     │                  std::unique_ptr<CBlockTemplate> newBlock(BlockAssembler(Params()).Create
                = BlockAssembler(Params()).CreateNewBlock(scriptPubKey, fMineWitnessTx); │                  if (!newBlock)                                                          
            if (!newBlock)                                                               │                      throw JSONRPCError(RPC_OUT_OF_MEMORY, "out of memory");             
                throw JSONRPCError(RPC_OUT_OF_MEMORY, "out of memory");                  │                                                                                          
                                                                                         │                                                                                          
            // Update state only when CreateNewBlock succeeded                           │                  // Update state only when CreateNewBlock succeeded                      
            nTransactionsUpdatedLast = mempool.GetTransactionsUpdated();                 │                  nTransactionsUpdatedLast = mempool.GetTransactionsUpdated();            
            pindexPrev = chainActive.Tip();                                              │                  pindexPrev = chainActive.Tip();                                         
            nStart = GetTime();                                                          │                  nStart = GetTime();                                                     
                                                                                         │                                                                                          
            // Finalise it by setting the version and building the merkle root           │                  // Finalise it by setting the version and building the merkle root      
            IncrementExtraNonce(&newBlock->block, pindexPrev, nExtraNonce);              │                  IncrementExtraNonce(&newBlock->block, pindexPrev, nExtraNonce);         
            newBlock->block.SetAuxpowFlag(true);                                         │                  newBlock->block.SetAuxpowFlag(true);                                    
                                                                                         │                                                                                          
            // Save                                                                      │                  // Save                                                                 
            pblock = &newBlock->block;                                                   │                  pblock = &newBlock->block;                                              
            curBlocks[scriptID] = pblock;                                                │                  mapNewBlock[pblock->GetHash()] = pblock;                                
            mapNewBlock[pblock->GetHash()] = pblock;                                     │                  vNewBlockTemplate.push_back(std::move(newBlock));                       
            vNewBlockTemplate.push_back(std::move(newBlock));                            │              }                                                                           
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:127                                  │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:90                                  
0x19c9369f278adc02, 0x84b2b22ab2383ee4, 0x84b2b22ab2383ee6, 0x9d7b84b495b3e3f6, 0x84b2b2 │  0x19c9369f278adc02, 0x84b2b22ab2383ee4, 0x84b2b22ab2383ee6, 0x9d7b84b495b3e3f6, 0x84b2b 
 next prev up                                                                                                                                                                        
 bitcoin/src/txmempool.cpp:916                                                           │ dogecoin/src/txmempool.cpp:922                                                           
                                                                                         │                                                                                          
    {                                                                                    │      {                                                                                   
        LOCK(cs);                                                                        │          LOCK(cs);                                                                       
        CAmount &delta = mapDeltas[hash];                                                │          std::pair<double, CAmount> &deltas = mapDeltas[hash];                           
        delta += nFeeDelta;                                                              │          deltas.first += dPriorityDelta;                                                 
                                                                                         │          deltas.second += nFeeDelta;                                                     
        txiter it = mapTx.find(hash);                                                    │          txiter it = mapTx.find(hash);                                                   
        if (it != mapTx.end()) {                                                         │          if (it != mapTx.end()) {                                                        
            mapTx.modify(it, [&delta](CTxMemPoolEntry& e) { e.UpdateFeeDelta(delta); }); │              mapTx.modify(it, update_fee_delta(deltas.second));                          
            // Now update all ancestors' modified fees with descendants                  │              // Now update all ancestors' modified fees with descendants                 
            setEntries setAncestors;                                                     │              setEntries setAncestors;                                                    
            uint64_t nNoLimit = std::numeric_limits<uint64_t>::max();                    │              uint64_t nNoLimit = std::numeric_limits<uint64_t>::max();                   
            std::string dummy;                                                           │              std::string dummy;                                                          
            CalculateMemPoolAncestors(*it, setAncestors, nNoLimit, nNoLimit, nNoLimit, n │              CalculateMemPoolAncestors(*it, setAncestors, nNoLimit, nNoLimit, nNoLimit, n
            for (txiter ancestorIt : setAncestors) {                                     │              BOOST_FOREACH(txiter ancestorIt, setAncestors) {                            
                mapTx.modify(ancestorIt, update_descendant_state(0, nFeeDelta, 0));      │                  mapTx.modify(ancestorIt, update_descendant_state(0, nFeeDelta, 0));     
            }                                                                            │              }                                                                           
            // Now update all descendants' modified fees with ancestors                  │              // Now update all descendants' modified fees with ancestors                 
            setEntries setDescendants;                                                   │              setEntries setDescendants;                                                  
            CalculateDescendants(it, setDescendants);                                    │              CalculateDescendants(it, setDescendants);                                   
            setDescendants.erase(it);                                                    │              setDescendants.erase(it);                                                   
            for (txiter descendantIt : setDescendants) {                                 │              BOOST_FOREACH(txiter descendantIt, setDescendants) {                        
                mapTx.modify(descendantIt, update_ancestor_state(0, nFeeDelta, 0, 0));   │                  mapTx.modify(descendantIt, update_ancestor_state(0, nFeeDelta, 0, 0));  
            }                                                                            │              }                                                                           
            ++nTransactionsUpdated;                                                      │              ++nTransactionsUpdated;                                                     
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    LogPrintf("PrioritiseTransaction: %s fee += %s\n", hash.ToString(), FormatMoney(nFee │      LogPrintf("PrioritiseTransaction: %s priority += %f, fee += %d\n", strHash, dPriorit
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/hash.cpp:18                                                                 │ dogecoin/src/hash.cpp:17                                                                 
                                                                                         │                                                                                          
    // The following is MurmurHash3 (x86_32), see https://code.google.com/p/smhasher/sou │      // The following is MurmurHash3 (x86_32), see http://code.google.com/p/smhasher/sour
    uint32_t h1 = nHashSeed;                                                             │      uint32_t h1 = nHashSeed;                                                            
    const uint32_t c1 = 0xcc9e2d51;                                                      │      if (vDataToHash.size() > 0)                                                         
    const uint32_t c2 = 0x1b873593;                                                      │      {                                                                                   
                                                                                         │          const uint32_t c1 = 0xcc9e2d51;                                                 
                                                                                         │          const uint32_t c2 = 0x1b873593;                                                 
                                                                                         │                                                                                          
                                                                                         │          const int nblocks = vDataToHash.size() / 4;                                     
                                                                                         │                                                                                          
                                                                                         │          //----------                                                                    
                                                                                         │          // body                                                                         
                                                                                         │          const uint8_t* blocks = &vDataToHash[0] + nblocks * 4;                          
                                                                                         │                                                                                          
    const int nblocks = vDataToHash.size() / 4;                                          │          for (int i = -nblocks; i; i++) {                                                
                                                                                         │              uint32_t k1 = ReadLE32(blocks + i*4);                                       
                                                                                         │                                                                                          
    //----------                                                                         │              k1 *= c1;                                                                   
    // body                                                                              │              k1 = ROTL32(k1, 15);                                                        
    const uint8_t* blocks = vDataToHash.data();                                          │              k1 *= c2;                                                                   
                                                                                         │                                                                                          
    for (int i = 0; i < nblocks; ++i) {                                                  │                                                                                          
        uint32_t k1 = ReadLE32(blocks + i*4);                                            │                                                                                          
                                                                                         │                                                                                          
        k1 *= c1;                                                                        │                                                                                          
        k1 = ROTL32(k1, 15);                                                             │                                                                                          
        k1 *= c2;                                                                        │                                                                                          
                                                                                         │                                                                                          
        h1 ^= k1;                                                                        │              h1 ^= k1;                                                                   
        h1 = ROTL32(h1, 13);                                                             │              h1 = ROTL32(h1, 13);                                                        
        h1 = h1 * 5 + 0xe6546b64;                                                        │              h1 = h1 * 5 + 0xe6546b64;                                                   
    }                                                                                    │          }                                                                               
                                                                                         │                                                                                          
    //----------                                                                         │          //----------                                                                    
    // tail                                                                              │          // tail                                                                         
    const uint8_t* tail = vDataToHash.data() + nblocks * 4;                              │          const uint8_t* tail = (const uint8_t*)(&vDataToHash[0] + nblocks * 4);          
                                                                                         │                                                                                          
    uint32_t k1 = 0;                                                                     │          uint32_t k1 = 0;                                                                
                                                                                         │                                                                                          
    switch (vDataToHash.size() & 3) {                                                    │          switch (vDataToHash.size() & 3) {                                               
        case 3:                                                                          │          case 3:                                                                         
            k1 ^= tail[2] << 16;                                                         │              k1 ^= tail[2] << 16;                                                        
            [[fallthrough]];                                                             │              // Falls through                                                            
        case 2:                                                                          │          case 2:                                                                         
            k1 ^= tail[1] << 8;                                                          │              k1 ^= tail[1] << 8;                                                         
            [[fallthrough]];                                                             │              // Falls through                                                            
        case 1:                                                                          │          case 1:                                                                         
            k1 ^= tail[0];                                                               │              k1 ^= tail[0];                                                              
            k1 *= c1;                                                                    │              k1 *= c1;                                                                   
            k1 = ROTL32(k1, 15);                                                         │              k1 = ROTL32(k1, 15);                                                        
            k1 *= c2;                                                                    │              k1 *= c2;                                                                   
            h1 ^= k1;                                                                    │              h1 ^= k1;                                                                   
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    //----------                                                                         │      //----------                                                                        
    // finalization                                                                      │      // finalization                                                                     
    h1 ^= vDataToHash.size();                                                            │      h1 ^= vDataToHash.size();                                                           
    h1 ^= h1 >> 16;                                                                      │      h1 ^= h1 >> 16;                                                                     
    h1 *= 0x85ebca6b;                                                                    │      h1 *= 0x85ebca6b;                                                                   
    h1 ^= h1 >> 13;                                                                      │      h1 ^= h1 >> 13;                                                                     
    h1 *= 0xc2b2ae35;                                                                    │      h1 *= 0xc2b2ae35;                                                                   
    h1 ^= h1 >> 16;                                                                      │      h1 ^= h1 >> 16;                                                                     
                                                                                         │                                                                                          
    return h1;                                                                           │      return h1;                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/guiutil.cpp:298                                                          │ dogecoin/src/qt/guiutil.cpp:307                                                          
                                                                                         │                                                                                          
    QString selectedFilter;                                                              │      QString selectedFilter;                                                             
    QString myDir;                                                                       │      QString myDir;                                                                      
    if(dir.isEmpty()) // Default to user documents location                              │      if(dir.isEmpty()) // Default to user documents location                             
    {                                                                                    │      {                                                                                   
                                                                                         │  #if QT_VERSION < 0x050000                                                               
                                                                                         │          myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); 
                                                                                         │  #else                                                                                   
        myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);     │          myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);    
                                                                                         │  #endif                                                                                  
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        myDir = dir;                                                                     │          myDir = dir;                                                                    
    }                                                                                    │      }                                                                                   
    /* Directly convert path to native OS path separators */                             │      /* Directly convert path to native OS path separators */                            
    QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, capti │      QString result = QDir::toNativeSeparators(QFileDialog::getSaveFileName(parent, capti
                                                                                         │                                                                                          
    /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (* │      /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*
    QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]");                                         │      QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]");                                        
    QString selectedSuffix;                                                              │      QString selectedSuffix;                                                             
    if(filter_re.exactMatch(selectedFilter))                                             │      if(filter_re.exactMatch(selectedFilter))                                            
    {                                                                                    │      {                                                                                   
        selectedSuffix = filter_re.cap(1);                                               │          selectedSuffix = filter_re.cap(1);                                              
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /* Add suffix if needed */                                                           │      /* Add suffix if needed */                                                          
    QFileInfo info(result);                                                              │      QFileInfo info(result);                                                             
    if(!result.isEmpty())                                                                │      if(!result.isEmpty())                                                               
    {                                                                                    │      {                                                                                   
        if(info.suffix().isEmpty() && !selectedSuffix.isEmpty())                         │          if(info.suffix().isEmpty() && !selectedSuffix.isEmpty())                        
        {                                                                                │          {                                                                               
            /* No suffix specified, add selected suffix */                               │              /* No suffix specified, add selected suffix */                              
            if(!result.endsWith("."))                                                    │              if(!result.endsWith("."))                                                   
                result.append(".");                                                      │                  result.append(".");                                                     
            result.append(selectedSuffix);                                               │              result.append(selectedSuffix);                                              
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    /* Return selected suffix if asked to */                                             │      /* Return selected suffix if asked to */                                            
    if(selectedSuffixOut)                                                                │      if(selectedSuffixOut)                                                               
    {                                                                                    │      {                                                                                   
        *selectedSuffixOut = selectedSuffix;                                             │          *selectedSuffixOut = selectedSuffix;                                            
    }                                                                                    │      }                                                                                   
    return result;                                                                       │      return result;                                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/bitcoingui.cpp:1318                                                      │ dogecoin/src/qt/bitcoingui.cpp:1081                                                      
                                                                                         │                                                                                          
    switch(status)                                                                       │      switch(status)                                                                      
    {                                                                                    │      {                                                                                   
    case WalletModel::Unencrypted:                                                       │      case WalletModel::Unencrypted:                                                      
        labelWalletEncryptionIcon->hide();                                               │          labelWalletEncryptionIcon->hide();                                              
        encryptWalletAction->setChecked(false);                                          │          encryptWalletAction->setChecked(false);                                         
        changePassphraseAction->setEnabled(false);                                       │          changePassphraseAction->setEnabled(false);                                      
        encryptWalletAction->setEnabled(true);                                           │          encryptWalletAction->setEnabled(true);                                          
        break;                                                                           │          break;                                                                          
    case WalletModel::Unlocked:                                                          │      case WalletModel::Unlocked:                                                         
        labelWalletEncryptionIcon->show();                                               │          labelWalletEncryptionIcon->show();                                              
        labelWalletEncryptionIcon->setThemedPixmap(QStringLiteral(":/icons/lock_open"),  │          labelWalletEncryptionIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/loc
        labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and current │          labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and current
        encryptWalletAction->setChecked(true);                                           │          encryptWalletAction->setChecked(true);                                          
        changePassphraseAction->setEnabled(true);                                        │          changePassphraseAction->setEnabled(true);                                       
        encryptWalletAction->setEnabled(false);                                          │          encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
        break;                                                                           │          break;                                                                          
    case WalletModel::Locked:                                                            │      case WalletModel::Locked:                                                           
        labelWalletEncryptionIcon->show();                                               │          labelWalletEncryptionIcon->show();                                              
        labelWalletEncryptionIcon->setThemedPixmap(QStringLiteral(":/icons/lock_closed") │          labelWalletEncryptionIcon->setPixmap(platformStyle->SingleColorIcon(":/icons/loc
        labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and current │          labelWalletEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and current
        encryptWalletAction->setChecked(true);                                           │          encryptWalletAction->setChecked(true);                                          
        changePassphraseAction->setEnabled(true);                                        │          changePassphraseAction->setEnabled(true);                                       
        encryptWalletAction->setEnabled(false);                                          │          encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/rpc_tests.cpp:125                                                      │ dogecoin/src/test/rpc_tests.cpp:127                                                      
                                                                                         │                                                                                          
    BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97 │      BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97
                                                                                         │                                                                                          
                                                                                         │      // Allow more than one data transaction output                                      
                                                                                         │      BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97
                                                                                         │                                                                                          
    // Key not "data" (bad address)                                                      │      // Key not "data" (bad address)                                                     
    BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367 │      BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367
                                                                                         │                                                                                          
    // Bad hex encoding of data output                                                   │      // Bad hex encoding of data output                                                  
    BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367 │      BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367
    BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367 │      BOOST_CHECK_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97367
                                                                                         │                                                                                          
    // Data 81 bytes long                                                                │      // Data 81 bytes long                                                               
    BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97 │      BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [{\"txid\":\"a3b807410df0b60fcb97
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/rawtransaction.cpp:407                                                 │ bitcoin/src/rpc/rawtransaction_util.cpp:49                                               
                                                                                         │                                                                                          
        const UniValue& input = inputs[idx];                                             │          const UniValue& input = inputs[idx];                                            
        const UniValue& o = input.get_obj();                                             │          const UniValue& o = input.get_obj();                                            
                                                                                         │                                                                                          
        uint256 txid = ParseHashO(o, "txid");                                            │          uint256 txid = ParseHashO(o, "txid");                                           
                                                                                         │                                                                                          
        const UniValue& vout_v = find_value(o, "vout");                                  │          const UniValue& vout_v = find_value(o, "vout");                                 
        if (!vout_v.isNum())                                                             │          if (!vout_v.isNum())                                                            
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, missing vout k │              throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, missing vout k
        int nOutput = vout_v.get_int();                                                  │          int nOutput = vout_v.get_int();                                                 
        if (nOutput < 0)                                                                 │          if (nOutput < 0)                                                                
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be p │              throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout cannot be
                                                                                         │                                                                                          
        uint32_t nSequence = (rawTx.nLockTime ? std::numeric_limits<uint32_t>::max() - 1 │          uint32_t nSequence;                                                             
                                                                                         │          if (rbf) {                                                                      
                                                                                         │              nSequence = MAX_BIP125_RBF_SEQUENCE; /* CTxIn::SEQUENCE_FINAL - 2 */        
                                                                                         │          } else if (rawTx.nLockTime) {                                                   
                                                                                         │              nSequence = CTxIn::MAX_SEQUENCE_NONFINAL; /* CTxIn::SEQUENCE_FINAL - 1 */   
                                                                                         │          } else {                                                                        
                                                                                         │              nSequence = CTxIn::SEQUENCE_FINAL;                                          
                                                                                         │          }                                                                               
                                                                                         │                                                                                          
        // set the sequence number if passed in the parameters object                    │          // set the sequence number if passed in the parameters object                   
        const UniValue& sequenceObj = find_value(o, "sequence");                         │          const UniValue& sequenceObj = find_value(o, "sequence");                        
        if (sequenceObj.isNum()) {                                                       │          if (sequenceObj.isNum()) {                                                      
            int64_t seqNr64 = sequenceObj.get_int64();                                   │              int64_t seqNr64 = sequenceObj.get_int64();                                  
            if (seqNr64 < 0 || seqNr64 > std::numeric_limits<uint32_t>::max())           │              if (seqNr64 < 0 || seqNr64 > CTxIn::SEQUENCE_FINAL) {                       
                throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, sequence n │                  throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, sequence n
            else                                                                         │              } else {                                                                    
                nSequence = (uint32_t)seqNr64;                                           │                  nSequence = (uint32_t)seqNr64;                                          
                                                                                         │              }                                                                           
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        CTxIn in(COutPoint(txid, nOutput), CScript(), nSequence);                        │          CTxIn in(COutPoint(txid, nOutput), CScript(), nSequence);                       
                                                                                         │                                                                                          
        rawTx.vin.push_back(in);                                                         │          rawTx.vin.push_back(in);                                                        
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/base58.cpp:72                                                              │ bitcoin/src/base58.cpp:88                                                                
                                                                                         │                                                                                          
    // Skip & count leading zeroes.                                                      │      // Skip & count leading zeroes.                                                     
    int zeroes = 0;                                                                      │      int zeroes = 0;                                                                     
    int length = 0;                                                                      │      int length = 0;                                                                     
    while (pbegin != pend && *pbegin == 0) {                                             │      while (input.size() > 0 && input[0] == 0) {                                         
        pbegin++;                                                                        │          input = input.subspan(1);                                                       
        zeroes++;                                                                        │          zeroes++;                                                                       
    }                                                                                    │      }                                                                                   
    // Allocate enough space in big-endian base58 representation.                        │      // Allocate enough space in big-endian base58 representation.                       
    int size = (pend - pbegin) * 138 / 100 + 1; // log(256) / log(58), rounded up.       │      int size = input.size() * 138 / 100 + 1; // log(256) / log(58), rounded up.         
    std::vector<unsigned char> b58(size);                                                │      std::vector<unsigned char> b58(size);                                               
    // Process the bytes.                                                                │      // Process the bytes.                                                               
    while (pbegin != pend) {                                                             │      while (input.size() > 0) {                                                          
        int carry = *pbegin;                                                             │          int carry = input[0];                                                           
        int i = 0;                                                                       │          int i = 0;                                                                      
        // Apply "b58 = b58 * 256 + ch".                                                 │          // Apply "b58 = b58 * 256 + ch".                                                
        for (std::vector<unsigned char>::reverse_iterator it = b58.rbegin(); (carry != 0 │          for (std::vector<unsigned char>::reverse_iterator it = b58.rbegin(); (carry != 0
            carry += 256 * (*it);                                                        │              carry += 256 * (*it);                                                       
            *it = carry % 58;                                                            │              *it = carry % 58;                                                           
            carry /= 58;                                                                 │              carry /= 58;                                                                
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        assert(carry == 0);                                                              │          assert(carry == 0);                                                             
        length = i;                                                                      │          length = i;                                                                     
        pbegin++;                                                                        │          input = input.subspan(1);                                                       
    }                                                                                    │      }                                                                                   
    // Skip leading zeroes in base58 result.                                             │      // Skip leading zeroes in base58 result.                                            
    std::vector<unsigned char>::iterator it = b58.begin() + (size - length);             │      std::vector<unsigned char>::iterator it = b58.begin() + (size - length);            
    while (it != b58.end() && *it == 0)                                                  │      while (it != b58.end() && *it == 0)                                                 
        it++;                                                                            │          it++;                                                                           
    // Translate the result into a string.                                               │      // Translate the result into a string.                                              
    std::string str;                                                                     │      std::string str;                                                                    
    str.reserve(zeroes + (b58.end() - it));                                              │      str.reserve(zeroes + (b58.end() - it));                                             
    str.assign(zeroes, '1');                                                             │      str.assign(zeroes, '1');                                                            
    while (it != b58.end())                                                              │      while (it != b58.end())                                                             
        str += pszBase58[*(it++)];                                                       │          str += pszBase58[*(it++)];                                                      
    return str;                                                                          │      return str;                                                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/transaction_tests.cpp:289                                             │ dogecoin/src/bench/ccoins_caching.cpp:21                                                 
                                                                                         │                                                                                          
    std::vector<CMutableTransaction> dummyTransactions;                                  │      std::vector<CMutableTransaction> dummyTransactions;                                 
    dummyTransactions.resize(2);                                                         │      dummyTransactions.resize(2);                                                        
                                                                                         │                                                                                          
    // Add some keys to the keystore:                                                    │      // Add some keys to the keystore:                                                   
    CKey key[4];                                                                         │      CKey key[4];                                                                        
    for (int i = 0; i < 4; i++)                                                          │      for (int i = 0; i < 4; i++) {                                                       
    {                                                                                    │                                                                                          
        key[i].MakeNewKey(i % 2);                                                        │          key[i].MakeNewKey(i % 2);                                                       
        keystoreRet.AddKey(key[i]);                                                      │          keystoreRet.AddKey(key[i]);                                                     
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Create some dummy input transactions                                              │      // Create some dummy input transactions                                             
    dummyTransactions[0].vout.resize(2);                                                 │      dummyTransactions[0].vout.resize(2);                                                
    dummyTransactions[0].vout[0].nValue = 11*CENT;                                       │      dummyTransactions[0].vout[0].nValue = 11 * CENT;                                    
    dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_ │      dummyTransactions[0].vout[0].scriptPubKey << ToByteVector(key[0].GetPubKey()) << OP_
    dummyTransactions[0].vout[1].nValue = 50*CENT;                                       │      dummyTransactions[0].vout[1].nValue = 50 * CENT;                                    
    dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_ │      dummyTransactions[0].vout[1].scriptPubKey << ToByteVector(key[1].GetPubKey()) << OP_
    coinsRet.ModifyCoins(dummyTransactions[0].GetHash())->FromTx(dummyTransactions[0], 0 │      coinsRet.ModifyCoins(dummyTransactions[0].GetHash())->FromTx(dummyTransactions[0], 0
                                                                                         │                                                                                          
    dummyTransactions[1].vout.resize(2);                                                 │      dummyTransactions[1].vout.resize(2);                                                
    dummyTransactions[1].vout[0].nValue = 21*CENT;                                       │      dummyTransactions[1].vout[0].nValue = 21 * CENT;                                    
    dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(key[2].GetPubKey │      dummyTransactions[1].vout[0].scriptPubKey = GetScriptForDestination(key[2].GetPubKey
    dummyTransactions[1].vout[1].nValue = 22*CENT;                                       │      dummyTransactions[1].vout[1].nValue = 22 * CENT;                                    
    dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(key[3].GetPubKey │      dummyTransactions[1].vout[1].scriptPubKey = GetScriptForDestination(key[3].GetPubKey
    coinsRet.ModifyCoins(dummyTransactions[1].GetHash())->FromTx(dummyTransactions[1], 0 │      coinsRet.ModifyCoins(dummyTransactions[1].GetHash())->FromTx(dummyTransactions[1], 0
                                                                                         │                                                                                          
    return dummyTransactions;                                                            │      return dummyTransactions;                                                           
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/bloom.cpp:250                                                              │ bitcoin/src/common/bloom.cpp:196                                                         
                                                                                         │                                                                                          
    if (nEntriesThisGeneration == nEntriesPerGeneration) {                               │      if (nEntriesThisGeneration == nEntriesPerGeneration) {                              
        nEntriesThisGeneration = 0;                                                      │          nEntriesThisGeneration = 0;                                                     
        nGeneration++;                                                                   │          nGeneration++;                                                                  
        if (nGeneration == 4) {                                                          │          if (nGeneration == 4) {                                                         
            nGeneration = 1;                                                             │              nGeneration = 1;                                                            
        }                                                                                │          }                                                                               
        uint64_t nGenerationMask1 = -(uint64_t)(nGeneration & 1);                        │          uint64_t nGenerationMask1 = 0 - (uint64_t)(nGeneration & 1);                    
        uint64_t nGenerationMask2 = -(uint64_t)(nGeneration >> 1);                       │          uint64_t nGenerationMask2 = 0 - (uint64_t)(nGeneration >> 1);                   
        /* Wipe old entries that used this generation number. */                         │          /* Wipe old entries that used this generation number. */                        
        for (uint32_t p = 0; p < data.size(); p += 2) {                                  │          for (uint32_t p = 0; p < data.size(); p += 2) {                                 
            uint64_t p1 = data[p], p2 = data[p + 1];                                     │              uint64_t p1 = data[p], p2 = data[p + 1];                                    
            uint64_t mask = (p1 ^ nGenerationMask1) | (p2 ^ nGenerationMask2);           │              uint64_t mask = (p1 ^ nGenerationMask1) | (p2 ^ nGenerationMask2);          
            data[p] = p1 & mask;                                                         │              data[p] = p1 & mask;                                                        
            data[p + 1] = p2 & mask;                                                     │              data[p + 1] = p2 & mask;                                                    
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    nEntriesThisGeneration++;                                                            │      nEntriesThisGeneration++;                                                           
                                                                                         │                                                                                          
    for (int n = 0; n < nHashFuncs; n++) {                                               │      for (int n = 0; n < nHashFuncs; n++) {                                              
        uint32_t h = RollingBloomHash(n, nTweak, vKey);                                  │          uint32_t h = RollingBloomHash(n, nTweak, vKey);                                 
        int bit = h & 0x3F;                                                              │          int bit = h & 0x3F;                                                             
        uint32_t pos = (h >> 6) % data.size();                                           │          /* FastMod works with the upper bits of h, so it is safe to ignore that the lowe
                                                                                         │          uint32_t pos = FastRange32(h, data.size());                                     
        /* The lowest bit of pos is ignored, and set to zero for the first bit, and to o │          /* The lowest bit of pos is ignored, and set to zero for the first bit, and to o
        data[pos & ~1] = (data[pos & ~1] & ~(((uint64_t)1) << bit)) | ((uint64_t)(nGener │          data[pos & ~1U] = (data[pos & ~1U] & ~(uint64_t{1} << bit)) | (uint64_t(nGenerat
        data[pos | 1] = (data[pos | 1] & ~(((uint64_t)1) << bit)) | ((uint64_t)(nGenerat │          data[pos | 1] = (data[pos | 1] & ~(uint64_t{1} << bit)) | (uint64_t(nGeneration 
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/guiutil.cpp:1009                                                        │ bitcoin/src/qt/guiutil.cpp:770                                                           
                                                                                         │                                                                                          
    // Represent time from last generated block in human readable text                   │      // Represent time from last generated block in human readable text                  
    QString timeBehindText;                                                              │      QString timeBehindText;                                                             
    const int HOUR_IN_SECONDS = 60*60;                                                   │      const int HOUR_IN_SECONDS = 60*60;                                                  
    const int DAY_IN_SECONDS = 24*60*60;                                                 │      const int DAY_IN_SECONDS = 24*60*60;                                                
    const int WEEK_IN_SECONDS = 7*24*60*60;                                              │      const int WEEK_IN_SECONDS = 7*24*60*60;                                             
    const int YEAR_IN_SECONDS = 31556952; // Average length of year in Gregorian calenda │      const int YEAR_IN_SECONDS = 31556952; // Average length of year in Gregorian calenda
    if(secs < 60)                                                                        │      if(secs < 60)                                                                       
    {                                                                                    │      {                                                                                   
        timeBehindText = QObject::tr("%n second(s)","",secs);                            │          timeBehindText = QObject::tr("%n second(s)","",secs);                           
    }                                                                                    │      }                                                                                   
    else if(secs < 2*HOUR_IN_SECONDS)                                                    │      else if(secs < 2*HOUR_IN_SECONDS)                                                   
    {                                                                                    │      {                                                                                   
        timeBehindText = QObject::tr("%n minute(s)","",secs/60);                         │          timeBehindText = QObject::tr("%n minute(s)","",secs/60);                        
    }                                                                                    │      }                                                                                   
    else if(secs < 2*DAY_IN_SECONDS)                                                     │      else if(secs < 2*DAY_IN_SECONDS)                                                    
    {                                                                                    │      {                                                                                   
        timeBehindText = QObject::tr("%n hour(s)","",secs/HOUR_IN_SECONDS);              │          timeBehindText = QObject::tr("%n hour(s)","",secs/HOUR_IN_SECONDS);             
    }                                                                                    │      }                                                                                   
    else if(secs < 2*WEEK_IN_SECONDS)                                                    │      else if(secs < 2*WEEK_IN_SECONDS)                                                   
    {                                                                                    │      {                                                                                   
        timeBehindText = QObject::tr("%n day(s)","",secs/DAY_IN_SECONDS);                │          timeBehindText = QObject::tr("%n day(s)","",secs/DAY_IN_SECONDS);               
    }                                                                                    │      }                                                                                   
    else if(secs < YEAR_IN_SECONDS)                                                      │      else if(secs < YEAR_IN_SECONDS)                                                     
    {                                                                                    │      {                                                                                   
        timeBehindText = QObject::tr("%n week(s)","",secs/WEEK_IN_SECONDS);              │          timeBehindText = QObject::tr("%n week(s)","",secs/WEEK_IN_SECONDS);             
    }                                                                                    │      }                                                                                   
    else                                                                                 │      else                                                                                
    {                                                                                    │      {                                                                                   
        qint64 years = secs / YEAR_IN_SECONDS;                                           │          qint64 years = secs / YEAR_IN_SECONDS;                                          
        qint64 remainder = secs % YEAR_IN_SECONDS;                                       │          qint64 remainder = secs % YEAR_IN_SECONDS;                                      
        timeBehindText = QObject::tr("%1 and %2").arg(QObject::tr("%n year(s)", "", year │          timeBehindText = QObject::tr("%1 and %2").arg(QObject::tr("%n year(s)", "", year
    }                                                                                    │      }                                                                                   
    return timeBehindText;                                                               │      return timeBehindText;                                                              
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/core_write.cpp:22                                                          │ bitcoin/src/core_write.cpp:40                                                            
                                                                                         │                                                                                          
    std::string ret;                                                                     │      std::string ret;                                                                    
    CScript::const_iterator it = script.begin();                                         │      CScript::const_iterator it = script.begin();                                        
    opcodetype op;                                                                       │      opcodetype op;                                                                      
    while (it != script.end()) {                                                         │      while (it != script.end()) {                                                        
        CScript::const_iterator it2 = it;                                                │          CScript::const_iterator it2 = it;                                               
        std::vector<unsigned char> vch;                                                  │          std::vector<unsigned char> vch;                                                 
        if (script.GetOp2(it, op, &vch)) {                                               │          if (script.GetOp(it, op, vch)) {                                                
            if (op == OP_0) {                                                            │              if (op == OP_0) {                                                           
                ret += "0 ";                                                             │                  ret += "0 ";                                                            
                continue;                                                                │                  continue;                                                               
            } else if ((op >= OP_1 && op <= OP_16) || op == OP_1NEGATE) {                │              } else if ((op >= OP_1 && op <= OP_16) || op == OP_1NEGATE) {               
                ret += strprintf("%i ", op - OP_1NEGATE - 1);                            │                  ret += strprintf("%i ", op - OP_1NEGATE - 1);                           
                continue;                                                                │                  continue;                                                               
            } else if (op >= OP_NOP && op <= OP_NOP10) {                                 │              } else if (op >= OP_NOP && op <= OP_NOP10) {                                
                std::string str(GetOpName(op));                                          │                  std::string str(GetOpName(op));                                         
                if (str.substr(0, 3) == std::string("OP_")) {                            │                  if (str.substr(0, 3) == std::string("OP_")) {                           
                    ret += str.substr(3, std::string::npos) + " ";                       │                      ret += str.substr(3, std::string::npos) + " ";                      
                    continue;                                                            │                      continue;                                                           
                }                                                                        │                  }                                                                       
            }                                                                            │              }                                                                           
            if (vch.size() > 0) {                                                        │              if (vch.size() > 0) {                                                       
                ret += strprintf("0x%x 0x%x ", HexStr(it2, it - vch.size()), HexStr(it - │                  ret += strprintf("0x%x 0x%x ", HexStr(std::vector<uint8_t>(it2, it - vch
                                                                                         │                                                 HexStr(std::vector<uint8_t>(it - vch.size
            } else {                                                                     │              } else {                                                                    
                ret += strprintf("0x%x ", HexStr(it2, it));                              │                  ret += strprintf("0x%x ", HexStr(std::vector<uint8_t>(it2, it)));       
            }                                                                            │              }                                                                           
            continue;                                                                    │              continue;                                                                   
        }                                                                                │          }                                                                               
        ret += strprintf("0x%x ", HexStr(it2, script.end()));                            │          ret += strprintf("0x%x ", HexStr(std::vector<uint8_t>(it2, script.end())));     
        break;                                                                           │          break;                                                                          
    }                                                                                    │      }                                                                                   
    return ret.substr(0, ret.size() - 1);                                                │      return ret.substr(0, ret.empty() ? ret.npos : ret.size() - 1);                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:366                                               │ bitcoin/src/univalue/test/object.cpp:366                                                 
                                                                                         │                                                                                          
    UniValue v;                                                                          │      UniValue v;                                                                         
    BOOST_CHECK(v.read(json1));                                                          │      BOOST_CHECK(v.read(json1));                                                         
                                                                                         │                                                                                          
    std::string strJson1(json1);                                                         │      std::string strJson1(json1);                                                        
    BOOST_CHECK(v.read(strJson1));                                                       │      BOOST_CHECK(v.read(strJson1));                                                      
                                                                                         │                                                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 2);                                                      │      BOOST_CHECK_EQUAL(v.size(), 2);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                   │      BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                  
                                                                                         │                                                                                          
    UniValue obj = v[1];                                                                 │      UniValue obj = v[1];                                                                
    BOOST_CHECK(obj.isObject());                                                         │      BOOST_CHECK(obj.isObject());                                                        
    BOOST_CHECK_EQUAL(obj.size(), 3);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 3);                                                   
                                                                                         │                                                                                          
    BOOST_CHECK(obj["key1"].isStr());                                                    │      BOOST_CHECK(obj["key1"].isStr());                                                   
    std::string correctValue("str");                                                     │      std::string correctValue("str");                                                    
    correctValue.push_back('\0');                                                        │      correctValue.push_back('\0');                                                       
    BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                            │      BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                           
    BOOST_CHECK(obj["key2"].isNum());                                                    │      BOOST_CHECK(obj["key2"].isNum());                                                   
    BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                   │      BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                  
    BOOST_CHECK(obj["key3"].isObject());                                                 │      BOOST_CHECK(obj["key3"].isObject());                                                
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(strJson1, v.write());                                              │      BOOST_CHECK_EQUAL(strJson1, v.write());                                             
                                                                                         │                                                                                          
    /* Check for (correctly reporting) a parsing error if the initial                    │      /* Check for (correctly reporting) a parsing error if the initial                   
       JSON construct is followed by more stuff.  Note that whitespace                   │         JSON construct is followed by more stuff.  Note that whitespace                  
       is, of course, exempt.  */                                                        │         is, of course, exempt.  */                                                       
                                                                                         │                                                                                          
    BOOST_CHECK(v.read("  {}\n  "));                                                     │      BOOST_CHECK(v.read("  {}\n  "));                                                    
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK(v.read("  []\n  "));                                                     │      BOOST_CHECK(v.read("  []\n  "));                                                    
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
                                                                                         │                                                                                          
    BOOST_CHECK(!v.read("@{}"));                                                         │      BOOST_CHECK(!v.read("@{}"));                                                        
    BOOST_CHECK(!v.read("{} garbage"));                                                  │      BOOST_CHECK(!v.read("{} garbage"));                                                 
    BOOST_CHECK(!v.read("[]{}"));                                                        │      BOOST_CHECK(!v.read("[]{}"));                                                       
    BOOST_CHECK(!v.read("{}[]"));                                                        │      BOOST_CHECK(!v.read("{}[]"));                                                       
    BOOST_CHECK(!v.read("{} 42"));                                                       │      BOOST_CHECK(!v.read("{} 42"));                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:291                                                │ bitcoin/src/univalue/test/object.cpp:366                                                 
                                                                                         │                                                                                          
    UniValue v;                                                                          │      UniValue v;                                                                         
    BOOST_CHECK(v.read(json1));                                                          │      BOOST_CHECK(v.read(json1));                                                         
                                                                                         │                                                                                          
    std::string strJson1(json1);                                                         │      std::string strJson1(json1);                                                        
    BOOST_CHECK(v.read(strJson1));                                                       │      BOOST_CHECK(v.read(strJson1));                                                      
                                                                                         │                                                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 2);                                                      │      BOOST_CHECK_EQUAL(v.size(), 2);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                   │      BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                  
                                                                                         │                                                                                          
    UniValue obj = v[1];                                                                 │      UniValue obj = v[1];                                                                
    BOOST_CHECK(obj.isObject());                                                         │      BOOST_CHECK(obj.isObject());                                                        
    BOOST_CHECK_EQUAL(obj.size(), 3);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 3);                                                   
                                                                                         │                                                                                          
    BOOST_CHECK(obj["key1"].isStr());                                                    │      BOOST_CHECK(obj["key1"].isStr());                                                   
    std::string correctValue("str");                                                     │      std::string correctValue("str");                                                    
    correctValue.push_back('\0');                                                        │      correctValue.push_back('\0');                                                       
    BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                            │      BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                           
    BOOST_CHECK(obj["key2"].isNum());                                                    │      BOOST_CHECK(obj["key2"].isNum());                                                   
    BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                   │      BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                  
    BOOST_CHECK(obj["key3"].isObject());                                                 │      BOOST_CHECK(obj["key3"].isObject());                                                
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(strJson1, v.write());                                              │      BOOST_CHECK_EQUAL(strJson1, v.write());                                             
                                                                                         │                                                                                          
    /* Check for (correctly reporting) a parsing error if the initial                    │      /* Check for (correctly reporting) a parsing error if the initial                   
       JSON construct is followed by more stuff.  Note that whitespace                   │         JSON construct is followed by more stuff.  Note that whitespace                  
       is, of course, exempt.  */                                                        │         is, of course, exempt.  */                                                       
                                                                                         │                                                                                          
    BOOST_CHECK(v.read("  {}\n  "));                                                     │      BOOST_CHECK(v.read("  {}\n  "));                                                    
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK(v.read("  []\n  "));                                                     │      BOOST_CHECK(v.read("  []\n  "));                                                    
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
                                                                                         │                                                                                          
    BOOST_CHECK(!v.read("@{}"));                                                         │      BOOST_CHECK(!v.read("@{}"));                                                        
    BOOST_CHECK(!v.read("{} garbage"));                                                  │      BOOST_CHECK(!v.read("{} garbage"));                                                 
    BOOST_CHECK(!v.read("[]{}"));                                                        │      BOOST_CHECK(!v.read("[]{}"));                                                       
    BOOST_CHECK(!v.read("{}[]"));                                                        │      BOOST_CHECK(!v.read("{}[]"));                                                       
    BOOST_CHECK(!v.read("{} 42"));                                                       │      BOOST_CHECK(!v.read("{} 42"));                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:291                                                │ dogecoin/src/univalue/test/object.cpp:366                                                
                                                                                         │                                                                                          
    UniValue v;                                                                          │      UniValue v;                                                                         
    BOOST_CHECK(v.read(json1));                                                          │      BOOST_CHECK(v.read(json1));                                                         
                                                                                         │                                                                                          
    std::string strJson1(json1);                                                         │      std::string strJson1(json1);                                                        
    BOOST_CHECK(v.read(strJson1));                                                       │      BOOST_CHECK(v.read(strJson1));                                                      
                                                                                         │                                                                                          
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
    BOOST_CHECK_EQUAL(v.size(), 2);                                                      │      BOOST_CHECK_EQUAL(v.size(), 2);                                                     
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                   │      BOOST_CHECK_EQUAL(v[0].getValStr(), "1.10000000");                                  
                                                                                         │                                                                                          
    UniValue obj = v[1];                                                                 │      UniValue obj = v[1];                                                                
    BOOST_CHECK(obj.isObject());                                                         │      BOOST_CHECK(obj.isObject());                                                        
    BOOST_CHECK_EQUAL(obj.size(), 3);                                                    │      BOOST_CHECK_EQUAL(obj.size(), 3);                                                   
                                                                                         │                                                                                          
    BOOST_CHECK(obj["key1"].isStr());                                                    │      BOOST_CHECK(obj["key1"].isStr());                                                   
    std::string correctValue("str");                                                     │      std::string correctValue("str");                                                    
    correctValue.push_back('\0');                                                        │      correctValue.push_back('\0');                                                       
    BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                            │      BOOST_CHECK_EQUAL(obj["key1"].getValStr(), correctValue);                           
    BOOST_CHECK(obj["key2"].isNum());                                                    │      BOOST_CHECK(obj["key2"].isNum());                                                   
    BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                   │      BOOST_CHECK_EQUAL(obj["key2"].getValStr(), "800");                                  
    BOOST_CHECK(obj["key3"].isObject());                                                 │      BOOST_CHECK(obj["key3"].isObject());                                                
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(strJson1, v.write());                                              │      BOOST_CHECK_EQUAL(strJson1, v.write());                                             
                                                                                         │                                                                                          
    /* Check for (correctly reporting) a parsing error if the initial                    │      /* Check for (correctly reporting) a parsing error if the initial                   
       JSON construct is followed by more stuff.  Note that whitespace                   │         JSON construct is followed by more stuff.  Note that whitespace                  
       is, of course, exempt.  */                                                        │         is, of course, exempt.  */                                                       
                                                                                         │                                                                                          
    BOOST_CHECK(v.read("  {}\n  "));                                                     │      BOOST_CHECK(v.read("  {}\n  "));                                                    
    BOOST_CHECK(v.isObject());                                                           │      BOOST_CHECK(v.isObject());                                                          
    BOOST_CHECK(v.read("  []\n  "));                                                     │      BOOST_CHECK(v.read("  []\n  "));                                                    
    BOOST_CHECK(v.isArray());                                                            │      BOOST_CHECK(v.isArray());                                                           
                                                                                         │                                                                                          
    BOOST_CHECK(!v.read("@{}"));                                                         │      BOOST_CHECK(!v.read("@{}"));                                                        
    BOOST_CHECK(!v.read("{} garbage"));                                                  │      BOOST_CHECK(!v.read("{} garbage"));                                                 
    BOOST_CHECK(!v.read("[]{}"));                                                        │      BOOST_CHECK(!v.read("[]{}"));                                                       
    BOOST_CHECK(!v.read("{}[]"));                                                        │      BOOST_CHECK(!v.read("{}[]"));                                                       
    BOOST_CHECK(!v.read("{} 42"));                                                       │      BOOST_CHECK(!v.read("{} 42"));                                                      
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/wallet/rpc/addresses.cpp:88                                                 │ bitcoin/src/wallet/rpc/addresses.cpp:35                                                  
                                                                                         │                                                                                          
    std::shared_ptr<CWallet> const pwallet = GetWalletForJSONRPCRequest(request);        │      std::shared_ptr<CWallet> const pwallet = GetWalletForJSONRPCRequest(request);       
    if (!pwallet) return NullUniValue;                                                   │      if (!pwallet) return NullUniValue;                                                  
                                                                                         │                                                                                          
    LOCK(pwallet->cs_wallet);                                                            │      LOCK(pwallet->cs_wallet);                                                           
                                                                                         │                                                                                          
    if (!pwallet->CanGetAddresses(true)) {                                               │      if (!pwallet->CanGetAddresses()) {                                                  
        throw JSONRPCError(RPC_WALLET_ERROR, "Error: This wallet has no available keys") │          throw JSONRPCError(RPC_WALLET_ERROR, "Error: This wallet has no available keys")
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    OutputType output_type = pwallet->m_default_change_type.value_or(pwallet->m_default_ │      // Parse the label first so we don't generate a key if there's an error             
    if (!request.params[0].isNull()) {                                                   │      std::string label;                                                                  
        std::optional<OutputType> parsed = ParseOutputType(request.params[0].get_str()); │      if (!request.params[0].isNull())                                                    
                                                                                         │          label = LabelFromValue(request.params[0]);                                      
                                                                                         │                                                                                          
                                                                                         │      OutputType output_type = pwallet->m_default_address_type;                           
                                                                                         │      if (!request.params[1].isNull()) {                                                  
                                                                                         │          std::optional<OutputType> parsed = ParseOutputType(request.params[1].get_str());
        if (!parsed) {                                                                   │          if (!parsed) {                                                                  
            throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown address ty │              throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown address ty
        } else if (parsed.value() == OutputType::BECH32M && pwallet->GetLegacyScriptPubK │          } else if (parsed.value() == OutputType::BECH32M && pwallet->GetLegacyScriptPubK
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Legacy wallets cannot provide bec │              throw JSONRPCError(RPC_INVALID_PARAMETER, "Legacy wallets cannot provide bec
        }                                                                                │          }                                                                               
        output_type = parsed.value();                                                    │          output_type = parsed.value();                                                   
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    CTxDestination dest;                                                                 │      CTxDestination dest;                                                                
    bilingual_str error;                                                                 │      bilingual_str error;                                                                
    if (!pwallet->GetNewChangeDestination(output_type, dest, error)) {                   │      if (!pwallet->GetNewDestination(output_type, label, dest, error)) {                 
        throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, error.original);                  │          throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, error.original);                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return EncodeDestination(dest);                                                      │      return EncodeDestination(dest);                                                     
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:102                                  │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:72                                  
0x30268b6fba455d2c, 0x200000006, 0x200000004, 0x3d67cb6c1fe66c76, 0x200000000, 0x3fc4f19 │  0x30268b6fba455d2c, 0x200000006, 0x200000004, 0x3d67cb6c1fe66c76, 0x200000000, 0x3fc4f1 
 next prev up                                                                                                                                                                        
 dogecoin/src/txmempool.cpp:142                                                          │ bitcoin/src/txmempool.cpp:178                                                            
                                                                                         │                                                                                          
        // we cache the in-mempool children to avoid duplicate updates                   │                                                                                          
        setEntries setChildren;                                                          │                                                                                          
        // calculate children from mapNextTx                                             │          // calculate children from mapNextTx                                            
        txiter it = mapTx.find(hash);                                                    │          txiter it = mapTx.find(hash);                                                   
        if (it == mapTx.end()) {                                                         │          if (it == mapTx.end()) {                                                        
            continue;                                                                    │              continue;                                                                   
        }                                                                                │          }                                                                               
        auto iter = mapNextTx.lower_bound(COutPoint(hash, 0));                           │          auto iter = mapNextTx.lower_bound(COutPoint(hash, 0));                          
        // First calculate the children, and update setMemPoolChildren to                │          // First calculate the children, and update CTxMemPool::m_children to           
        // include them, and update their setMemPoolParents to include this tx.          │          // include them, and update their CTxMemPoolEntry::m_parents to include this tx.
        for (; iter != mapNextTx.end() && iter->first->hash == hash; ++iter) {           │          // we cache the in-mempool children to avoid duplicate updates                  
            const uint256 &childHash = iter->second->GetHash();                          │          {                                                                               
            txiter childIter = mapTx.find(childHash);                                    │              WITH_FRESH_EPOCH(m_epoch);                                                  
            assert(childIter != mapTx.end());                                            │              for (; iter != mapNextTx.end() && iter->first->hash == hash; ++iter) {      
            // We can skip updating entries we've encountered before or that             │                  const uint256 &childHash = iter->second->GetHash();                     
            // are in the block (which are already accounted for).                       │                  txiter childIter = mapTx.find(childHash);                               
            if (setChildren.insert(childIter).second && !setAlreadyIncluded.count(childH │                  assert(childIter != mapTx.end());                                       
                UpdateChild(it, childIter, true);                                        │                  // We can skip updating entries we've encountered before or that        
                UpdateParent(childIter, it, true);                                       │                  // are in the block (which are already accounted for).                  
                                                                                         │                  if (!visited(childIter) && !setAlreadyIncluded.count(childHash)) {      
                                                                                         │                      UpdateChild(it, childIter, true);                                   
                                                                                         │                      UpdateParent(childIter, it, true);                                  
                                                                                         │                  }                                                                       
            }                                                                            │              }                                                                           
        }                                                                                │          } // release epoch guard for UpdateForDescendants                               
        UpdateForDescendants(it, mapMemPoolDescendantsToUpdate, setAlreadyIncluded);     │          UpdateForDescendants(it, mapMemPoolDescendantsToUpdate, setAlreadyIncluded, desc
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/policy/fees.cpp:315                                                        │ bitcoin/src/policy/fees.cpp:545                                                          
                                                                                         │                                                                                          
                                                                                         │      LOCK(m_cs_fee_estimator);                                                           
    unsigned int txHeight = entry.GetHeight();                                           │      unsigned int txHeight = entry.GetHeight();                                          
    uint256 hash = entry.GetTx().GetHash();                                              │      uint256 hash = entry.GetTx().GetHash();                                             
    if (mapMemPoolTxs.count(hash)) {                                                     │      if (mapMemPoolTxs.count(hash)) {                                                    
        LogPrint("estimatefee", "Blockpolicy error mempool tx %s already being tracked\n │          LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy error mempool tx %s already being trac
                 hash.ToString().c_str());                                               │                   hash.ToString());                                                      
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (txHeight != nBestSeenHeight) {                                                   │      if (txHeight != nBestSeenHeight) {                                                  
        // Ignore side chains and re-orgs; assuming they are random they don't           │          // Ignore side chains and re-orgs; assuming they are random they don't          
        // affect the estimate.  We'll potentially double count transactions in 1-block  │          // affect the estimate.  We'll potentially double count transactions in 1-block 
        // Ignore txs if BlockPolicyEstimator is not in sync with chainActive.Tip().     │          // Ignore txs if BlockPolicyEstimator is not in sync with ActiveChain().Tip().  
        // It will be synced next time a block is processed.                             │          // It will be synced next time a block is processed.                            
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Only want to be updating estimates when our blockchain is synced,                 │      // Only want to be updating estimates when our blockchain is synced,                
    // otherwise we'll miscalculate how many blocks its taking to get included.          │      // otherwise we'll miscalculate how many blocks its taking to get included.         
    if (!validFeeEstimate) {                                                             │      if (!validFeeEstimate) {                                                            
        untrackedTxs++;                                                                  │          untrackedTxs++;                                                                 
        return;                                                                          │          return;                                                                         
    }                                                                                    │      }                                                                                   
    trackedTxs++;                                                                        │      trackedTxs++;                                                                       
                                                                                         │                                                                                          
    // Feerates are stored and reported as BTC-per-kb:                                   │      // Feerates are stored and reported as BTC-per-kb:                                  
    CFeeRate feeRate(entry.GetFee(), entry.GetTxSize());                                 │      CFeeRate feeRate(entry.GetFee(), entry.GetTxSize());                                
                                                                                         │                                                                                          
    mapMemPoolTxs[hash].blockHeight = txHeight;                                          │      mapMemPoolTxs[hash].blockHeight = txHeight;                                         
    mapMemPoolTxs[hash].bucketIndex = feeStats.NewTx(txHeight, (double)feeRate.GetFeePer │      unsigned int bucketIndex = feeStats->NewTx(txHeight, (double)feeRate.GetFeePerK()); 
                                                                                         │      mapMemPoolTxs[hash].bucketIndex = bucketIndex;                                      
                                                                                         │      unsigned int bucketIndex2 = shortStats->NewTx(txHeight, (double)feeRate.GetFeePerK()
                                                                                         │      assert(bucketIndex == bucketIndex2);                                                
                                                                                         │      unsigned int bucketIndex3 = longStats->NewTx(txHeight, (double)feeRate.GetFeePerK())
                                                                                         │      assert(bucketIndex == bucketIndex3);                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/coincontroldialog.cpp:204                                               │ bitcoin/src/qt/coincontroldialog.cpp:177                                                 
                                                                                         │                                                                                          
    QTreeWidgetItem *item = ui->treeWidget->itemAt(point);                               │      QTreeWidgetItem *item = ui->treeWidget->itemAt(point);                              
    if(item)                                                                             │      if(item)                                                                            
    {                                                                                    │      {                                                                                   
        contextMenuItem = item;                                                          │          contextMenuItem = item;                                                         
                                                                                         │                                                                                          
        // disable some items (like Copy Transaction ID, lock, unlock) for tree roots in │          // disable some items (like Copy Transaction ID, lock, unlock) for tree roots in
        if (item->text(COLUMN_TXHASH).length() == 64) // transaction hash is 64 characte │          if (item->data(COLUMN_ADDRESS, TxHashRole).toString().length() == 64) // transac
        {                                                                                │          {                                                                               
            copyTransactionHashAction->setEnabled(true);                                 │              m_copy_transaction_outpoint_action->setEnabled(true);                       
            if (model->isLockedCoin(uint256S(item->text(COLUMN_TXHASH).toStdString()), i │              if (model->wallet().isLockedCoin(COutPoint(uint256S(item->data(COLUMN_ADDRES
            {                                                                            │              {                                                                           
                lockAction->setEnabled(false);                                           │                  lockAction->setEnabled(false);                                          
                unlockAction->setEnabled(true);                                          │                  unlockAction->setEnabled(true);                                         
            }                                                                            │              }                                                                           
            else                                                                         │              else                                                                        
            {                                                                            │              {                                                                           
                lockAction->setEnabled(true);                                            │                  lockAction->setEnabled(true);                                           
                unlockAction->setEnabled(false);                                         │                  unlockAction->setEnabled(false);                                        
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        else // this means click on parent node in tree mode -> disable all              │          else // this means click on parent node in tree mode -> disable all             
        {                                                                                │          {                                                                               
            copyTransactionHashAction->setEnabled(false);                                │              m_copy_transaction_outpoint_action->setEnabled(false);                      
            lockAction->setEnabled(false);                                               │              lockAction->setEnabled(false);                                              
            unlockAction->setEnabled(false);                                             │              unlockAction->setEnabled(false);                                            
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        // show context menu                                                             │          // show context menu                                                            
        contextMenu->exec(QCursor::pos());                                               │          contextMenu->exec(QCursor::pos());                                              
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactionview.cpp:500                                                 │ bitcoin/src/qt/transactionview.cpp:551                                                   
                                                                                         │                                                                                          
    dateRangeWidget = new QFrame();                                                      │      dateRangeWidget = new QFrame();                                                     
    dateRangeWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);                      │      dateRangeWidget->setFrameStyle(static_cast<int>(QFrame::Panel) | static_cast<int>(QF
    dateRangeWidget->setContentsMargins(1,1,1,1);                                        │      dateRangeWidget->setContentsMargins(1,1,1,1);                                       
    QHBoxLayout *layout = new QHBoxLayout(dateRangeWidget);                              │      QHBoxLayout *layout = new QHBoxLayout(dateRangeWidget);                             
    layout->setContentsMargins(0,0,0,0);                                                 │      layout->setContentsMargins(0,0,0,0);                                                
    layout->addSpacing(23);                                                              │      layout->addSpacing(23);                                                             
    layout->addWidget(new QLabel(tr("Range:")));                                         │      layout->addWidget(new QLabel(tr("Range:")));                                        
                                                                                         │                                                                                          
    dateFrom = new QDateTimeEdit(this);                                                  │      dateFrom = new QDateTimeEdit(this);                                                 
    dateFrom->setDisplayFormat("dd/MM/yy");                                              │      dateFrom->setDisplayFormat("dd/MM/yy");                                             
    dateFrom->setCalendarPopup(true);                                                    │      dateFrom->setCalendarPopup(true);                                                   
    dateFrom->setMinimumWidth(100);                                                      │      dateFrom->setMinimumWidth(100);                                                     
    dateFrom->setDate(QDate::currentDate().addDays(-7));                                 │      dateFrom->setDate(QDate::currentDate().addDays(-7));                                
    layout->addWidget(dateFrom);                                                         │      layout->addWidget(dateFrom);                                                        
    layout->addWidget(new QLabel(tr("to")));                                             │      layout->addWidget(new QLabel(tr("to")));                                            
                                                                                         │                                                                                          
    dateTo = new QDateTimeEdit(this);                                                    │      dateTo = new QDateTimeEdit(this);                                                   
    dateTo->setDisplayFormat("dd/MM/yy");                                                │      dateTo->setDisplayFormat("dd/MM/yy");                                               
    dateTo->setCalendarPopup(true);                                                      │      dateTo->setCalendarPopup(true);                                                     
    dateTo->setMinimumWidth(100);                                                        │      dateTo->setMinimumWidth(100);                                                       
    dateTo->setDate(QDate::currentDate());                                               │      dateTo->setDate(QDate::currentDate());                                              
    layout->addWidget(dateTo);                                                           │      layout->addWidget(dateTo);                                                          
    layout->addStretch();                                                                │      layout->addStretch();                                                               
                                                                                         │                                                                                          
    // Hide by default                                                                   │      // Hide by default                                                                  
    dateRangeWidget->setVisible(false);                                                  │      dateRangeWidget->setVisible(false);                                                 
                                                                                         │                                                                                          
    // Notify on change                                                                  │      // Notify on change                                                                 
    connect(dateFrom, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));       │      connect(dateFrom, &QDateTimeEdit::dateChanged, this, &TransactionView::dateRangeChan
    connect(dateTo, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));         │      connect(dateTo, &QDateTimeEdit::dateChanged, this, &TransactionView::dateRangeChange
                                                                                         │                                                                                          
    return dateRangeWidget;                                                              │      return dateRangeWidget;                                                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/crypto/aes.cpp:82                                                           │ dogecoin/src/crypto/aes.cpp:114                                                          
                                                                                         │                                                                                          
                                                                                         │      unsigned char padsize = 0;                                                          
    int written = 0;                                                                     │      int written = 0;                                                                    
    bool fail = false;                                                                   │      bool fail = false;                                                                  
    const unsigned char* prev = iv;                                                      │      const unsigned char* prev = iv;                                                     
                                                                                         │                                                                                          
    if (!data || !size || !out)                                                          │      if (!data || !size || !out)                                                         
        return 0;                                                                        │          return 0;                                                                       
                                                                                         │                                                                                          
    if (size % AES_BLOCKSIZE != 0)                                                       │      if (size % AES_BLOCKSIZE != 0)                                                      
        return 0;                                                                        │          return 0;                                                                       
                                                                                         │                                                                                          
    // Decrypt all data. Padding will be checked in the output.                          │      // Decrypt all data. Padding will be checked in the output.                         
    while (written != size) {                                                            │      while (written != size) {                                                           
        dec.Decrypt(out, data + written);                                                │          dec.Decrypt(out, data + written);                                               
        for (int i = 0; i != AES_BLOCKSIZE; i++)                                         │          for (int i = 0; i != AES_BLOCKSIZE; i++)                                        
            *out++ ^= prev[i];                                                           │              *out++ ^= prev[i];                                                          
        prev = data + written;                                                           │          prev = data + written;                                                          
        written += AES_BLOCKSIZE;                                                        │          written += AES_BLOCKSIZE;                                                       
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // When decrypting padding, attempt to run in constant-time                          │      // When decrypting padding, attempt to run in constant-time                         
    if (pad) {                                                                           │      if (pad) {                                                                          
        // If used, padding size is the value of the last decrypted byte. For            │          // If used, padding size is the value of the last decrypted byte. For           
        // it to be valid, It must be between 1 and AES_BLOCKSIZE.                       │          // it to be valid, It must be between 1 and AES_BLOCKSIZE.                      
        unsigned char padsize = *--out;                                                  │          padsize = *--out;                                                               
        fail = !padsize | (padsize > AES_BLOCKSIZE);                                     │          fail = !padsize | (padsize > AES_BLOCKSIZE);                                    
                                                                                         │                                                                                          
        // If not well-formed, treat it as though there's no padding.                    │          // If not well-formed, treat it as though there's no padding.                   
        padsize *= !fail;                                                                │          padsize *= !fail;                                                               
                                                                                         │                                                                                          
        // All padding must equal the last byte otherwise it's not well-formed           │          // All padding must equal the last byte otherwise it's not well-formed          
        for (int i = AES_BLOCKSIZE; i != 0; i--)                                         │          for (int i = AES_BLOCKSIZE; i != 0; i--)                                        
            fail |= ((i > AES_BLOCKSIZE - padsize) & (*out-- != padsize));               │              fail |= ((i > AES_BLOCKSIZE - padsize) & (*out-- != padsize));              
                                                                                         │                                                                                          
        written -= padsize;                                                              │          written -= padsize;                                                             
    }                                                                                    │      }                                                                                   
    return written * !fail;                                                              │      return written * !fail;                                                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/httpserver.cpp:165                                                          │ dogecoin/src/httpserver.cpp:199                                                          
                                                                                         │                                                                                          
    rpc_allow_subnets.clear();                                                           │      rpc_allow_subnets.clear();                                                          
    CNetAddr localv4;                                                                    │      CNetAddr localv4;                                                                   
    CNetAddr localv6;                                                                    │      CNetAddr localv6;                                                                   
    LookupHost("127.0.0.1", localv4, false);                                             │      LookupHost("127.0.0.1", localv4, false);                                            
    LookupHost("::1", localv6, false);                                                   │      LookupHost("::1", localv6, false);                                                  
    rpc_allow_subnets.push_back(CSubNet(localv4, 8));      // always allow IPv4 local su │      rpc_allow_subnets.push_back(CSubNet(localv4, 8));      // always allow IPv4 local su
    rpc_allow_subnets.push_back(CSubNet(localv6));         // always allow IPv6 localhos │      rpc_allow_subnets.push_back(CSubNet(localv6));         // always allow IPv6 localhos
    for (const std::string& strAllow : gArgs.GetArgs("-rpcallowip")) {                   │      if (mapMultiArgs.count("-rpcallowip")) {                                            
        CSubNet subnet;                                                                  │          const std::vector<std::string>& vAllow = mapMultiArgs.at("-rpcallowip");        
        LookupSubNet(strAllow, subnet);                                                  │          for (std::string strAllow : vAllow) {                                           
        if (!subnet.IsValid()) {                                                         │              CSubNet subnet;                                                             
            uiInterface.ThreadSafeMessageBox(                                            │              LookupSubNet(strAllow.c_str(), subnet);                                     
                strprintf(Untranslated("Invalid -rpcallowip subnet specification: %s. Va │              if (!subnet.IsValid()) {                                                    
                "", CClientUIInterface::MSG_ERROR);                                      │                  uiInterface.ThreadSafeMessageBox(                                       
            return false;                                                                │                      strprintf("Invalid -rpcallowip subnet specification: %s. Valid are a
                                                                                         │                      "", CClientUIInterface::MSG_ERROR);                                 
                                                                                         │                  return false;                                                           
                                                                                         │              }                                                                           
                                                                                         │              rpc_allow_subnets.push_back(subnet);                                        
        }                                                                                │          }                                                                               
        rpc_allow_subnets.push_back(subnet);                                             │                                                                                          
    }                                                                                    │      }                                                                                   
    std::string strAllowed;                                                              │      std::string strAllowed;                                                             
    for (const CSubNet& subnet : rpc_allow_subnets)                                      │      for (const CSubNet& subnet : rpc_allow_subnets)                                     
        strAllowed += subnet.ToString() + " ";                                           │          strAllowed += subnet.ToString() + " ";                                          
    LogPrint(BCLog::HTTP, "Allowing HTTP connections from: %s\n", strAllowed);           │      LogPrint("http", "Allowing HTTP connections from: %s\n", strAllowed);               
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/rpc_tests.cpp:220                                                     │ bitcoin/src/test/rpc_tests.cpp:225                                                       
                                                                                         │                                                                                          
    // Valid                                                                             │      // Valid                                                                            
    BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0").get_real(), 1.0);                      │      BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0").get_real(), 1.0);                     
    // Valid, with leading or trailing whitespace                                        │      // Valid, with leading or trailing whitespace                                       
    BOOST_CHECK_EQUAL(ParseNonRFCJSONValue(" 1.0").get_real(), 1.0);                     │      BOOST_CHECK_EQUAL(ParseNonRFCJSONValue(" 1.0").get_real(), 1.0);                    
    BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0 ").get_real(), 1.0);                     │      BOOST_CHECK_EQUAL(ParseNonRFCJSONValue("1.0 ").get_real(), 1.0);                    
                                                                                         │                                                                                          
    BOOST_CHECK_THROW(AmountFromValue(ParseNonRFCJSONValue(".19e-6")), std::runtime_erro │      BOOST_CHECK_THROW(AmountFromValue(ParseNonRFCJSONValue(".19e-6")), std::runtime_erro
    BOOST_CHECK_EQUAL(AmountFromValue(ParseNonRFCJSONValue("0.00000000000000000000000000 │      BOOST_CHECK_EQUAL(AmountFromValue(ParseNonRFCJSONValue("0.00000000000000000000000000
    // Invalid, initial garbage                                                          │      // Invalid, initial garbage                                                         
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("[1.0"), std::runtime_error);                 │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("[1.0"), std::runtime_error);                
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("a1.0"), std::runtime_error);                 │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("a1.0"), std::runtime_error);                
    // Invalid, trailing garbage                                                         │      // Invalid, trailing garbage                                                        
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0sds"), std::runtime_error);               │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0sds"), std::runtime_error);              
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0]"), std::runtime_error);                 │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("1.0]"), std::runtime_error);                
    // BTC addresses should fail parsing                                                 │      // BTC addresses should fail parsing                                                
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"), std::r │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W"), std::r
    BOOST_CHECK_THROW(ParseNonRFCJSONValue("3J98t1WpEZ73CNmQviecrnyiWrnqRhWNL"), std::ru │      BOOST_CHECK_THROW(ParseNonRFCJSONValue("3J98t1WpEZ73CNmQviecrnyiWrnqRhWNL"), std::ru
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/utilstrencodings.cpp:149                                                   │ bitcoin/src/util/strencodings.cpp:132                                                    
                                                                                         │                                                                                          
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1,  │          -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, 
        -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,  │          -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28,  │          15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 
        29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,  │          29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 
        49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                   │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                  
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/utilstrencodings.cpp:149                                                   │ bitcoin/src/util/strencodings.cpp:187                                                    
                                                                                         │                                                                                          
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,  │          -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28,  │          15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1,  0,  1,  2, 
        29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,  │           3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
        49, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          23, 24, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                   │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                  
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/utilstrencodings.cpp:302                                                   │ bitcoin/src/util/strencodings.cpp:187                                                    
                                                                                         │                                                                                          
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,  │          -1, -1, -1, -1, -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1,  0,  1,  2,  │          15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1,  0,  1,  2, 
         3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,  │           3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 
        23, 24, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          23, 24, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                   │          -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1                  
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:90                                   │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:63                                  
0x171d34fcdac955d0, 0x12cfc8c049e1c96, 0x12cfc8c049e1c94, 0x71d34fcdac955c2, 0x12cfc8c04 │  0x171d34fcdac955d0, 0x12cfc8c049e1c96, 0x12cfc8c049e1c94, 0x71d34fcdac955c2, 0x12cfc8c0 
 next prev up                                                                                                                                                                        
 dogecoin/src/policy/fees.cpp:257                                                        │ bitcoin/src/policy/fees.cpp:452                                                          
                                                                                         │                                                                                          
    //nBestSeenHeight is not updated yet for the new block                               │      //nBestSeenHeight is not updated yet for the new block                              
    int blocksAgo = nBestSeenHeight - entryHeight;                                       │      int blocksAgo = nBestSeenHeight - entryHeight;                                      
    if (nBestSeenHeight == 0)  // the BlockPolicyEstimator hasn't seen any blocks yet    │      if (nBestSeenHeight == 0)  // the BlockPolicyEstimator hasn't seen any blocks yet   
        blocksAgo = 0;                                                                   │          blocksAgo = 0;                                                                  
    if (blocksAgo < 0) {                                                                 │      if (blocksAgo < 0) {                                                                
        LogPrint("estimatefee", "Blockpolicy error, blocks ago is negative for mempool t │          LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy error, blocks ago is negative for memp
        return;  //This can't happen because we call this with our best seen height, no  │          return;  //This can't happen because we call this with our best seen height, no 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    if (blocksAgo >= (int)unconfTxs.size()) {                                            │      if (blocksAgo >= (int)unconfTxs.size()) {                                           
        if (oldUnconfTxs[bucketindex] > 0)                                               │          if (oldUnconfTxs[bucketindex] > 0) {                                            
            oldUnconfTxs[bucketindex]--;                                                 │              oldUnconfTxs[bucketindex]--;                                                
        else                                                                             │          } else {                                                                        
            LogPrint("estimatefee", "Blockpolicy error, mempool tx removed from >25 bloc │              LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy error, mempool tx removed from >25
                     bucketindex);                                                       │                       bucketindex);                                                      
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
    else {                                                                               │      else {                                                                              
        unsigned int blockIndex = entryHeight % unconfTxs.size();                        │          unsigned int blockIndex = entryHeight % unconfTxs.size();                       
        if (unconfTxs[blockIndex][bucketindex] > 0)                                      │          if (unconfTxs[blockIndex][bucketindex] > 0) {                                   
            unconfTxs[blockIndex][bucketindex]--;                                        │              unconfTxs[blockIndex][bucketindex]--;                                       
        else                                                                             │          } else {                                                                        
            LogPrint("estimatefee", "Blockpolicy error, mempool tx removed from blockInd │              LogPrint(BCLog::ESTIMATEFEE, "Blockpolicy error, mempool tx removed from blo
                     blockIndex, bucketindex);                                           │                       blockIndex, bucketindex);                                          
                                                                                         │          }                                                                               
                                                                                         │      }                                                                                   
                                                                                         │      if (!inBlock && (unsigned int)blocksAgo >= scale) { // Only counts as a failure if n
                                                                                         │          assert(scale != 0);                                                             
                                                                                         │          unsigned int periodsAgo = blocksAgo / scale;                                    
                                                                                         │          for (size_t i = 0; i < periodsAgo && i < failAvg.size(); i++) {                 
                                                                                         │              failAvg[i][bucketindex]++;                                                  
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/rpc_tests.cpp:106                                                      │ dogecoin/src/test/rpc_tests.cpp:108                                                      
                                                                                         │                                                                                          
    UniValue r;                                                                          │      UniValue r;                                                                         
    // input is a 1-of-2 multisig (so is output):                                        │      // input is a 1-of-2 multisig (so is output):                                       
    std::string prevout =                                                                │      std::string prevout =                                                               
      "[{\"txid\":\"b4cc287e58f87cdae59417329f710f3ecd75a4ee1d2872b7248f50977c8493f3\"," │        "[{\"txid\":\"b4cc287e58f87cdae59417329f710f3ecd75a4ee1d2872b7248f50977c8493f3\","
      "\"vout\":1,\"scriptPubKey\":\"a914b10c9df5f7edf436c697f02f1efdba4cf399615187\","  │        "\"vout\":1,\"scriptPubKey\":\"a914b10c9df5f7edf436c697f02f1efdba4cf399615187\"," 
      "\"redeemScript\":\"512103debedc17b3df2badbcdd86d5feb4562b86fe182e5998abd8bcd4f122 │        "\"redeemScript\":\"512103debedc17b3df2badbcdd86d5feb4562b86fe182e5998abd8bcd4f122
    r = CallRPC(std::string("createrawtransaction ")+prevout+" "+                        │      r = CallRPC(std::string("createrawtransaction ")+prevout+" "+                       
      "{\"3HqAe9LtNBjnsfM4CyYaWTnvCaUYT7v4oZ\":11}");                                    │        "{\"A8aRNzQnSFcgn2iXd7CzkbRHu9raZFHSkT\":11}"); // 3HqAe9LtNBjnsfM4CyYaWTnvCaUYT7v
    std::string notsigned = r.get_str();                                                 │      std::string notsigned = r.get_str();                                                
    std::string privkey1 = "\"KzsXybp9jX64P5ekX1KUxRQ79Jht9uzW7LorgwE65i5rWACL6LQe\"";   │      std::string privkey1 = "\"QSGT8Sd8z8aBcc3o7HAGqeEicLjTCU8JzbVmUZcvp4hCx66fsLPE\"";  
    std::string privkey2 = "\"Kyhdf5LuKTRx4ge69ybABsiUAWjVRK4XGxAKk2FQLp2HjGMy87Z4\"";   │      std::string privkey2 = "\"QR6Yov9ta4v5JD38kFRx56Z5dYm4TsCLACrEXeeF5AdeBCNKeB44\"";  
    r = CallRPC(std::string("signrawtransactionwithkey ")+notsigned+" [] "+prevout);     │      r = CallRPC(std::string("signrawtransaction ")+notsigned+" "+prevout+" "+"[]");     
    BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == false);                │      BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == false);               
    r = CallRPC(std::string("signrawtransactionwithkey ")+notsigned+" ["+privkey1+","+pr │      r = CallRPC(std::string("signrawtransaction ")+notsigned+" "+prevout+" "+"["+privkey
    BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == true);                 │      BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == true);                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/rest.cpp:663                                                                │ bitcoin/src/rest.cpp:312                                                                 
                                                                                         │                                                                                          
    case RESTResponseFormat::BINARY: {                                                   │      case RESTResponseFormat::BINARY: {                                                  
        CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());       │          CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());   
        ssTx << tx;                                                                      │          ssBlock << block;                                                               
                                                                                         │          std::string binaryBlock = ssBlock.str();                                        
        std::string binaryTx = ssTx.str();                                               │                                                                                          
        req->WriteHeader("Content-Type", "application/octet-stream");                    │          req->WriteHeader("Content-Type", "application/octet-stream");                   
        req->WriteReply(HTTP_OK, binaryTx);                                              │          req->WriteReply(HTTP_OK, binaryBlock);                                          
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::HEX: {                                                      │      case RESTResponseFormat::HEX: {                                                     
        CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());       │          CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());   
        ssTx << tx;                                                                      │          ssBlock << block;                                                               
                                                                                         │          std::string strHex = HexStr(ssBlock) + "\n";                                    
        std::string strHex = HexStr(ssTx) + "\n";                                        │                                                                                          
        req->WriteHeader("Content-Type", "text/plain");                                  │          req->WriteHeader("Content-Type", "text/plain");                                 
        req->WriteReply(HTTP_OK, strHex);                                                │          req->WriteReply(HTTP_OK, strHex);                                               
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::JSON: {                                                     │      case RESTResponseFormat::JSON: {                                                    
        UniValue objTx(UniValue::VOBJ);                                                  │          UniValue objBlock = blockToJSON(chainman.m_blockman, block, tip, pblockindex, tx
        TxToUniv(*tx, /*block_hash=*/hashBlock, /*entry=*/ objTx);                       │          std::string strJSON = objBlock.write() + "\n";                                  
        std::string strJSON = objTx.write() + "\n";                                      │                                                                                          
        req->WriteHeader("Content-Type", "application/json");                            │          req->WriteHeader("Content-Type", "application/json");                           
        req->WriteReply(HTTP_OK, strJSON);                                               │          req->WriteReply(HTTP_OK, strJSON);                                              
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    default: {                                                                           │      default: {                                                                          
        return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava │          return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava
    }                                                                                    │      }                                                                                   
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/compressor.cpp:96                                                           │ dogecoin/src/compressor.cpp:89                                                           
                                                                                         │                                                                                          
    switch(nSize) {                                                                      │      switch(nSize) {                                                                     
    case 0x00:                                                                           │      case 0x00:                                                                          
        script.resize(25);                                                               │          script.resize(25);                                                              
        script[0] = OP_DUP;                                                              │          script[0] = OP_DUP;                                                             
        script[1] = OP_HASH160;                                                          │          script[1] = OP_HASH160;                                                         
        script[2] = 20;                                                                  │          script[2] = 20;                                                                 
        memcpy(&script[3], in.data(), 20);                                               │          memcpy(&script[3], &in[0], 20);                                                 
        script[23] = OP_EQUALVERIFY;                                                     │          script[23] = OP_EQUALVERIFY;                                                    
        script[24] = OP_CHECKSIG;                                                        │          script[24] = OP_CHECKSIG;                                                       
        return true;                                                                     │          return true;                                                                    
    case 0x01:                                                                           │      case 0x01:                                                                          
        script.resize(23);                                                               │          script.resize(23);                                                              
        script[0] = OP_HASH160;                                                          │          script[0] = OP_HASH160;                                                         
        script[1] = 20;                                                                  │          script[1] = 20;                                                                 
        memcpy(&script[2], in.data(), 20);                                               │          memcpy(&script[2], &in[0], 20);                                                 
        script[22] = OP_EQUAL;                                                           │          script[22] = OP_EQUAL;                                                          
        return true;                                                                     │          return true;                                                                    
    case 0x02:                                                                           │      case 0x02:                                                                          
    case 0x03:                                                                           │      case 0x03:                                                                          
        script.resize(35);                                                               │          script.resize(35);                                                              
        script[0] = 33;                                                                  │          script[0] = 33;                                                                 
        script[1] = nSize;                                                               │          script[1] = nSize;                                                              
        memcpy(&script[2], in.data(), 32);                                               │          memcpy(&script[2], &in[0], 32);                                                 
        script[34] = OP_CHECKSIG;                                                        │          script[34] = OP_CHECKSIG;                                                       
        return true;                                                                     │          return true;                                                                    
    case 0x04:                                                                           │      case 0x04:                                                                          
    case 0x05:                                                                           │      case 0x05:                                                                          
        unsigned char vch[33] = {};                                                      │          unsigned char vch[33] = {};                                                     
        vch[0] = nSize - 2;                                                              │          vch[0] = nSize - 2;                                                             
        memcpy(&vch[1], in.data(), 32);                                                  │          memcpy(&vch[1], &in[0], 32);                                                    
        CPubKey pubkey{vch};                                                             │          CPubKey pubkey(&vch[0], &vch[33]);                                              
        if (!pubkey.Decompress())                                                        │          if (!pubkey.Decompress())                                                       
            return false;                                                                │              return false;                                                               
        assert(pubkey.size() == 65);                                                     │          assert(pubkey.size() == 65);                                                    
        script.resize(67);                                                               │          script.resize(67);                                                              
        script[0] = 65;                                                                  │          script[0] = 65;                                                                 
        memcpy(&script[1], pubkey.begin(), 65);                                          │          memcpy(&script[1], pubkey.begin(), 65);                                         
        script[66] = OP_CHECKSIG;                                                        │          script[66] = OP_CHECKSIG;                                                       
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
    return false;                                                                        │      return false;                                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/univalue/test/object.cpp:39                                                │ bitcoin/src/univalue/test/object.cpp:39                                                  
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.isNull());                                                            │      BOOST_CHECK(v1.isNull());                                                           
                                                                                         │                                                                                          
    UniValue v2(UniValue::VSTR);                                                         │      UniValue v2(UniValue::VSTR);                                                        
    BOOST_CHECK(v2.isStr());                                                             │      BOOST_CHECK(v2.isStr());                                                            
                                                                                         │                                                                                          
    UniValue v3(UniValue::VSTR, "foo");                                                  │      UniValue v3(UniValue::VSTR, "foo");                                                 
    BOOST_CHECK(v3.isStr());                                                             │      BOOST_CHECK(v3.isStr());                                                            
    BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                            │      BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                           
                                                                                         │                                                                                          
    UniValue numTest;                                                                    │      UniValue numTest;                                                                   
    BOOST_CHECK(numTest.setNumStr("82"));                                                │      BOOST_CHECK(numTest.setNumStr("82"));                                               
    BOOST_CHECK(numTest.isNum());                                                        │      BOOST_CHECK(numTest.isNum());                                                       
    BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                        │      BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                       
                                                                                         │                                                                                          
    uint64_t vu64 = 82;                                                                  │      uint64_t vu64 = 82;                                                                 
    UniValue v4(vu64);                                                                   │      UniValue v4(vu64);                                                                  
    BOOST_CHECK(v4.isNum());                                                             │      BOOST_CHECK(v4.isNum());                                                            
    BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                             │      BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                            
                                                                                         │                                                                                          
    int64_t vi64 = -82;                                                                  │      int64_t vi64 = -82;                                                                 
    UniValue v5(vi64);                                                                   │      UniValue v5(vi64);                                                                  
    BOOST_CHECK(v5.isNum());                                                             │      BOOST_CHECK(v5.isNum());                                                            
    BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                            │      BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                           
                                                                                         │                                                                                          
    int vi = -688;                                                                       │      int vi = -688;                                                                      
    UniValue v6(vi);                                                                     │      UniValue v6(vi);                                                                    
    BOOST_CHECK(v6.isNum());                                                             │      BOOST_CHECK(v6.isNum());                                                            
    BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                           │      BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                          
                                                                                         │                                                                                          
    double vd = -7.21;                                                                   │      double vd = -7.21;                                                                  
    UniValue v7(vd);                                                                     │      UniValue v7(vd);                                                                    
    BOOST_CHECK(v7.isNum());                                                             │      BOOST_CHECK(v7.isNum());                                                            
    BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                          │      BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                         
                                                                                         │                                                                                          
    std::string vs("yawn");                                                              │      std::string vs("yawn");                                                             
    UniValue v8(vs);                                                                     │      UniValue v8(vs);                                                                    
    BOOST_CHECK(v8.isStr());                                                             │      BOOST_CHECK(v8.isStr());                                                            
    BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                           │      BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                          
                                                                                         │                                                                                          
    const char *vcs = "zappa";                                                           │      const char *vcs = "zappa";                                                          
    UniValue v9(vcs);                                                                    │      UniValue v9(vcs);                                                                   
    BOOST_CHECK(v9.isStr());                                                             │      BOOST_CHECK(v9.isStr());                                                            
    BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                          │      BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:18                                                 │ bitcoin/src/univalue/test/object.cpp:39                                                  
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.isNull());                                                            │      BOOST_CHECK(v1.isNull());                                                           
                                                                                         │                                                                                          
    UniValue v2(UniValue::VSTR);                                                         │      UniValue v2(UniValue::VSTR);                                                        
    BOOST_CHECK(v2.isStr());                                                             │      BOOST_CHECK(v2.isStr());                                                            
                                                                                         │                                                                                          
    UniValue v3(UniValue::VSTR, "foo");                                                  │      UniValue v3(UniValue::VSTR, "foo");                                                 
    BOOST_CHECK(v3.isStr());                                                             │      BOOST_CHECK(v3.isStr());                                                            
    BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                            │      BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                           
                                                                                         │                                                                                          
    UniValue numTest;                                                                    │      UniValue numTest;                                                                   
    BOOST_CHECK(numTest.setNumStr("82"));                                                │      BOOST_CHECK(numTest.setNumStr("82"));                                               
    BOOST_CHECK(numTest.isNum());                                                        │      BOOST_CHECK(numTest.isNum());                                                       
    BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                        │      BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                       
                                                                                         │                                                                                          
    uint64_t vu64 = 82;                                                                  │      uint64_t vu64 = 82;                                                                 
    UniValue v4(vu64);                                                                   │      UniValue v4(vu64);                                                                  
    BOOST_CHECK(v4.isNum());                                                             │      BOOST_CHECK(v4.isNum());                                                            
    BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                             │      BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                            
                                                                                         │                                                                                          
    int64_t vi64 = -82;                                                                  │      int64_t vi64 = -82;                                                                 
    UniValue v5(vi64);                                                                   │      UniValue v5(vi64);                                                                  
    BOOST_CHECK(v5.isNum());                                                             │      BOOST_CHECK(v5.isNum());                                                            
    BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                            │      BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                           
                                                                                         │                                                                                          
    int vi = -688;                                                                       │      int vi = -688;                                                                      
    UniValue v6(vi);                                                                     │      UniValue v6(vi);                                                                    
    BOOST_CHECK(v6.isNum());                                                             │      BOOST_CHECK(v6.isNum());                                                            
    BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                           │      BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                          
                                                                                         │                                                                                          
    double vd = -7.21;                                                                   │      double vd = -7.21;                                                                  
    UniValue v7(vd);                                                                     │      UniValue v7(vd);                                                                    
    BOOST_CHECK(v7.isNum());                                                             │      BOOST_CHECK(v7.isNum());                                                            
    BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                          │      BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                         
                                                                                         │                                                                                          
    std::string vs("yawn");                                                              │      std::string vs("yawn");                                                             
    UniValue v8(vs);                                                                     │      UniValue v8(vs);                                                                    
    BOOST_CHECK(v8.isStr());                                                             │      BOOST_CHECK(v8.isStr());                                                            
    BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                           │      BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                          
                                                                                         │                                                                                          
    const char *vcs = "zappa";                                                           │      const char *vcs = "zappa";                                                          
    UniValue v9(vcs);                                                                    │      UniValue v9(vcs);                                                                   
    BOOST_CHECK(v9.isStr());                                                             │      BOOST_CHECK(v9.isStr());                                                            
    BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                          │      BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/univalue_tests.cpp:18                                                 │ dogecoin/src/univalue/test/object.cpp:39                                                 
                                                                                         │                                                                                          
    UniValue v1;                                                                         │      UniValue v1;                                                                        
    BOOST_CHECK(v1.isNull());                                                            │      BOOST_CHECK(v1.isNull());                                                           
                                                                                         │                                                                                          
    UniValue v2(UniValue::VSTR);                                                         │      UniValue v2(UniValue::VSTR);                                                        
    BOOST_CHECK(v2.isStr());                                                             │      BOOST_CHECK(v2.isStr());                                                            
                                                                                         │                                                                                          
    UniValue v3(UniValue::VSTR, "foo");                                                  │      UniValue v3(UniValue::VSTR, "foo");                                                 
    BOOST_CHECK(v3.isStr());                                                             │      BOOST_CHECK(v3.isStr());                                                            
    BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                            │      BOOST_CHECK_EQUAL(v3.getValStr(), "foo");                                           
                                                                                         │                                                                                          
    UniValue numTest;                                                                    │      UniValue numTest;                                                                   
    BOOST_CHECK(numTest.setNumStr("82"));                                                │      BOOST_CHECK(numTest.setNumStr("82"));                                               
    BOOST_CHECK(numTest.isNum());                                                        │      BOOST_CHECK(numTest.isNum());                                                       
    BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                        │      BOOST_CHECK_EQUAL(numTest.getValStr(), "82");                                       
                                                                                         │                                                                                          
    uint64_t vu64 = 82;                                                                  │      uint64_t vu64 = 82;                                                                 
    UniValue v4(vu64);                                                                   │      UniValue v4(vu64);                                                                  
    BOOST_CHECK(v4.isNum());                                                             │      BOOST_CHECK(v4.isNum());                                                            
    BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                             │      BOOST_CHECK_EQUAL(v4.getValStr(), "82");                                            
                                                                                         │                                                                                          
    int64_t vi64 = -82;                                                                  │      int64_t vi64 = -82;                                                                 
    UniValue v5(vi64);                                                                   │      UniValue v5(vi64);                                                                  
    BOOST_CHECK(v5.isNum());                                                             │      BOOST_CHECK(v5.isNum());                                                            
    BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                            │      BOOST_CHECK_EQUAL(v5.getValStr(), "-82");                                           
                                                                                         │                                                                                          
    int vi = -688;                                                                       │      int vi = -688;                                                                      
    UniValue v6(vi);                                                                     │      UniValue v6(vi);                                                                    
    BOOST_CHECK(v6.isNum());                                                             │      BOOST_CHECK(v6.isNum());                                                            
    BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                           │      BOOST_CHECK_EQUAL(v6.getValStr(), "-688");                                          
                                                                                         │                                                                                          
    double vd = -7.21;                                                                   │      double vd = -7.21;                                                                  
    UniValue v7(vd);                                                                     │      UniValue v7(vd);                                                                    
    BOOST_CHECK(v7.isNum());                                                             │      BOOST_CHECK(v7.isNum());                                                            
    BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                          │      BOOST_CHECK_EQUAL(v7.getValStr(), "-7.21");                                         
                                                                                         │                                                                                          
    std::string vs("yawn");                                                              │      std::string vs("yawn");                                                             
    UniValue v8(vs);                                                                     │      UniValue v8(vs);                                                                    
    BOOST_CHECK(v8.isStr());                                                             │      BOOST_CHECK(v8.isStr());                                                            
    BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                           │      BOOST_CHECK_EQUAL(v8.getValStr(), "yawn");                                          
                                                                                         │                                                                                          
    const char *vcs = "zappa";                                                           │      const char *vcs = "zappa";                                                          
    UniValue v9(vcs);                                                                    │      UniValue v9(vcs);                                                                   
    BOOST_CHECK(v9.isStr());                                                             │      BOOST_CHECK(v9.isStr());                                                            
    BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                          │      BOOST_CHECK_EQUAL(v9.getValStr(), "zappa");                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/mining.cpp:40                                                          │ bitcoin/src/rpc/mining.cpp:54                                                            
                                                                                         │                                                                                          
    CBlockIndex *pb = chainActive.Tip();                                                 │      const CBlockIndex* pb = active_chain.Tip();                                         
                                                                                         │                                                                                          
    if (height >= 0 && height < chainActive.Height())                                    │      if (height >= 0 && height < active_chain.Height()) {                                
        pb = chainActive[height];                                                        │          pb = active_chain[height];                                                      
                                                                                         │      }                                                                                   
                                                                                         │                                                                                          
    if (pb == NULL || !pb->nHeight)                                                      │      if (pb == nullptr || !pb->nHeight)                                                  
        return 0;                                                                        │          return 0;                                                                       
                                                                                         │                                                                                          
    // If lookup is -1, then use blocks since last difficulty change.                    │      // If lookup is -1, then use blocks since last difficulty change.                   
    if (lookup <= 0)                                                                     │      if (lookup <= 0)                                                                    
        lookup = pb->nHeight % Params().GetConsensus(pb->nHeight).DifficultyAdjustmentIn │          lookup = pb->nHeight % Params().GetConsensus().DifficultyAdjustmentInterval() + 
                                                                                         │                                                                                          
    // If lookup is larger than chain, then set it to chain length.                      │      // If lookup is larger than chain, then set it to chain length.                     
    if (lookup > pb->nHeight)                                                            │      if (lookup > pb->nHeight)                                                           
        lookup = pb->nHeight;                                                            │          lookup = pb->nHeight;                                                           
                                                                                         │                                                                                          
    CBlockIndex *pb0 = pb;                                                               │      const CBlockIndex* pb0 = pb;                                                        
    int64_t minTime = pb0->GetBlockTime();                                               │      int64_t minTime = pb0->GetBlockTime();                                              
    int64_t maxTime = minTime;                                                           │      int64_t maxTime = minTime;                                                          
    for (int i = 0; i < lookup; i++) {                                                   │      for (int i = 0; i < lookup; i++) {                                                  
        pb0 = pb0->pprev;                                                                │          pb0 = pb0->pprev;                                                               
        int64_t time = pb0->GetBlockTime();                                              │          int64_t time = pb0->GetBlockTime();                                             
        minTime = std::min(time, minTime);                                               │          minTime = std::min(time, minTime);                                              
        maxTime = std::max(time, maxTime);                                               │          maxTime = std::max(time, maxTime);                                              
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // In case there's a situation where minTime == maxTime, we don't want a divide by z │      // In case there's a situation where minTime == maxTime, we don't want a divide by z
    if (minTime == maxTime)                                                              │      if (minTime == maxTime)                                                             
        return 0;                                                                        │          return 0;                                                                       
                                                                                         │                                                                                          
    arith_uint256 workDiff = pb->nChainWork - pb0->nChainWork;                           │      arith_uint256 workDiff = pb->nChainWork - pb0->nChainWork;                          
    int64_t timeDiff = maxTime - minTime;                                                │      int64_t timeDiff = maxTime - minTime;                                               
                                                                                         │                                                                                          
    return workDiff.getdouble() / timeDiff;                                              │      return workDiff.getdouble() / timeDiff;                                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/script/interpreter.cpp:715                                                 │ bitcoin/src/script/interpreter.cpp:889                                                   
                                                                                         │                                                                                          
                    // (x1 x2 - bool)                                                    │                      // (x1 x2 - bool)                                                   
                    if (stack.size() < 2)                                                │                      if (stack.size() < 2)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                    valtype& vch1 = stacktop(-2);                                        │                      valtype& vch1 = stacktop(-2);                                       
                    valtype& vch2 = stacktop(-1);                                        │                      valtype& vch2 = stacktop(-1);                                       
                    bool fEqual = (vch1 == vch2);                                        │                      bool fEqual = (vch1 == vch2);                                       
                    // OP_NOTEQUAL is disabled because it would be too easy to say       │                      // OP_NOTEQUAL is disabled because it would be too easy to say      
                    // something like n != 1 and have some wiseguy pass in 1 with extra  │                      // something like n != 1 and have some wiseguy pass in 1 with extra 
                    // zero bytes after it (numerically, 0x01 == 0x0001 == 0x000001)     │                      // zero bytes after it (numerically, 0x01 == 0x0001 == 0x000001)    
                    //if (opcode == OP_NOTEQUAL)                                         │                      //if (opcode == OP_NOTEQUAL)                                        
                    //    fEqual = !fEqual;                                              │                      //    fEqual = !fEqual;                                             
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                    stack.push_back(fEqual ? vchTrue : vchFalse);                        │                      stack.push_back(fEqual ? vchTrue : vchFalse);                       
                    if (opcode == OP_EQUALVERIFY)                                        │                      if (opcode == OP_EQUALVERIFY)                                       
                    {                                                                    │                      {                                                                   
                        if (fEqual)                                                      │                          if (fEqual)                                                     
                            popstack(stack);                                             │                              popstack(stack);                                            
                        else                                                             │                          else                                                            
                            return set_error(serror, SCRIPT_ERR_EQUALVERIFY);            │                              return set_error(serror, SCRIPT_ERR_EQUALVERIFY);           
                    }                                                                    │                      }                                                                   
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/txmempool.cpp:595                                                           │ dogecoin/src/txmempool.cpp:504                                                           
                                                                                         │                                                                                          
    // Remove transaction from memory pool                                               │      // Remove transaction from memory pool                                              
    AssertLockHeld(cs);                                                                  │      {                                                                                   
                                                                                         │          LOCK(cs);                                                                       
        setEntries txToRemove;                                                           │          setEntries txToRemove;                                                          
        txiter origit = mapTx.find(origTx.GetHash());                                    │          txiter origit = mapTx.find(origTx.GetHash());                                   
        if (origit != mapTx.end()) {                                                     │          if (origit != mapTx.end()) {                                                    
            txToRemove.insert(origit);                                                   │              txToRemove.insert(origit);                                                  
        } else {                                                                         │          } else {                                                                        
            // When recursively removing but origTx isn't in the mempool                 │              // When recursively removing but origTx isn't in the mempool                
            // be sure to remove any children that are in the pool. This can             │              // be sure to remove any children that are in the pool. This can            
            // happen during chain re-orgs if origTx isn't re-accepted into              │              // happen during chain re-orgs if origTx isn't re-accepted into             
            // the mempool for any reason.                                               │              // the mempool for any reason.                                              
            for (unsigned int i = 0; i < origTx.vout.size(); i++) {                      │              for (unsigned int i = 0; i < origTx.vout.size(); i++) {                     
                auto it = mapNextTx.find(COutPoint(origTx.GetHash(), i));                │                  auto it = mapNextTx.find(COutPoint(origTx.GetHash(), i));               
                if (it == mapNextTx.end())                                               │                  if (it == mapNextTx.end())                                              
                    continue;                                                            │                      continue;                                                           
                txiter nextit = mapTx.find(it->second->GetHash());                       │                  txiter nextit = mapTx.find(it->second->GetHash());                      
                assert(nextit != mapTx.end());                                           │                  assert(nextit != mapTx.end());                                          
                txToRemove.insert(nextit);                                               │                  txToRemove.insert(nextit);                                              
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        setEntries setAllRemoves;                                                        │          setEntries setAllRemoves;                                                       
        for (txiter it : txToRemove) {                                                   │          BOOST_FOREACH(txiter it, txToRemove) {                                          
            CalculateDescendants(it, setAllRemoves);                                     │              CalculateDescendants(it, setAllRemoves);                                    
        }                                                                                │          }                                                                               
                                                                                         │                                                                                          
        RemoveStaged(setAllRemoves, false, reason);                                      │          RemoveStaged(setAllRemoves, false, reason);                                     
                                                                                         │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/hash_tests.cpp:16                                                     │ bitcoin/src/test/hash_tests.cpp:16                                                       
                                                                                         │                                                                                          
                                                                                         │                                                                                          
#define T(expected, seed, data) BOOST_CHECK_EQUAL(MurmurHash3(seed, ParseHex(data)), exp │  #define T(expected, seed, data) BOOST_CHECK_EQUAL(MurmurHash3(seed, ParseHex(data)), exp
                                                                                         │                                                                                          
    // Test MurmurHash3 with various inputs. Of course this is retested in the           │      // Test MurmurHash3 with various inputs. Of course this is retested in the          
    // bloom filter tests - they would fail if MurmurHash3() had any problems -          │      // bloom filter tests - they would fail if MurmurHash3() had any problems -         
    // but is useful for those trying to implement Bitcoin libraries as a                │      // but is useful for those trying to implement Bitcoin libraries as a               
    // source of test data for their MurmurHash3() primitive during                      │      // source of test data for their MurmurHash3() primitive during                     
    // development.                                                                      │      // development.                                                                     
    //                                                                                   │      //                                                                                  
    // The magic number 0xFBA4C795 comes from CBloomFilter::Hash()                       │      // The magic number 0xFBA4C795 comes from CBloomFilter::Hash()                      
                                                                                         │                                                                                          
    T(0x00000000U, 0x00000000, "");                                                      │      T(0x00000000U, 0x00000000, "");                                                     
    T(0x6a396f08U, 0xFBA4C795, "");                                                      │      T(0x6a396f08U, 0xFBA4C795, "");                                                     
    T(0x81f16f39U, 0xffffffff, "");                                                      │      T(0x81f16f39U, 0xffffffff, "");                                                     
                                                                                         │                                                                                          
    T(0x514e28b7U, 0x00000000, "00");                                                    │      T(0x514e28b7U, 0x00000000, "00");                                                   
    T(0xea3f0b17U, 0xFBA4C795, "00");                                                    │      T(0xea3f0b17U, 0xFBA4C795, "00");                                                   
    T(0xfd6cf10dU, 0x00000000, "ff");                                                    │      T(0xfd6cf10dU, 0x00000000, "ff");                                                   
                                                                                         │                                                                                          
    T(0x16c6b7abU, 0x00000000, "0011");                                                  │      T(0x16c6b7abU, 0x00000000, "0011");                                                 
    T(0x8eb51c3dU, 0x00000000, "001122");                                                │      T(0x8eb51c3dU, 0x00000000, "001122");                                               
    T(0xb4471bf8U, 0x00000000, "00112233");                                              │      T(0xb4471bf8U, 0x00000000, "00112233");                                             
    T(0xe2301fa8U, 0x00000000, "0011223344");                                            │      T(0xe2301fa8U, 0x00000000, "0011223344");                                           
    T(0xfc2e4a15U, 0x00000000, "001122334455");                                          │      T(0xfc2e4a15U, 0x00000000, "001122334455");                                         
    T(0xb074502cU, 0x00000000, "00112233445566");                                        │      T(0xb074502cU, 0x00000000, "00112233445566");                                       
    T(0x8034d2a0U, 0x00000000, "0011223344556677");                                      │      T(0x8034d2a0U, 0x00000000, "0011223344556677");                                     
    T(0xb4698defU, 0x00000000, "001122334455667788");                                    │      T(0xb4698defU, 0x00000000, "001122334455667788");                                   
                                                                                         │                                                                                          
#undef T                                                                                 │  #undef T                                                                                
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:115                                  │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:81                                  
0, 0x100010114, 0x100010116, 0x1001701051372, 0x100010112, 0x1000040220, 0x100170105137a │  0, 0x100010114, 0x100010116, 0x1001701051372, 0x100010112, 0x1000040220, 0x100170105137 
 next prev up                                                                                                                                                                        
 bitcoin/src/rest.cpp:533                                                                │ bitcoin/src/rest.cpp:663                                                                 
                                                                                         │                                                                                          
    case RESTResponseFormat::BINARY: {                                                   │      case RESTResponseFormat::BINARY: {                                                  
        CDataStream ssResp{SER_NETWORK, PROTOCOL_VERSION};                               │          CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());      
        ssResp << filter;                                                                │          ssTx << tx;                                                                     
                                                                                         │                                                                                          
        std::string binaryResp = ssResp.str();                                           │          std::string binaryTx = ssTx.str();                                              
        req->WriteHeader("Content-Type", "application/octet-stream");                    │          req->WriteHeader("Content-Type", "application/octet-stream");                   
        req->WriteReply(HTTP_OK, binaryResp);                                            │          req->WriteReply(HTTP_OK, binaryTx);                                             
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::HEX: {                                                      │      case RESTResponseFormat::HEX: {                                                     
        CDataStream ssResp{SER_NETWORK, PROTOCOL_VERSION};                               │          CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION | RPCSerializationFlags());      
        ssResp << filter;                                                                │          ssTx << tx;                                                                     
                                                                                         │                                                                                          
        std::string strHex = HexStr(ssResp) + "\n";                                      │          std::string strHex = HexStr(ssTx) + "\n";                                       
        req->WriteHeader("Content-Type", "text/plain");                                  │          req->WriteHeader("Content-Type", "text/plain");                                 
        req->WriteReply(HTTP_OK, strHex);                                                │          req->WriteReply(HTTP_OK, strHex);                                               
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    case RESTResponseFormat::JSON: {                                                     │      case RESTResponseFormat::JSON: {                                                    
        UniValue ret(UniValue::VOBJ);                                                    │          UniValue objTx(UniValue::VOBJ);                                                 
        ret.pushKV("filter", HexStr(filter.GetEncodedFilter()));                         │          TxToUniv(*tx, /*block_hash=*/hashBlock, /*entry=*/ objTx);                      
        std::string strJSON = ret.write() + "\n";                                        │          std::string strJSON = objTx.write() + "\n";                                     
        req->WriteHeader("Content-Type", "application/json");                            │          req->WriteHeader("Content-Type", "application/json");                           
        req->WriteReply(HTTP_OK, strJSON);                                               │          req->WriteReply(HTTP_OK, strJSON);                                              
        return true;                                                                     │          return true;                                                                    
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    default: {                                                                           │      default: {                                                                          
        return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava │          return RESTERR(req, HTTP_NOT_FOUND, "output format not found (available: " + Ava
    }                                                                                    │      }                                                                                   
    }                                                                                    │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/script/interpreter.cpp:1026                                                 │ dogecoin/src/script/interpreter.cpp:852                                                  
                                                                                         │                                                                                          
                    // (in -- hash)                                                      │                      // (in -- hash)                                                     
                    if (stack.size() < 1)                                                │                      if (stack.size() < 1)                                               
                        return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);    │                          return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);   
                    valtype& vch = stacktop(-1);                                         │                      valtype& vch = stacktop(-1);                                        
                    valtype vchHash((opcode == OP_RIPEMD160 || opcode == OP_SHA1 || opco │                      valtype vchHash((opcode == OP_RIPEMD160 || opcode == OP_SHA1 || opco
                    if (opcode == OP_RIPEMD160)                                          │                      if (opcode == OP_RIPEMD160)                                         
                        CRIPEMD160().Write(vch.data(), vch.size()).Finalize(vchHash.data │                          CRIPEMD160().Write(vch.data(), vch.size()).Finalize(vchHash.data
                    else if (opcode == OP_SHA1)                                          │                      else if (opcode == OP_SHA1)                                         
                        CSHA1().Write(vch.data(), vch.size()).Finalize(vchHash.data());  │                          CSHA1().Write(vch.data(), vch.size()).Finalize(vchHash.data()); 
                    else if (opcode == OP_SHA256)                                        │                      else if (opcode == OP_SHA256)                                       
                        CSHA256().Write(vch.data(), vch.size()).Finalize(vchHash.data()) │                          CSHA256().Write(vch.data(), vch.size()).Finalize(vchHash.data())
                    else if (opcode == OP_HASH160)                                       │                      else if (opcode == OP_HASH160)                                      
                        CHash160().Write(vch).Finalize(vchHash);                         │                          CHash160().Write(vch.data(), vch.size()).Finalize(vchHash.data()
                    else if (opcode == OP_HASH256)                                       │                      else if (opcode == OP_HASH256)                                      
                        CHash256().Write(vch).Finalize(vchHash);                         │                          CHash256().Write(vch.data(), vch.size()).Finalize(vchHash.data()
                    popstack(stack);                                                     │                      popstack(stack);                                                    
                    stack.push_back(vchHash);                                            │                      stack.push_back(vchHash);                                           
                }                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/wallet/wallet.cpp:1164                                                     │ dogecoin/src/wallet/wallet.cpp:1102                                                      
                                                                                         │                                                                                          
            // Block is 'more conflicted' than current confirm; update.                  │              // If the orig tx was not in block/mempool, none of its spends can be in mem
            // Mark transaction as conflicted with this block.                           │              assert(!wtx.InMempool());                                                   
            wtx.nIndex = -1;                                                             │              wtx.nIndex = -1;                                                            
            wtx.hashBlock = hashBlock;                                                   │              wtx.setAbandoned();                                                         
            wtx.MarkDirty();                                                             │              wtx.MarkDirty();                                                            
            walletdb.WriteTx(wtx);                                                       │              walletdb.WriteTx(wtx);                                                      
            // Iterate over all its outputs, and mark transactions in the wallet that sp │              NotifyTransactionChanged(this, wtx.GetHash(), CT_UPDATED);                  
            TxSpends::const_iterator iter = mapTxSpends.lower_bound(COutPoint(now, 0));  │              // Iterate over all its outputs, and mark transactions in the wallet that sp
                                                                                         │              TxSpends::const_iterator iter = mapTxSpends.lower_bound(COutPoint(hashTx, 0)
            while (iter != mapTxSpends.end() && iter->first.hash == now) {               │              while (iter != mapTxSpends.end() && iter->first.hash == now) {              
                 if (!done.count(iter->second)) {                                        │                  if (!done.count(iter->second)) {                                        
                     todo.insert(iter->second);                                          │                      todo.insert(iter->second);                                          
                 }                                                                       │                  }                                                                       
                 iter++;                                                                 │                  iter++;                                                                 
            }                                                                            │              }                                                                           
            // If a transaction changes 'conflicted' state, that changes the balance     │              // If a transaction changes 'conflicted' state, that changes the balance    
            // available of the outputs it spends. So force those to be recomputed       │              // available of the outputs it spends. So force those to be recomputed      
            BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                                │              BOOST_FOREACH(const CTxIn& txin, wtx.tx->vin)                               
            {                                                                            │              {                                                                           
                if (mapWallet.count(txin.prevout.hash))                                  │                  if (mapWallet.count(txin.prevout.hash))                                 
                    mapWallet[txin.prevout.hash].MarkDirty();                            │                      mapWallet[txin.prevout.hash].MarkDirty();                           
            }                                                                            │              }                                                                           
        }                                                                                │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/test/addrman_tests.cpp:196                                                  │ bitcoin/src/test/addrman_tests.cpp:257                                                   
                                                                                         │                                                                                          
    auto addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckR │      auto addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckR
                                                                                         │                                                                                          
    CNetAddr source = ResolveIP("252.2.2.2");                                            │      CNetAddr source = ResolveIP("252.2.2.2");                                           
                                                                                         │                                                                                          
    uint32_t num_addrs{0};                                                               │      uint32_t num_addrs{0};                                                              
                                                                                         │                                                                                          
    BOOST_CHECK_EQUAL(addrman->size(), num_addrs);                                       │      BOOST_CHECK_EQUAL(addrman->size(), num_addrs);                                      
                                                                                         │                                                                                          
    while (num_addrs < 22) { // Magic number! 250.1.1.1 - 250.1.1.22 do not collide with │      while (num_addrs < 35) { // Magic number! 250.1.1.1 - 250.1.1.35 do not collide in t
        CService addr = ResolveService("250.1.1." + ToString(++num_addrs));              │          CService addr = ResolveService("250.1.1." + ToString(++num_addrs));             
        BOOST_CHECK(addrman->Add({CAddress(addr, NODE_NONE)}, source));                  │          BOOST_CHECK(addrman->Add({CAddress(addr, NODE_NONE)}, source));                 
                                                                                         │                                                                                          
        // Test: No collision in new table yet.                                          │          // Test: Add to tried without collision                                         
        BOOST_CHECK_EQUAL(addrman->size(), num_addrs);                                   │          BOOST_CHECK(addrman->Good(CAddress(addr, NODE_NONE)));                          
                                                                                         │                                                                                          
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // Test: new table collision!                                                        │      // Test: Unable to add to tried table due to collision!                             
    CService addr1 = ResolveService("250.1.1." + ToString(++num_addrs));                 │      CService addr1 = ResolveService("250.1.1." + ToString(++num_addrs));                
    uint32_t collisions{1};                                                              │                                                                                          
    BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));                     │      BOOST_CHECK(addrman->Add({CAddress(addr1, NODE_NONE)}, source));                    
    BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);                          │      BOOST_CHECK(!addrman->Good(CAddress(addr1, NODE_NONE)));                            
                                                                                         │                                                                                          
                                                                                         │      // Test: Add the next address to tried without collision                            
    CService addr2 = ResolveService("250.1.1." + ToString(++num_addrs));                 │      CService addr2 = ResolveService("250.1.1." + ToString(++num_addrs));                
    BOOST_CHECK(addrman->Add({CAddress(addr2, NODE_NONE)}, source));                     │      BOOST_CHECK(addrman->Add({CAddress(addr2, NODE_NONE)}, source));                    
    BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);                          │      BOOST_CHECK(addrman->Good(CAddress(addr2, NODE_NONE)));                             
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:78                                   │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:54                                  
0x6983c00fe00104a, 0x804570322e054e6, 0x804570322e054e4, 0x15673387e0a4e4, 0x804570322e0 │  0x6983c00fe00104a, 0x804570322e054e6, 0x804570322e054e4, 0x15673387e0a4e4, 0x804570322e 
 next prev up                                                                                                                                                                        
 dogecoin/src/validation.cpp:2620                                                        │ bitcoin/src/validation.cpp:3068                                                          
                                                                                         │                                                                                          
                                                                                         │      AssertLockNotHeld(m_chainstate_mutex);                                              
                                                                                         │      AssertLockNotHeld(::cs_main);                                                       
    {                                                                                    │      {                                                                                   
        LOCK(cs_main);                                                                   │          LOCK(cs_main);                                                                  
        if (pindex->nChainWork < chainActive.Tip()->nChainWork) {                        │          if (pindex->nChainWork < m_chain.Tip()->nChainWork) {                           
            // Nothing to do, this block is not at the tip.                              │              // Nothing to do, this block is not at the tip.                             
            return true;                                                                 │              return true;                                                                
        }                                                                                │          }                                                                               
        if (chainActive.Tip()->nChainWork > nLastPreciousChainwork) {                    │          if (m_chain.Tip()->nChainWork > nLastPreciousChainwork) {                       
            // The chain has been extended since the last call, reset the counter.       │              // The chain has been extended since the last call, reset the counter.      
            nBlockReverseSequenceId = -1;                                                │              nBlockReverseSequenceId = -1;                                               
        }                                                                                │          }                                                                               
        nLastPreciousChainwork = chainActive.Tip()->nChainWork;                          │          nLastPreciousChainwork = m_chain.Tip()->nChainWork;                             
        setBlockIndexCandidates.erase(pindex);                                           │          setBlockIndexCandidates.erase(pindex);                                          
        pindex->nSequenceId = nBlockReverseSequenceId;                                   │          pindex->nSequenceId = nBlockReverseSequenceId;                                  
        if (nBlockReverseSequenceId > std::numeric_limits<int32_t>::min()) {             │          if (nBlockReverseSequenceId > std::numeric_limits<int32_t>::min()) {            
            // We can't keep reducing the counter if somebody really wants to            │              // We can't keep reducing the counter if somebody really wants to           
            // call preciousblock 2**31-1 times on the same set of tips...               │              // call preciousblock 2**31-1 times on the same set of tips...              
            nBlockReverseSequenceId--;                                                   │              nBlockReverseSequenceId--;                                                  
        }                                                                                │          }                                                                               
        if (pindex->IsValid(BLOCK_VALID_TRANSACTIONS) && pindex->nChainTx) {             │          if (pindex->IsValid(BLOCK_VALID_TRANSACTIONS) && pindex->HaveTxsDownloaded()) { 
            setBlockIndexCandidates.insert(pindex);                                      │              setBlockIndexCandidates.insert(pindex);                                     
            PruneBlockIndexCandidates();                                                 │              PruneBlockIndexCandidates();                                                
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    return ActivateBestChain(state, params);                                             │      return ActivateBestChain(state, std::shared_ptr<const CBlock>());                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/bitcoin-tx.cpp:139                                                         │ bitcoin/src/bitcoin-tx.cpp:152                                                           
                                                                                         │                                                                                          
    // separate NAME:FILENAME in string                                                  │      // separate NAME:FILENAME in string                                                 
    size_t pos = strInput.find(':');                                                     │      size_t pos = strInput.find(':');                                                    
    if ((pos == std::string::npos) ||                                                    │      if ((pos == std::string::npos) ||                                                   
        (pos == 0) ||                                                                    │          (pos == 0) ||                                                                   
        (pos == (strInput.size() - 1)))                                                  │          (pos == (strInput.size() - 1)))                                                 
        throw std::runtime_error("Register load requires NAME:FILENAME");                │          throw std::runtime_error("Register load requires NAME:FILENAME");               
                                                                                         │                                                                                          
    std::string key = strInput.substr(0, pos);                                           │      std::string key = strInput.substr(0, pos);                                          
    std::string filename = strInput.substr(pos + 1, std::string::npos);                  │      std::string filename = strInput.substr(pos + 1, std::string::npos);                 
                                                                                         │                                                                                          
    FILE *f = fopen(filename.c_str(), "r");                                              │      FILE *f = fsbridge::fopen(filename.c_str(), "r");                                   
    if (!f) {                                                                            │      if (!f) {                                                                           
        std::string strErr = "Cannot open file " + filename;                             │          std::string strErr = "Cannot open file " + filename;                            
        throw std::runtime_error(strErr);                                                │          throw std::runtime_error(strErr);                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // load file chunks into one big buffer                                              │      // load file chunks into one big buffer                                             
    std::string valStr;                                                                  │      std::string valStr;                                                                 
    while ((!feof(f)) && (!ferror(f))) {                                                 │      while ((!feof(f)) && (!ferror(f))) {                                                
        char buf[4096];                                                                  │          char buf[4096];                                                                 
        int bread = fread(buf, 1, sizeof(buf), f);                                       │          int bread = fread(buf, 1, sizeof(buf), f);                                      
        if (bread <= 0)                                                                  │          if (bread <= 0)                                                                 
            break;                                                                       │              break;                                                                      
                                                                                         │                                                                                          
        valStr.insert(valStr.size(), buf, bread);                                        │          valStr.insert(valStr.size(), buf, bread);                                       
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    int error = ferror(f);                                                               │      int error = ferror(f);                                                              
    fclose(f);                                                                           │      fclose(f);                                                                          
                                                                                         │                                                                                          
    if (error) {                                                                         │      if (error) {                                                                        
        std::string strErr = "Error reading file " + filename;                           │          std::string strErr = "Error reading file " + filename;                          
        throw std::runtime_error(strErr);                                                │          throw std::runtime_error(strErr);                                               
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // evaluate as JSON buffer register                                                  │      // evaluate as JSON buffer register                                                 
    RegisterSetJson(key, valStr);                                                        │      RegisterSetJson(key, valStr);                                                       
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:66                                   │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:45                                  
0x38d905ab028567a, 0x789fa6ed3b44d72, 0x789fa6ed3b44d70, 0x74ec857e93d828c, 0x789fa6ed3b │  0x38d905ab028567a, 0x789fa6ed3b44d72, 0x789fa6ed3b44d70, 0x74ec857e93d828c, 0x789fa6ed3 
 next prev up                                                                                                                                                                        
 bitcoin/src/qt/platformstyle.cpp:27                                                     │ dogecoin/src/qt/platformstyle.cpp:32                                                     
                                                                                         │                                                                                          
/* Local functions for colorizing single-color images */                                 │  /* Local functions for colorizing single-color images */                                
                                                                                         │                                                                                          
void MakeSingleColorImage(QImage& img, const QColor& colorbase)                          │  void MakeSingleColorImage(QImage& img, const QColor& colorbase)                         
{                                                                                        │  {                                                                                       
    img = img.convertToFormat(QImage::Format_ARGB32);                                    │      img = img.convertToFormat(QImage::Format_ARGB32);                                   
    for (int x = img.width(); x--; )                                                     │      for (int x = img.width(); x--; )                                                    
    {                                                                                    │      {                                                                                   
        for (int y = img.height(); y--; )                                                │          for (int y = img.height(); y--; )                                               
        {                                                                                │          {                                                                               
            const QRgb rgb = img.pixel(x, y);                                            │              const QRgb rgb = img.pixel(x, y);                                           
            img.setPixel(x, y, qRgba(colorbase.red(), colorbase.green(), colorbase.blue( │              img.setPixel(x, y, qRgba(colorbase.red(), colorbase.green(), colorbase.blue(
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
QIcon ColorizeIcon(const QIcon& ico, const QColor& colorbase)                            │  QIcon ColorizeIcon(const QIcon& ico, const QColor& colorbase)                           
{                                                                                        │  {                                                                                       
    QIcon new_ico;                                                                       │      QIcon new_ico;                                                                      
    for (const QSize& sz : ico.availableSizes())                                         │      QSize sz;                                                                           
                                                                                         │      Q_FOREACH(sz, ico.availableSizes())                                                 
    {                                                                                    │      {                                                                                   
        QImage img(ico.pixmap(sz).toImage());                                            │          QImage img(ico.pixmap(sz).toImage());                                           
        MakeSingleColorImage(img, colorbase);                                            │          MakeSingleColorImage(img, colorbase);                                           
        new_ico.addPixmap(QPixmap::fromImage(img));                                      │          new_ico.addPixmap(QPixmap::fromImage(img));                                     
    }                                                                                    │      }                                                                                   
    return new_ico;                                                                      │      return new_ico;                                                                     
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
QImage ColorizeImage(const QString& filename, const QColor& colorbase)                   │  QImage ColorizeImage(const QString& filename, const QColor& colorbase)                  
{                                                                                        │  {                                                                                       
    QImage img(filename);                                                                │      QImage img(filename);                                                               
    MakeSingleColorImage(img, colorbase);                                                │      MakeSingleColorImage(img, colorbase);                                               
    return img;                                                                          │      return img;                                                                         
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
QIcon ColorizeIcon(const QString& filename, const QColor& colorbase)                     │  QIcon ColorizeIcon(const QString& filename, const QColor& colorbase)                    
{                                                                                        │  {                                                                                       
    return QIcon(QPixmap::fromImage(ColorizeImage(filename, colorbase)));                │      return QIcon(QPixmap::fromImage(ColorizeImage(filename, colorbase)));               
}                                                                                        │  }                                                                                       
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/validation.cpp:3414                                                         │ dogecoin/src/validation.cpp:3041                                                         
                                                                                         │                                                                                          
    std::vector<unsigned char> commitment;                                               │      std::vector<unsigned char> commitment;                                              
    int commitpos = GetWitnessCommitmentIndex(block);                                    │      int commitpos = GetWitnessCommitmentIndex(block);                                   
    std::vector<unsigned char> ret(32, 0x00);                                            │      std::vector<unsigned char> ret(32, 0x00);                                           
    if (commitpos == NO_WITNESS_COMMITMENT) {                                            │      if (consensusParams.vDeployments[Consensus::DEPLOYMENT_SEGWIT].nTimeout != 0) {     
        uint256 witnessroot = BlockWitnessMerkleRoot(block, nullptr);                    │          if (commitpos == -1) {                                                          
        CHash256().Write(witnessroot).Write(ret).Finalize(witnessroot);                  │              uint256 witnessroot = BlockWitnessMerkleRoot(block, NULL);                  
        CTxOut out;                                                                      │              CHash256().Write(witnessroot.begin(), 32).Write(&ret[0], 32).Finalize(witnes
        out.nValue = 0;                                                                  │              CTxOut out;                                                                 
        out.scriptPubKey.resize(MINIMUM_WITNESS_COMMITMENT);                             │              out.nValue = 0;                                                             
        out.scriptPubKey[0] = OP_RETURN;                                                 │              out.scriptPubKey.resize(38);                                                
        out.scriptPubKey[1] = 0x24;                                                      │              out.scriptPubKey[0] = OP_RETURN;                                            
        out.scriptPubKey[2] = 0xaa;                                                      │              out.scriptPubKey[1] = 0x24;                                                 
        out.scriptPubKey[3] = 0x21;                                                      │              out.scriptPubKey[2] = 0xaa;                                                 
        out.scriptPubKey[4] = 0xa9;                                                      │              out.scriptPubKey[3] = 0x21;                                                 
        out.scriptPubKey[5] = 0xed;                                                      │              out.scriptPubKey[4] = 0xa9;                                                 
        memcpy(&out.scriptPubKey[6], witnessroot.begin(), 32);                           │              out.scriptPubKey[5] = 0xed;                                                 
        commitment = std::vector<unsigned char>(out.scriptPubKey.begin(), out.scriptPubK │              memcpy(&out.scriptPubKey[6], witnessroot.begin(), 32);                      
        CMutableTransaction tx(*block.vtx[0]);                                           │              commitment = std::vector<unsigned char>(out.scriptPubKey.begin(), out.script
        tx.vout.push_back(out);                                                          │              CMutableTransaction tx(*block.vtx[0]);                                      
        block.vtx[0] = MakeTransactionRef(std::move(tx));                                │              tx.vout.push_back(out);                                                     
                                                                                         │              block.vtx[0] = MakeTransactionRef(std::move(tx));                           
                                                                                         │          }                                                                               
    }                                                                                    │      }                                                                                   
    UpdateUncommittedBlockStructures(block, pindexPrev, consensusParams);                │      UpdateUncommittedBlockStructures(block, pindexPrev, consensusParams);               
    return commitment;                                                                   │      return commitment;                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/wallet/wallet.cpp:2154                                                     │ bitcoin/src/wallet/coinselection.cpp:217                                                 
                                                                                         │                                                                                          
                                                                                         │              for (unsigned int i = 0; i < groups.size(); i++)                            
                                                                                         │              {                                                                           
                //The solver here uses a randomized algorithm,                           │                  //The solver here uses a randomized algorithm,                          
                //the randomness serves no real security purpose but is just             │                  //the randomness serves no real security purpose but is just            
                //needed to prevent degenerate behavior and it is important              │                  //needed to prevent degenerate behavior and it is important             
                //that the rng is fast. We do not use a constant random sequence,        │                  //that the rng is fast. We do not use a constant random sequence,       
                //because there may be some privacy improvement by making                │                  //because there may be some privacy improvement by making               
                //the selection random.                                                  │                  //the selection random.                                                 
                if (nPass == 0 ? insecure_rand.rand32()&1 : !vfIncluded[i])              │                  if (nPass == 0 ? insecure_rand.randbool() : !vfIncluded[i])             
                {                                                                        │                  {                                                                       
                    nTotal += vValue[i].first;                                           │                      nTotal += groups[i].GetSelectionAmount();                           
                    vfIncluded[i] = true;                                                │                      vfIncluded[i] = true;                                               
                    if (nTotal >= nTargetValue)                                          │                      if (nTotal >= nTargetValue)                                         
                    {                                                                    │                      {                                                                   
                        fReachedTarget = true;                                           │                          fReachedTarget = true;                                          
                                                                                         │                          // If the total is between nTargetValue and nBest, it's our new 
                                                                                         │                          // approximation.                                               
                        if (nTotal < nBest)                                              │                          if (nTotal < nBest)                                             
                        {                                                                │                          {                                                               
                            nBest = nTotal;                                              │                              nBest = nTotal;                                             
                            vfBest = vfIncluded;                                         │                              vfBest = vfIncluded;                                        
                        }                                                                │                          }                                                               
                        nTotal -= vValue[i].first;                                       │                          nTotal -= groups[i].GetSelectionAmount();                       
                        vfIncluded[i] = false;                                           │                          vfIncluded[i] = false;                                          
                    }                                                                    │                      }                                                                   
                }                                                                        │                  }                                                                       
                                                                                         │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/rpc/server.cpp:375                                                         │ bitcoin/src/rpc/request.cpp:159                                                          
                                                                                         │                                                                                          
    // Parse request                                                                     │      // Parse request                                                                    
    if (!valRequest.isObject())                                                          │      if (!valRequest.isObject())                                                         
        throw JSONRPCError(RPC_INVALID_REQUEST, "Invalid Request object");               │          throw JSONRPCError(RPC_INVALID_REQUEST, "Invalid Request object");              
    const UniValue& request = valRequest.get_obj();                                      │      const UniValue& request = valRequest.get_obj();                                     
                                                                                         │                                                                                          
    // Parse id now so errors from here on will have the id                              │      // Parse id now so errors from here on will have the id                             
    id = find_value(request, "id");                                                      │      id = find_value(request, "id");                                                     
                                                                                         │                                                                                          
    // Parse method                                                                      │      // Parse method                                                                     
    UniValue valMethod = find_value(request, "method");                                  │      UniValue valMethod = find_value(request, "method");                                 
    if (valMethod.isNull())                                                              │      if (valMethod.isNull())                                                             
        throw JSONRPCError(RPC_INVALID_REQUEST, "Missing method");                       │          throw JSONRPCError(RPC_INVALID_REQUEST, "Missing method");                      
    if (!valMethod.isStr())                                                              │      if (!valMethod.isStr())                                                             
        throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string");              │          throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string");             
    strMethod = valMethod.get_str();                                                     │      strMethod = valMethod.get_str();                                                    
    if (strMethod != "getblocktemplate")                                                 │      if (fLogIPs)                                                                        
        LogPrint("rpc", "ThreadRPCServer method=%s\n", SanitizeString(strMethod));       │          LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s peeraddr=%s\n", Sanitize
                                                                                         │              this->authUser, this->peerAddr);                                            
                                                                                         │      else                                                                                
                                                                                         │          LogPrint(BCLog::RPC, "ThreadRPCServer method=%s user=%s\n", SanitizeString(strMe
                                                                                         │                                                                                          
    // Parse params                                                                      │      // Parse params                                                                     
    UniValue valParams = find_value(request, "params");                                  │      UniValue valParams = find_value(request, "params");                                 
    if (valParams.isArray() || valParams.isObject())                                     │      if (valParams.isArray() || valParams.isObject())                                    
        params = valParams;                                                              │          params = valParams;                                                             
    else if (valParams.isNull())                                                         │      else if (valParams.isNull())                                                        
        params = UniValue(UniValue::VARR);                                               │          params = UniValue(UniValue::VARR);                                              
    else                                                                                 │      else                                                                                
        throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array or object");    │          throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array or object");   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:54                                   │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:36                                  
0x2450096792a5c5c, 0x610014271011c, 0x610014271011e, 0x1f0cb811314ea88, 0x610014271011a, │  0x2450096792a5c5c, 0x610014271011c, 0x610014271011e, 0x1f0cb811314ea88, 0x610014271011a 
 next prev up                                                                                                                                                                        
 dogecoin/src/versionbits.cpp:139                                                        │ bitcoin/src/versionbits.cpp:176                                                          
                                                                                         │                                                                                          
/**                                                                                      │  /**                                                                                     
 * Class to implement versionbits logic.                                                 │   * Class to implement versionbits logic.                                                
 */                                                                                      │   */                                                                                     
class VersionBitsConditionChecker : public AbstractThresholdConditionChecker {           │  class VersionBitsConditionChecker : public AbstractThresholdConditionChecker {          
private:                                                                                 │  private:                                                                                
    const Consensus::DeploymentPos id;                                                   │      const Consensus::DeploymentPos id;                                                  
                                                                                         │                                                                                          
protected:                                                                               │  protected:                                                                              
    int64_t BeginTime(const Consensus::Params& params) const { return params.vDeployment │      int64_t BeginTime(const Consensus::Params& params) const override { return params.vD
    int64_t EndTime(const Consensus::Params& params) const { return params.vDeployments[ │      int64_t EndTime(const Consensus::Params& params) const override { return params.vDep
    int Period(const Consensus::Params& params) const { return params.nMinerConfirmation │      int MinActivationHeight(const Consensus::Params& params) const override { return par
    int Threshold(const Consensus::Params& params) const { return params.nRuleChangeActi │      int Period(const Consensus::Params& params) const override { return params.nMinerCon
                                                                                         │      int Threshold(const Consensus::Params& params) const override { return params.nRuleC
                                                                                         │                                                                                          
    bool Condition(const CBlockIndex* pindex, const Consensus::Params& params) const     │      bool Condition(const CBlockIndex* pindex, const Consensus::Params& params) const ove
    {                                                                                    │      {                                                                                   
        return (((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && ( │          return (((pindex->nVersion & VERSIONBITS_TOP_MASK) == VERSIONBITS_TOP_BITS) && (
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
public:                                                                                  │  public:                                                                                 
    VersionBitsConditionChecker(Consensus::DeploymentPos id_) : id(id_) {}               │      explicit VersionBitsConditionChecker(Consensus::DeploymentPos id_) : id(id_) {}     
    uint32_t Mask(const Consensus::Params& params) const { return ((uint32_t)1) << param │      uint32_t Mask(const Consensus::Params& params) const { return ((uint32_t)1) << param
};                                                                                       │  };                                                                                      
                                                                                         │                                                                                          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:26                                                   │ bitcoin/src/test/crypto_tests.cpp:30                                                     
                                                                                         │                                                                                          
    Out hash;                                                                            │      Out hash;                                                                           
    BOOST_CHECK(out.size() == h.OUTPUT_SIZE);                                            │      BOOST_CHECK(out.size() == h.OUTPUT_SIZE);                                           
    hash.resize(out.size());                                                             │      hash.resize(out.size());                                                            
    {                                                                                    │      {                                                                                   
        // Test that writing the whole input string at once works.                       │          // Test that writing the whole input string at once works.                      
        Hasher(h).Write((unsigned char*)&in[0], in.size()).Finalize(&hash[0]);           │          Hasher(h).Write((const uint8_t*)in.data(), in.size()).Finalize(hash.data());    
        BOOST_CHECK(hash == out);                                                        │          BOOST_CHECK(hash == out);                                                       
    }                                                                                    │      }                                                                                   
    for (int i=0; i<32; i++) {                                                           │      for (int i=0; i<32; i++) {                                                          
        // Test that writing the string broken up in random pieces works.                │          // Test that writing the string broken up in random pieces works.               
        Hasher hasher(h);                                                                │          Hasher hasher(h);                                                               
        size_t pos = 0;                                                                  │          size_t pos = 0;                                                                 
        while (pos < in.size()) {                                                        │          while (pos < in.size()) {                                                       
            size_t len = insecure_rand() % ((in.size() - pos + 1) / 2 + 1);              │              size_t len = InsecureRandRange((in.size() - pos + 1) / 2 + 1);              
            hasher.Write((unsigned char*)&in[pos], len);                                 │              hasher.Write((const uint8_t*)in.data() + pos, len);                         
            pos += len;                                                                  │              pos += len;                                                                 
            if (pos > 0 && pos + 2 * out.size() > in.size() && pos < in.size()) {        │              if (pos > 0 && pos + 2 * out.size() > in.size() && pos < in.size()) {       
                // Test that writing the rest at once to a copy of a hasher works.       │                  // Test that writing the rest at once to a copy of a hasher works.      
                Hasher(hasher).Write((unsigned char*)&in[pos], in.size() - pos).Finalize │                  Hasher(hasher).Write((const uint8_t*)in.data() + pos, in.size() - pos).F
                BOOST_CHECK(hash == out);                                                │                  BOOST_CHECK(hash == out);                                               
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
        hasher.Finalize(&hash[0]);                                                       │          hasher.Finalize(hash.data());                                                   
        BOOST_CHECK(hash == out);                                                        │          BOOST_CHECK(hash == out);                                                       
    }                                                                                    │      }                                                                                   
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/transactiontablemodel.cpp:663                                           │ bitcoin/src/qt/transactiontablemodel.cpp:662                                             
                                                                                         │                                                                                          
    if(orientation == Qt::Horizontal)                                                    │      if(orientation == Qt::Horizontal)                                                   
    {                                                                                    │      {                                                                                   
        if(role == Qt::DisplayRole)                                                      │          if(role == Qt::DisplayRole)                                                     
        {                                                                                │          {                                                                               
            return columns[section];                                                     │              return columns[section];                                                    
        }                                                                                │          }                                                                               
        else if (role == Qt::TextAlignmentRole)                                          │          else if (role == Qt::TextAlignmentRole)                                         
        {                                                                                │          {                                                                               
            return column_alignments[section];                                           │              return column_alignments[section];                                          
        } else if (role == Qt::ToolTipRole)                                              │          } else if (role == Qt::ToolTipRole)                                             
        {                                                                                │          {                                                                               
            switch(section)                                                              │              switch(section)                                                             
            {                                                                            │              {                                                                           
            case Status:                                                                 │              case Status:                                                                
                return tr("Transaction status. Hover over this field to show number of c │                  return tr("Transaction status. Hover over this field to show number of c
            case Date:                                                                   │              case Date:                                                                  
                return tr("Date and time that the transaction was received.");           │                  return tr("Date and time that the transaction was received.");          
            case Type:                                                                   │              case Type:                                                                  
                return tr("Type of transaction.");                                       │                  return tr("Type of transaction.");                                      
            case Watchonly:                                                              │              case Watchonly:                                                             
                return tr("Whether or not a watch-only address is involved in this trans │                  return tr("Whether or not a watch-only address is involved in this trans
            case ToAddress:                                                              │              case ToAddress:                                                             
                return tr("User-defined intent/purpose of the transaction.");            │                  return tr("User-defined intent/purpose of the transaction.");           
            case Amount:                                                                 │              case Amount:                                                                
                return tr("Amount removed from or added to balance.");                   │                  return tr("Amount removed from or added to balance.");                  
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return QVariant();                                                                   │      return QVariant();                                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/optionsdialog.cpp:303                                                   │ bitcoin/src/qt/optionsdialog.cpp:397                                                     
                                                                                         │                                                                                          
    proxyType proxy;                                                                     │      Proxy proxy;                                                                        
    std::string strProxy;                                                                │      std::string strProxy;                                                               
    QString strDefaultProxyGUI;                                                          │      QString strDefaultProxyGUI;                                                         
                                                                                         │                                                                                          
    GetProxy(NET_IPV4, proxy);                                                           │      model->node().getProxy(NET_IPV4, proxy);                                            
    strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();              │      strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();             
    strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();              │      strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();             
    (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachIPv4->setChecked(true │      (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachIPv4->setChecked(true
                                                                                         │                                                                                          
    GetProxy(NET_IPV6, proxy);                                                           │      model->node().getProxy(NET_IPV6, proxy);                                            
    strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();              │      strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();             
    strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();              │      strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();             
    (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachIPv6->setChecked(true │      (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachIPv6->setChecked(true
                                                                                         │                                                                                          
    GetProxy(NET_TOR, proxy);                                                            │      model->node().getProxy(NET_ONION, proxy);                                           
    strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();              │      strProxy = proxy.proxy.ToStringIP() + ":" + proxy.proxy.ToStringPort();             
    strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();              │      strDefaultProxyGUI = ui->proxyIp->text() + ":" + ui->proxyPort->text();             
    (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachTor->setChecked(true) │      (strProxy == strDefaultProxyGUI.toStdString()) ? ui->proxyReachTor->setChecked(true)
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/test/util_tests.cpp:52                                                     │ bitcoin/src/test/util_tests.cpp:157                                                      
                                                                                         │                                                                                          
    std::vector<unsigned char> result;                                                   │      std::vector<unsigned char> result;                                                  
    std::vector<unsigned char> expected(ParseHex_expected, ParseHex_expected + sizeof(Pa │      std::vector<unsigned char> expected(ParseHex_expected, ParseHex_expected + sizeof(Pa
    // Basic test vector                                                                 │      // Basic test vector                                                                
    result = ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb │      result = ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb
    BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect │      BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expect
                                                                                         │                                                                                          
    // Spaces between bytes must be supported                                            │      // Spaces between bytes must be supported                                           
    result = ParseHex("12 34 56 78");                                                    │      result = ParseHex("12 34 56 78");                                                   
    BOOST_CHECK(result.size() == 4 && result[0] == 0x12 && result[1] == 0x34 && result[2 │      BOOST_CHECK(result.size() == 4 && result[0] == 0x12 && result[1] == 0x34 && result[2
                                                                                         │                                                                                          
    // Leading space must be supported (used in CDBEnv::Salvage)                         │      // Leading space must be supported (used in BerkeleyEnvironment::Salvage)           
    result = ParseHex(" 89 34 56 78");                                                   │      result = ParseHex(" 89 34 56 78");                                                  
    BOOST_CHECK(result.size() == 4 && result[0] == 0x89 && result[1] == 0x34 && result[2 │      BOOST_CHECK(result.size() == 4 && result[0] == 0x89 && result[1] == 0x34 && result[2
                                                                                         │                                                                                          
    // Stop parsing at invalid value                                                     │      // Stop parsing at invalid value                                                    
    result = ParseHex("1234 invalid 1234");                                              │      result = ParseHex("1234 invalid 1234");                                             
    BOOST_CHECK(result.size() == 2 && result[0] == 0x12 && result[1] == 0x34);           │      BOOST_CHECK(result.size() == 2 && result[0] == 0x12 && result[1] == 0x34);          
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/support/lockedpool.cpp:325                                                 │ bitcoin/src/support/lockedpool.cpp:340                                                   
                                                                                         │                                                                                          
    bool locked;                                                                         │      bool locked;                                                                        
    // If this is the first arena, handle this specially: Cap the upper size             │      // If this is the first arena, handle this specially: Cap the upper size            
    // by the process limit. This makes sure that the first arena will at least          │      // by the process limit. This makes sure that the first arena will at least         
    // be locked. An exception to this is if the process limit is 0:                     │      // be locked. An exception to this is if the process limit is 0:                    
    // in this case no memory can be locked at all so we'll skip past this logic.        │      // in this case no memory can be locked at all so we'll skip past this logic.       
    if (arenas.empty()) {                                                                │      if (arenas.empty()) {                                                               
        size_t limit = allocator->GetLimit();                                            │          size_t limit = allocator->GetLimit();                                           
        if (limit > 0) {                                                                 │          if (limit > 0) {                                                                
            size = std::min(size, limit);                                                │              size = std::min(size, limit);                                               
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    void *addr = allocator->AllocateLocked(size, &locked);                               │      void *addr = allocator->AllocateLocked(size, &locked);                              
    if (!addr) {                                                                         │      if (!addr) {                                                                        
        return false;                                                                    │          return false;                                                                   
    }                                                                                    │      }                                                                                   
    if (locked) {                                                                        │      if (locked) {                                                                       
        cumulative_bytes_locked += size;                                                 │          cumulative_bytes_locked += size;                                                
    } else if (lf_cb) { // Call the locking-failed callback if locking failed            │      } else if (lf_cb) { // Call the locking-failed callback if locking failed           
        if (!lf_cb()) { // If the callback returns false, free the memory and fail, othe │          if (!lf_cb()) { // If the callback returns false, free the memory and fail, othe
            allocator->FreeLocked(addr, size);                                           │              allocator->FreeLocked(addr, size);                                          
            return false;                                                                │              return false;                                                               
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    arenas.emplace_back(allocator.get(), addr, size, align);                             │      arenas.emplace_back(allocator.get(), addr, size, align);                            
    return true;                                                                         │      return true;                                                                        
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 dogecoin/src/qt/askpassphrasedialog.cpp:238                                             │ bitcoin/src/qt/askpassphrasedialog.cpp:238                                               
                                                                                         │                                                                                          
    /* Detect Caps Lock.                                                                 │      /* Detect Caps Lock.                                                                
     * There is no good OS-independent way to check a key state in Qt, but we            │       * There is no good OS-independent way to check a key state in Qt, but we           
     * can detect Caps Lock by checking for the following condition:                     │       * can detect Caps Lock by checking for the following condition:                    
     * Shift key is down and the result is a lower case character, or                    │       * Shift key is down and the result is a lower case character, or                   
     * Shift key is not down and the result is an upper case character.                  │       * Shift key is not down and the result is an upper case character.                 
     */                                                                                  │       */                                                                                 
    if (event->type() == QEvent::KeyPress) {                                             │      if (event->type() == QEvent::KeyPress) {                                            
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);                                 │          QKeyEvent *ke = static_cast<QKeyEvent *>(event);                                
        QString str = ke->text();                                                        │          QString str = ke->text();                                                       
        if (str.length() != 0) {                                                         │          if (str.length() != 0) {                                                        
            const QChar *psz = str.unicode();                                            │              const QChar *psz = str.unicode();                                           
            bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0;                    │              bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0;                   
            if ((fShift && *psz >= 'a' && *psz <= 'z') || (!fShift && *psz >= 'A' && *ps │              if ((fShift && *psz >= 'a' && *psz <= 'z') || (!fShift && *psz >= 'A' && *ps
                fCapsLock = true;                                                        │                  fCapsLock = true;                                                       
                ui->capsLabel->setText(tr("Warning: The Caps Lock key is on!"));         │                  ui->capsLabel->setText(tr("Warning: The Caps Lock key is on!"));        
            } else if (psz->isLetter()) {                                                │              } else if (psz->isLetter()) {                                               
                fCapsLock = false;                                                       │                  fCapsLock = false;                                                      
                ui->capsLabel->clear();                                                  │                  ui->capsLabel->clear();                                                 
            }                                                                            │              }                                                                           
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return QDialog::eventFilter(object, event);                                          │      return QDialog::eventFilter(object, event);                                         
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/policy/rbf.cpp:13                                                           │ dogecoin/src/policy/rbf.cpp:18                                                           
                                                                                         │                                                                                          
    AssertLockHeld(pool.cs);                                                             │      AssertLockHeld(pool.cs);                                                            
                                                                                         │                                                                                          
    CTxMemPool::setEntries ancestors;                                                    │      CTxMemPool::setEntries setAncestors;                                                
                                                                                         │                                                                                          
    // First check the transaction itself.                                               │      // First check the transaction itself.                                              
    if (SignalsOptInRBF(tx)) {                                                           │      if (SignalsOptInRBF(tx)) {                                                          
        return RBFTransactionState::REPLACEABLE_BIP125;                                  │          return RBF_TRANSACTIONSTATE_REPLACEABLE_BIP125;                                 
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // If this transaction is not in our mempool, then we can't be sure                  │      // If this transaction is not in our mempool, then we can't be sure                 
    // we will know about all its inputs.                                                │      // we will know about all its inputs.                                               
    if (!pool.exists(GenTxid::Txid(tx.GetHash()))) {                                     │      if (!pool.exists(tx.GetHash())) {                                                   
        return RBFTransactionState::UNKNOWN;                                             │          return RBF_TRANSACTIONSTATE_UNKNOWN;                                            
    }                                                                                    │      }                                                                                   
                                                                                         │                                                                                          
    // If all the inputs have nSequence >= maxint-1, it still might be                   │      // If all the inputs have nSequence >= maxint-1, it still might be                  
    // signaled for RBF if any unconfirmed parents have signaled.                        │      // signaled for RBF if any unconfirmed parents have signaled.                       
    uint64_t noLimit = std::numeric_limits<uint64_t>::max();                             │      uint64_t noLimit = std::numeric_limits<uint64_t>::max();                            
    std::string dummy;                                                                   │      std::string dummy;                                                                  
    CTxMemPoolEntry entry = *pool.mapTx.find(tx.GetHash());                              │      CTxMemPoolEntry entry = *pool.mapTx.find(tx.GetHash());                             
    pool.CalculateMemPoolAncestors(entry, ancestors, noLimit, noLimit, noLimit, noLimit, │      pool.CalculateMemPoolAncestors(entry, setAncestors, noLimit, noLimit, noLimit, noLim
                                                                                         │                                                                                          
    for (CTxMemPool::txiter it : ancestors) {                                            │      BOOST_FOREACH(CTxMemPool::txiter it, setAncestors) {                                
        if (SignalsOptInRBF(it->GetTx())) {                                              │          if (SignalsOptInRBF(it->GetTx())) {                                             
            return RBFTransactionState::REPLACEABLE_BIP125;                              │              return RBF_TRANSACTIONSTATE_REPLACEABLE_BIP125;                             
        }                                                                                │          }                                                                               
    }                                                                                    │      }                                                                                   
    return RBFTransactionState::FINAL;                                                   │      return RBF_TRANSACTIONSTATE_FINAL;                                                  
}                                                                                        │                                                                                          
 next prev up                                                                                                                                                                        
 bitcoin/src/minisketch/src/fields/clmul_8bytes.cpp:31                                   │ bitcoin/src/minisketch/src/fields/generic_8bytes.cpp:27                                  
0xd0c3a82c902426, 0x232aa54103915e, 0x232aa54103915c, 0x1763e291e61699c, 0x232aa54103915 │  0xd0c3a82c902426, 0x232aa54103915e, 0x232aa54103915c, 0x1763e291e61699c, 0x232aa5410391 
 next prev up                                                                                                                                                                        
 dogecoin/src/test/crypto_tests.cpp:204                                                  │ bitcoin/src/test/crypto_tests.cpp:207                                                    
                                                                                         │                                                                                          
    TestRIPEMD160("", "9c1185a5c5e9fc54612808977ee8f548b2258d31");                       │      TestRIPEMD160("", "9c1185a5c5e9fc54612808977ee8f548b2258d31");                      
    TestRIPEMD160("abc", "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc");                    │      TestRIPEMD160("abc", "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc");                   
    TestRIPEMD160("message digest", "5d0689ef49d2fae572b881b123a85ffa21595f36");         │      TestRIPEMD160("message digest", "5d0689ef49d2fae572b881b123a85ffa21595f36");        
    TestRIPEMD160("secure hash algorithm", "20397528223b6a5f4cbc2808aba0464e645544f9");  │      TestRIPEMD160("secure hash algorithm", "20397528223b6a5f4cbc2808aba0464e645544f9"); 
    TestRIPEMD160("RIPEMD160 is considered to be safe", "a7d78608c7af8a8e728778e81576870 │      TestRIPEMD160("RIPEMD160 is considered to be safe", "a7d78608c7af8a8e728778e81576870
    TestRIPEMD160("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",            │      TestRIPEMD160("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",           
                  "12a053384a9c0c88e405a06c27dcf49ada62eb2b");                           │                    "12a053384a9c0c88e405a06c27dcf49ada62eb2b");                          
    TestRIPEMD160("For this sample, this 63-byte string will be used as input data",     │      TestRIPEMD160("For this sample, this 63-byte string will be used as input data",    
                  "de90dbfee14b63fb5abf27c2ad4a82aaa5f27a11");                           │                    "de90dbfee14b63fb5abf27c2ad4a82aaa5f27a11");                          
    TestRIPEMD160("This is exactly 64 bytes long, not counting the terminating byte",    │      TestRIPEMD160("This is exactly 64 bytes long, not counting the terminating byte",   
                  "eda31d51d3a623b81e19eb02e24ff65d27d67b37");                           │                    "eda31d51d3a623b81e19eb02e24ff65d27d67b37");                          
    TestRIPEMD160(std::string(1000000, 'a'), "52783243c1697bdbe16d37f97f68f08325dc1528") │      TestRIPEMD160(std::string(1000000, 'a'), "52783243c1697bdbe16d37f97f68f08325dc1528")
    TestRIPEMD160(test1, "464243587bd146ea835cdf57bdae582f25ec45f1");                    │      TestRIPEMD160(test1, "464243587bd146ea835cdf57bdae582f25ec45f1");                   
}                                                                                        │