0x60806040523480156200001157600080fd5b506040518060400160405280600881526020017f5363726f6c6c6572000000000000000000000000000000000000000000000000815250600360000190816200005b919062000434565b506040518060400160405280600381526020017f434d42000000000000000000000000000000000000000000000000000000000081525060036001019081620000a5919062000434565b506012600360020160006101000a81548160ff021916908360ff1602179055506298968060038001819055506003800154600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260028190555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062093a80600d819055506002600e819055506200051b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200023c57607f821691505b602082108103620002525762000251620001f4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002bc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200027d565b620002c886836200027d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003156200030f6200030984620002e0565b620002ea565b620002e0565b9050919050565b6000819050919050565b6200033183620002f4565b6200034962000340826200031c565b8484546200028a565b825550505050565b600090565b6200036062000351565b6200036d81848462000326565b505050565b5b8181101562000395576200038960008262000356565b60018101905062000373565b5050565b601f821115620003e457620003ae8162000258565b620003b9846200026d565b81016020851015620003c9578190505b620003e1620003d8856200026d565b83018262000372565b50505b505050565b600082821c905092915050565b60006200040960001984600802620003e9565b1980831691505092915050565b6000620004248383620003f6565b9150826002028217905092915050565b6200043f82620001ba565b67ffffffffffffffff8111156200045b576200045a620001c5565b5b62000467825462000223565b6200047482828562000399565b600060209050601f831160018114620004ac576000841562000497578287015190505b620004a3858262000416565b86555062000513565b601f198416620004bc8662000258565b60005b82811015620004e657848901518255600182019150602085019450602081019050620004bf565b8683101562000506578489015162000502601f891682620003f6565b8355505b6001600288020188555050505b505050505050565b611dc3806200052b6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063403fb4a81161008c578063a9059cbb11610066578063a9059cbb14610203578063b25612631461021f578063d82e39621461023b578063da35c6641461026b576100cf565b8063403fb4a8146101ab57806349c2a1a6146101c95780635aa6e675146101e5576100cf565b80630121b93f146100d4578063013cf08b146100f0578063095ea7b314610123578063132002fc1461015357806323b872dd14610171578063372500ab146101a1575b600080fd5b6100ee60048036038101906100e99190611074565b610289565b005b61010a60048036038101906101059190611074565b61048f565b60405161011a94939291906111f8565b60405180910390f35b61013d60048036038101906101389190611270565b610574565b60405161014a91906112cb565b60405180910390f35b61015b61058b565b60405161016891906112e6565b60405180910390f35b61018b60048036038101906101869190611301565b610591565b60405161019891906112cb565b60405180910390f35b6101a961077c565b005b6101b3610873565b6040516101c091906112e6565b60405180910390f35b6101e360048036038101906101de9190611489565b610879565b005b6101ed610a6f565b6040516101fa91906114d2565b60405180910390f35b61021d60048036038101906102189190611270565b610a95565b005b610239600480360381019061023491906114ed565b610b26565b005b610255600480360381019061025091906114ed565b610c76565b60405161026291906112e6565b60405180910390f35b610273610cef565b60405161028091906112e6565b60405180910390f35b6000601060008381526020019081526020016000209050600060028111156102b4576102b3611181565b5b8160030160009054906101000a900460ff1660028111156102d8576102d7611181565b5b14610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90611566565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161039a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610391906115d2565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160020160008282546103ed9190611621565b92505081905550813373ffffffffffffffffffffffffffffffffffffffff167fea66f58e474bc09f580000e81f31b334d171db387d0c6098ba47bd897741679b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161047a91906112e6565b60405180910390a361048b82610cf5565b5050565b60106020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010180546104d890611684565b80601f016020809104026020016040519081016040528092919081815260200182805461050490611684565b80156105515780601f1061052657610100808354040283529160200191610551565b820191906000526020600020905b81548152906001019060200180831161053457829003601f168201915b5050505050908060020154908060030160009054906101000a900460ff16905084565b6000610581338484610d4b565b6001905092915050565b600d5481565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c90611701565b60405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb9061176d565b60405180910390fd5b6106df848484610f14565b610771843384600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461076c919061178d565b610d4b565b600190509392505050565b600061078733610c76565b9050600081116107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39061180d565b60405180910390fd5b80600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461081b9190611621565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161086891906112e6565b60405180910390a250565b600e5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610909576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109009061189f565b60405180910390fd5b6000600f600081548092919061091e906118bf565b91905055905060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001600081526020016000600281111561096c5761096b611181565b5b8152506010600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816109de9190611ab3565b506040820151816002015560608201518160030160006101000a81548160ff02191690836002811115610a1457610a13611181565b5b02179055509050503373ffffffffffffffffffffffffffffffffffffffff16817f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd6384604051610a639190611b85565b60405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0e90611bf3565b60405180910390fd5b610b22338383610f14565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bad9061189f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d60405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060025442610ccb919061178d565b90506103e88183610cdc9190611c13565b610ce69190611c84565b92505050919050565b600f5481565b6000601060008381526020019081526020016000209050600e54816002015410610d475760018160030160006101000a81548160ff02191690836002811115610d4157610d40611181565b5b02179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190611d01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090611d6d565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f0791906112e6565b60405180910390a3505050565b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f63919061178d565b9250508190555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fb99190611621565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161101d91906112e6565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6110518161103e565b811461105c57600080fd5b50565b60008135905061106e81611048565b92915050565b60006020828403121561108a57611089611034565b5b60006110988482850161105f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110cc826110a1565b9050919050565b6110dc816110c1565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561111c578082015181840152602081019050611101565b60008484015250505050565b6000601f19601f8301169050919050565b6000611144826110e2565b61114e81856110ed565b935061115e8185602086016110fe565b61116781611128565b840191505092915050565b61117b8161103e565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106111c1576111c0611181565b5b50565b60008190506111d2826111b0565b919050565b60006111e2826111c4565b9050919050565b6111f2816111d7565b82525050565b600060808201905061120d60008301876110d3565b818103602083015261121f8186611139565b905061122e6040830185611172565b61123b60608301846111e9565b95945050505050565b61124d816110c1565b811461125857600080fd5b50565b60008135905061126a81611244565b92915050565b6000806040838503121561128757611286611034565b5b60006112958582860161125b565b92505060206112a68582860161105f565b9150509250929050565b60008115159050919050565b6112c5816112b0565b82525050565b60006020820190506112e060008301846112bc565b92915050565b60006020820190506112fb6000830184611172565b92915050565b60008060006060848603121561131a57611319611034565b5b60006113288682870161125b565b93505060206113398682870161125b565b925050604061134a8682870161105f565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61139682611128565b810181811067ffffffffffffffff821117156113b5576113b461135e565b5b80604052505050565b60006113c861102a565b90506113d4828261138d565b919050565b600067ffffffffffffffff8211156113f4576113f361135e565b5b6113fd82611128565b9050602081019050919050565b82818337600083830152505050565b600061142c611427846113d9565b6113be565b90508281526020810184848401111561144857611447611359565b5b61145384828561140a565b509392505050565b600082601f8301126114705761146f611354565b5b8135611480848260208601611419565b91505092915050565b60006020828403121561149f5761149e611034565b5b600082013567ffffffffffffffff8111156114bd576114bc611039565b5b6114c98482850161145b565b91505092915050565b60006020820190506114e760008301846110d3565b92915050565b60006020828403121561150357611502611034565b5b60006115118482850161125b565b91505092915050565b7f50726f706f73616c206973206e6f742070656e64696e672e0000000000000000600082015250565b60006115506018836110ed565b915061155b8261151a565b602082019050919050565b6000602082019050818103600083015261157f81611543565b9050919050565b7f4d75737420686f6c6420746f6b656e7320746f20766f74652e00000000000000600082015250565b60006115bc6019836110ed565b91506115c782611586565b602082019050919050565b600060208201905081810360008301526115eb816115af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061162c8261103e565b91506116378361103e565b925082820190508082111561164f5761164e6115f2565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061169c57607f821691505b6020821081036116af576116ae611655565b5b50919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006116eb6014836110ed565b91506116f6826116b5565b602082019050919050565b6000602082019050818103600083015261171a816116de565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b60006117576016836110ed565b915061176282611721565b602082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b60006117988261103e565b91506117a38361103e565b92508282039050818111156117bb576117ba6115f2565b5b92915050565b7f4e6f207265776172647320746f20636c61696d2e000000000000000000000000600082015250565b60006117f76014836110ed565b9150611802826117c1565b602082019050919050565b60006020820190508181036000830152611826816117ea565b9050919050565b7f4f6e6c7920676f7665726e616e63652063616e2063616c6c207468697320667560008201527f6e6374696f6e2e00000000000000000000000000000000000000000000000000602082015250565b60006118896027836110ed565b91506118948261182d565b604082019050919050565b600060208201905081810360008301526118b88161187c565b9050919050565b60006118ca8261103e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118fc576118fb6115f2565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026119697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261192c565b611973868361192c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006119b06119ab6119a68461103e565b61198b565b61103e565b9050919050565b6000819050919050565b6119ca83611995565b6119de6119d6826119b7565b848454611939565b825550505050565b600090565b6119f36119e6565b6119fe8184846119c1565b505050565b5b81811015611a2257611a176000826119eb565b600181019050611a04565b5050565b601f821115611a6757611a3881611907565b611a418461191c565b81016020851015611a50578190505b611a64611a5c8561191c565b830182611a03565b50505b505050565b600082821c905092915050565b6000611a8a60001984600802611a6c565b1980831691505092915050565b6000611aa38383611a79565b9150826002028217905092915050565b611abc826110e2565b67ffffffffffffffff811115611ad557611ad461135e565b5b611adf8254611684565b611aea828285611a26565b600060209050601f831160018114611b1d5760008415611b0b578287015190505b611b158582611a97565b865550611b7d565b601f198416611b2b86611907565b60005b82811015611b5357848901518255600182019150602085019450602081019050611b2e565b86831015611b705784890151611b6c601f891682611a79565b8355505b6001600288020188555050505b505050505050565b60006020820190508181036000830152611b9f8184611139565b905092915050565b7f496e73756666696369656e742062616c616e63652e0000000000000000000000600082015250565b6000611bdd6015836110ed565b9150611be882611ba7565b602082019050919050565b60006020820190508181036000830152611c0c81611bd0565b9050919050565b6000611c1e8261103e565b9150611c298361103e565b9250828202611c378161103e565b91508282048414831517611c4e57611c4d6115f2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611c8f8261103e565b9150611c9a8361103e565b925082611caa57611ca9611c55565b5b828204905092915050565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b6000611ceb601d836110ed565b9150611cf682611cb5565b602082019050919050565b60006020820190508181036000830152611d1a81611cde565b9050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b6000611d57601b836110ed565b9150611d6282611d21565b602082019050919050565b60006020820190508181036000830152611d8681611d4a565b905091905056fea26469706673582212204abfd9aa0898706666121e814b9e4c0f86cb1797db8e46d9c56c131d61d56c5364736f6c63430008110033