610160604052348015610010575f5ffd5b506040518060400160405280600c81526020017f416d6269656e7420555344540000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600c81526020017f416d6269656e74205553445400000000000000000000000000000000000000008152506040518060400160405280600481526020017f555344540000000000000000000000000000000000000000000000000000000081525081600390816100f99190610856565b5080600490816101099190610856565b50505061012060058361020260201b90919060201c565b610120818152505061013c60068261020260201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017961024f60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f6101c66102a960201b60201c565b90506101fc336101da61030560201b60201c565b600a6101e69190610a8d565b836101f19190610ad7565b61030d60201b60201c565b50610e80565b5f6020835110156102235761021c8361039260201b60201c565b9050610249565b82610233836103f760201b60201c565b5f0190816102419190610856565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e05161010051463060405160200161028e959493929190610b7e565b60405160208183030381529060405280519060200120905090565b5f5f4244336040516020016102c093929190610c34565b604051602081830303815290604052805190602001205f1c90505f633b9aca00640218711a00836102f19190610c9d565b6102fb9190610ccd565b9050809250505090565b5f6006905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361037d575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103749190610d00565b60405180910390fd5b61038e5f838361040060201b60201c565b5050565b5f5f829050601f815111156103de57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016103d59190610d7f565b60405180910390fd5b8051816103ea90610dcc565b5f1c175f1b915050919050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610450578060025f8282546104449190610ccd565b9250508190555061051e565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156104d9578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104d093929190610e32565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610565578060025f82825403925050819055506105af565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161060c9190610e67565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061069457607f821691505b6020821081036106a7576106a6610650565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106ce565b61071386836106ce565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61075761075261074d8461072b565b610734565b61072b565b9050919050565b5f819050919050565b6107708361073d565b61078461077c8261075e565b8484546106da565b825550505050565b5f5f905090565b61079b61078c565b6107a6818484610767565b505050565b5b818110156107c9576107be5f82610793565b6001810190506107ac565b5050565b601f82111561080e576107df816106ad565b6107e8846106bf565b810160208510156107f7578190505b61080b610803856106bf565b8301826107ab565b50505b505050565b5f82821c905092915050565b5f61082e5f1984600802610813565b1980831691505092915050565b5f610846838361081f565b9150826002028217905092915050565b61085f82610619565b67ffffffffffffffff81111561087857610877610623565b5b610882825461067d565b61088d8282856107cd565b5f60209050601f8311600181146108be575f84156108ac578287015190505b6108b6858261083b565b86555061091d565b601f1984166108cc866106ad565b5f5b828110156108f3578489015182556001820191506020850194506020810190506108ce565b86831015610910578489015161090c601f89168261081f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156109a75780860481111561098357610982610925565b5b60018516156109925780820291505b80810290506109a085610952565b9450610967565b94509492505050565b5f826109bf5760019050610a7a565b816109cc575f9050610a7a565b81600181146109e257600281146109ec57610a1b565b6001915050610a7a565b60ff8411156109fe576109fd610925565b5b8360020a915084821115610a1557610a14610925565b5b50610a7a565b5060208310610133831016604e8410600b8410161715610a505782820a905083811115610a4b57610a4a610925565b5b610a7a565b610a5d848484600161095e565b92509050818404811115610a7457610a73610925565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a978261072b565b9150610aa283610a81565b9250610acf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846109b0565b905092915050565b5f610ae18261072b565b9150610aec8361072b565b9250828202610afa8161072b565b91508282048414831517610b1157610b10610925565b5b5092915050565b5f819050919050565b610b2a81610b18565b82525050565b610b398161072b565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b6882610b3f565b9050919050565b610b7881610b5e565b82525050565b5f60a082019050610b915f830188610b21565b610b9e6020830187610b21565b610bab6040830186610b21565b610bb86060830185610b30565b610bc56080830184610b6f565b9695505050505050565b5f819050919050565b610be9610be48261072b565b610bcf565b82525050565b5f8160601b9050919050565b5f610c0582610bef565b9050919050565b5f610c1682610bfb565b9050919050565b610c2e610c2982610b5e565b610c0c565b82525050565b5f610c3f8286610bd8565b602082019150610c4f8285610bd8565b602082019150610c5f8284610c1d565b601482019150819050949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ca78261072b565b9150610cb28361072b565b925082610cc257610cc1610c70565b5b828206905092915050565b5f610cd78261072b565b9150610ce28361072b565b9250828201905080821115610cfa57610cf9610925565b5b92915050565b5f602082019050610d135f830184610b6f565b92915050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d5182610619565b610d5b8185610d19565b9350610d6b818560208601610d29565b610d7481610d37565b840191505092915050565b5f6020820190508181035f830152610d978184610d47565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610dc38251610b18565b80915050919050565b5f610dd682610d9f565b82610de084610da9565b9050610deb81610db8565b92506020821015610e2b57610e267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026106ce565b831692505b5050919050565b5f606082019050610e455f830186610b6f565b610e526020830185610b30565b610e5f6040830184610b30565b949350505050565b5f602082019050610e7a5f830184610b30565b92915050565b60805160a05160c05160e051610100516101205161014051611b54610ed15f395f610a1501525f6109da01525f610f0e01525f610eed01525f6108d801525f61092e01525f6109570152611b545ff3fe608060405234801561000f575f5ffd5b50600436106100cd575f3560e01c806370a082311161008a57806395d89b411161006457806395d89b411461022d578063a9059cbb1461024b578063d505accf1461027b578063dd62ed3e14610297576100cd565b806370a08231146101a95780637ecebe00146101d957806384b0196e14610209576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d5780633644e5151461018b575b5f5ffd5b6100d96102c7565b6040516100e691906113c4565b60405180910390f35b61010960048036038101906101049190611475565b610357565b60405161011691906114cd565b60405180910390f35b610127610379565b60405161013491906114f5565b60405180910390f35b6101576004803603810190610152919061150e565b610382565b60405161016491906114cd565b60405180910390f35b6101756103b0565b6040516101829190611579565b60405180910390f35b6101936103b8565b6040516101a091906115aa565b60405180910390f35b6101c360048036038101906101be91906115c3565b6103c6565b6040516101d091906114f5565b60405180910390f35b6101f360048036038101906101ee91906115c3565b61040b565b60405161020091906114f5565b60405180910390f35b61021161041c565b60405161022497969594939291906116ee565b60405180910390f35b6102356104c1565b60405161024291906113c4565b60405180910390f35b61026560048036038101906102609190611475565b610551565b60405161027291906114cd565b60405180910390f35b610295600480360381019061029091906117c4565b610573565b005b6102b160048036038101906102ac9190611861565b6106b8565b6040516102be91906114f5565b60405180910390f35b6060600380546102d6906118cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610302906118cc565b801561034d5780601f106103245761010080835404028352916020019161034d565b820191905f5260205f20905b81548152906001019060200180831161033057829003601f168201915b5050505050905090565b5f5f61036161073a565b905061036e818585610741565b600191505092915050565b5f600254905090565b5f5f61038c61073a565b9050610399858285610753565b6103a48585856107e5565b60019150509392505050565b5f6006905090565b5f6103c16108d5565b905090565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6104158261098b565b9050919050565b5f6060805f5f5f606061042d6109d1565b610435610a0c565b46305f5f1b5f67ffffffffffffffff811115610454576104536118fc565b5b6040519080825280602002602001820160405280156104825781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6060600480546104d0906118cc565b80601f01602080910402602001604051908101604052809291908181526020018280546104fc906118cc565b80156105475780601f1061051e57610100808354040283529160200191610547565b820191905f5260205f20905b81548152906001019060200180831161052a57829003601f168201915b5050505050905090565b5f5f61055b61073a565b90506105688185856107e5565b600191505092915050565b834211156105b857836040517f627913020000000000000000000000000000000000000000000000000000000081526004016105af91906114f5565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886105e68c610a47565b896040516020016105fc96959493929190611929565b6040516020818303038152906040528051906020012090505f61061e82610a9a565b90505f61062d82878787610ab3565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106a157808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610698929190611988565b60405180910390fd5b6106ac8a8a8a610741565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61074e8383836001610ae1565b505050565b5f61075e84846106b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107df57818110156107d0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016107c7939291906119af565b60405180910390fd5b6107de84848484035f610ae1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610855575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161084c91906119e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108c5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108bc91906119e4565b60405180910390fd5b6108d0838383610cb0565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561095057507f000000000000000000000000000000000000000000000000000000000000000046145b1561097d577f00000000000000000000000000000000000000000000000000000000000000009050610988565b610985610ec9565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610a0760057f0000000000000000000000000000000000000000000000000000000000000000610f5e90919063ffffffff16565b905090565b6060610a4260067f0000000000000000000000000000000000000000000000000000000000000000610f5e90919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610aac610aa66108d5565b8361100b565b9050919050565b5f5f5f5f610ac38888888861104b565b925092509250610ad38282611132565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b51575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b4891906119e4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc1575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610bb891906119e4565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610caa578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ca191906114f5565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d00578060025f828254610cf49190611a2a565b92505081905550610dce565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610d89578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d80939291906119af565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e15578060025f8282540392505081905550610e5f565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ebc91906114f5565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001610f43959493929190611a5d565b60405160208183030381529060405280519060200120905090565b606060ff5f1b8314610f7a57610f7383611294565b9050611005565b818054610f86906118cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb2906118cc565b8015610ffd5780601f10610fd457610100808354040283529160200191610ffd565b820191905f5260205f20905b815481529060010190602001808311610fe057829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611087575f600385925092509250611128565b5f6001888888886040515f81526020016040526040516110aa9493929190611aae565b6020604051602081039080840390855afa1580156110ca573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361111b575f60015f5f1b93509350935050611128565b805f5f5f1b935093509350505b9450945094915050565b5f600381111561114557611144611af1565b5b82600381111561115857611157611af1565b5b0315611290576001600381111561117257611171611af1565b5b82600381111561118557611184611af1565b5b036111bc576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156111d0576111cf611af1565b5b8260038111156111e3576111e2611af1565b5b0361122757805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161121e91906114f5565b60405180910390fd5b60038081111561123a57611239611af1565b5b82600381111561124d5761124c611af1565b5b0361128f57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161128691906115aa565b60405180910390fd5b5b5050565b60605f6112a083611306565b90505f602067ffffffffffffffff8111156112be576112bd6118fc565b5b6040519080825280601f01601f1916602001820160405280156112f05781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f60ff835f1c169050601f81111561134b576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61139682611354565b6113a0818561135e565b93506113b081856020860161136e565b6113b98161137c565b840191505092915050565b5f6020820190508181035f8301526113dc818461138c565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611411826113e8565b9050919050565b61142181611407565b811461142b575f5ffd5b50565b5f8135905061143c81611418565b92915050565b5f819050919050565b61145481611442565b811461145e575f5ffd5b50565b5f8135905061146f8161144b565b92915050565b5f5f6040838503121561148b5761148a6113e4565b5b5f6114988582860161142e565b92505060206114a985828601611461565b9150509250929050565b5f8115159050919050565b6114c7816114b3565b82525050565b5f6020820190506114e05f8301846114be565b92915050565b6114ef81611442565b82525050565b5f6020820190506115085f8301846114e6565b92915050565b5f5f5f60608486031215611525576115246113e4565b5b5f6115328682870161142e565b93505060206115438682870161142e565b925050604061155486828701611461565b9150509250925092565b5f60ff82169050919050565b6115738161155e565b82525050565b5f60208201905061158c5f83018461156a565b92915050565b5f819050919050565b6115a481611592565b82525050565b5f6020820190506115bd5f83018461159b565b92915050565b5f602082840312156115d8576115d76113e4565b5b5f6115e58482850161142e565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611622816115ee565b82525050565b61163181611407565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61166981611442565b82525050565b5f61167a8383611660565b60208301905092915050565b5f602082019050919050565b5f61169c82611637565b6116a68185611641565b93506116b183611651565b805f5b838110156116e15781516116c8888261166f565b97506116d383611686565b9250506001810190506116b4565b5085935050505092915050565b5f60e0820190506117015f83018a611619565b8181036020830152611713818961138c565b90508181036040830152611727818861138c565b905061173660608301876114e6565b6117436080830186611628565b61175060a083018561159b565b81810360c08301526117628184611692565b905098975050505050505050565b6117798161155e565b8114611783575f5ffd5b50565b5f8135905061179481611770565b92915050565b6117a381611592565b81146117ad575f5ffd5b50565b5f813590506117be8161179a565b92915050565b5f5f5f5f5f5f5f60e0888a0312156117df576117de6113e4565b5b5f6117ec8a828b0161142e565b97505060206117fd8a828b0161142e565b965050604061180e8a828b01611461565b955050606061181f8a828b01611461565b94505060806118308a828b01611786565b93505060a06118418a828b016117b0565b92505060c06118528a828b016117b0565b91505092959891949750929550565b5f5f60408385031215611877576118766113e4565b5b5f6118848582860161142e565b92505060206118958582860161142e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806118e357607f821691505b6020821081036118f6576118f561189f565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c08201905061193c5f83018961159b565b6119496020830188611628565b6119566040830187611628565b61196360608301866114e6565b61197060808301856114e6565b61197d60a08301846114e6565b979650505050505050565b5f60408201905061199b5f830185611628565b6119a86020830184611628565b9392505050565b5f6060820190506119c25f830186611628565b6119cf60208301856114e6565b6119dc60408301846114e6565b949350505050565b5f6020820190506119f75f830184611628565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a3482611442565b9150611a3f83611442565b9250828201905080821115611a5757611a566119fd565b5b92915050565b5f60a082019050611a705f83018861159b565b611a7d602083018761159b565b611a8a604083018661159b565b611a9760608301856114e6565b611aa46080830184611628565b9695505050505050565b5f608082019050611ac15f83018761159b565b611ace602083018661156a565b611adb604083018561159b565b611ae8606083018461159b565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122057ecb125d33fb93db0d0776e9c16bc75b841db4550902ed98945caa0b7094f6264736f6c634300081c0033