60806040523480156200001157600080fd5b506040518060400160405280600981526020017f416d62726f62656e6500000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f414d424e000000000000000000000000000000000000000000000000000000008152506200009e62000092620000f660201b60201c565b620000fe60201b60201c565b8160049080519060200190620000b6929190620004ea565b508060059080519060200190620000cf929190620004ea565b505050620000f0336b033b2e3c9fd0803ce8000000620001c260201b60201c565b6200080d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000234576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b90620005fb565b60405180910390fd5b62000248600083836200037460201b60201c565b5080600660008282546200025d919062000656565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550630f3eae65640997e6e50902673398bc1d25f112ed64085774394d02028060005260016020526040600020720fffffffffffffffffffffffffffffffffffff815550508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003549190620006c4565b60405180910390a362000370600083836200042e60201b60201c565b5050565b60006002600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000404919062000656565b1062000423576200041b82620004c160201b60201c565b905062000427565b8190505b9392505050565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403620004bc576002600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600062066a44611b3983620004d79190620006e1565b620004e3919062000771565b9050919050565b828054620004f890620007d8565b90600052602060002090601f0160209004810192826200051c576000855562000568565b82601f106200053757805160ff191683800117855562000568565b8280016001018555821562000568579182015b82811115620005675782518255916020019190600101906200054a565b5b5090506200057791906200057b565b5090565b5b80821115620005965760008160009055506001016200057c565b5090565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005e3601f836200059a565b9150620005f082620005ab565b602082019050919050565b600060208201905081810360008301526200061681620005d4565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000663826200061d565b915062000670836200061d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006a857620006a762000627565b5b828201905092915050565b620006be816200061d565b82525050565b6000602082019050620006db6000830184620006b3565b92915050565b6000620006ee826200061d565b9150620006fb836200061d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000737576200073662000627565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200077e826200061d565b91506200078b836200061d565b9250826200079e576200079d62000742565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007f157607f821691505b602082108103620008075762000806620007a9565b5b50919050565b611ae4806200081d6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063b8a0d75b11610066578063b8a0d75b146102c5578063c4e8ee21146102e1578063dd62ed3e14610311578063f2fde38b1461034157610100565b80638da5cb5b1461022957806395d89b4114610247578063a457c2d714610265578063a9059cbb1461029557610100565b8063313ce567116100d3578063313ce567146101a157806339509351146101bf57806370a08231146101ef578063715018a61461021f57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61035d565b60405161011a919061107c565b60405180910390f35b61013d6004803603810190610138919061113c565b6103ef565b60405161014a9190611197565b60405180910390f35b61015b610412565b60405161016891906111c1565b60405180910390f35b61018b600480360381019061018691906111dc565b61041c565b6040516101989190611197565b60405180910390f35b6101a961044b565b6040516101b6919061124b565b60405180910390f35b6101d960048036038101906101d4919061113c565b610454565b6040516101e69190611197565b60405180910390f35b61020960048036038101906102049190611266565b61048b565b60405161021691906111c1565b60405180910390f35b6102276104d4565b005b6102316104e8565b60405161023e91906112a2565b60405180910390f35b61024f610511565b60405161025c919061107c565b60405180910390f35b61027f600480360381019061027a919061113c565b6105a3565b60405161028c9190611197565b60405180910390f35b6102af60048036038101906102aa919061113c565b61061a565b6040516102bc9190611197565b60405180910390f35b6102df60048036038101906102da9190611322565b61063d565b005b6102fb60048036038101906102f69190611266565b61070e565b60405161030891906111c1565b60405180910390f35b61032b60048036038101906103269190611382565b610757565b60405161033891906111c1565b60405180910390f35b61035b60048036038101906103569190611266565b6107de565b005b60606004805461036c906113f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610398906113f1565b80156103e55780601f106103ba576101008083540402835291602001916103e5565b820191906000526020600020905b8154815290600101906020018083116103c857829003601f168201915b5050505050905090565b6000806103fa610861565b9050610407818585610869565b600191505092915050565b6000600654905090565b600080610427610861565b9050610434858285610a32565b61043f858585610abe565b60019150509392505050565b60006012905090565b60008061045f610861565b90506104808185856104718589610757565b61047b9190611451565b610869565b600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104dc610d3c565b6104e66000610dba565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610520906113f1565b80601f016020809104026020016040519081016040528092919081815260200182805461054c906113f1565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b5050505050905090565b6000806105ae610861565b905060006105bc8286610757565b905083811015610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f890611519565b60405180910390fd5b61060e8286868403610869565b60019250505092915050565b600080610625610861565b9050610632818585610abe565b600191505092915050565b6106456104e8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067c57600080fd5b60005b828290508110156107085783600360008585858181106106a2576106a1611539565b5b90506020020160208101906106b79190611266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061070090611568565b91505061067f565b50505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107e6610d3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90611622565b60405180910390fd5b61085e81610dba565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf906116b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90611746565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a2591906111c1565b60405180910390a3505050565b6000610a3e8484610757565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ab85781811015610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa1906117b2565b60405180910390fd5b610ab78484848403610869565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490611844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b93906118d6565b60405180910390fd5b6000610ba9848484610e7e565b90506000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990611968565b60405180910390fd5b828103600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610d2291906111c1565b60405180910390a3610d35858585610f2c565b5050505050565b610d44610861565b73ffffffffffffffffffffffffffffffffffffffff16610d626104e8565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf906119d4565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006002600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0c9190611451565b10610f2157610f1a82610fbe565b9050610f25565b8190505b9392505050565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403610fb9576002600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b600062066a44611b3983610fd291906119f4565b610fdc9190611a7d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561101d578082015181840152602081019050611002565b8381111561102c576000848401525b50505050565b6000601f19601f8301169050919050565b600061104e82610fe3565b6110588185610fee565b9350611068818560208601610fff565b61107181611032565b840191505092915050565b600060208201905081810360008301526110968184611043565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110d3826110a8565b9050919050565b6110e3816110c8565b81146110ee57600080fd5b50565b600081359050611100816110da565b92915050565b6000819050919050565b61111981611106565b811461112457600080fd5b50565b60008135905061113681611110565b92915050565b600080604083850312156111535761115261109e565b5b6000611161858286016110f1565b925050602061117285828601611127565b9150509250929050565b60008115159050919050565b6111918161117c565b82525050565b60006020820190506111ac6000830184611188565b92915050565b6111bb81611106565b82525050565b60006020820190506111d660008301846111b2565b92915050565b6000806000606084860312156111f5576111f461109e565b5b6000611203868287016110f1565b9350506020611214868287016110f1565b925050604061122586828701611127565b9150509250925092565b600060ff82169050919050565b6112458161122f565b82525050565b6000602082019050611260600083018461123c565b92915050565b60006020828403121561127c5761127b61109e565b5b600061128a848285016110f1565b91505092915050565b61129c816110c8565b82525050565b60006020820190506112b76000830184611293565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126112e2576112e16112bd565b5b8235905067ffffffffffffffff8111156112ff576112fe6112c2565b5b60208301915083602082028301111561131b5761131a6112c7565b5b9250929050565b60008060006040848603121561133b5761133a61109e565b5b600061134986828701611127565b935050602084013567ffffffffffffffff81111561136a576113696110a3565b5b611376868287016112cc565b92509250509250925092565b600080604083850312156113995761139861109e565b5b60006113a7858286016110f1565b92505060206113b8858286016110f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061140957607f821691505b60208210810361141c5761141b6113c2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061145c82611106565b915061146783611106565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561149c5761149b611422565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611503602583610fee565b915061150e826114a7565b604082019050919050565b60006020820190508181036000830152611532816114f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061157382611106565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036115a5576115a4611422565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061160c602683610fee565b9150611617826115b0565b604082019050919050565b6000602082019050818103600083015261163b816115ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061169e602483610fee565b91506116a982611642565b604082019050919050565b600060208201905081810360008301526116cd81611691565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611730602283610fee565b915061173b826116d4565b604082019050919050565b6000602082019050818103600083015261175f81611723565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061179c601d83610fee565b91506117a782611766565b602082019050919050565b600060208201905081810360008301526117cb8161178f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061182e602583610fee565b9150611839826117d2565b604082019050919050565b6000602082019050818103600083015261185d81611821565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118c0602383610fee565b91506118cb82611864565b604082019050919050565b600060208201905081810360008301526118ef816118b3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611952602683610fee565b915061195d826118f6565b604082019050919050565b6000602082019050818103600083015261198181611945565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119be602083610fee565b91506119c982611988565b602082019050919050565b600060208201905081810360008301526119ed816119b1565b9050919050565b60006119ff82611106565b9150611a0a83611106565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a4357611a42611422565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a8882611106565b9150611a9383611106565b925082611aa357611aa2611a4e565b5b82820490509291505056fea2646970667358221220d0e4f16d361b72df2db3a465d90e3c36d1a318fe58d438816484e6eb0c27068764736f6c634300080d0033