0x60806040523480156200001157600080fd5b506040518060400160405280601481526020017f426f7265642041706520596163687420436c75620000000000000000000000008152506040518060400160405280600481526020017f4241594300000000000000000000000000000000000000000000000000000000815250816002908051906020019062000096929190620000d3565b508060039080519060200190620000af929190620000d3565b50620000c0620000ce60201b60201c565b6000819055505050620001e8565b600090565b828054620000e19062000183565b90600052602060002090601f01602090048101928262000105576000855562000151565b82601f106200012057805160ff191683800117855562000151565b8280016001018555821562000151579182015b828111156200015057825182559160200191906001019062000133565b5b50905062000160919062000164565b5090565b5b808211156200017f57600081600090555060010162000165565b5090565b600060028204905060018216806200019c57607f821691505b60208210811415620001b357620001b2620001b9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611a3c80620001f86000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146102d2578063b88d4fde146102fb578063c87b56dd14610317578063e985e9c514610354576100e8565b80636352211e1461021157806370a082311461024e57806395d89b411461028b578063a0712d68146102b6576100e8565b8063095ea7b3116100c6578063095ea7b31461019257806318160ddd146101ae57806323b872dd146101d957806342842e0e146101f5576100e8565b806301ffc9a7146100ed57806306fdde031461012a578063081812fc14610155575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f9190611502565b610391565b60405161012191906116d8565b60405180910390f35b34801561013657600080fd5b5061013f610423565b60405161014c91906116f3565b60405180910390f35b34801561016157600080fd5b5061017c60048036038101906101779190611554565b6104b5565b6040516101899190611671565b60405180910390f35b6101ac60048036038101906101a791906114c6565b610513565b005b3480156101ba57600080fd5b506101c3610523565b6040516101d09190611715565b60405180910390f35b6101f360048036038101906101ee91906113c0565b61053a565b005b61020f600480360381019061020a91906113c0565b6107fe565b005b34801561021d57600080fd5b5061023860048036038101906102339190611554565b61081e565b6040516102459190611671565b60405180910390f35b34801561025a57600080fd5b506102756004803603810190610270919061135b565b610830565b6040516102829190611715565b60405180910390f35b34801561029757600080fd5b506102a06108c8565b6040516102ad91906116f3565b60405180910390f35b6102d060048036038101906102cb9190611554565b61095a565b005b3480156102de57600080fd5b506102f960048036038101906102f4919061148a565b610967565b005b6103156004803603810190610310919061140f565b610a72565b005b34801561032357600080fd5b5061033e60048036038101906103399190611554565b610ac4565b60405161034b91906116f3565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190611384565b610b42565b60405161038891906116d8565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610432906118a9565b80601f016020809104026020016040519081016040528092919081815260200182805461045e906118a9565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c082610bd6565b6104d5576104d463cf4700e460e01b610c50565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61051f82826001610c5a565b5050565b600061052d610d89565b6001546000540303905090565b600061054582610d8e565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ba576105b963a114810060e01b610c50565b5b6000806105c684610e8a565b915091506105dc81876105d7610eb1565b610eb9565b610607576105f1866105ec610eb1565b610b42565b610606576106056359c896be60e01b610c50565b5b5b6106148686866001610efd565b801561061f57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106ed856106c9888887610f03565b7c020000000000000000000000000000000000000000000000000000000017610f2b565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610775576000600185019050600060046000838152602001908152602001600020541415610773576000548114610772578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460008114156107e8576107e763ea553b3460e01b610c50565b5b6107f58787876001610f56565b50505050505050565b61081983838360405180602001604052806000815250610a72565b505050565b600061082982610d8e565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561087757610876638f4eb60460e01b610c50565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108d7906118a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610903906118a9565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b6109643382610f5c565b50565b8060076000610974610eb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a21610eb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a6691906116d8565b60405180910390a35050565b610a7d84848461053a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610abe57610aa8848484846110c2565b610abd57610abc63d1a57ed660e01b610c50565b5b5b50505050565b6060610acf82610bd6565b610ae457610ae363a14c4b5060e01b610c50565b5b6000610aee611201565b9050600081511415610b0f5760405180602001604052806000815250610b3a565b80610b1984611218565b604051602001610b2a92919061164d565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610be1610d89565b11610c4b57600054821015610c4a5760005b600060046000858152602001908152602001600020549150811415610c235782610c1c9061187f565b9250610bf3565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610c658361081e565b9050818015610ca757508073ffffffffffffffffffffffffffffffffffffffff16610c8e610eb1565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610cd357610cbd81610cb8610eb1565b610b42565b610cd257610cd163cfb3b94260e01b610c50565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610d99610d89565b11610e7457600460008381526020019081526020016000205490506000811415610e46576000548210610dd757610dd663df2d9b4260e01b610c50565b5b5b60046000836001900393508381526020019081526020016000205490506000811415610e0357610e41565b60007c010000000000000000000000000000000000000000000000000000000082161415610e3057610e85565b610e4063df2d9b4260e01b610c50565b5b610dd8565b60007c010000000000000000000000000000000000000000000000000000000082161415610e7357610e85565b5b610e8463df2d9b4260e01b610c50565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610f1a868684611271565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000805490506000821415610f7c57610f7b63b562e8dd60e01b610c50565b5b610f896000848385610efd565b610fa983610f9a6000866000610f03565b610fa38561127a565b17610f2b565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16169050600081141561106257611061632e07630060e01b610c50565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081141561106f57816000819055505050506110bd6000848385610f56565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026110e8610eb1565b8786866040518563ffffffff1660e01b815260040161110a949392919061168c565b602060405180830381600087803b15801561112457600080fd5b505af192505050801561115557506040513d601f19601f82011682018060405250810190611152919061152b565b60015b6111ae573d8060008114611185576040519150601f19603f3d011682016040523d82523d6000602084013e61118a565b606091505b506000815114156111a6576111a563d1a57ed660e01b610c50565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b60011561125c57600184039350600a81066030018453600a81049050806112575761125c565b611231565b50828103602084039350808452505050919050565b60009392505050565b60006001821460e11b9050919050565b600061129d61129884611755565b611730565b9050828152602081018484840111156112b557600080fd5b6112c084828561183d565b509392505050565b6000813590506112d7816119aa565b92915050565b6000813590506112ec816119c1565b92915050565b600081359050611301816119d8565b92915050565b600081519050611316816119d8565b92915050565b600082601f83011261132d57600080fd5b813561133d84826020860161128a565b91505092915050565b600081359050611355816119ef565b92915050565b60006020828403121561136d57600080fd5b600061137b848285016112c8565b91505092915050565b6000806040838503121561139757600080fd5b60006113a5858286016112c8565b92505060206113b6858286016112c8565b9150509250929050565b6000806000606084860312156113d557600080fd5b60006113e3868287016112c8565b93505060206113f4868287016112c8565b925050604061140586828701611346565b9150509250925092565b6000806000806080858703121561142557600080fd5b6000611433878288016112c8565b9450506020611444878288016112c8565b935050604061145587828801611346565b925050606085013567ffffffffffffffff81111561147257600080fd5b61147e8782880161131c565b91505092959194509250565b6000806040838503121561149d57600080fd5b60006114ab858286016112c8565b92505060206114bc858286016112dd565b9150509250929050565b600080604083850312156114d957600080fd5b60006114e7858286016112c8565b92505060206114f885828601611346565b9150509250929050565b60006020828403121561151457600080fd5b6000611522848285016112f2565b91505092915050565b60006020828403121561153d57600080fd5b600061154b84828501611307565b91505092915050565b60006020828403121561156657600080fd5b600061157484828501611346565b91505092915050565b611586816117c9565b82525050565b611595816117db565b82525050565b60006115a682611786565b6115b0818561179c565b93506115c081856020860161184c565b6115c981611999565b840191505092915050565b60006115df82611791565b6115e981856117ad565b93506115f981856020860161184c565b61160281611999565b840191505092915050565b600061161882611791565b61162281856117be565b935061163281856020860161184c565b80840191505092915050565b61164781611833565b82525050565b6000611659828561160d565b9150611665828461160d565b91508190509392505050565b6000602082019050611686600083018461157d565b92915050565b60006080820190506116a1600083018761157d565b6116ae602083018661157d565b6116bb604083018561163e565b81810360608301526116cd818461159b565b905095945050505050565b60006020820190506116ed600083018461158c565b92915050565b6000602082019050818103600083015261170d81846115d4565b905092915050565b600060208201905061172a600083018461163e565b92915050565b600061173a61174b565b905061174682826118db565b919050565b6000604051905090565b600067ffffffffffffffff8211156117705761176f61196a565b5b61177982611999565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006117d482611813565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561186a57808201518184015260208101905061184f565b83811115611879576000848401525b50505050565b600061188a82611833565b9150600082141561189e5761189d61190c565b5b600182039050919050565b600060028204905060018216806118c157607f821691505b602082108114156118d5576118d461193b565b5b50919050565b6118e482611999565b810181811067ffffffffffffffff821117156119035761190261196a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6119b3816117c9565b81146119be57600080fd5b50565b6119ca816117db565b81146119d557600080fd5b50565b6119e1816117e7565b81146119ec57600080fd5b50565b6119f881611833565b8114611a0357600080fd5b5056fea2646970667358221220837f4f0ce3898526547ecb475334a281f10a098ffce3530601d74763832ff95c64736f6c63430008040033