60806040526104b06006556000600755600060085560006009556104b0600a556104b0600b556000600c556000600d556000600e556104b0600f55600060105560006011556000601255600060135573cafab249af9781d9ccbd509dc1d45842d5495745601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cafab249af9781d9ccbd509dc1d45842d5495745601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cafab249af9781d9ccbd509dc1d45842d5495745601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cafab249af9781d9ccbd509dc1d45842d5495745601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a6200020791906200092f565b6301312d0062000218919062000a6c565b601a556000601b556009600a6200023091906200092f565b6161a86200023f919062000a6c565b601c556000601d60006101000a81548160ff0219169083151502179055503480156200026a57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73ffffffffffffffffffffffffffffffffffffffff1663c9c6539673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2306040518363ffffffff1660e01b8152600401620003129291906200088a565b602060405180830381600087803b1580156200032d57600080fd5b505af115801562000342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036891906200083c565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620003b891906200092f565b633b9aca00620003c9919062000a6c565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005e9601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a620005cc91906200092f565b633b9aca00620005dd919062000a6c565b6200073160201b60201c565b506200063e601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a6200062191906200092f565b633b9aca0062000632919062000a6c565b6200073160201b60201c565b506009600a6200064f91906200092f565b633b9aca0062000660919062000a6c565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200070391906200092f565b633b9aca0062000714919062000a6c565b604051620007239190620008b7565b60405180910390a362000b6e565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051620008139190620008b7565b60405180910390a36001905092915050565b600081519050620008368162000b54565b92915050565b6000602082840312156200084f57600080fd5b60006200085f8482850162000825565b91505092915050565b620008738162000acd565b82525050565b620008848162000b01565b82525050565b6000604082019050620008a1600083018562000868565b620008b0602083018462000868565b9392505050565b6000602082019050620008ce600083018462000879565b92915050565b6000808291508390505b60018511156200092657808604811115620008fe57620008fd62000b18565b5b60018516156200090e5780820291505b80810290506200091e8562000b47565b9450620008de565b94509492505050565b60006200093c8262000b01565b9150620009498362000b0b565b9250620009787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000980565b905092915050565b60008262000992576001905062000a65565b81620009a2576000905062000a65565b8160018114620009bb5760028114620009c657620009fc565b600191505062000a65565b60ff841115620009db57620009da62000b18565b5b8360020a915084821115620009f557620009f462000b18565b5b5062000a65565b5060208310610133831016604e8410600b841016171562000a365782820a90508381111562000a305762000a2f62000b18565b5b62000a65565b62000a458484846001620008d4565b9250905081840481111562000a5f5762000a5e62000b18565b5b81810290505b9392505050565b600062000a798262000b01565b915062000a868362000b01565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ac25762000ac162000b18565b5b828202905092915050565b600062000ada8262000ae1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b62000b5f8162000acd565b811462000b6b57600080fd5b50565b6141538062000b7e6000396000f3fe60806040526004361061037a5760003560e01c806370a08231116101d1578063b45bea5811610102578063de2f4777116100a0578063f887ea401161006f578063f887ea4014610d31578063f8b45b0514610d5c578063fa0fcbb314610d87578063fef0006e14610db057610381565b8063de2f477714610c77578063f2bcf6a614610cb4578063f2fde38b14610cf1578063f6cb8a1814610d1a57610381565b8063d28d8852116100dc578063d28d885214610bb9578063d4b4294e14610be4578063d8670ac914610c0f578063dd62ed3e14610c3a57610381565b8063b45bea5814610b3a578063b79b453314610b65578063c0647dfb14610b9057610381565b806399115c5c1161016f578063a9059cbb11610149578063a9059cbb14610a7e578063ad5c464814610abb578063b09f126614610ae6578063b12059e114610b1157610381565b806399115c5c146109eb578063a6a94c0114610a16578063a8aa1b3114610a5357610381565b80638a8c523c116101ab5780638a8c523c146109555780638c1a67841461096c57806393c173221461099757806395d89b41146109c057610381565b806370a08231146108c257806371b962a4146108ff578063893d20e81461092a57610381565b80632f54bf6e116102ab578063471ad90e11610249578063513e601911610223578063513e6019146107f2578063571ac8b01461081d578063688ba6361461085a5780636ebcf6071461088557610381565b8063471ad90e14610771578063484dd5871461079c5780634b09d3b2146107c757610381565b806332424aa31161028557806332424aa3146106c75780633eaaf86b146106f2578063400343e71461071d578063470624021461074657610381565b80632f54bf6e1461063657806331275ad914610673578063313ce5671461069c57610381565b806312804fda1161031857806318160ddd116102f257806318160ddd1461057857806323b872dd146105a35780632b112e49146105e05780632b14ca561461060b57610381565b806312804fda146104d557806312dcb1ca146104fe578063151ebae61461053b57610381565b8063095ea7b311610354578063095ea7b3146104195780630b006d60146104565780630bda7cd71461047f57806311704f52146104aa57610381565b8063024c2ddd146103865780630445b667146103c357806306fdde03146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b506103ad60048036038101906103a891906133fd565b610ded565b6040516103ba9190613bc9565b60405180910390f35b3480156103cf57600080fd5b506103d8610e12565b6040516103e59190613bc9565b60405180910390f35b3480156103fa57600080fd5b50610403610e18565b6040516104109190613ae7565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613527565b610e55565b60405161044d9190613ab1565b60405180910390f35b34801561046257600080fd5b5061047d6004803603810190610478919061358c565b610f47565b005b34801561048b57600080fd5b50610494610f99565b6040516104a19190613bc9565b60405180910390f35b3480156104b657600080fd5b506104bf610f9f565b6040516104cc9190613ab1565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906133ab565b610fb2565b005b34801561050a57600080fd5b50610525600480360381019061052091906133ab565b611188565b6040516105329190613ab1565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906133ab565b6111de565b60405161056f9190613ab1565b60405180910390f35b34801561058457600080fd5b5061058d6111fe565b60405161059a9190613bc9565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c5919061349c565b611222565b6040516105d79190613ab1565b60405180910390f35b3480156105ec57600080fd5b506105f561149f565b6040516106029190613bc9565b60405180910390f35b34801561061757600080fd5b506106206114ec565b60405161062d9190613bc9565b60405180910390f35b34801561064257600080fd5b5061065d600480360381019061065891906133ab565b6114f2565b60405161066a9190613ab1565b60405180910390f35b34801561067f57600080fd5b5061069a600480360381019061069591906135de565b61154b565b005b3480156106a857600080fd5b506106b16115a5565b6040516106be9190613c3e565b60405180910390f35b3480156106d357600080fd5b506106dc6115ae565b6040516106e99190613c3e565b60405180910390f35b3480156106fe57600080fd5b506107076115b3565b6040516107149190613bc9565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613669565b6115d3565b005b34801561075257600080fd5b5061075b6116ad565b6040516107689190613bc9565b60405180910390f35b34801561077d57600080fd5b506107866116b3565b6040516107939190613bc9565b60405180910390f35b3480156107a857600080fd5b506107b16116b9565b6040516107be9190613bc9565b60405180910390f35b3480156107d357600080fd5b506107dc6116bf565b6040516107e991906139f1565b60405180910390f35b3480156107fe57600080fd5b506108076116e5565b60405161081491906139f1565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f91906133ab565b61170b565b6040516108519190613ab1565b60405180910390f35b34801561086657600080fd5b5061086f61173a565b60405161087c91906139f1565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a791906133ab565b611760565b6040516108b99190613bc9565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906133ab565b611778565b6040516108f69190613bc9565b60405180910390f35b34801561090b57600080fd5b506109146117c1565b60405161092191906139f1565b60405180910390f35b34801561093657600080fd5b5061093f6117e7565b60405161094c91906139f1565b60405180910390f35b34801561096157600080fd5b5061096a611810565b005b34801561097857600080fd5b50610981611875565b60405161098e9190613bc9565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190613439565b61187b565b005b3480156109cc57600080fd5b506109d56119cd565b6040516109e29190613ae7565b60405180910390f35b3480156109f757600080fd5b50610a00611a0a565b604051610a0d9190613bc9565b60405180910390f35b348015610a2257600080fd5b50610a3d6004803603810190610a3891906133ab565b611a10565b604051610a4a9190613ab1565b60405180910390f35b348015610a5f57600080fd5b50610a68611a30565b604051610a7591906139f1565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190613527565b611a56565b604051610ab29190613ab1565b60405180910390f35b348015610ac757600080fd5b50610ad0611a6b565b604051610add91906139f1565b60405180910390f35b348015610af257600080fd5b50610afb611a83565b604051610b089190613ae7565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b3391906134eb565b611abc565b005b348015610b4657600080fd5b50610b4f611b5f565b604051610b5c9190613bc9565b60405180910390f35b348015610b7157600080fd5b50610b7a611b65565b604051610b879190613bc9565b60405180910390f35b348015610b9c57600080fd5b50610bb76004803603810190610bb291906134eb565b611b6b565b005b348015610bc557600080fd5b50610bce611c0e565b604051610bdb9190613ae7565b60405180910390f35b348015610bf057600080fd5b50610bf9611c47565b604051610c069190613bc9565b60405180910390f35b348015610c1b57600080fd5b50610c24611c4d565b604051610c319190613bc9565b60405180910390f35b348015610c4657600080fd5b50610c616004803603810190610c5c91906133fd565b611c53565b604051610c6e9190613bc9565b60405180910390f35b348015610c8357600080fd5b50610c9e6004803603810190610c9991906133ab565b611cda565b604051610cab9190613ab1565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd691906133ab565b611d30565b604051610ce89190613ab1565b60405180910390f35b348015610cfd57600080fd5b50610d186004803603810190610d1391906133d4565b611dce565b005b348015610d2657600080fd5b50610d2f611e90565b005b348015610d3d57600080fd5b50610d46611f43565b604051610d539190613acc565b60405180910390f35b348015610d6857600080fd5b50610d71611f69565b604051610d7e9190613bc9565b60405180910390f35b348015610d9357600080fd5b50610dae6004803603810190610da991906134eb565b611f6f565b005b348015610dbc57600080fd5b50610dd76004803603810190610dd291906133ab565b612012565b604051610de49190613ab1565b60405180910390f35b6002602052816000526040600020602052806000526040600020600091509150505481565b601c5481565b60606040518060400160405280600781526020017f444f4e5442555900000000000000000000000000000000000000000000000000815250905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f359190613bc9565b60405180910390a36001905092915050565b610f50336114f2565b610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690613b89565b60405180910390fd5b80601a8190555050565b601b5481565b601d60009054906101000a900460ff1681565b610fbb336114f2565b610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190613b89565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106090613ba9565b60405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c491906139f1565b60206040518083038186803b1580156110dc57600080fd5b505afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111491906135b5565b6040518363ffffffff1660e01b8152600401611131929190613a27565b602060405180830381600087803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111839190613563565b505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b60006009600a61120e9190613d93565b633b9aca0061121d9190613eb1565b905090565b60006009600a6112329190613d93565b633b9aca006112419190613eb1565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461148b5781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613b29565b60405180910390fd5b81600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461140a9190613f0b565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611496848484612032565b90509392505050565b60006114ab6000611778565b6114b661dead611778565b6009600a6114c49190613d93565b633b9aca006114d39190613eb1565b6114dd9190613f0b565b6114e79190613f0b565b905090565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b611554336114f2565b611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90613b89565b60405180910390fd5b81601b8190555080601c819055505050565b60006009905090565b600981565b6009600a6115c19190613d93565b633b9aca006115d09190613eb1565b81565b6115dc336114f2565b61161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613b89565b60405180910390fd5b876006819055508660078190555085600881905550846009819055508486888a6116459190613cb9565b61164f9190613cb9565b6116599190613cb9565b600a8190555083600b8190555082600c8190555081600d8190555080600e81905550808284866116899190613cb9565b6116939190613cb9565b61169d9190613cb9565b600f819055505050505050505050565b600a5481565b600c5481565b600d5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611733826009600a61171f9190613d93565b633b9aca0061172e9190613eb1565b610e55565b9050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611819336114f2565b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613b89565b60405180910390fd5b6001601d60006101000a81548160ff021916908315150217905550565b60065481565b611884336114f2565b6118c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ba90613b89565b60405180910390fd5b83601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60606040518060400160405280600781526020017f444f4e5442555900000000000000000000000000000000000000000000000000815250905090565b600b5481565b60056020528060005260406000206000915054906101000a900460ff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611a63338484612032565b905092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040518060400160405280600781526020017f444f4e544255590000000000000000000000000000000000000000000000000081525081565b611ac5336114f2565b611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613b89565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b60085481565b611b74336114f2565b611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90613b89565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6040518060400160405280600781526020017f444f4e544255590000000000000000000000000000000000000000000000000081525081565b60095481565b600e5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d3b336114f2565b611d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7190613b89565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611dd7336114f2565b611e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0d90613b89565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611e859190613a0c565b60405180910390a150565b611e99336114f2565b611ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecf90613b89565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1647604051611efc906139dc565b60006040518083038185875af1925050503d8060008114611f39576040519150601f19603f3d011682016040523d82523d6000602084013e611f3e565b606091505b505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611f78336114f2565b611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90613b89565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60046020528060005260406000206000915054906101000a900460ff1681565b6000601d60019054906101000a900460ff161561205b5761205484848461279e565b9050612797565b601d60009054906101000a900460ff16806120c1575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790613b09565b60405180910390fd5b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121ac57508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b9050801580156122065750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561229a57601a5484600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122599190613cb9565b10612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090613b69565b60405180910390fd5b5b8080156122a95750601b548410155b1561237157600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123155750601d60019054906101000a900460ff16155b80156123625750601c54600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b156123705761236f612949565b5b5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90613b49565b60405180910390fd5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461243e9190613f0b565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125285750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806125d45750600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d35750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b5b6125df576000612684565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126835750600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b61268e578461269a565b612699878787612f48565b5b905080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126e79190613cb9565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127879190613bc9565b60405180910390a3600193505050505b9392505050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990613b49565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286d9190613f0b565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fb9190613cb9565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b6001601d60016101000a81548160ff021916908315150217905550600060135460125460115460105461297c9190613cb9565b6129869190613cb9565b6129909190613cb9565b9050600060026013546129a39190613d0f565b90506000816129b130611778565b6129bb9190613f0b565b905060004790506000600267ffffffffffffffff811115612a05577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a335781602001602082028036833780820191505090505b5090503081600081518110612a71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612afa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612b98959493929190613be4565b600060405180830381600087803b158015612bb257600080fd5b505af1158015612bc6573d6000803e3d6000fd5b5050505060008247612bd89190613f0b565b9050600060028760105484612bed9190613eb1565b612bf79190613d0f565b612c019190613d0f565b905060008760115484612c149190613eb1565b612c1e9190613d0f565b905060008860125485612c319190613eb1565b612c3b9190613d0f565b905060008960135486612c4e9190613eb1565b612c589190613d0f565b905060006010819055506000601181905550600060128190555060006013819055506000841115612d0f57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612cc9906139dc565b60006040518083038185875af1925050503d8060008114612d06576040519150601f19603f3d011682016040523d82523d6000602084013e612d0b565b606091505b5050505b6000831115612da457601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612d5e906139dc565b60006040518083038185875af1925050503d8060008114612d9b576040519150601f19603f3d011682016040523d82523d6000602084013e612da0565b606091505b5050505b6000821115612e3957601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612df3906139dc565b60006040518083038185875af1925050503d8060008114612e30576040519150601f19603f3d011682016040523d82523d6000602084013e612e35565b606091505b5050505b6000811115612f2157601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308c600080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612ecb96959493929190613a50565b6060604051808303818588803b158015612ee457600080fd5b505af1158015612ef8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f1d919061361a565b5050505b505050505050505050506000601d60016101000a81548160ff021916908315150217905550565b600080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ff05750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905060008161300157600a54613005565b600f545b9050600061271082866130189190613eb1565b6130229190613d0f565b9050600082111561322257821561312c576000600b5411156130705781600b548261304d9190613eb1565b6130579190613d0f565b601060008282546130689190613cb9565b925050819055505b6000600c5411156130ad5781600c548261308a9190613eb1565b6130949190613d0f565b601160008282546130a59190613cb9565b925050819055505b6000600d5411156130ea5781600d54826130c79190613eb1565b6130d19190613d0f565b601260008282546130e29190613cb9565b925050819055505b6000600e5411156131275781600e54826131049190613eb1565b61310e9190613d0f565b6013600082825461311f9190613cb9565b925050819055505b613221565b600060065411156131695781600654826131469190613eb1565b6131509190613d0f565b601060008282546131619190613cb9565b925050819055505b600060075411156131a65781600754826131839190613eb1565b61318d9190613d0f565b6011600082825461319e9190613cb9565b925050819055505b600060085411156131e35781600854826131c09190613eb1565b6131ca9190613d0f565b601260008282546131db9190613cb9565b925050819055505b600060095411156132205781600954826131fd9190613eb1565b6132079190613d0f565b601360008282546132189190613cb9565b925050819055505b5b5b80600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326d9190613cb9565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161330d9190613bc9565b60405180910390a380856133219190613f0b565b93505050509392505050565b60008135905061333c816140c1565b92915050565b600081359050613351816140d8565b92915050565b600081359050613366816140ef565b92915050565b60008151905061337b816140ef565b92915050565b60008135905061339081614106565b92915050565b6000815190506133a581614106565b92915050565b6000602082840312156133bd57600080fd5b60006133cb8482850161332d565b91505092915050565b6000602082840312156133e657600080fd5b60006133f484828501613342565b91505092915050565b6000806040838503121561341057600080fd5b600061341e8582860161332d565b925050602061342f8582860161332d565b9150509250929050565b6000806000806080858703121561344f57600080fd5b600061345d8782880161332d565b945050602061346e8782880161332d565b935050604061347f8782880161332d565b92505060606134908782880161332d565b91505092959194509250565b6000806000606084860312156134b157600080fd5b60006134bf8682870161332d565b93505060206134d08682870161332d565b92505060406134e186828701613381565b9150509250925092565b600080604083850312156134fe57600080fd5b600061350c8582860161332d565b925050602061351d85828601613357565b9150509250929050565b6000806040838503121561353a57600080fd5b60006135488582860161332d565b925050602061355985828601613381565b9150509250929050565b60006020828403121561357557600080fd5b60006135838482850161336c565b91505092915050565b60006020828403121561359e57600080fd5b60006135ac84828501613381565b91505092915050565b6000602082840312156135c757600080fd5b60006135d584828501613396565b91505092915050565b600080604083850312156135f157600080fd5b60006135ff85828601613381565b925050602061361085828601613381565b9150509250929050565b60008060006060848603121561362f57600080fd5b600061363d86828701613396565b935050602061364e86828701613396565b925050604061365f86828701613396565b9150509250925092565b600080600080600080600080610100898b03121561368657600080fd5b60006136948b828c01613381565b98505060206136a58b828c01613381565b97505060406136b68b828c01613381565b96505060606136c78b828c01613381565b95505060806136d88b828c01613381565b94505060a06136e98b828c01613381565b93505060c06136fa8b828c01613381565b92505060e061370b8b828c01613381565b9150509295985092959890939650565b60006137278383613742565b60208301905092915050565b61373c81613fa6565b82525050565b61374b81613f3f565b82525050565b61375a81613f3f565b82525050565b600061376b82613c69565b6137758185613c8c565b935061378083613c59565b8060005b838110156137b1578151613798888261371b565b97506137a383613c7f565b925050600181019050613784565b5085935050505092915050565b6137c781613f63565b82525050565b6137d681613fb8565b82525050565b6137e581613fdc565b82525050565b60006137f682613c74565b6138008185613ca8565b9350613810818560208601614012565b613819816140a3565b840191505092915050565b6000613831601083613ca8565b91507f54726164696e67206e6f74206c697665000000000000000000000000000000006000830152602082019050919050565b6000613871601683613ca8565b91507f496e73756666696369656e7420616c6c6f77616e6365000000000000000000006000830152602082019050919050565b60006138b1601483613ca8565b91507f496e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006138f1601483613ca8565b91507f4d61782077616c6c6574207472696767657265640000000000000000000000006000830152602082019050919050565b6000613931600683613ca8565b91507f214f574e455200000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613971600083613c9d565b9150600082019050919050565b600061398b601683613ca8565b91507f43616e277420776974686472617720444f4e54425559000000000000000000006000830152602082019050919050565b6139c781613f8f565b82525050565b6139d681613f99565b82525050565b60006139e782613964565b9150819050919050565b6000602082019050613a066000830184613751565b92915050565b6000602082019050613a216000830184613733565b92915050565b6000604082019050613a3c6000830185613751565b613a4960208301846139be565b9392505050565b600060c082019050613a656000830189613751565b613a7260208301886139be565b613a7f60408301876137dc565b613a8c60608301866137dc565b613a996080830185613751565b613aa660a08301846139be565b979650505050505050565b6000602082019050613ac660008301846137be565b92915050565b6000602082019050613ae160008301846137cd565b92915050565b60006020820190508181036000830152613b0181846137eb565b905092915050565b60006020820190508181036000830152613b2281613824565b9050919050565b60006020820190508181036000830152613b4281613864565b9050919050565b60006020820190508181036000830152613b62816138a4565b9050919050565b60006020820190508181036000830152613b82816138e4565b9050919050565b60006020820190508181036000830152613ba281613924565b9050919050565b60006020820190508181036000830152613bc28161397e565b9050919050565b6000602082019050613bde60008301846139be565b92915050565b600060a082019050613bf960008301886139be565b613c0660208301876137dc565b8181036040830152613c188186613760565b9050613c276060830185613751565b613c3460808301846139be565b9695505050505050565b6000602082019050613c5360008301846139cd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613cc482613f8f565b9150613ccf83613f8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0457613d03614045565b5b828201905092915050565b6000613d1a82613f8f565b9150613d2583613f8f565b925082613d3557613d34614074565b5b828204905092915050565b6000808291508390505b6001851115613d8a57808604811115613d6657613d65614045565b5b6001851615613d755780820291505b8081029050613d83856140b4565b9450613d4a565b94509492505050565b6000613d9e82613f8f565b9150613da983613f99565b9250613dd67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613dde565b905092915050565b600082613dee5760019050613eaa565b81613dfc5760009050613eaa565b8160018114613e125760028114613e1c57613e4b565b6001915050613eaa565b60ff841115613e2e57613e2d614045565b5b8360020a915084821115613e4557613e44614045565b5b50613eaa565b5060208310610133831016604e8410600b8410161715613e805782820a905083811115613e7b57613e7a614045565b5b613eaa565b613e8d8484846001613d40565b92509050818404811115613ea457613ea3614045565b5b81810290505b9392505050565b6000613ebc82613f8f565b9150613ec783613f8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f0057613eff614045565b5b828202905092915050565b6000613f1682613f8f565b9150613f2183613f8f565b925082821015613f3457613f33614045565b5b828203905092915050565b6000613f4a82613f6f565b9050919050565b6000613f5c82613f6f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613fb182613fee565b9050919050565b6000613fc382613fca565b9050919050565b6000613fd582613f6f565b9050919050565b6000613fe782613f8f565b9050919050565b6000613ff982614000565b9050919050565b600061400b82613f6f565b9050919050565b60005b83811015614030578082015181840152602081019050614015565b8381111561403f576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6140ca81613f3f565b81146140d557600080fd5b50565b6140e181613f51565b81146140ec57600080fd5b50565b6140f881613f63565b811461410357600080fd5b50565b61410f81613f8f565b811461411a57600080fd5b5056fea2646970667358221220b1ff8edff4c0d3e56c04548092c771fdf9553c41386379f6761657188ab8f49d64736f6c63430008000033