From 44950e671a002154b908535cd098315efa267068 Mon Sep 17 00:00:00 2001 From: Shruthi23 Date: Fri, 5 May 2023 19:07:03 -0700 Subject: [PATCH 1/5] Patient appointments retrieval --- appointments/appointment-route.js | 19 ++ .../components/Patient/AppointmentHistory.tsx | 165 ++++++++++++++++++ .../components/Patient/PatientDashboard.tsx | 44 +++-- .../src/components/Routes/RoutesComponent.tsx | 7 + .../factories/HealthBlock__factory.ts | 8 + utils/queries.js | 33 ++++ 6 files changed, 265 insertions(+), 11 deletions(-) create mode 100644 client/src/components/Patient/AppointmentHistory.tsx diff --git a/appointments/appointment-route.js b/appointments/appointment-route.js index 540e40d..227fd9c 100644 --- a/appointments/appointment-route.js +++ b/appointments/appointment-route.js @@ -8,6 +8,7 @@ const { updateAppointmentStatus, updateDoctorAvailability, postAvailability, + getAppointmentsForPatient, } = require("../utils/queries"); const uuid = require("uuid"); @@ -68,6 +69,24 @@ module.exports = (app) => { } }); + app.get( + "/patientappointments/:patientEmail", + verify_token, + async (req, res) => { + let { patientEmail } = req.params; + console.log("patient appointment history", patientEmail); + + let result = getAppointmentsForPatient(patientEmail) + .then((res) => { + console.log("Result api-->", result); + res.send({ success: true, result }); + }) + .catch((err) => { + res.status(500).send({ success: false, msg: "Internal server err" }); + }); + } + ); + app.put( "/appointmentStatus/:appointmentID/status", verify_token, diff --git a/client/src/components/Patient/AppointmentHistory.tsx b/client/src/components/Patient/AppointmentHistory.tsx new file mode 100644 index 0000000..9dee87f --- /dev/null +++ b/client/src/components/Patient/AppointmentHistory.tsx @@ -0,0 +1,165 @@ +import axios from 'axios'; +import React, { FunctionComponent, useContext, useEffect, useState } from 'react'; + +import { AuthContext } from '../../providers/AuthProvider'; +import { useAuthFetch } from '../../hooks/api'; +interface AppointmentDetails { + name: string; + patient_email: string; + appointment_id: string; + patient_name: string; + created_at: string; + appointment_time: string; + appointment_status: string; +} + +const AppointmentHistory: FunctionComponent<{}> = () => { + const { user, role, logout } = useContext(AuthContext); + const { fetch } = useAuthFetch(); + const [appointmentData, setAppointmentData] = useState([]); + + useEffect(() => { + getAppointment(); + }, []); + const getAppointment = async () => { + let resp = await fetch('GET', '/patientappointments/' + user?.email); + if (resp && resp.data && resp.data.result) { + setAppointmentData(resp.data.result); + } else { + setAppointmentData([]); + } + }; + + const getStatusColor = (status: String) => { + switch (status) { + case 'confirmed': + return 'bg-green-200'; + case 'reject': + return 'bg-red-200'; + default: + return ''; + } + }; + const updateStatus = async (status: String, appointmentId: String) => { + let resp = await fetch('PUT', '/appointmentStatus/' + appointmentId + '/status', { + appointmentStatus: status, + }); + + if (resp && resp.status == 204) { + alert('Appointment status updated'); + getAppointment(); + } + }; + + return ( +
+
+

Appointments

+
+ + + +
+
+
+
+
+ + + + + + + + + + + + {appointmentData.map((appointment) => ( + + + + + + + + + ))} + +
+ Name + + Email ID + + Date + + Time + + Status +
+
{appointment.patient_name}
+
+
{appointment.patient_email}
+
+ {appointment.created_at} + + {appointment.appointment_time} + + + {appointment.appointment_status == 'pending' ? ( +
+ +
+ +
+ ) : ( +
{appointment.appointment_status}
+ )} +
+
+
+
+
+
+ ); +}; + +export default AppointmentHistory; diff --git a/client/src/components/Patient/PatientDashboard.tsx b/client/src/components/Patient/PatientDashboard.tsx index fa4baeb..a4af87e 100644 --- a/client/src/components/Patient/PatientDashboard.tsx +++ b/client/src/components/Patient/PatientDashboard.tsx @@ -15,19 +15,41 @@ const PatientDashboard: FunctionComponent<{}> = () => { console.log(await fetch('POST', '/verify_token/', {})); }; - const appointmentHandler = () =>{ - navigate('/patientappointments') - - } + const appointmentHandler = () => { + navigate('/patientappointments'); + }; + const _renderAppointmentSection = () => { + return ( +
+ +
+ ); + }; + const _renderViewHistory = () => { + return ( +
+ +
+ ); + }; return ( -
- +
+
+ {_renderAppointmentSection()} + {_renderViewHistory()} +
+
{/* Patient image*/} diff --git a/client/src/components/Routes/RoutesComponent.tsx b/client/src/components/Routes/RoutesComponent.tsx index 101de60..da01963 100644 --- a/client/src/components/Routes/RoutesComponent.tsx +++ b/client/src/components/Routes/RoutesComponent.tsx @@ -14,6 +14,7 @@ import ProtectedRoute, { ProtectedRouteProps } from './ProtectedRoute'; import PatientAppointment from '../Patient/PatientAppointment'; import ScheduleAppointment from '../Patient/ScheduleAppointment'; import ManageSchedule from '../Doctor/ManageSchedule'; +import AppointmentHistory from '../Patient/AppointmentHistory'; const RoutesComponent: FunctionComponent<{}> = () => { const navigate = useNavigate(); @@ -74,6 +75,12 @@ const RoutesComponent: FunctionComponent<{}> = () => { path='/manageschedule' element={} />} /> + } /> + } + /> ); diff --git a/client/src/contracts/factories/HealthBlock__factory.ts b/client/src/contracts/factories/HealthBlock__factory.ts index 8ce6e02..3c83511 100644 --- a/client/src/contracts/factories/HealthBlock__factory.ts +++ b/client/src/contracts/factories/HealthBlock__factory.ts @@ -177,6 +177,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -230,6 +231,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -279,6 +281,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -308,6 +311,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -359,6 +363,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -393,6 +398,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -449,6 +455,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -483,6 +490,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ diff --git a/utils/queries.js b/utils/queries.js index 0621ef2..88e3cd1 100644 --- a/utils/queries.js +++ b/utils/queries.js @@ -218,6 +218,38 @@ async function postAvailability(avail_date, time, doctor) { }); } +async function getAppointmentsForPatient(patient) { + console.log("get appt for patient", patient); + const params = { + TableName: "appointments", + FilterExpression: "patient_email = :patientEmail", + ExpressionAttributeValues: { + ":patientEmail": patient, + }, + }; + try { + const result = await dynamodb.scan(params).promise(); + + if (result.Items) { + return result.Items; + } else { + return null; + } + } catch (err) { + return err; + } + + // dynamodb.scan(params, (err, data) => { + // if (err) { + // console.log("Error scanning DynamoDB table:", err); + // throw new Error(err); + // } else { + // console.log("Patients associated with doctor email", data.Items); + // return data.Items; + // } + // }); +} + module.exports = { getDoctors, getDocAvailability, @@ -225,4 +257,5 @@ module.exports = { getAppointments, updateAppointmentStatus, postAvailability, + getAppointmentsForPatient, }; From a62333b9f70f9e760934b4d6a2e57c956e8d46d9 Mon Sep 17 00:00:00 2001 From: Shruthi23 Date: Fri, 5 May 2023 22:13:24 -0700 Subject: [PATCH 2/5] Console.logs removed --- client/src/components/Doctor/DoctorAppointments.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/src/components/Doctor/DoctorAppointments.tsx b/client/src/components/Doctor/DoctorAppointments.tsx index a173d97..a7060b6 100644 --- a/client/src/components/Doctor/DoctorAppointments.tsx +++ b/client/src/components/Doctor/DoctorAppointments.tsx @@ -23,13 +23,10 @@ const DoctorAppointments: FunctionComponent<{}> = () => { const [appointmentData, setAppointmentData] = useState([]); useEffect(() => { - //fetchDoctors(); - getAppointment(); }, []); const getAppointment = async () => { - console.log('filterdate-->', filterDate); let resp = await fetch('GET', '/appointments/' + user?.email + `?created_at= ${filterDate}`); if (resp && resp.data && resp.data.result) { setAppointmentData(resp.data.result); From a10d92788ba4a8697fe58c67e7b959e3be812698 Mon Sep 17 00:00:00 2001 From: Shruthi23 Date: Fri, 5 May 2023 22:23:57 -0700 Subject: [PATCH 3/5] Deleted contents of contracts --- client/src/contracts/HealthBlock.ts | 916 ------------------ client/src/contracts/common.ts | 46 - .../factories/HealthBlock__factory.ts | 683 ------------- client/src/contracts/factories/index.ts | 4 - client/src/contracts/index.ts | 6 - 5 files changed, 1655 deletions(-) delete mode 100644 client/src/contracts/HealthBlock.ts delete mode 100644 client/src/contracts/common.ts delete mode 100644 client/src/contracts/factories/HealthBlock__factory.ts delete mode 100644 client/src/contracts/factories/index.ts delete mode 100644 client/src/contracts/index.ts diff --git a/client/src/contracts/HealthBlock.ts b/client/src/contracts/HealthBlock.ts deleted file mode 100644 index 647c85c..0000000 --- a/client/src/contracts/HealthBlock.ts +++ /dev/null @@ -1,916 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { - BaseContract, - BigNumber, - BigNumberish, - BytesLike, - CallOverrides, - ContractTransaction, - Overrides, - PopulatedTransaction, - Signer, - utils, -} from "ethers"; -import type { - FunctionFragment, - Result, - EventFragment, -} from "@ethersproject/abi"; -import type { Listener, Provider } from "@ethersproject/providers"; -import type { - TypedEventFilter, - TypedEvent, - TypedListener, - OnEvent, - PromiseOrValue, -} from "./common"; - -export declare namespace HealthBlock { - export type RequestStruct = { - doctor: PromiseOrValue; - doctorName: PromiseOrValue; - credentialsHash: PromiseOrValue; - status: PromiseOrValue; - }; - - export type RequestStructOutput = [string, string, string, string] & { - doctor: string; - doctorName: string; - credentialsHash: string; - status: string; - }; - - export type DoctorStruct = { - name: PromiseOrValue; - age: PromiseOrValue; - email: PromiseOrValue; - specialization: PromiseOrValue; - id: PromiseOrValue; - }; - - export type DoctorStructOutput = [string, number, string, string, string] & { - name: string; - age: number; - email: string; - specialization: string; - id: string; - }; -} - -export interface HealthBlockInterface extends utils.Interface { - functions: { - "patients(address)": FunctionFragment; - "providerToDoctors(address,uint256)": FunctionFragment; - "raiseRequest(string,string)": FunctionFragment; - "getRequests()": FunctionFragment; - "rejectRequest(uint256)": FunctionFragment; - "approveRequest(uint256)": FunctionFragment; - "getPatientInfo()": FunctionFragment; - "getPatientInfoAll(address)": FunctionFragment; - "registerPatient(string,uint8,string)": FunctionFragment; - "getDoctorInfo()": FunctionFragment; - "getDoctorInfoAll(address)": FunctionFragment; - "registerDoctor(string,uint8,string,string)": FunctionFragment; - "getHCProviderInfo()": FunctionFragment; - "getHCProviderInfoAll(address)": FunctionFragment; - "registerHCProvider(string,string,string,string)": FunctionFragment; - "getAllDoctorsForProvider(address)": FunctionFragment; - "mapDoctorToProvider(address,address)": FunctionFragment; - }; - - getFunction( - nameOrSignatureOrTopic: - | "patients" - | "providerToDoctors" - | "raiseRequest" - | "getRequests" - | "rejectRequest" - | "approveRequest" - | "getPatientInfo" - | "getPatientInfoAll" - | "registerPatient" - | "getDoctorInfo" - | "getDoctorInfoAll" - | "registerDoctor" - | "getHCProviderInfo" - | "getHCProviderInfoAll" - | "registerHCProvider" - | "getAllDoctorsForProvider" - | "mapDoctorToProvider" - ): FunctionFragment; - - encodeFunctionData( - functionFragment: "patients", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "providerToDoctors", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "raiseRequest", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getRequests", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "rejectRequest", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "approveRequest", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "getPatientInfo", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getPatientInfoAll", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "registerPatient", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getDoctorInfo", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getDoctorInfoAll", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "registerDoctor", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getHCProviderInfo", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "getHCProviderInfoAll", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "registerHCProvider", - values: [ - PromiseOrValue, - PromiseOrValue, - PromiseOrValue, - PromiseOrValue - ] - ): string; - encodeFunctionData( - functionFragment: "getAllDoctorsForProvider", - values: [PromiseOrValue] - ): string; - encodeFunctionData( - functionFragment: "mapDoctorToProvider", - values: [PromiseOrValue, PromiseOrValue] - ): string; - - decodeFunctionResult(functionFragment: "patients", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "providerToDoctors", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "raiseRequest", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getRequests", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "rejectRequest", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "approveRequest", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPatientInfo", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getPatientInfoAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "registerPatient", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDoctorInfo", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getDoctorInfoAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "registerDoctor", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getHCProviderInfo", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getHCProviderInfoAll", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "registerHCProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "getAllDoctorsForProvider", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "mapDoctorToProvider", - data: BytesLike - ): Result; - - events: { - "DoctorRequestRaised(address,string,string)": EventFragment; - "NDoctor(address,string)": EventFragment; - "NHCProvider(address,string)": EventFragment; - "NPatient(address,string)": EventFragment; - "RequestApproved(address,address,uint256)": EventFragment; - "RequestRejected(address,address,uint256)": EventFragment; - }; - - getEvent(nameOrSignatureOrTopic: "DoctorRequestRaised"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NDoctor"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NHCProvider"): EventFragment; - getEvent(nameOrSignatureOrTopic: "NPatient"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RequestApproved"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RequestRejected"): EventFragment; -} - -export interface DoctorRequestRaisedEventObject { - doctor: string; - doctorName: string; - credentialsHash: string; -} -export type DoctorRequestRaisedEvent = TypedEvent< - [string, string, string], - DoctorRequestRaisedEventObject ->; - -export type DoctorRequestRaisedEventFilter = - TypedEventFilter; - -export interface NDoctorEventObject { - _from: string; - _name: string; -} -export type NDoctorEvent = TypedEvent<[string, string], NDoctorEventObject>; - -export type NDoctorEventFilter = TypedEventFilter; - -export interface NHCProviderEventObject { - _from: string; - _name: string; -} -export type NHCProviderEvent = TypedEvent< - [string, string], - NHCProviderEventObject ->; - -export type NHCProviderEventFilter = TypedEventFilter; - -export interface NPatientEventObject { - _from: string; - _name: string; -} -export type NPatientEvent = TypedEvent<[string, string], NPatientEventObject>; - -export type NPatientEventFilter = TypedEventFilter; - -export interface RequestApprovedEventObject { - doctor: string; - provider: string; - requestId: BigNumber; -} -export type RequestApprovedEvent = TypedEvent< - [string, string, BigNumber], - RequestApprovedEventObject ->; - -export type RequestApprovedEventFilter = TypedEventFilter; - -export interface RequestRejectedEventObject { - doctor: string; - provider: string; - requestId: BigNumber; -} -export type RequestRejectedEvent = TypedEvent< - [string, string, BigNumber], - RequestRejectedEventObject ->; - -export type RequestRejectedEventFilter = TypedEventFilter; - -export interface HealthBlock extends BaseContract { - connect(signerOrProvider: Signer | Provider | string): this; - attach(addressOrName: string): this; - deployed(): Promise; - - interface: HealthBlockInterface; - - queryFilter( - event: TypedEventFilter, - fromBlockOrBlockhash?: string | number | undefined, - toBlock?: string | number | undefined - ): Promise>; - - listeners( - eventFilter?: TypedEventFilter - ): Array>; - listeners(eventName?: string): Array; - removeAllListeners( - eventFilter: TypedEventFilter - ): this; - removeAllListeners(eventName?: string): this; - off: OnEvent; - on: OnEvent; - once: OnEvent; - removeListener: OnEvent; - - functions: { - patients( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string] & { - name: string; - age: number; - email: string; - id: string; - } - >; - - providerToDoctors( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string, string] & { - name: string; - age: number; - email: string; - specialization: string; - id: string; - } - >; - - raiseRequest( - doctorName: PromiseOrValue, - credentialsHash: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getRequests( - overrides?: CallOverrides - ): Promise<[HealthBlock.RequestStructOutput[]]>; - - rejectRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - approveRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getPatientInfo( - overrides?: CallOverrides - ): Promise<[string, number, string]>; - - getPatientInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string]>; - - registerPatient( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDoctorInfo( - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - getDoctorInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - registerDoctor( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - _specialization: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getHCProviderInfo( - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - getHCProviderInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - registerHCProvider( - _name: PromiseOrValue, - _email: PromiseOrValue, - _address: PromiseOrValue, - _phone: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAllDoctorsForProvider( - providerAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[HealthBlock.DoctorStructOutput[]]>; - - mapDoctorToProvider( - _providerAddress: PromiseOrValue, - _doctorAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - patients( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string] & { - name: string; - age: number; - email: string; - id: string; - } - >; - - providerToDoctors( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string, string] & { - name: string; - age: number; - email: string; - specialization: string; - id: string; - } - >; - - raiseRequest( - doctorName: PromiseOrValue, - credentialsHash: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getRequests( - overrides?: CallOverrides - ): Promise; - - rejectRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - approveRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getPatientInfo(overrides?: CallOverrides): Promise<[string, number, string]>; - - getPatientInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string]>; - - registerPatient( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDoctorInfo( - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - getDoctorInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - registerDoctor( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - _specialization: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getHCProviderInfo( - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - getHCProviderInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - registerHCProvider( - _name: PromiseOrValue, - _email: PromiseOrValue, - _address: PromiseOrValue, - _phone: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAllDoctorsForProvider( - providerAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mapDoctorToProvider( - _providerAddress: PromiseOrValue, - _doctorAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - callStatic: { - patients( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string] & { - name: string; - age: number; - email: string; - id: string; - } - >; - - providerToDoctors( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise< - [string, number, string, string, string] & { - name: string; - age: number; - email: string; - specialization: string; - id: string; - } - >; - - raiseRequest( - doctorName: PromiseOrValue, - credentialsHash: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getRequests( - overrides?: CallOverrides - ): Promise; - - rejectRequest( - requestId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - approveRequest( - requestId: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getPatientInfo( - overrides?: CallOverrides - ): Promise<[string, number, string]>; - - getPatientInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string]>; - - registerPatient( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getDoctorInfo( - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - getDoctorInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, number, string, string]>; - - registerDoctor( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - _specialization: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getHCProviderInfo( - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - getHCProviderInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[string, string, string, string]>; - - registerHCProvider( - _name: PromiseOrValue, - _email: PromiseOrValue, - _address: PromiseOrValue, - _phone: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - getAllDoctorsForProvider( - providerAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mapDoctorToProvider( - _providerAddress: PromiseOrValue, - _doctorAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - }; - - filters: { - "DoctorRequestRaised(address,string,string)"( - doctor?: PromiseOrValue | null, - doctorName?: PromiseOrValue | null, - credentialsHash?: null - ): DoctorRequestRaisedEventFilter; - DoctorRequestRaised( - doctor?: PromiseOrValue | null, - doctorName?: PromiseOrValue | null, - credentialsHash?: null - ): DoctorRequestRaisedEventFilter; - - "NDoctor(address,string)"( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NDoctorEventFilter; - NDoctor( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NDoctorEventFilter; - - "NHCProvider(address,string)"( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NHCProviderEventFilter; - NHCProvider( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NHCProviderEventFilter; - - "NPatient(address,string)"( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NPatientEventFilter; - NPatient( - _from?: PromiseOrValue | null, - _name?: PromiseOrValue | null - ): NPatientEventFilter; - - "RequestApproved(address,address,uint256)"( - doctor?: PromiseOrValue | null, - provider?: PromiseOrValue | null, - requestId?: PromiseOrValue | null - ): RequestApprovedEventFilter; - RequestApproved( - doctor?: PromiseOrValue | null, - provider?: PromiseOrValue | null, - requestId?: PromiseOrValue | null - ): RequestApprovedEventFilter; - - "RequestRejected(address,address,uint256)"( - doctor?: PromiseOrValue | null, - provider?: PromiseOrValue | null, - requestId?: PromiseOrValue | null - ): RequestRejectedEventFilter; - RequestRejected( - doctor?: PromiseOrValue | null, - provider?: PromiseOrValue | null, - requestId?: PromiseOrValue | null - ): RequestRejectedEventFilter; - }; - - estimateGas: { - patients( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - providerToDoctors( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - raiseRequest( - doctorName: PromiseOrValue, - credentialsHash: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getRequests(overrides?: CallOverrides): Promise; - - rejectRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - approveRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getPatientInfo(overrides?: CallOverrides): Promise; - - getPatientInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerPatient( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDoctorInfo(overrides?: CallOverrides): Promise; - - getDoctorInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerDoctor( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - _specialization: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getHCProviderInfo(overrides?: CallOverrides): Promise; - - getHCProviderInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerHCProvider( - _name: PromiseOrValue, - _email: PromiseOrValue, - _address: PromiseOrValue, - _phone: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAllDoctorsForProvider( - providerAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mapDoctorToProvider( - _providerAddress: PromiseOrValue, - _doctorAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; - - populateTransaction: { - patients( - arg0: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - providerToDoctors( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - raiseRequest( - doctorName: PromiseOrValue, - credentialsHash: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getRequests(overrides?: CallOverrides): Promise; - - rejectRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - approveRequest( - requestId: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getPatientInfo(overrides?: CallOverrides): Promise; - - getPatientInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerPatient( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getDoctorInfo(overrides?: CallOverrides): Promise; - - getDoctorInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerDoctor( - _name: PromiseOrValue, - _age: PromiseOrValue, - _email: PromiseOrValue, - _specialization: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getHCProviderInfo(overrides?: CallOverrides): Promise; - - getHCProviderInfoAll( - _address: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - registerHCProvider( - _name: PromiseOrValue, - _email: PromiseOrValue, - _address: PromiseOrValue, - _phone: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - getAllDoctorsForProvider( - providerAddress: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - mapDoctorToProvider( - _providerAddress: PromiseOrValue, - _doctorAddress: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - }; -} diff --git a/client/src/contracts/common.ts b/client/src/contracts/common.ts deleted file mode 100644 index 4c90b08..0000000 --- a/client/src/contracts/common.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import type { Listener } from "@ethersproject/providers"; -import type { Event, EventFilter } from "ethers"; - -export interface TypedEvent< - TArgsArray extends Array = any, - TArgsObject = any -> extends Event { - args: TArgsArray & TArgsObject; -} - -export interface TypedEventFilter<_TEvent extends TypedEvent> - extends EventFilter {} - -export interface TypedListener { - (...listenerArg: [...__TypechainArgsArray, TEvent]): void; -} - -type __TypechainArgsArray = T extends TypedEvent ? U : never; - -export interface OnEvent { - ( - eventFilter: TypedEventFilter, - listener: TypedListener - ): TRes; - (eventName: string, listener: Listener): TRes; -} - -export type MinEthersFactory = { - deploy(...a: ARGS[]): Promise; -}; - -export type GetContractTypeFromFactory = F extends MinEthersFactory< - infer C, - any -> - ? C - : never; - -export type GetARGsTypeFromFactory = F extends MinEthersFactory - ? Parameters - : never; - -export type PromiseOrValue = T | Promise; diff --git a/client/src/contracts/factories/HealthBlock__factory.ts b/client/src/contracts/factories/HealthBlock__factory.ts deleted file mode 100644 index 5961f6e..0000000 --- a/client/src/contracts/factories/HealthBlock__factory.ts +++ /dev/null @@ -1,683 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; -import type { Provider, TransactionRequest } from "@ethersproject/providers"; -import type { PromiseOrValue } from "../common"; -import type { HealthBlock, HealthBlockInterface } from "../HealthBlock"; - -const _abi = [ - { - inputs: [], - stateMutability: "nonpayable", - type: "constructor", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "doctor", - type: "address", - }, - { - indexed: true, - internalType: "string", - name: "doctorName", - type: "string", - }, - { - indexed: false, - internalType: "string", - name: "credentialsHash", - type: "string", - }, - ], - name: "DoctorRequestRaised", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_from", - type: "address", - }, - { - indexed: true, - internalType: "string", - name: "_name", - type: "string", - }, - ], - name: "NDoctor", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_from", - type: "address", - }, - { - indexed: true, - internalType: "string", - name: "_name", - type: "string", - }, - ], - name: "NHCProvider", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "_from", - type: "address", - }, - { - indexed: true, - internalType: "string", - name: "_name", - type: "string", - }, - ], - name: "NPatient", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "doctor", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "provider", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "RequestApproved", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: "address", - name: "doctor", - type: "address", - }, - { - indexed: true, - internalType: "address", - name: "provider", - type: "address", - }, - { - indexed: true, - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "RequestRejected", - type: "event", - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - name: "patients", - outputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "uint8", - name: "age", - type: "uint8", - }, - { - internalType: "string", - name: "email", - type: "string", - }, - { - internalType: "address", - name: "id", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - { - internalType: "uint256", - name: "", - type: "uint256", - }, - ], - name: "providerToDoctors", - outputs: [ - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "uint8", - name: "age", - type: "uint8", - }, - { - internalType: "string", - name: "email", - type: "string", - }, - { - internalType: "string", - name: "specialization", - type: "string", - }, - { - internalType: "address", - name: "id", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "string", - name: "doctorName", - type: "string", - }, - { - internalType: "string", - name: "credentialsHash", - type: "string", - }, - ], - name: "raiseRequest", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getRequests", - outputs: [ - { - components: [ - { - internalType: "address", - name: "doctor", - type: "address", - }, - { - internalType: "string", - name: "doctorName", - type: "string", - }, - { - internalType: "string", - name: "credentialsHash", - type: "string", - }, - { - internalType: "string", - name: "status", - type: "string", - }, - ], - internalType: "struct HealthBlock.Request[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "rejectRequest", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "uint256", - name: "requestId", - type: "uint256", - }, - ], - name: "approveRequest", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getPatientInfo", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "getPatientInfoAll", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "uint8", - name: "_age", - type: "uint8", - }, - { - internalType: "string", - name: "_email", - type: "string", - }, - ], - name: "registerPatient", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getDoctorInfo", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "getDoctorInfoAll", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "uint8", - name: "", - type: "uint8", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "uint8", - name: "_age", - type: "uint8", - }, - { - internalType: "string", - name: "_email", - type: "string", - }, - { - internalType: "string", - name: "_specialization", - type: "string", - }, - ], - name: "registerDoctor", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "getHCProviderInfo", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "address", - name: "_address", - type: "address", - }, - ], - name: "getHCProviderInfoAll", - outputs: [ - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - { - internalType: "string", - name: "", - type: "string", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "string", - name: "_name", - type: "string", - }, - { - internalType: "string", - name: "_email", - type: "string", - }, - { - internalType: "string", - name: "_address", - type: "string", - }, - { - internalType: "string", - name: "_phone", - type: "string", - }, - ], - name: "registerHCProvider", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { - internalType: "address", - name: "providerAddress", - type: "address", - }, - ], - name: "getAllDoctorsForProvider", - outputs: [ - { - components: [ - { - internalType: "string", - name: "name", - type: "string", - }, - { - internalType: "uint8", - name: "age", - type: "uint8", - }, - { - internalType: "string", - name: "email", - type: "string", - }, - { - internalType: "string", - name: "specialization", - type: "string", - }, - { - internalType: "address", - name: "id", - type: "address", - }, - ], - internalType: "struct HealthBlock.doctor[]", - name: "", - type: "tuple[]", - }, - ], - stateMutability: "view", - type: "function", - constant: true, - }, - { - inputs: [ - { - internalType: "address", - name: "_providerAddress", - type: "address", - }, - { - internalType: "address", - name: "_doctorAddress", - type: "address", - }, - ], - name: "mapDoctorToProvider", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, -]; - -const _bytecode = - "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613cfb806100606000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063916922c4116100a2578063b380f5c611610071578063b380f5c6146102c4578063bc4fe402146102e5578063c5b0aab014610301578063d7d1bbdb14610334578063e1e36ab9146103505761010b565b8063916922c414610239578063a9b467ee1461025a578063afc3b5c41461028c578063b2d258ff146102a85761010b565b8063326df664116100de578063326df664146101975780635df122e1146101b75780636d36f7be146101e75780638813ce121461021b5761010b565b80630869cfbc14610110578063139f0984146101435780631c2972051461015f5780632d7788db1461017b575b600080fd5b61012a60048036038101906101259190612dd5565b610383565b60405161013a9493929190612ebd565b60405180910390f35b61015d60048036038101906101589190612f10565b6104f0565b005b610179600480360381019061017491906130b1565b610841565b005b61019560048036038101906101909190613172565b610a7a565b005b61019f610c76565b6040516101ae9392919061319f565b60405180910390f35b6101d160048036038101906101cc9190612dd5565b610ea0565b6040516101de9190613392565b60405180910390f35b61020160048036038101906101fc91906133b4565b611167565b6040516102129594939291906133f4565b60405180910390f35b61022361137f565b604051610230919061358f565b60405180910390f35b6102416116d6565b60405161025194939291906135b1565b60405180910390f35b610274600480360381019061026f9190612dd5565b611a11565b6040516102839392919061319f565b60405180910390f35b6102a660048036038101906102a19190613612565b611b9a565b005b6102c260048036038101906102bd919061368a565b611d88565b005b6102cc6120d6565b6040516102dc9493929190613745565b60405180910390f35b6102ff60048036038101906102fa919061379f565b612394565b005b61031b60048036038101906103169190612dd5565b6126b2565b60405161032b94939291906135b1565b60405180910390f35b61034e60048036038101906103499190613172565b61294b565b005b61036a60048036038101906103659190612dd5565b612b47565b60405161037a9493929190613745565b60405180910390f35b60036020528060005260406000206000915090508060000180546103a6906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546103d2906138a5565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054610447906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610473906138a5565b80156104c05780601f10610495576101008083540402835291602001916104c0565b820191906000526020600020905b8154815290600101906020018083116104a357829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040528083600001805461058c906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105b8906138a5565b80156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b505050505081526020018360010160009054906101000a900460ff1660ff168152602001836002018054610638906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610664906138a5565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b505050505081526020018360030180546106ca906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906138a5565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081526020018473ffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000190816107a59190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816107dc9190613a82565b5060608201518160030190816107f29190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60405160200161085090613b85565b60405160208183030381529060405280519060200120836040516020016108779190613bcb565b604051602081830303815290604052805190602001200361089757600080fd5b6040516020016108a690613b85565b60405160208183030381529060405280519060200120816040516020016108cd9190613bcb565b60405160208183030381529060405280519060200120036108ed57600080fd5b60008260ff16118015610903575060648260ff16105b61090c57600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161099a9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816109d19190613a82565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505082604051610a2a9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b7c57610b7b613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a6563746564000000000000000000000000000000000000000000000000815250816003019081610bd29190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611610d1d57600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054610d86906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610db2906138a5565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b50505050509250808054610e12906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3e906138a5565b8015610e8b5780601f10610e6057610100808354040283529160200191610e8b565b820191906000526020600020905b815481529060010190602001808311610e6e57829003601f168201915b50505050509050955095509550505050909192565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561115c57838290600052602060002090600502016040518060a0016040529081600082018054610f34906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f60906138a5565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff168152602001600282018054610fe3906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461100f906138a5565b801561105c5780601f106110315761010080835404028352916020019161105c565b820191906000526020600020905b81548152906001019060200180831161103f57829003601f168201915b50505050508152602001600382018054611075906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546110a1906138a5565b80156110ee5780601f106110c3576101008083540402835291602001916110ee565b820191906000526020600020905b8154815290600101906020018083116110d157829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610f01565b505050509050919050565b6002602052816000526040600020818154811061118357600080fd5b9060005260206000209060050201600091509150508060000180546111a7906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546111d3906138a5565b80156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054611248906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611274906138a5565b80156112c15780601f10611296576101008083540402835291602001916112c1565b820191906000526020600020905b8154815290600101906020018083116112a457829003601f168201915b5050505050908060030180546112d6906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611302906138a5565b801561134f5780601f106113245761010080835404028352916020019161134f565b820191906000526020600020905b81548152906001019060200180831161133257829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613c54565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156116cd57838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054611518906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611544906138a5565b80156115915780601f1061156657610100808354040283529160200191611591565b820191906000526020600020905b81548152906001019060200180831161157457829003601f168201915b505050505081526020016002820180546115aa906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546115d6906138a5565b80156116235780601f106115f857610100808354040283529160200191611623565b820191906000526020600020905b81548152906001019060200180831161160657829003601f168201915b5050505050815260200160038201805461163c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611668906138a5565b80156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b5050505050815250508152602001906001019061148f565b50505050905090565b606080606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161177d57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010182600201836003018380546117dc906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611808906138a5565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b50505050509350828054611868906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906138a5565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b505050505092508180546118f4906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611920906138a5565b801561196d5780601f106119425761010080835404028352916020019161196d565b820191906000526020600020905b81548152906001019060200180831161195057829003601f168201915b50505050509150808054611980906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ac906138a5565b80156119f95780601f106119ce576101008083540402835291602001916119f9565b820191906000526020600020905b8154815290600101906020018083116119dc57829003601f168201915b50505050509050965096509650965050505090919293565b6060600060606000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054611a80906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac906138a5565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b50505050509250808054611b0c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b38906138a5565b8015611b855780601f10611b5a57610100808354040283529160200191611b85565b820191906000526020600020905b815481529060010190602001808311611b6857829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081611cf09190613a82565b506040820151816002019081611d069190613a82565b506060820151816003019081611d1c9190613a82565b50505082604051611d2d9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd84604051611d7b9190613ca3565b60405180910390a3505050565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050604051602001611dda90613b85565b6040516020818303038152906040528051906020012085604051602001611e019190613bcb565b6040516020818303038152906040528051906020012003611e2157600080fd5b604051602001611e3090613b85565b6040516020818303038152906040528051906020012083604051602001611e579190613bcb565b6040516020818303038152906040528051906020012003611e7757600080fd5b604051602001611e8690613b85565b6040516020818303038152906040528051906020012082604051602001611ead9190613bcb565b6040516020818303038152906040528051906020012003611ecd57600080fd5b60008460ff16118015611ee3575060648460ff16105b611eec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115611f4a57600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081611fde9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816120159190613a82565b50606082015181600301908161202b9190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050846040516120849190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161217e57600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201836003018380546121eb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612217906138a5565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b50505050509350818054612277906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546122a3906138a5565b80156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b50505050509150808054612303906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461232f906138a5565b801561237c5780601f106123515761010080835404028352916020019161237c565b820191906000526020600020905b81548152906001019060200180831161235f57829003601f168201915b50505050509050965096509650965050505090919293565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016123e690613b85565b604051602081830303815290604052805190602001208560405160200161240d9190613bcb565b604051602081830303815290604052805190602001200361242d57600080fd5b60405160200161243c90613b85565b60405160208183030381529060405280519060200120846040516020016124639190613bcb565b604051602081830303815290604052805190602001200361248357600080fd5b60405160200161249290613b85565b60405160208183030381529060405280519060200120836040516020016124b99190613bcb565b60405160208183030381529060405280519060200120036124d957600080fd5b6040516020016124e890613b85565b604051602081830303815290604052805190602001208260405160200161250f9190613bcb565b604051602081830303815290604052805190602001200361252f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561258d57600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161261e9190613a82565b5060208201518160010190816126349190613a82565b50604082015181600201908161264a9190613a82565b5060608201518160030190816126609190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612717906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612743906138a5565b80156127905780601f1061276557610100808354040283529160200191612790565b820191906000526020600020905b81548152906001019060200180831161277357829003601f168201915b505050505093508280546127a3906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf906138a5565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b5050505050925081805461282f906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461285b906138a5565b80156128a85780601f1061287d576101008083540402835291602001916128a8565b820191906000526020600020905b81548152906001019060200180831161288b57829003601f168201915b505050505091508080546128bb906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546128e7906138a5565b80156129345780601f1061290957610100808354040283529160200191612934565b820191906000526020600020905b81548152906001019060200180831161291757829003601f168201915b505050505090509450945094509450509193509193565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612a4d57612a4c613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f766564000000000000000000000000000000000000000000000000815250816003019081612aa39190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054612bbb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612be7906138a5565b8015612c345780601f10612c0957610100808354040283529160200191612c34565b820191906000526020600020905b815481529060010190602001808311612c1757829003601f168201915b50505050509350818054612c47906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c73906138a5565b8015612cc05780601f10612c9557610100808354040283529160200191612cc0565b820191906000526020600020905b815481529060010190602001808311612ca357829003601f168201915b50505050509150808054612cd3906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612cff906138a5565b8015612d4c5780601f10612d2157610100808354040283529160200191612d4c565b820191906000526020600020905b815481529060010190602001808311612d2f57829003601f168201915b505050505090509450945094509450509193509193565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612da282612d77565b9050919050565b612db281612d97565b8114612dbd57600080fd5b50565b600081359050612dcf81612da9565b92915050565b600060208284031215612deb57612dea612d6d565b5b6000612df984828501612dc0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e3c578082015181840152602081019050612e21565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e6482612e02565b612e6e8185612e0d565b9350612e7e818560208601612e1e565b612e8781612e48565b840191505092915050565b600060ff82169050919050565b612ea881612e92565b82525050565b612eb781612d97565b82525050565b60006080820190508181036000830152612ed78187612e59565b9050612ee66020830186612e9f565b8181036040830152612ef88185612e59565b9050612f076060830184612eae565b95945050505050565b60008060408385031215612f2757612f26612d6d565b5b6000612f3585828601612dc0565b9250506020612f4685828601612dc0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f9282612e48565b810181811067ffffffffffffffff82111715612fb157612fb0612f5a565b5b80604052505050565b6000612fc4612d63565b9050612fd08282612f89565b919050565b600067ffffffffffffffff821115612ff057612fef612f5a565b5b612ff982612e48565b9050602081019050919050565b82818337600083830152505050565b600061302861302384612fd5565b612fba565b90508281526020810184848401111561304457613043612f55565b5b61304f848285613006565b509392505050565b600082601f83011261306c5761306b612f50565b5b813561307c848260208601613015565b91505092915050565b61308e81612e92565b811461309957600080fd5b50565b6000813590506130ab81613085565b92915050565b6000806000606084860312156130ca576130c9612d6d565b5b600084013567ffffffffffffffff8111156130e8576130e7612d72565b5b6130f486828701613057565b93505060206131058682870161309c565b925050604084013567ffffffffffffffff81111561312657613125612d72565b5b61313286828701613057565b9150509250925092565b6000819050919050565b61314f8161313c565b811461315a57600080fd5b50565b60008135905061316c81613146565b92915050565b60006020828403121561318857613187612d6d565b5b60006131968482850161315d565b91505092915050565b600060608201905081810360008301526131b98186612e59565b90506131c86020830185612e9f565b81810360408301526131da8184612e59565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061322c82612e02565b6132368185613210565b9350613246818560208601612e1e565b61324f81612e48565b840191505092915050565b61326381612e92565b82525050565b61327281612d97565b82525050565b600060a08301600083015184820360008601526132958282613221565b91505060208301516132aa602086018261325a565b50604083015184820360408601526132c28282613221565b915050606083015184820360608601526132dc8282613221565b91505060808301516132f16080860182613269565b508091505092915050565b60006133088383613278565b905092915050565b6000602082019050919050565b6000613328826131e4565b61333281856131ef565b93508360208202850161334485613200565b8060005b85811015613380578484038952815161336185826132fc565b945061336c83613310565b925060208a01995050600181019050613348565b50829750879550505050505092915050565b600060208201905081810360008301526133ac818461331d565b905092915050565b600080604083850312156133cb576133ca612d6d565b5b60006133d985828601612dc0565b92505060206133ea8582860161315d565b9150509250929050565b600060a082019050818103600083015261340e8188612e59565b905061341d6020830187612e9f565b818103604083015261342f8186612e59565b905081810360608301526134438185612e59565b90506134526080830184612eae565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006080830160008301516134a06000860182613269565b50602083015184820360208601526134b88282613221565b915050604083015184820360408601526134d28282613221565b915050606083015184820360608601526134ec8282613221565b9150508091505092915050565b60006135058383613488565b905092915050565b6000602082019050919050565b60006135258261345c565b61352f8185613467565b93508360208202850161354185613478565b8060005b8581101561357d578484038952815161355e85826134f9565b94506135698361350d565b925060208a01995050600181019050613545565b50829750879550505050505092915050565b600060208201905081810360008301526135a9818461351a565b905092915050565b600060808201905081810360008301526135cb8187612e59565b905081810360208301526135df8186612e59565b905081810360408301526135f38185612e59565b905081810360608301526136078184612e59565b905095945050505050565b6000806040838503121561362957613628612d6d565b5b600083013567ffffffffffffffff81111561364757613646612d72565b5b61365385828601613057565b925050602083013567ffffffffffffffff81111561367457613673612d72565b5b61368085828601613057565b9150509250929050565b600080600080608085870312156136a4576136a3612d6d565b5b600085013567ffffffffffffffff8111156136c2576136c1612d72565b5b6136ce87828801613057565b94505060206136df8782880161309c565b935050604085013567ffffffffffffffff811115613700576136ff612d72565b5b61370c87828801613057565b925050606085013567ffffffffffffffff81111561372d5761372c612d72565b5b61373987828801613057565b91505092959194509250565b6000608082019050818103600083015261375f8187612e59565b905061376e6020830186612e9f565b81810360408301526137808185612e59565b905081810360608301526137948184612e59565b905095945050505050565b600080600080608085870312156137b9576137b8612d6d565b5b600085013567ffffffffffffffff8111156137d7576137d6612d72565b5b6137e387828801613057565b945050602085013567ffffffffffffffff81111561380457613803612d72565b5b61381087828801613057565b935050604085013567ffffffffffffffff81111561383157613830612d72565b5b61383d87828801613057565b925050606085013567ffffffffffffffff81111561385e5761385d612d72565b5b61386a87828801613057565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138bd57607f821691505b6020821081036138d0576138cf613876565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138fb565b61394286836138fb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061397f61397a6139758461313c565b61395a565b61313c565b9050919050565b6000819050919050565b61399983613964565b6139ad6139a582613986565b848454613908565b825550505050565b600090565b6139c26139b5565b6139cd818484613990565b505050565b5b818110156139f1576139e66000826139ba565b6001810190506139d3565b5050565b601f821115613a3657613a07816138d6565b613a10846138eb565b81016020851015613a1f578190505b613a33613a2b856138eb565b8301826139d2565b50505b505050565b600082821c905092915050565b6000613a5960001984600802613a3b565b1980831691505092915050565b6000613a728383613a48565b9150826002028217905092915050565b613a8b82612e02565b67ffffffffffffffff811115613aa457613aa3612f5a565b5b613aae82546138a5565b613ab98282856139f5565b600060209050601f831160018114613aec5760008415613ada578287015190505b613ae48582613a66565b865550613b4c565b601f198416613afa866138d6565b60005b82811015613b2257848901518255600182019150602085019450602081019050613afd565b86831015613b3f5784890151613b3b601f891682613a48565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b50565b6000613b6f600083613b54565b9150613b7a82613b5f565b600082019050919050565b6000613b9082613b62565b9150819050919050565b6000613ba582612e02565b613baf8185613b54565b9350613bbf818560208601612e1e565b80840191505092915050565b6000613bd78284613b9a565b915081905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3e602183612e0d565b9150613c4982613be2565b604082019050919050565b60006020820190508181036000830152613c6d81613c31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190508181036000830152613cbd8184612e59565b90509291505056fea2646970667358221220ed3568f99d58502e314bc45cecd8f2ba879d333b24212bdc5691c2521d3517b064736f6c63430008110033"; - -type HealthBlockConstructorParams = - | [signer?: Signer] - | ConstructorParameters; - -const isSuperArgs = ( - xs: HealthBlockConstructorParams -): xs is ConstructorParameters => xs.length > 1; - -export class HealthBlock__factory extends ContractFactory { - constructor(...args: HealthBlockConstructorParams) { - if (isSuperArgs(args)) { - super(...args); - } else { - super(_abi, _bytecode, args[0]); - } - } - - override deploy( - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise { - return super.deploy(overrides || {}) as Promise; - } - override getDeployTransaction( - overrides?: Overrides & { from?: PromiseOrValue } - ): TransactionRequest { - return super.getDeployTransaction(overrides || {}); - } - override attach(address: string): HealthBlock { - return super.attach(address) as HealthBlock; - } - override connect(signer: Signer): HealthBlock__factory { - return super.connect(signer) as HealthBlock__factory; - } - - static readonly bytecode = _bytecode; - static readonly abi = _abi; - static createInterface(): HealthBlockInterface { - return new utils.Interface(_abi) as HealthBlockInterface; - } - static connect( - address: string, - signerOrProvider: Signer | Provider - ): HealthBlock { - return new Contract(address, _abi, signerOrProvider) as HealthBlock; - } -} diff --git a/client/src/contracts/factories/index.ts b/client/src/contracts/factories/index.ts deleted file mode 100644 index 085d713..0000000 --- a/client/src/contracts/factories/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export { HealthBlock__factory } from "./HealthBlock__factory"; diff --git a/client/src/contracts/index.ts b/client/src/contracts/index.ts deleted file mode 100644 index 28a0273..0000000 --- a/client/src/contracts/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export type { HealthBlock } from "./HealthBlock"; -export * as factories from "./factories"; -export { HealthBlock__factory } from "./factories/HealthBlock__factory"; From c9a411aa5bc0c58a68642fe0569582e5f46af2a7 Mon Sep 17 00:00:00 2001 From: Shruthi23 Date: Fri, 5 May 2023 22:24:40 -0700 Subject: [PATCH 4/5] Contarct files regenrated --- client/src/contracts/HealthBlock.ts | 916 ++++++++++++++++++ client/src/contracts/common.ts | 46 + .../factories/HealthBlock__factory.ts | 673 +++++++++++++ client/src/contracts/factories/index.ts | 4 + client/src/contracts/index.ts | 6 + 5 files changed, 1645 insertions(+) create mode 100644 client/src/contracts/HealthBlock.ts create mode 100644 client/src/contracts/common.ts create mode 100644 client/src/contracts/factories/HealthBlock__factory.ts create mode 100644 client/src/contracts/factories/index.ts create mode 100644 client/src/contracts/index.ts diff --git a/client/src/contracts/HealthBlock.ts b/client/src/contracts/HealthBlock.ts new file mode 100644 index 0000000..647c85c --- /dev/null +++ b/client/src/contracts/HealthBlock.ts @@ -0,0 +1,916 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "./common"; + +export declare namespace HealthBlock { + export type RequestStruct = { + doctor: PromiseOrValue; + doctorName: PromiseOrValue; + credentialsHash: PromiseOrValue; + status: PromiseOrValue; + }; + + export type RequestStructOutput = [string, string, string, string] & { + doctor: string; + doctorName: string; + credentialsHash: string; + status: string; + }; + + export type DoctorStruct = { + name: PromiseOrValue; + age: PromiseOrValue; + email: PromiseOrValue; + specialization: PromiseOrValue; + id: PromiseOrValue; + }; + + export type DoctorStructOutput = [string, number, string, string, string] & { + name: string; + age: number; + email: string; + specialization: string; + id: string; + }; +} + +export interface HealthBlockInterface extends utils.Interface { + functions: { + "patients(address)": FunctionFragment; + "providerToDoctors(address,uint256)": FunctionFragment; + "raiseRequest(string,string)": FunctionFragment; + "getRequests()": FunctionFragment; + "rejectRequest(uint256)": FunctionFragment; + "approveRequest(uint256)": FunctionFragment; + "getPatientInfo()": FunctionFragment; + "getPatientInfoAll(address)": FunctionFragment; + "registerPatient(string,uint8,string)": FunctionFragment; + "getDoctorInfo()": FunctionFragment; + "getDoctorInfoAll(address)": FunctionFragment; + "registerDoctor(string,uint8,string,string)": FunctionFragment; + "getHCProviderInfo()": FunctionFragment; + "getHCProviderInfoAll(address)": FunctionFragment; + "registerHCProvider(string,string,string,string)": FunctionFragment; + "getAllDoctorsForProvider(address)": FunctionFragment; + "mapDoctorToProvider(address,address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "patients" + | "providerToDoctors" + | "raiseRequest" + | "getRequests" + | "rejectRequest" + | "approveRequest" + | "getPatientInfo" + | "getPatientInfoAll" + | "registerPatient" + | "getDoctorInfo" + | "getDoctorInfoAll" + | "registerDoctor" + | "getHCProviderInfo" + | "getHCProviderInfoAll" + | "registerHCProvider" + | "getAllDoctorsForProvider" + | "mapDoctorToProvider" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "patients", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "providerToDoctors", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "raiseRequest", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getRequests", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "rejectRequest", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "approveRequest", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "getPatientInfo", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getPatientInfoAll", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "registerPatient", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getDoctorInfo", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getDoctorInfoAll", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "registerDoctor", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getHCProviderInfo", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "getHCProviderInfoAll", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "registerHCProvider", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getAllDoctorsForProvider", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "mapDoctorToProvider", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "patients", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "providerToDoctors", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "raiseRequest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRequests", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "rejectRequest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "approveRequest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getPatientInfo", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getPatientInfoAll", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "registerPatient", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDoctorInfo", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDoctorInfoAll", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "registerDoctor", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getHCProviderInfo", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getHCProviderInfoAll", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "registerHCProvider", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getAllDoctorsForProvider", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "mapDoctorToProvider", + data: BytesLike + ): Result; + + events: { + "DoctorRequestRaised(address,string,string)": EventFragment; + "NDoctor(address,string)": EventFragment; + "NHCProvider(address,string)": EventFragment; + "NPatient(address,string)": EventFragment; + "RequestApproved(address,address,uint256)": EventFragment; + "RequestRejected(address,address,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "DoctorRequestRaised"): EventFragment; + getEvent(nameOrSignatureOrTopic: "NDoctor"): EventFragment; + getEvent(nameOrSignatureOrTopic: "NHCProvider"): EventFragment; + getEvent(nameOrSignatureOrTopic: "NPatient"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RequestApproved"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RequestRejected"): EventFragment; +} + +export interface DoctorRequestRaisedEventObject { + doctor: string; + doctorName: string; + credentialsHash: string; +} +export type DoctorRequestRaisedEvent = TypedEvent< + [string, string, string], + DoctorRequestRaisedEventObject +>; + +export type DoctorRequestRaisedEventFilter = + TypedEventFilter; + +export interface NDoctorEventObject { + _from: string; + _name: string; +} +export type NDoctorEvent = TypedEvent<[string, string], NDoctorEventObject>; + +export type NDoctorEventFilter = TypedEventFilter; + +export interface NHCProviderEventObject { + _from: string; + _name: string; +} +export type NHCProviderEvent = TypedEvent< + [string, string], + NHCProviderEventObject +>; + +export type NHCProviderEventFilter = TypedEventFilter; + +export interface NPatientEventObject { + _from: string; + _name: string; +} +export type NPatientEvent = TypedEvent<[string, string], NPatientEventObject>; + +export type NPatientEventFilter = TypedEventFilter; + +export interface RequestApprovedEventObject { + doctor: string; + provider: string; + requestId: BigNumber; +} +export type RequestApprovedEvent = TypedEvent< + [string, string, BigNumber], + RequestApprovedEventObject +>; + +export type RequestApprovedEventFilter = TypedEventFilter; + +export interface RequestRejectedEventObject { + doctor: string; + provider: string; + requestId: BigNumber; +} +export type RequestRejectedEvent = TypedEvent< + [string, string, BigNumber], + RequestRejectedEventObject +>; + +export type RequestRejectedEventFilter = TypedEventFilter; + +export interface HealthBlock extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: HealthBlockInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + patients( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string] & { + name: string; + age: number; + email: string; + id: string; + } + >; + + providerToDoctors( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string, string] & { + name: string; + age: number; + email: string; + specialization: string; + id: string; + } + >; + + raiseRequest( + doctorName: PromiseOrValue, + credentialsHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getRequests( + overrides?: CallOverrides + ): Promise<[HealthBlock.RequestStructOutput[]]>; + + rejectRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + approveRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getPatientInfo( + overrides?: CallOverrides + ): Promise<[string, number, string]>; + + getPatientInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string]>; + + registerPatient( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorInfo( + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + getDoctorInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + registerDoctor( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + _specialization: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getHCProviderInfo( + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + getHCProviderInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + registerHCProvider( + _name: PromiseOrValue, + _email: PromiseOrValue, + _address: PromiseOrValue, + _phone: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAllDoctorsForProvider( + providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[HealthBlock.DoctorStructOutput[]]>; + + mapDoctorToProvider( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + patients( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string] & { + name: string; + age: number; + email: string; + id: string; + } + >; + + providerToDoctors( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string, string] & { + name: string; + age: number; + email: string; + specialization: string; + id: string; + } + >; + + raiseRequest( + doctorName: PromiseOrValue, + credentialsHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getRequests( + overrides?: CallOverrides + ): Promise; + + rejectRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + approveRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getPatientInfo(overrides?: CallOverrides): Promise<[string, number, string]>; + + getPatientInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string]>; + + registerPatient( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorInfo( + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + getDoctorInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + registerDoctor( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + _specialization: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getHCProviderInfo( + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + getHCProviderInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + registerHCProvider( + _name: PromiseOrValue, + _email: PromiseOrValue, + _address: PromiseOrValue, + _phone: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAllDoctorsForProvider( + providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mapDoctorToProvider( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + patients( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string] & { + name: string; + age: number; + email: string; + id: string; + } + >; + + providerToDoctors( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, number, string, string, string] & { + name: string; + age: number; + email: string; + specialization: string; + id: string; + } + >; + + raiseRequest( + doctorName: PromiseOrValue, + credentialsHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getRequests( + overrides?: CallOverrides + ): Promise; + + rejectRequest( + requestId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + approveRequest( + requestId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getPatientInfo( + overrides?: CallOverrides + ): Promise<[string, number, string]>; + + getPatientInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string]>; + + registerPatient( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDoctorInfo( + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + getDoctorInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, number, string, string]>; + + registerDoctor( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + _specialization: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getHCProviderInfo( + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + getHCProviderInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string, string, string, string]>; + + registerHCProvider( + _name: PromiseOrValue, + _email: PromiseOrValue, + _address: PromiseOrValue, + _phone: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getAllDoctorsForProvider( + providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mapDoctorToProvider( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "DoctorRequestRaised(address,string,string)"( + doctor?: PromiseOrValue | null, + doctorName?: PromiseOrValue | null, + credentialsHash?: null + ): DoctorRequestRaisedEventFilter; + DoctorRequestRaised( + doctor?: PromiseOrValue | null, + doctorName?: PromiseOrValue | null, + credentialsHash?: null + ): DoctorRequestRaisedEventFilter; + + "NDoctor(address,string)"( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NDoctorEventFilter; + NDoctor( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NDoctorEventFilter; + + "NHCProvider(address,string)"( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NHCProviderEventFilter; + NHCProvider( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NHCProviderEventFilter; + + "NPatient(address,string)"( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NPatientEventFilter; + NPatient( + _from?: PromiseOrValue | null, + _name?: PromiseOrValue | null + ): NPatientEventFilter; + + "RequestApproved(address,address,uint256)"( + doctor?: PromiseOrValue | null, + provider?: PromiseOrValue | null, + requestId?: PromiseOrValue | null + ): RequestApprovedEventFilter; + RequestApproved( + doctor?: PromiseOrValue | null, + provider?: PromiseOrValue | null, + requestId?: PromiseOrValue | null + ): RequestApprovedEventFilter; + + "RequestRejected(address,address,uint256)"( + doctor?: PromiseOrValue | null, + provider?: PromiseOrValue | null, + requestId?: PromiseOrValue | null + ): RequestRejectedEventFilter; + RequestRejected( + doctor?: PromiseOrValue | null, + provider?: PromiseOrValue | null, + requestId?: PromiseOrValue | null + ): RequestRejectedEventFilter; + }; + + estimateGas: { + patients( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + providerToDoctors( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + raiseRequest( + doctorName: PromiseOrValue, + credentialsHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getRequests(overrides?: CallOverrides): Promise; + + rejectRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + approveRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getPatientInfo(overrides?: CallOverrides): Promise; + + getPatientInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerPatient( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorInfo(overrides?: CallOverrides): Promise; + + getDoctorInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerDoctor( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + _specialization: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getHCProviderInfo(overrides?: CallOverrides): Promise; + + getHCProviderInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerHCProvider( + _name: PromiseOrValue, + _email: PromiseOrValue, + _address: PromiseOrValue, + _phone: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAllDoctorsForProvider( + providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mapDoctorToProvider( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + patients( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + providerToDoctors( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + raiseRequest( + doctorName: PromiseOrValue, + credentialsHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getRequests(overrides?: CallOverrides): Promise; + + rejectRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + approveRequest( + requestId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getPatientInfo(overrides?: CallOverrides): Promise; + + getPatientInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerPatient( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorInfo(overrides?: CallOverrides): Promise; + + getDoctorInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerDoctor( + _name: PromiseOrValue, + _age: PromiseOrValue, + _email: PromiseOrValue, + _specialization: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getHCProviderInfo(overrides?: CallOverrides): Promise; + + getHCProviderInfoAll( + _address: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + registerHCProvider( + _name: PromiseOrValue, + _email: PromiseOrValue, + _address: PromiseOrValue, + _phone: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getAllDoctorsForProvider( + providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + mapDoctorToProvider( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} diff --git a/client/src/contracts/common.ts b/client/src/contracts/common.ts new file mode 100644 index 0000000..4c90b08 --- /dev/null +++ b/client/src/contracts/common.ts @@ -0,0 +1,46 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { Listener } from "@ethersproject/providers"; +import type { Event, EventFilter } from "ethers"; + +export interface TypedEvent< + TArgsArray extends Array = any, + TArgsObject = any +> extends Event { + args: TArgsArray & TArgsObject; +} + +export interface TypedEventFilter<_TEvent extends TypedEvent> + extends EventFilter {} + +export interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} + +type __TypechainArgsArray = T extends TypedEvent ? U : never; + +export interface OnEvent { + ( + eventFilter: TypedEventFilter, + listener: TypedListener + ): TRes; + (eventName: string, listener: Listener): TRes; +} + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; + +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; + +export type PromiseOrValue = T | Promise; diff --git a/client/src/contracts/factories/HealthBlock__factory.ts b/client/src/contracts/factories/HealthBlock__factory.ts new file mode 100644 index 0000000..970dfe0 --- /dev/null +++ b/client/src/contracts/factories/HealthBlock__factory.ts @@ -0,0 +1,673 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../common"; +import type { HealthBlock, HealthBlockInterface } from "../HealthBlock"; + +const _abi = [ + { + inputs: [], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "doctor", + type: "address", + }, + { + indexed: true, + internalType: "string", + name: "doctorName", + type: "string", + }, + { + indexed: false, + internalType: "string", + name: "credentialsHash", + type: "string", + }, + ], + name: "DoctorRequestRaised", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_from", + type: "address", + }, + { + indexed: true, + internalType: "string", + name: "_name", + type: "string", + }, + ], + name: "NDoctor", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_from", + type: "address", + }, + { + indexed: true, + internalType: "string", + name: "_name", + type: "string", + }, + ], + name: "NHCProvider", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "_from", + type: "address", + }, + { + indexed: true, + internalType: "string", + name: "_name", + type: "string", + }, + ], + name: "NPatient", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "doctor", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "provider", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "requestId", + type: "uint256", + }, + ], + name: "RequestApproved", + type: "event", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "doctor", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "provider", + type: "address", + }, + { + indexed: true, + internalType: "uint256", + name: "requestId", + type: "uint256", + }, + ], + name: "RequestRejected", + type: "event", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "patients", + outputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "uint8", + name: "age", + type: "uint8", + }, + { + internalType: "string", + name: "email", + type: "string", + }, + { + internalType: "address", + name: "id", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "providerToDoctors", + outputs: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "uint8", + name: "age", + type: "uint8", + }, + { + internalType: "string", + name: "email", + type: "string", + }, + { + internalType: "string", + name: "specialization", + type: "string", + }, + { + internalType: "address", + name: "id", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "doctorName", + type: "string", + }, + { + internalType: "string", + name: "credentialsHash", + type: "string", + }, + ], + name: "raiseRequest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getRequests", + outputs: [ + { + components: [ + { + internalType: "address", + name: "doctor", + type: "address", + }, + { + internalType: "string", + name: "doctorName", + type: "string", + }, + { + internalType: "string", + name: "credentialsHash", + type: "string", + }, + { + internalType: "string", + name: "status", + type: "string", + }, + ], + internalType: "struct HealthBlock.Request[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "requestId", + type: "uint256", + }, + ], + name: "rejectRequest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "requestId", + type: "uint256", + }, + ], + name: "approveRequest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getPatientInfo", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "uint8", + name: "", + type: "uint8", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "getPatientInfoAll", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "uint8", + name: "", + type: "uint8", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_name", + type: "string", + }, + { + internalType: "uint8", + name: "_age", + type: "uint8", + }, + { + internalType: "string", + name: "_email", + type: "string", + }, + ], + name: "registerPatient", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getDoctorInfo", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "uint8", + name: "", + type: "uint8", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "getDoctorInfoAll", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "uint8", + name: "", + type: "uint8", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_name", + type: "string", + }, + { + internalType: "uint8", + name: "_age", + type: "uint8", + }, + { + internalType: "string", + name: "_email", + type: "string", + }, + { + internalType: "string", + name: "_specialization", + type: "string", + }, + ], + name: "registerDoctor", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getHCProviderInfo", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_address", + type: "address", + }, + ], + name: "getHCProviderInfoAll", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "string", + name: "_name", + type: "string", + }, + { + internalType: "string", + name: "_email", + type: "string", + }, + { + internalType: "string", + name: "_address", + type: "string", + }, + { + internalType: "string", + name: "_phone", + type: "string", + }, + ], + name: "registerHCProvider", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "providerAddress", + type: "address", + }, + ], + name: "getAllDoctorsForProvider", + outputs: [ + { + components: [ + { + internalType: "string", + name: "name", + type: "string", + }, + { + internalType: "uint8", + name: "age", + type: "uint8", + }, + { + internalType: "string", + name: "email", + type: "string", + }, + { + internalType: "string", + name: "specialization", + type: "string", + }, + { + internalType: "address", + name: "id", + type: "address", + }, + ], + internalType: "struct HealthBlock.doctor[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_providerAddress", + type: "address", + }, + { + internalType: "address", + name: "_doctorAddress", + type: "address", + }, + ], + name: "mapDoctorToProvider", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +const _bytecode = + "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613cfb806100606000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063916922c4116100a2578063b380f5c611610071578063b380f5c6146102c4578063bc4fe402146102e5578063c5b0aab014610301578063d7d1bbdb14610334578063e1e36ab9146103505761010b565b8063916922c414610239578063a9b467ee1461025a578063afc3b5c41461028c578063b2d258ff146102a85761010b565b8063326df664116100de578063326df664146101975780635df122e1146101b75780636d36f7be146101e75780638813ce121461021b5761010b565b80630869cfbc14610110578063139f0984146101435780631c2972051461015f5780632d7788db1461017b575b600080fd5b61012a60048036038101906101259190612dd5565b610383565b60405161013a9493929190612ebd565b60405180910390f35b61015d60048036038101906101589190612f10565b6104f0565b005b610179600480360381019061017491906130b1565b610841565b005b61019560048036038101906101909190613172565b610a7a565b005b61019f610c76565b6040516101ae9392919061319f565b60405180910390f35b6101d160048036038101906101cc9190612dd5565b610ea0565b6040516101de9190613392565b60405180910390f35b61020160048036038101906101fc91906133b4565b611167565b6040516102129594939291906133f4565b60405180910390f35b61022361137f565b604051610230919061358f565b60405180910390f35b6102416116d6565b60405161025194939291906135b1565b60405180910390f35b610274600480360381019061026f9190612dd5565b611a11565b6040516102839392919061319f565b60405180910390f35b6102a660048036038101906102a19190613612565b611b9a565b005b6102c260048036038101906102bd919061368a565b611d88565b005b6102cc6120d6565b6040516102dc9493929190613745565b60405180910390f35b6102ff60048036038101906102fa919061379f565b612394565b005b61031b60048036038101906103169190612dd5565b6126b2565b60405161032b94939291906135b1565b60405180910390f35b61034e60048036038101906103499190613172565b61294b565b005b61036a60048036038101906103659190612dd5565b612b47565b60405161037a9493929190613745565b60405180910390f35b60036020528060005260406000206000915090508060000180546103a6906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546103d2906138a5565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054610447906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610473906138a5565b80156104c05780601f10610495576101008083540402835291602001916104c0565b820191906000526020600020905b8154815290600101906020018083116104a357829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040528083600001805461058c906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105b8906138a5565b80156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b505050505081526020018360010160009054906101000a900460ff1660ff168152602001836002018054610638906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610664906138a5565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b505050505081526020018360030180546106ca906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906138a5565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081526020018473ffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000190816107a59190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816107dc9190613a82565b5060608201518160030190816107f29190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60405160200161085090613b85565b60405160208183030381529060405280519060200120836040516020016108779190613bcb565b604051602081830303815290604052805190602001200361089757600080fd5b6040516020016108a690613b85565b60405160208183030381529060405280519060200120816040516020016108cd9190613bcb565b60405160208183030381529060405280519060200120036108ed57600080fd5b60008260ff16118015610903575060648260ff16105b61090c57600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161099a9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816109d19190613a82565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505082604051610a2a9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b7c57610b7b613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a6563746564000000000000000000000000000000000000000000000000815250816003019081610bd29190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611610d1d57600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054610d86906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610db2906138a5565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b50505050509250808054610e12906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3e906138a5565b8015610e8b5780601f10610e6057610100808354040283529160200191610e8b565b820191906000526020600020905b815481529060010190602001808311610e6e57829003601f168201915b50505050509050955095509550505050909192565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561115c57838290600052602060002090600502016040518060a0016040529081600082018054610f34906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f60906138a5565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff168152602001600282018054610fe3906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461100f906138a5565b801561105c5780601f106110315761010080835404028352916020019161105c565b820191906000526020600020905b81548152906001019060200180831161103f57829003601f168201915b50505050508152602001600382018054611075906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546110a1906138a5565b80156110ee5780601f106110c3576101008083540402835291602001916110ee565b820191906000526020600020905b8154815290600101906020018083116110d157829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610f01565b505050509050919050565b6002602052816000526040600020818154811061118357600080fd5b9060005260206000209060050201600091509150508060000180546111a7906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546111d3906138a5565b80156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054611248906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611274906138a5565b80156112c15780601f10611296576101008083540402835291602001916112c1565b820191906000526020600020905b8154815290600101906020018083116112a457829003601f168201915b5050505050908060030180546112d6906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611302906138a5565b801561134f5780601f106113245761010080835404028352916020019161134f565b820191906000526020600020905b81548152906001019060200180831161133257829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613c54565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156116cd57838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054611518906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611544906138a5565b80156115915780601f1061156657610100808354040283529160200191611591565b820191906000526020600020905b81548152906001019060200180831161157457829003601f168201915b505050505081526020016002820180546115aa906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546115d6906138a5565b80156116235780601f106115f857610100808354040283529160200191611623565b820191906000526020600020905b81548152906001019060200180831161160657829003601f168201915b5050505050815260200160038201805461163c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611668906138a5565b80156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b5050505050815250508152602001906001019061148f565b50505050905090565b606080606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161177d57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010182600201836003018380546117dc906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611808906138a5565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b50505050509350828054611868906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906138a5565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b505050505092508180546118f4906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611920906138a5565b801561196d5780601f106119425761010080835404028352916020019161196d565b820191906000526020600020905b81548152906001019060200180831161195057829003601f168201915b50505050509150808054611980906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ac906138a5565b80156119f95780601f106119ce576101008083540402835291602001916119f9565b820191906000526020600020905b8154815290600101906020018083116119dc57829003601f168201915b50505050509050965096509650965050505090919293565b6060600060606000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054611a80906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac906138a5565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b50505050509250808054611b0c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b38906138a5565b8015611b855780601f10611b5a57610100808354040283529160200191611b85565b820191906000526020600020905b815481529060010190602001808311611b6857829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081611cf09190613a82565b506040820151816002019081611d069190613a82565b506060820151816003019081611d1c9190613a82565b50505082604051611d2d9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd84604051611d7b9190613ca3565b60405180910390a3505050565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050604051602001611dda90613b85565b6040516020818303038152906040528051906020012085604051602001611e019190613bcb565b6040516020818303038152906040528051906020012003611e2157600080fd5b604051602001611e3090613b85565b6040516020818303038152906040528051906020012083604051602001611e579190613bcb565b6040516020818303038152906040528051906020012003611e7757600080fd5b604051602001611e8690613b85565b6040516020818303038152906040528051906020012082604051602001611ead9190613bcb565b6040516020818303038152906040528051906020012003611ecd57600080fd5b60008460ff16118015611ee3575060648460ff16105b611eec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115611f4a57600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081611fde9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816120159190613a82565b50606082015181600301908161202b9190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050846040516120849190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161217e57600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201836003018380546121eb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612217906138a5565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b50505050509350818054612277906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546122a3906138a5565b80156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b50505050509150808054612303906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461232f906138a5565b801561237c5780601f106123515761010080835404028352916020019161237c565b820191906000526020600020905b81548152906001019060200180831161235f57829003601f168201915b50505050509050965096509650965050505090919293565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016123e690613b85565b604051602081830303815290604052805190602001208560405160200161240d9190613bcb565b604051602081830303815290604052805190602001200361242d57600080fd5b60405160200161243c90613b85565b60405160208183030381529060405280519060200120846040516020016124639190613bcb565b604051602081830303815290604052805190602001200361248357600080fd5b60405160200161249290613b85565b60405160208183030381529060405280519060200120836040516020016124b99190613bcb565b60405160208183030381529060405280519060200120036124d957600080fd5b6040516020016124e890613b85565b604051602081830303815290604052805190602001208260405160200161250f9190613bcb565b604051602081830303815290604052805190602001200361252f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561258d57600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161261e9190613a82565b5060208201518160010190816126349190613a82565b50604082015181600201908161264a9190613a82565b5060608201518160030190816126609190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612717906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612743906138a5565b80156127905780601f1061276557610100808354040283529160200191612790565b820191906000526020600020905b81548152906001019060200180831161277357829003601f168201915b505050505093508280546127a3906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf906138a5565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b5050505050925081805461282f906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461285b906138a5565b80156128a85780601f1061287d576101008083540402835291602001916128a8565b820191906000526020600020905b81548152906001019060200180831161288b57829003601f168201915b505050505091508080546128bb906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546128e7906138a5565b80156129345780601f1061290957610100808354040283529160200191612934565b820191906000526020600020905b81548152906001019060200180831161291757829003601f168201915b505050505090509450945094509450509193509193565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612a4d57612a4c613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f766564000000000000000000000000000000000000000000000000815250816003019081612aa39190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054612bbb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612be7906138a5565b8015612c345780601f10612c0957610100808354040283529160200191612c34565b820191906000526020600020905b815481529060010190602001808311612c1757829003601f168201915b50505050509350818054612c47906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c73906138a5565b8015612cc05780601f10612c9557610100808354040283529160200191612cc0565b820191906000526020600020905b815481529060010190602001808311612ca357829003601f168201915b50505050509150808054612cd3906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612cff906138a5565b8015612d4c5780601f10612d2157610100808354040283529160200191612d4c565b820191906000526020600020905b815481529060010190602001808311612d2f57829003601f168201915b505050505090509450945094509450509193509193565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612da282612d77565b9050919050565b612db281612d97565b8114612dbd57600080fd5b50565b600081359050612dcf81612da9565b92915050565b600060208284031215612deb57612dea612d6d565b5b6000612df984828501612dc0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e3c578082015181840152602081019050612e21565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e6482612e02565b612e6e8185612e0d565b9350612e7e818560208601612e1e565b612e8781612e48565b840191505092915050565b600060ff82169050919050565b612ea881612e92565b82525050565b612eb781612d97565b82525050565b60006080820190508181036000830152612ed78187612e59565b9050612ee66020830186612e9f565b8181036040830152612ef88185612e59565b9050612f076060830184612eae565b95945050505050565b60008060408385031215612f2757612f26612d6d565b5b6000612f3585828601612dc0565b9250506020612f4685828601612dc0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f9282612e48565b810181811067ffffffffffffffff82111715612fb157612fb0612f5a565b5b80604052505050565b6000612fc4612d63565b9050612fd08282612f89565b919050565b600067ffffffffffffffff821115612ff057612fef612f5a565b5b612ff982612e48565b9050602081019050919050565b82818337600083830152505050565b600061302861302384612fd5565b612fba565b90508281526020810184848401111561304457613043612f55565b5b61304f848285613006565b509392505050565b600082601f83011261306c5761306b612f50565b5b813561307c848260208601613015565b91505092915050565b61308e81612e92565b811461309957600080fd5b50565b6000813590506130ab81613085565b92915050565b6000806000606084860312156130ca576130c9612d6d565b5b600084013567ffffffffffffffff8111156130e8576130e7612d72565b5b6130f486828701613057565b93505060206131058682870161309c565b925050604084013567ffffffffffffffff81111561312657613125612d72565b5b61313286828701613057565b9150509250925092565b6000819050919050565b61314f8161313c565b811461315a57600080fd5b50565b60008135905061316c81613146565b92915050565b60006020828403121561318857613187612d6d565b5b60006131968482850161315d565b91505092915050565b600060608201905081810360008301526131b98186612e59565b90506131c86020830185612e9f565b81810360408301526131da8184612e59565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061322c82612e02565b6132368185613210565b9350613246818560208601612e1e565b61324f81612e48565b840191505092915050565b61326381612e92565b82525050565b61327281612d97565b82525050565b600060a08301600083015184820360008601526132958282613221565b91505060208301516132aa602086018261325a565b50604083015184820360408601526132c28282613221565b915050606083015184820360608601526132dc8282613221565b91505060808301516132f16080860182613269565b508091505092915050565b60006133088383613278565b905092915050565b6000602082019050919050565b6000613328826131e4565b61333281856131ef565b93508360208202850161334485613200565b8060005b85811015613380578484038952815161336185826132fc565b945061336c83613310565b925060208a01995050600181019050613348565b50829750879550505050505092915050565b600060208201905081810360008301526133ac818461331d565b905092915050565b600080604083850312156133cb576133ca612d6d565b5b60006133d985828601612dc0565b92505060206133ea8582860161315d565b9150509250929050565b600060a082019050818103600083015261340e8188612e59565b905061341d6020830187612e9f565b818103604083015261342f8186612e59565b905081810360608301526134438185612e59565b90506134526080830184612eae565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006080830160008301516134a06000860182613269565b50602083015184820360208601526134b88282613221565b915050604083015184820360408601526134d28282613221565b915050606083015184820360608601526134ec8282613221565b9150508091505092915050565b60006135058383613488565b905092915050565b6000602082019050919050565b60006135258261345c565b61352f8185613467565b93508360208202850161354185613478565b8060005b8581101561357d578484038952815161355e85826134f9565b94506135698361350d565b925060208a01995050600181019050613545565b50829750879550505050505092915050565b600060208201905081810360008301526135a9818461351a565b905092915050565b600060808201905081810360008301526135cb8187612e59565b905081810360208301526135df8186612e59565b905081810360408301526135f38185612e59565b905081810360608301526136078184612e59565b905095945050505050565b6000806040838503121561362957613628612d6d565b5b600083013567ffffffffffffffff81111561364757613646612d72565b5b61365385828601613057565b925050602083013567ffffffffffffffff81111561367457613673612d72565b5b61368085828601613057565b9150509250929050565b600080600080608085870312156136a4576136a3612d6d565b5b600085013567ffffffffffffffff8111156136c2576136c1612d72565b5b6136ce87828801613057565b94505060206136df8782880161309c565b935050604085013567ffffffffffffffff811115613700576136ff612d72565b5b61370c87828801613057565b925050606085013567ffffffffffffffff81111561372d5761372c612d72565b5b61373987828801613057565b91505092959194509250565b6000608082019050818103600083015261375f8187612e59565b905061376e6020830186612e9f565b81810360408301526137808185612e59565b905081810360608301526137948184612e59565b905095945050505050565b600080600080608085870312156137b9576137b8612d6d565b5b600085013567ffffffffffffffff8111156137d7576137d6612d72565b5b6137e387828801613057565b945050602085013567ffffffffffffffff81111561380457613803612d72565b5b61381087828801613057565b935050604085013567ffffffffffffffff81111561383157613830612d72565b5b61383d87828801613057565b925050606085013567ffffffffffffffff81111561385e5761385d612d72565b5b61386a87828801613057565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138bd57607f821691505b6020821081036138d0576138cf613876565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138fb565b61394286836138fb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061397f61397a6139758461313c565b61395a565b61313c565b9050919050565b6000819050919050565b61399983613964565b6139ad6139a582613986565b848454613908565b825550505050565b600090565b6139c26139b5565b6139cd818484613990565b505050565b5b818110156139f1576139e66000826139ba565b6001810190506139d3565b5050565b601f821115613a3657613a07816138d6565b613a10846138eb565b81016020851015613a1f578190505b613a33613a2b856138eb565b8301826139d2565b50505b505050565b600082821c905092915050565b6000613a5960001984600802613a3b565b1980831691505092915050565b6000613a728383613a48565b9150826002028217905092915050565b613a8b82612e02565b67ffffffffffffffff811115613aa457613aa3612f5a565b5b613aae82546138a5565b613ab98282856139f5565b600060209050601f831160018114613aec5760008415613ada578287015190505b613ae48582613a66565b865550613b4c565b601f198416613afa866138d6565b60005b82811015613b2257848901518255600182019150602085019450602081019050613afd565b86831015613b3f5784890151613b3b601f891682613a48565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b50565b6000613b6f600083613b54565b9150613b7a82613b5f565b600082019050919050565b6000613b9082613b62565b9150819050919050565b6000613ba582612e02565b613baf8185613b54565b9350613bbf818560208601612e1e565b80840191505092915050565b6000613bd78284613b9a565b915081905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3e602183612e0d565b9150613c4982613be2565b604082019050919050565b60006020820190508181036000830152613c6d81613c31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190508181036000830152613cbd8184612e59565b90509291505056fea2646970667358221220ed3568f99d58502e314bc45cecd8f2ba879d333b24212bdc5691c2521d3517b064736f6c63430008110033"; + +type HealthBlockConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: HealthBlockConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class HealthBlock__factory extends ContractFactory { + constructor(...args: HealthBlockConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): HealthBlock { + return super.attach(address) as HealthBlock; + } + override connect(signer: Signer): HealthBlock__factory { + return super.connect(signer) as HealthBlock__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): HealthBlockInterface { + return new utils.Interface(_abi) as HealthBlockInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): HealthBlock { + return new Contract(address, _abi, signerOrProvider) as HealthBlock; + } +} diff --git a/client/src/contracts/factories/index.ts b/client/src/contracts/factories/index.ts new file mode 100644 index 0000000..085d713 --- /dev/null +++ b/client/src/contracts/factories/index.ts @@ -0,0 +1,4 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { HealthBlock__factory } from "./HealthBlock__factory"; diff --git a/client/src/contracts/index.ts b/client/src/contracts/index.ts new file mode 100644 index 0000000..28a0273 --- /dev/null +++ b/client/src/contracts/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { HealthBlock } from "./HealthBlock"; +export * as factories from "./factories"; +export { HealthBlock__factory } from "./factories/HealthBlock__factory"; From e236602047f9a1dfb452f1cb9f736325add87622 Mon Sep 17 00:00:00 2001 From: Shruthi23 Date: Sat, 6 May 2023 17:54:35 -0700 Subject: [PATCH 5/5] HEAL-98 mapping implementation --- .../src/components/Doctor/UpdateProfile.tsx | 17 +- .../HealthCareProvider/HCDoctorsRequest.tsx | 106 ++++++++++ .../HCProviderDashboard.tsx | 14 ++ .../src/components/Routes/RoutesComponent.tsx | 5 + client/src/contracts/HealthBlock.ts | 194 ++++++++++++++++++ .../factories/HealthBlock__factory.ts | 125 ++++++++++- client/src/providers/HealthProvider.tsx | 75 ++++++- contracts/HealthBlock.sol | 62 ++++++ 8 files changed, 591 insertions(+), 7 deletions(-) create mode 100644 client/src/components/HealthCareProvider/HCDoctorsRequest.tsx diff --git a/client/src/components/Doctor/UpdateProfile.tsx b/client/src/components/Doctor/UpdateProfile.tsx index b5ef667..a95e03d 100644 --- a/client/src/components/Doctor/UpdateProfile.tsx +++ b/client/src/components/Doctor/UpdateProfile.tsx @@ -17,7 +17,8 @@ interface AppointmentDetails { const UpdateProfile: FunctionComponent<{}> = () => { const [address, setAddress] = useState(''); const [hc, setHc] = useState(''); - const { updateProfile, currentAccount } = useContext(HealthContext); + const { user } = useContext(AuthContext); + const { updateProfile, currentAccount, handleDocToHCRaiseRequest } = useContext(HealthContext); const account = currentAccount || ''; let providers = [ @@ -27,7 +28,7 @@ const UpdateProfile: FunctionComponent<{}> = () => { }, { name: 'Sutter Health Care', - address: '0xEE619586e0826CA2F00772701eADc2065E5D5A47', + address: '0xb3cc507e752dcc3da1cef955b58e97ae77160103', }, { name: 'El Camino', @@ -64,7 +65,17 @@ const UpdateProfile: FunctionComponent<{}> = () => {
+
+ ); + }; + return (
+ {_renderManageRequestsSection()}
{user?.name} diff --git a/client/src/components/Routes/RoutesComponent.tsx b/client/src/components/Routes/RoutesComponent.tsx index 6ffedbd..06387cc 100644 --- a/client/src/components/Routes/RoutesComponent.tsx +++ b/client/src/components/Routes/RoutesComponent.tsx @@ -16,6 +16,7 @@ import ScheduleAppointment from '../Patient/ScheduleAppointment'; import UpdateProfile from '../Doctor/UpdateProfile'; import ManageSchedule from '../Doctor/ManageSchedule'; import AppointmentHistory from '../Patient/AppointmentHistory'; +import HCDoctorRequest from '../HealthCareProvider/HCDoctorsRequest'; const RoutesComponent: FunctionComponent<{}> = () => { const navigate = useNavigate(); @@ -86,6 +87,10 @@ const RoutesComponent: FunctionComponent<{}> = () => { } /> } /> + } />} + /> ); diff --git a/client/src/contracts/HealthBlock.ts b/client/src/contracts/HealthBlock.ts index 647c85c..6f461a1 100644 --- a/client/src/contracts/HealthBlock.ts +++ b/client/src/contracts/HealthBlock.ts @@ -57,10 +57,23 @@ export declare namespace HealthBlock { specialization: string; id: string; }; + + export type JoinRequestStruct = { + doctor: PromiseOrValue; + doctorName: PromiseOrValue; + status: PromiseOrValue; + }; + + export type JoinRequestStructOutput = [string, string, string] & { + doctor: string; + doctorName: string; + status: string; + }; } export interface HealthBlockInterface extends utils.Interface { functions: { + "hcproviderToDoctorRequests(address,uint256)": FunctionFragment; "patients(address)": FunctionFragment; "providerToDoctors(address,uint256)": FunctionFragment; "raiseRequest(string,string)": FunctionFragment; @@ -78,10 +91,14 @@ export interface HealthBlockInterface extends utils.Interface { "registerHCProvider(string,string,string,string)": FunctionFragment; "getAllDoctorsForProvider(address)": FunctionFragment; "mapDoctorToProvider(address,address)": FunctionFragment; + "rejectDoctorRequest(address,address)": FunctionFragment; + "raiseJoinNetworkRequest(address,address,string)": FunctionFragment; + "getDoctorRequestsForHC(address)": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: + | "hcproviderToDoctorRequests" | "patients" | "providerToDoctors" | "raiseRequest" @@ -99,8 +116,15 @@ export interface HealthBlockInterface extends utils.Interface { | "registerHCProvider" | "getAllDoctorsForProvider" | "mapDoctorToProvider" + | "rejectDoctorRequest" + | "raiseJoinNetworkRequest" + | "getDoctorRequestsForHC" ): FunctionFragment; + encodeFunctionData( + functionFragment: "hcproviderToDoctorRequests", + values: [PromiseOrValue, PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "patients", values: [PromiseOrValue] @@ -183,7 +207,27 @@ export interface HealthBlockInterface extends utils.Interface { functionFragment: "mapDoctorToProvider", values: [PromiseOrValue, PromiseOrValue] ): string; + encodeFunctionData( + functionFragment: "rejectDoctorRequest", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "raiseJoinNetworkRequest", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "getDoctorRequestsForHC", + values: [PromiseOrValue] + ): string; + decodeFunctionResult( + functionFragment: "hcproviderToDoctorRequests", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "patients", data: BytesLike): Result; decodeFunctionResult( functionFragment: "providerToDoctors", @@ -249,6 +293,18 @@ export interface HealthBlockInterface extends utils.Interface { functionFragment: "mapDoctorToProvider", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "rejectDoctorRequest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "raiseJoinNetworkRequest", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getDoctorRequestsForHC", + data: BytesLike + ): Result; events: { "DoctorRequestRaised(address,string,string)": EventFragment; @@ -358,6 +414,18 @@ export interface HealthBlock extends BaseContract { removeListener: OnEvent; functions: { + hcproviderToDoctorRequests( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + doctor: string; + doctorName: string; + status: string; + } + >; + patients( arg0: PromiseOrValue, overrides?: CallOverrides @@ -464,8 +532,38 @@ export interface HealthBlock extends BaseContract { _doctorAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + rejectDoctorRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + raiseJoinNetworkRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + docName: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorRequestsForHC( + _providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[HealthBlock.JoinRequestStructOutput[]]>; }; + hcproviderToDoctorRequests( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + doctor: string; + doctorName: string; + status: string; + } + >; + patients( arg0: PromiseOrValue, overrides?: CallOverrides @@ -571,7 +669,37 @@ export interface HealthBlock extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + rejectDoctorRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + raiseJoinNetworkRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + docName: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorRequestsForHC( + _providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + callStatic: { + hcproviderToDoctorRequests( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise< + [string, string, string] & { + doctor: string; + doctorName: string; + status: string; + } + >; + patients( arg0: PromiseOrValue, overrides?: CallOverrides @@ -678,6 +806,24 @@ export interface HealthBlock extends BaseContract { _doctorAddress: PromiseOrValue, overrides?: CallOverrides ): Promise; + + rejectDoctorRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + raiseJoinNetworkRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + docName: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + getDoctorRequestsForHC( + _providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; }; filters: { @@ -743,6 +889,12 @@ export interface HealthBlock extends BaseContract { }; estimateGas: { + hcproviderToDoctorRequests( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + patients( arg0: PromiseOrValue, overrides?: CallOverrides @@ -826,9 +978,33 @@ export interface HealthBlock extends BaseContract { _doctorAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + rejectDoctorRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + raiseJoinNetworkRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + docName: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorRequestsForHC( + _providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; }; populateTransaction: { + hcproviderToDoctorRequests( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + patients( arg0: PromiseOrValue, overrides?: CallOverrides @@ -912,5 +1088,23 @@ export interface HealthBlock extends BaseContract { _doctorAddress: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + rejectDoctorRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + raiseJoinNetworkRequest( + _providerAddress: PromiseOrValue, + _doctorAddress: PromiseOrValue, + docName: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + getDoctorRequestsForHC( + _providerAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; }; } diff --git a/client/src/contracts/factories/HealthBlock__factory.ts b/client/src/contracts/factories/HealthBlock__factory.ts index 970dfe0..fa84a12 100644 --- a/client/src/contracts/factories/HealthBlock__factory.ts +++ b/client/src/contracts/factories/HealthBlock__factory.ts @@ -144,6 +144,41 @@ const _abi = [ name: "RequestRejected", type: "event", }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "hcproviderToDoctorRequests", + outputs: [ + { + internalType: "address", + name: "doctor", + type: "address", + }, + { + internalType: "string", + name: "doctorName", + type: "string", + }, + { + internalType: "string", + name: "status", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + constant: true, + }, { inputs: [ { @@ -177,6 +212,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -221,6 +257,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -274,6 +311,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -323,6 +361,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -352,6 +391,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -403,6 +443,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -437,6 +478,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -493,6 +535,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -527,6 +570,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -601,6 +645,7 @@ const _abi = [ ], stateMutability: "view", type: "function", + constant: true, }, { inputs: [ @@ -620,10 +665,88 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "_providerAddress", + type: "address", + }, + { + internalType: "address", + name: "_doctorAddress", + type: "address", + }, + ], + name: "rejectDoctorRequest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_providerAddress", + type: "address", + }, + { + internalType: "address", + name: "_doctorAddress", + type: "address", + }, + { + internalType: "string", + name: "docName", + type: "string", + }, + ], + name: "raiseJoinNetworkRequest", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "_providerAddress", + type: "address", + }, + ], + name: "getDoctorRequestsForHC", + outputs: [ + { + components: [ + { + internalType: "address", + name: "doctor", + type: "address", + }, + { + internalType: "string", + name: "doctorName", + type: "string", + }, + { + internalType: "string", + name: "status", + type: "string", + }, + ], + internalType: "struct HealthBlock.JoinRequest[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + constant: true, + }, ]; const _bytecode = - "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613cfb806100606000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063916922c4116100a2578063b380f5c611610071578063b380f5c6146102c4578063bc4fe402146102e5578063c5b0aab014610301578063d7d1bbdb14610334578063e1e36ab9146103505761010b565b8063916922c414610239578063a9b467ee1461025a578063afc3b5c41461028c578063b2d258ff146102a85761010b565b8063326df664116100de578063326df664146101975780635df122e1146101b75780636d36f7be146101e75780638813ce121461021b5761010b565b80630869cfbc14610110578063139f0984146101435780631c2972051461015f5780632d7788db1461017b575b600080fd5b61012a60048036038101906101259190612dd5565b610383565b60405161013a9493929190612ebd565b60405180910390f35b61015d60048036038101906101589190612f10565b6104f0565b005b610179600480360381019061017491906130b1565b610841565b005b61019560048036038101906101909190613172565b610a7a565b005b61019f610c76565b6040516101ae9392919061319f565b60405180910390f35b6101d160048036038101906101cc9190612dd5565b610ea0565b6040516101de9190613392565b60405180910390f35b61020160048036038101906101fc91906133b4565b611167565b6040516102129594939291906133f4565b60405180910390f35b61022361137f565b604051610230919061358f565b60405180910390f35b6102416116d6565b60405161025194939291906135b1565b60405180910390f35b610274600480360381019061026f9190612dd5565b611a11565b6040516102839392919061319f565b60405180910390f35b6102a660048036038101906102a19190613612565b611b9a565b005b6102c260048036038101906102bd919061368a565b611d88565b005b6102cc6120d6565b6040516102dc9493929190613745565b60405180910390f35b6102ff60048036038101906102fa919061379f565b612394565b005b61031b60048036038101906103169190612dd5565b6126b2565b60405161032b94939291906135b1565b60405180910390f35b61034e60048036038101906103499190613172565b61294b565b005b61036a60048036038101906103659190612dd5565b612b47565b60405161037a9493929190613745565b60405180910390f35b60036020528060005260406000206000915090508060000180546103a6906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546103d2906138a5565b801561041f5780601f106103f45761010080835404028352916020019161041f565b820191906000526020600020905b81548152906001019060200180831161040257829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054610447906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610473906138a5565b80156104c05780601f10610495576101008083540402835291602001916104c0565b820191906000526020600020905b8154815290600101906020018083116104a357829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a0016040528083600001805461058c906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105b8906138a5565b80156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b505050505081526020018360010160009054906101000a900460ff1660ff168152602001836002018054610638906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610664906138a5565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b505050505081526020018360030180546106ca906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546106f6906138a5565b80156107435780601f1061071857610100808354040283529160200191610743565b820191906000526020600020905b81548152906001019060200180831161072657829003601f168201915b505050505081526020018473ffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000190816107a59190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816107dc9190613a82565b5060608201518160030190816107f29190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60405160200161085090613b85565b60405160208183030381529060405280519060200120836040516020016108779190613bcb565b604051602081830303815290604052805190602001200361089757600080fd5b6040516020016108a690613b85565b60405160208183030381529060405280519060200120816040516020016108cd9190613bcb565b60405160208183030381529060405280519060200120036108ed57600080fd5b60008260ff16118015610903575060648260ff16105b61090c57600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161099a9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816109d19190613a82565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505082604051610a2a9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aff90613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b7c57610b7b613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a6563746564000000000000000000000000000000000000000000000000815250816003019081610bd29190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611610d1d57600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054610d86906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610db2906138a5565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b50505050509250808054610e12906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3e906138a5565b8015610e8b5780601f10610e6057610100808354040283529160200191610e8b565b820191906000526020600020905b815481529060010190602001808311610e6e57829003601f168201915b50505050509050955095509550505050909192565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561115c57838290600052602060002090600502016040518060a0016040529081600082018054610f34906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f60906138a5565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff168152602001600282018054610fe3906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461100f906138a5565b801561105c5780601f106110315761010080835404028352916020019161105c565b820191906000526020600020905b81548152906001019060200180831161103f57829003601f168201915b50505050508152602001600382018054611075906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546110a1906138a5565b80156110ee5780601f106110c3576101008083540402835291602001916110ee565b820191906000526020600020905b8154815290600101906020018083116110d157829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610f01565b505050509050919050565b6002602052816000526040600020818154811061118357600080fd5b9060005260206000209060050201600091509150508060000180546111a7906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546111d3906138a5565b80156112205780601f106111f557610100808354040283529160200191611220565b820191906000526020600020905b81548152906001019060200180831161120357829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054611248906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611274906138a5565b80156112c15780601f10611296576101008083540402835291602001916112c1565b820191906000526020600020905b8154815290600101906020018083116112a457829003601f168201915b5050505050908060030180546112d6906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611302906138a5565b801561134f5780601f106113245761010080835404028352916020019161134f565b820191906000526020600020905b81548152906001019060200180831161133257829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613c54565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156116cd57838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054611518906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611544906138a5565b80156115915780601f1061156657610100808354040283529160200191611591565b820191906000526020600020905b81548152906001019060200180831161157457829003601f168201915b505050505081526020016002820180546115aa906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546115d6906138a5565b80156116235780601f106115f857610100808354040283529160200191611623565b820191906000526020600020905b81548152906001019060200180831161160657829003601f168201915b5050505050815260200160038201805461163c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611668906138a5565b80156116b55780601f1061168a576101008083540402835291602001916116b5565b820191906000526020600020905b81548152906001019060200180831161169857829003601f168201915b5050505050815250508152602001906001019061148f565b50505050905090565b606080606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161177d57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010182600201836003018380546117dc906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611808906138a5565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b50505050509350828054611868906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611894906138a5565b80156118e15780601f106118b6576101008083540402835291602001916118e1565b820191906000526020600020905b8154815290600101906020018083116118c457829003601f168201915b505050505092508180546118f4906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611920906138a5565b801561196d5780601f106119425761010080835404028352916020019161196d565b820191906000526020600020905b81548152906001019060200180831161195057829003601f168201915b50505050509150808054611980906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546119ac906138a5565b80156119f95780601f106119ce576101008083540402835291602001916119f9565b820191906000526020600020905b8154815290600101906020018083116119dc57829003601f168201915b50505050509050965096509650965050505090919293565b6060600060606000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201828054611a80906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac906138a5565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b50505050509250808054611b0c906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611b38906138a5565b8015611b855780601f10611b5a57610100808354040283529160200191611b85565b820191906000526020600020905b815481529060010190602001808311611b6857829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019081611cf09190613a82565b506040820151816002019081611d069190613a82565b506060820151816003019081611d1c9190613a82565b50505082604051611d2d9190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd84604051611d7b9190613ca3565b60405180910390a3505050565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050604051602001611dda90613b85565b6040516020818303038152906040528051906020012085604051602001611e019190613bcb565b6040516020818303038152906040528051906020012003611e2157600080fd5b604051602001611e3090613b85565b6040516020818303038152906040528051906020012083604051602001611e579190613bcb565b6040516020818303038152906040528051906020012003611e7757600080fd5b604051602001611e8690613b85565b6040516020818303038152906040528051906020012082604051602001611ead9190613bcb565b6040516020818303038152906040528051906020012003611ecd57600080fd5b60008460ff16118015611ee3575060648460ff16105b611eec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115611f4a57600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081611fde9190613a82565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816120159190613a82565b50606082015181600301908161202b9190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050846040516120849190613bcb565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161217e57600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff1682600201836003018380546121eb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612217906138a5565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b50505050509350818054612277906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546122a3906138a5565b80156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b50505050509150808054612303906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461232f906138a5565b801561237c5780601f106123515761010080835404028352916020019161237c565b820191906000526020600020905b81548152906001019060200180831161235f57829003601f168201915b50505050509050965096509650965050505090919293565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016123e690613b85565b604051602081830303815290604052805190602001208560405160200161240d9190613bcb565b604051602081830303815290604052805190602001200361242d57600080fd5b60405160200161243c90613b85565b60405160208183030381529060405280519060200120846040516020016124639190613bcb565b604051602081830303815290604052805190602001200361248357600080fd5b60405160200161249290613b85565b60405160208183030381529060405280519060200120836040516020016124b99190613bcb565b60405160208183030381529060405280519060200120036124d957600080fd5b6040516020016124e890613b85565b604051602081830303815290604052805190602001208260405160200161250f9190613bcb565b604051602081830303815290604052805190602001200361252f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561258d57600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001908161261e9190613a82565b5060208201518160010190816126349190613a82565b50604082015181600201908161264a9190613a82565b5060608201518160030190816126609190613a82565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612717906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612743906138a5565b80156127905780601f1061276557610100808354040283529160200191612790565b820191906000526020600020905b81548152906001019060200180831161277357829003601f168201915b505050505093508280546127a3906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546127cf906138a5565b801561281c5780601f106127f15761010080835404028352916020019161281c565b820191906000526020600020905b8154815290600101906020018083116127ff57829003601f168201915b5050505050925081805461282f906138a5565b80601f016020809104026020016040519081016040528092919081815260200182805461285b906138a5565b80156128a85780601f1061287d576101008083540402835291602001916128a8565b820191906000526020600020905b81548152906001019060200180831161288b57829003601f168201915b505050505091508080546128bb906138a5565b80601f01602080910402602001604051908101604052809291908181526020018280546128e7906138a5565b80156129345780601f1061290957610100808354040283529160200191612934565b820191906000526020600020905b81548152906001019060200180831161291757829003601f168201915b505050505090509450945094509450509193509193565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d090613c54565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612a4d57612a4c613c74565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f766564000000000000000000000000000000000000000000000000815250816003019081612aa39190613a82565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054612bbb906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612be7906138a5565b8015612c345780601f10612c0957610100808354040283529160200191612c34565b820191906000526020600020905b815481529060010190602001808311612c1757829003601f168201915b50505050509350818054612c47906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c73906138a5565b8015612cc05780601f10612c9557610100808354040283529160200191612cc0565b820191906000526020600020905b815481529060010190602001808311612ca357829003601f168201915b50505050509150808054612cd3906138a5565b80601f0160208091040260200160405190810160405280929190818152602001828054612cff906138a5565b8015612d4c5780601f10612d2157610100808354040283529160200191612d4c565b820191906000526020600020905b815481529060010190602001808311612d2f57829003601f168201915b505050505090509450945094509450509193509193565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612da282612d77565b9050919050565b612db281612d97565b8114612dbd57600080fd5b50565b600081359050612dcf81612da9565b92915050565b600060208284031215612deb57612dea612d6d565b5b6000612df984828501612dc0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e3c578082015181840152602081019050612e21565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e6482612e02565b612e6e8185612e0d565b9350612e7e818560208601612e1e565b612e8781612e48565b840191505092915050565b600060ff82169050919050565b612ea881612e92565b82525050565b612eb781612d97565b82525050565b60006080820190508181036000830152612ed78187612e59565b9050612ee66020830186612e9f565b8181036040830152612ef88185612e59565b9050612f076060830184612eae565b95945050505050565b60008060408385031215612f2757612f26612d6d565b5b6000612f3585828601612dc0565b9250506020612f4685828601612dc0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f9282612e48565b810181811067ffffffffffffffff82111715612fb157612fb0612f5a565b5b80604052505050565b6000612fc4612d63565b9050612fd08282612f89565b919050565b600067ffffffffffffffff821115612ff057612fef612f5a565b5b612ff982612e48565b9050602081019050919050565b82818337600083830152505050565b600061302861302384612fd5565b612fba565b90508281526020810184848401111561304457613043612f55565b5b61304f848285613006565b509392505050565b600082601f83011261306c5761306b612f50565b5b813561307c848260208601613015565b91505092915050565b61308e81612e92565b811461309957600080fd5b50565b6000813590506130ab81613085565b92915050565b6000806000606084860312156130ca576130c9612d6d565b5b600084013567ffffffffffffffff8111156130e8576130e7612d72565b5b6130f486828701613057565b93505060206131058682870161309c565b925050604084013567ffffffffffffffff81111561312657613125612d72565b5b61313286828701613057565b9150509250925092565b6000819050919050565b61314f8161313c565b811461315a57600080fd5b50565b60008135905061316c81613146565b92915050565b60006020828403121561318857613187612d6d565b5b60006131968482850161315d565b91505092915050565b600060608201905081810360008301526131b98186612e59565b90506131c86020830185612e9f565b81810360408301526131da8184612e59565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061322c82612e02565b6132368185613210565b9350613246818560208601612e1e565b61324f81612e48565b840191505092915050565b61326381612e92565b82525050565b61327281612d97565b82525050565b600060a08301600083015184820360008601526132958282613221565b91505060208301516132aa602086018261325a565b50604083015184820360408601526132c28282613221565b915050606083015184820360608601526132dc8282613221565b91505060808301516132f16080860182613269565b508091505092915050565b60006133088383613278565b905092915050565b6000602082019050919050565b6000613328826131e4565b61333281856131ef565b93508360208202850161334485613200565b8060005b85811015613380578484038952815161336185826132fc565b945061336c83613310565b925060208a01995050600181019050613348565b50829750879550505050505092915050565b600060208201905081810360008301526133ac818461331d565b905092915050565b600080604083850312156133cb576133ca612d6d565b5b60006133d985828601612dc0565b92505060206133ea8582860161315d565b9150509250929050565b600060a082019050818103600083015261340e8188612e59565b905061341d6020830187612e9f565b818103604083015261342f8186612e59565b905081810360608301526134438185612e59565b90506134526080830184612eae565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006080830160008301516134a06000860182613269565b50602083015184820360208601526134b88282613221565b915050604083015184820360408601526134d28282613221565b915050606083015184820360608601526134ec8282613221565b9150508091505092915050565b60006135058383613488565b905092915050565b6000602082019050919050565b60006135258261345c565b61352f8185613467565b93508360208202850161354185613478565b8060005b8581101561357d578484038952815161355e85826134f9565b94506135698361350d565b925060208a01995050600181019050613545565b50829750879550505050505092915050565b600060208201905081810360008301526135a9818461351a565b905092915050565b600060808201905081810360008301526135cb8187612e59565b905081810360208301526135df8186612e59565b905081810360408301526135f38185612e59565b905081810360608301526136078184612e59565b905095945050505050565b6000806040838503121561362957613628612d6d565b5b600083013567ffffffffffffffff81111561364757613646612d72565b5b61365385828601613057565b925050602083013567ffffffffffffffff81111561367457613673612d72565b5b61368085828601613057565b9150509250929050565b600080600080608085870312156136a4576136a3612d6d565b5b600085013567ffffffffffffffff8111156136c2576136c1612d72565b5b6136ce87828801613057565b94505060206136df8782880161309c565b935050604085013567ffffffffffffffff811115613700576136ff612d72565b5b61370c87828801613057565b925050606085013567ffffffffffffffff81111561372d5761372c612d72565b5b61373987828801613057565b91505092959194509250565b6000608082019050818103600083015261375f8187612e59565b905061376e6020830186612e9f565b81810360408301526137808185612e59565b905081810360608301526137948184612e59565b905095945050505050565b600080600080608085870312156137b9576137b8612d6d565b5b600085013567ffffffffffffffff8111156137d7576137d6612d72565b5b6137e387828801613057565b945050602085013567ffffffffffffffff81111561380457613803612d72565b5b61381087828801613057565b935050604085013567ffffffffffffffff81111561383157613830612d72565b5b61383d87828801613057565b925050606085013567ffffffffffffffff81111561385e5761385d612d72565b5b61386a87828801613057565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138bd57607f821691505b6020821081036138d0576138cf613876565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138fb565b61394286836138fb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061397f61397a6139758461313c565b61395a565b61313c565b9050919050565b6000819050919050565b61399983613964565b6139ad6139a582613986565b848454613908565b825550505050565b600090565b6139c26139b5565b6139cd818484613990565b505050565b5b818110156139f1576139e66000826139ba565b6001810190506139d3565b5050565b601f821115613a3657613a07816138d6565b613a10846138eb565b81016020851015613a1f578190505b613a33613a2b856138eb565b8301826139d2565b50505b505050565b600082821c905092915050565b6000613a5960001984600802613a3b565b1980831691505092915050565b6000613a728383613a48565b9150826002028217905092915050565b613a8b82612e02565b67ffffffffffffffff811115613aa457613aa3612f5a565b5b613aae82546138a5565b613ab98282856139f5565b600060209050601f831160018114613aec5760008415613ada578287015190505b613ae48582613a66565b865550613b4c565b601f198416613afa866138d6565b60005b82811015613b2257848901518255600182019150602085019450602081019050613afd565b86831015613b3f5784890151613b3b601f891682613a48565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b50565b6000613b6f600083613b54565b9150613b7a82613b5f565b600082019050919050565b6000613b9082613b62565b9150819050919050565b6000613ba582612e02565b613baf8185613b54565b9350613bbf818560208601612e1e565b80840191505092915050565b6000613bd78284613b9a565b915081905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c3e602183612e0d565b9150613c4982613be2565b604082019050919050565b60006020820190508181036000830152613c6d81613c31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190508181036000830152613cbd8184612e59565b90509291505056fea2646970667358221220ed3568f99d58502e314bc45cecd8f2ba879d333b24212bdc5691c2521d3517b064736f6c63430008110033"; + "0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614a0d806100606000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063916922c4116100b8578063b380f5c61161007c578063b380f5c61461036e578063bc4fe4021461038f578063c5b0aab0146103ab578063d7d1bbdb146103de578063e1e36ab9146103fa578063f122bf9b1461042d57610137565b8063916922c4146102c75780639322a8e1146102e8578063a9b467ee14610304578063afc3b5c414610336578063b2d258ff1461035257610137565b8063326df664116100ff578063326df664146101f35780634c38b370146102135780635df122e1146102455780636d36f7be146102755780638813ce12146102a957610137565b806303050f7a1461013c5780630869cfbc1461016c578063139f09841461019f5780631c297205146101bb5780632d7788db146101d7575b600080fd5b61015660048036038101906101519190613834565b610449565b6040516101639190613a19565b60405180910390f35b61018660048036038101906101819190613834565b610661565b6040516101969493929190613ab0565b60405180910390f35b6101b960048036038101906101b49190613b03565b6107ce565b005b6101d560048036038101906101d09190613ca4565b610d37565b005b6101f160048036038101906101ec9190613d65565b610f70565b005b6101fb61116c565b60405161020a93929190613d92565b60405180910390f35b61022d60048036038101906102289190613dd7565b611396565b60405161023c93929190613e17565b60405180910390f35b61025f600480360381019061025a9190613834565b61150d565b60405161026c9190613fb1565b60405180910390f35b61028f600480360381019061028a9190613dd7565b6117d4565b6040516102a0959493929190613fd3565b60405180910390f35b6102b16119ec565b6040516102be919061416e565b60405180910390f35b6102cf611d43565b6040516102df9493929190614190565b60405180910390f35b61030260048036038101906102fd9190613b03565b61207e565b005b61031e60048036038101906103199190613834565b6122de565b60405161032d93929190613d92565b60405180910390f35b610350600480360381019061034b91906141f1565b612467565b005b61036c60048036038101906103679190614269565b612655565b005b6103766129a3565b6040516103869493929190614324565b60405180910390f35b6103a960048036038101906103a4919061437e565b612c61565b005b6103c560048036038101906103c09190613834565b612f7f565b6040516103d59493929190614190565b60405180910390f35b6103f860048036038101906103f39190613d65565b613218565b005b610414600480360381019061040f9190613834565b613414565b6040516104249493929190614324565b60405180910390f35b61044760048036038101906104429190614455565b613630565b005b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561065657838290600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610533906144f3565b80601f016020809104026020016040519081016040528092919081815260200182805461055f906144f3565b80156105ac5780601f10610581576101008083540402835291602001916105ac565b820191906000526020600020905b81548152906001019060200180831161058f57829003601f168201915b505050505081526020016002820180546105c5906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546105f1906144f3565b801561063e5780601f106106135761010080835404028352916020019161063e565b820191906000526020600020905b81548152906001019060200180831161062157829003601f168201915b505050505081525050815260200190600101906104aa565b505050509050919050565b6004602052806000526040600020600091509050806000018054610684906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546106b0906144f3565b80156106fd5780601f106106d2576101008083540402835291602001916106fd565b820191906000526020600020905b8154815290600101906020018083116106e057829003601f168201915b5050505050908060010160009054906101000a900460ff1690806002018054610725906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610751906144f3565b801561079e5780601f106107735761010080835404028352916020019161079e565b820191906000526020600020905b81548152906001019060200180831161078157829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508160ff161015610937578473ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260ff16815481106108cf576108ce614524565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361092457809250610937565b808061092f90614582565b915050610817565b50600115158115151461097f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610976906145f7565b60405180910390fd5b6040518060400160405280600981526020017f636f6e6669726d65640000000000000000000000000000000000000000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff1681548110610a0957610a08614524565b5b90600052602060002090600302016002019081610a2691906147c3565b50600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405280856000018054610a80906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac906144f3565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b505050505081526020018560010160009054906101000a900460ff1660ff168152602001856002018054610b2c906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b58906144f3565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b50505050508152602001856003018054610bbe906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea906144f3565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b505050505081526020018673ffffffffffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000019081610c9991906147c3565b5060208201518160010160006101000a81548160ff021916908360ff1602179055506040820151816002019081610cd091906147c3565b506060820151816003019081610ce691906147c3565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b604051602001610d46906148c6565b6040516020818303038152906040528051906020012083604051602001610d6d919061490c565b6040516020818303038152906040528051906020012003610d8d57600080fd5b604051602001610d9c906148c6565b6040516020818303038152906040528051906020012081604051602001610dc3919061490c565b6040516020818303038152906040528051906020012003610de357600080fd5b60008260ff16118015610df9575060648260ff16105b610e0257600080fd5b60405180608001604052808481526020018360ff1681526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815250600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081610e9091906147c3565b5060208201518160010160006101000a81548160ff021916908360ff1602179055506040820151816002019081610ec791906147c3565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505082604051610f20919061490c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a3505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590614995565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061107257611071614524565b5b906000526020600020906004020190506040518060400160405280600881526020017f72656a65637465640000000000000000000000000000000000000000000000008152508160030190816110c891906147c3565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4d2b09745b50f68da85b0b25854d46c2b85b43dd6f04ba6f3f503ff878bf4ae560405160405180910390a45050565b606060006060336000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161161121357600080fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020182805461127c906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546112a8906144f3565b80156112f55780601f106112ca576101008083540402835291602001916112f5565b820191906000526020600020905b8154815290600101906020018083116112d857829003601f168201915b50505050509250808054611308906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611334906144f3565b80156113815780601f1061135657610100808354040283529160200191611381565b820191906000526020600020905b81548152906001019060200180831161136457829003601f168201915b50505050509050955095509550505050909192565b600360205281600052604060002081815481106113b257600080fd5b9060005260206000209060030201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010180546113fc906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611428906144f3565b80156114755780601f1061144a57610100808354040283529160200191611475565b820191906000526020600020905b81548152906001019060200180831161145857829003601f168201915b50505050509080600201805461148a906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546114b6906144f3565b80156115035780601f106114d857610100808354040283529160200191611503565b820191906000526020600020905b8154815290600101906020018083116114e657829003601f168201915b5050505050905083565b6060600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156117c957838290600052602060002090600502016040518060a00160405290816000820180546115a1906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546115cd906144f3565b801561161a5780601f106115ef5761010080835404028352916020019161161a565b820191906000526020600020905b8154815290600101906020018083116115fd57829003601f168201915b505050505081526020016001820160009054906101000a900460ff1660ff1660ff168152602001600282018054611650906144f3565b80601f016020809104026020016040519081016040528092919081815260200182805461167c906144f3565b80156116c95780601f1061169e576101008083540402835291602001916116c9565b820191906000526020600020905b8154815290600101906020018083116116ac57829003601f168201915b505050505081526020016003820180546116e2906144f3565b80601f016020809104026020016040519081016040528092919081815260200182805461170e906144f3565b801561175b5780601f106117305761010080835404028352916020019161175b565b820191906000526020600020905b81548152906001019060200180831161173e57829003601f168201915b505050505081526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061156e565b505050509050919050565b600260205281600052604060002081815481106117f057600080fd5b906000526020600020906005020160009150915050806000018054611814906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611840906144f3565b801561188d5780601f106118625761010080835404028352916020019161188d565b820191906000526020600020905b81548152906001019060200180831161187057829003601f168201915b5050505050908060010160009054906101000a900460ff16908060020180546118b5906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e1906144f3565b801561192e5780601f106119035761010080835404028352916020019161192e565b820191906000526020600020905b81548152906001019060200180831161191157829003601f168201915b505050505090806003018054611943906144f3565b80601f016020809104026020016040519081016040528092919081815260200182805461196f906144f3565b80156119bc5780601f10611991576101008083540402835291602001916119bc565b820191906000526020600020905b81548152906001019060200180831161199f57829003601f168201915b5050505050908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7390614995565b60405180910390fd5b600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611d3a57838290600052602060002090600402016040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054611b85906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb1906144f3565b8015611bfe5780601f10611bd357610100808354040283529160200191611bfe565b820191906000526020600020905b815481529060010190602001808311611be157829003601f168201915b50505050508152602001600282018054611c17906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c43906144f3565b8015611c905780601f10611c6557610100808354040283529160200191611c90565b820191906000526020600020905b815481529060010190602001808311611c7357829003601f168201915b50505050508152602001600382018054611ca9906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd5906144f3565b8015611d225780601f10611cf757610100808354040283529160200191611d22565b820191906000526020600020905b815481529060010190602001808311611d0557829003601f168201915b50505050508152505081526020019060010190611afc565b50505050905090565b606080606080336000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611611dea57600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054611e49906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e75906144f3565b8015611ec25780601f10611e9757610100808354040283529160200191611ec2565b820191906000526020600020905b815481529060010190602001808311611ea557829003601f168201915b50505050509350828054611ed5906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f01906144f3565b8015611f4e5780601f10611f2357610100808354040283529160200191611f4e565b820191906000526020600020905b815481529060010190602001808311611f3157829003601f168201915b50505050509250818054611f61906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8d906144f3565b8015611fda5780601f10611faf57610100808354040283529160200191611fda565b820191906000526020600020905b815481529060010190602001808311611fbd57829003601f168201915b50505050509150808054611fed906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612019906144f3565b80156120665780601f1061203b57610100808354040283529160200191612066565b820191906000526020600020905b81548152906001019060200180831161204957829003601f168201915b50505050509050965096509650965050505090919293565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508160ff1610156121e7578473ffffffffffffffffffffffffffffffffffffffff16600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260ff168154811061217f5761217e614524565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036121d4578092506121e7565b80806121df90614582565b9150506120c7565b50600115158115151461222f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612226906145f7565b60405180910390fd5b6040518060400160405280600681526020017f72656a6563740000000000000000000000000000000000000000000000000000815250600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff16815481106122b9576122b8614524565b5b906000526020600020906003020160020190816122d691906147c3565b505050505050565b6060600060606000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020182805461234d906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612379906144f3565b80156123c65780601f1061239b576101008083540402835291602001916123c6565b820191906000526020600020905b8154815290600101906020018083116123a957829003601f168201915b505050505092508080546123d9906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612405906144f3565b80156124525780601f1061242757610100808354040283529160200191612452565b820191906000526020600020905b81548152906001019060200180831161243557829003601f168201915b50505050509050935093509350509193909250565b600060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816125bd91906147c3565b5060408201518160020190816125d391906147c3565b5060608201518160030190816125e991906147c3565b505050826040516125fa919061490c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f13bea7f2b146e27ade33081397e247a39c6fa801e1c40c9d03fd9d808e3bdfcd8460405161264891906149b5565b60405180910390a3505050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506040516020016126a7906148c6565b60405160208183030381529060405280519060200120856040516020016126ce919061490c565b60405160208183030381529060405280519060200120036126ee57600080fd5b6040516020016126fd906148c6565b6040516020818303038152906040528051906020012083604051602001612724919061490c565b604051602081830303815290604052805190602001200361274457600080fd5b604051602001612753906148c6565b604051602081830303815290604052805190602001208260405160200161277a919061490c565b604051602081830303815290604052805190602001200361279a57600080fd5b60008460ff161180156127b0575060648460ff16105b6127b957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561281757600080fd5b6040518060a001604052808681526020018560ff1681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190816128ab91906147c3565b5060208201518160010160006101000a81548160ff021916908360ff16021790555060408201518160020190816128e291906147c3565b5060608201518160030190816128f891906147c3565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505084604051612951919061490c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167fe3413e34d7cfab2884866aa8dfc64b0c31d51db035044e04a349a1faf6c7d67660405160405180910390a35050505050565b60606000606080336000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1611612a4b57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054612ab8906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae4906144f3565b8015612b315780601f10612b0657610100808354040283529160200191612b31565b820191906000526020600020905b815481529060010190602001808311612b1457829003601f168201915b50505050509350818054612b44906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b70906144f3565b8015612bbd5780601f10612b9257610100808354040283529160200191612bbd565b820191906000526020600020905b815481529060010190602001808311612ba057829003601f168201915b50505050509150808054612bd0906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054612bfc906144f3565b8015612c495780601f10612c1e57610100808354040283529160200191612c49565b820191906000526020600020905b815481529060010190602001808311612c2c57829003601f168201915b50505050509050965096509650965050505090919293565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050604051602001612cb3906148c6565b6040516020818303038152906040528051906020012085604051602001612cda919061490c565b6040516020818303038152906040528051906020012003612cfa57600080fd5b604051602001612d09906148c6565b6040516020818303038152906040528051906020012084604051602001612d30919061490c565b6040516020818303038152906040528051906020012003612d5057600080fd5b604051602001612d5f906148c6565b6040516020818303038152906040528051906020012083604051602001612d86919061490c565b6040516020818303038152906040528051906020012003612da657600080fd5b604051602001612db5906148c6565b6040516020818303038152906040528051906020012082604051602001612ddc919061490c565b6040516020818303038152906040528051906020012003612dfc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161115612e5a57600080fd5b6040518060a001604052808681526020018581526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff16815250600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019081612eeb91906147c3565b506020820151816001019081612f0191906147c3565b506040820151816002019081612f1791906147c3565b506060820151816003019081612f2d91906147c3565b5060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b6060806060806000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001816001018260020183600301838054612fe4906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054613010906144f3565b801561305d5780601f106130325761010080835404028352916020019161305d565b820191906000526020600020905b81548152906001019060200180831161304057829003601f168201915b50505050509350828054613070906144f3565b80601f016020809104026020016040519081016040528092919081815260200182805461309c906144f3565b80156130e95780601f106130be576101008083540402835291602001916130e9565b820191906000526020600020905b8154815290600101906020018083116130cc57829003601f168201915b505050505092508180546130fc906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054613128906144f3565b80156131755780601f1061314a57610100808354040283529160200191613175565b820191906000526020600020905b81548152906001019060200180831161315857829003601f168201915b50505050509150808054613188906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546131b4906144f3565b80156132015780601f106131d657610100808354040283529160200191613201565b820191906000526020600020905b8154815290600101906020018083116131e457829003601f168201915b505050505090509450945094509450509193509193565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329d90614995565b60405180910390fd5b6000600160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061331a57613319614524565b5b906000526020600020906004020190506040518060400160405280600881526020017f617070726f76656400000000000000000000000000000000000000000000000081525081600301908161337091906147c3565b508160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd9a9c1b40a747e79bd4c1aeabd897bfd5b3679e58fcdcd20dd7af4a8274196bc60405160405180910390a45050565b606060006060806000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000018160010160009054906101000a900460ff168260020183600301838054613488906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546134b4906144f3565b80156135015780601f106134d657610100808354040283529160200191613501565b820191906000526020600020905b8154815290600101906020018083116134e457829003601f168201915b50505050509350818054613514906144f3565b80601f0160208091040260200160405190810160405280929190818152602001828054613540906144f3565b801561358d5780601f106135625761010080835404028352916020019161358d565b820191906000526020600020905b81548152906001019060200180831161357057829003601f168201915b505050505091508080546135a0906144f3565b80601f01602080910402602001604051908101604052809291908181526020018280546135cc906144f3565b80156136195780601f106135ee57610100808354040283529160200191613619565b820191906000526020600020905b8154815290600101906020018083116135fc57829003601f168201915b505050505090509450945094509450509193509193565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020016040518060400160405280600781526020017f70656e64696e67000000000000000000000000000000000000000000000000008152508152509050600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816137a291906147c3565b5060408201518160020190816137b891906147c3565b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613801826137d6565b9050919050565b613811816137f6565b811461381c57600080fd5b50565b60008135905061382e81613808565b92915050565b60006020828403121561384a576138496137cc565b5b60006138588482850161381f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613896816137f6565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138d65780820151818401526020810190506138bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006138fe8261389c565b61390881856138a7565b93506139188185602086016138b8565b613921816138e2565b840191505092915050565b6000606083016000830151613944600086018261388d565b506020830151848203602086015261395c82826138f3565b9150506040830151848203604086015261397682826138f3565b9150508091505092915050565b600061398f838361392c565b905092915050565b6000602082019050919050565b60006139af82613861565b6139b9818561386c565b9350836020820285016139cb8561387d565b8060005b85811015613a0757848403895281516139e88582613983565b94506139f383613997565b925060208a019950506001810190506139cf565b50829750879550505050505092915050565b60006020820190508181036000830152613a3381846139a4565b905092915050565b600082825260208201905092915050565b6000613a578261389c565b613a618185613a3b565b9350613a718185602086016138b8565b613a7a816138e2565b840191505092915050565b600060ff82169050919050565b613a9b81613a85565b82525050565b613aaa816137f6565b82525050565b60006080820190508181036000830152613aca8187613a4c565b9050613ad96020830186613a92565b8181036040830152613aeb8185613a4c565b9050613afa6060830184613aa1565b95945050505050565b60008060408385031215613b1a57613b196137cc565b5b6000613b288582860161381f565b9250506020613b398582860161381f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b85826138e2565b810181811067ffffffffffffffff82111715613ba457613ba3613b4d565b5b80604052505050565b6000613bb76137c2565b9050613bc38282613b7c565b919050565b600067ffffffffffffffff821115613be357613be2613b4d565b5b613bec826138e2565b9050602081019050919050565b82818337600083830152505050565b6000613c1b613c1684613bc8565b613bad565b905082815260208101848484011115613c3757613c36613b48565b5b613c42848285613bf9565b509392505050565b600082601f830112613c5f57613c5e613b43565b5b8135613c6f848260208601613c08565b91505092915050565b613c8181613a85565b8114613c8c57600080fd5b50565b600081359050613c9e81613c78565b92915050565b600080600060608486031215613cbd57613cbc6137cc565b5b600084013567ffffffffffffffff811115613cdb57613cda6137d1565b5b613ce786828701613c4a565b9350506020613cf886828701613c8f565b925050604084013567ffffffffffffffff811115613d1957613d186137d1565b5b613d2586828701613c4a565b9150509250925092565b6000819050919050565b613d4281613d2f565b8114613d4d57600080fd5b50565b600081359050613d5f81613d39565b92915050565b600060208284031215613d7b57613d7a6137cc565b5b6000613d8984828501613d50565b91505092915050565b60006060820190508181036000830152613dac8186613a4c565b9050613dbb6020830185613a92565b8181036040830152613dcd8184613a4c565b9050949350505050565b60008060408385031215613dee57613ded6137cc565b5b6000613dfc8582860161381f565b9250506020613e0d85828601613d50565b9150509250929050565b6000606082019050613e2c6000830186613aa1565b8181036020830152613e3e8185613a4c565b90508181036040830152613e528184613a4c565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e9181613a85565b82525050565b600060a0830160008301518482036000860152613eb482826138f3565b9150506020830151613ec96020860182613e88565b5060408301518482036040860152613ee182826138f3565b91505060608301518482036060860152613efb82826138f3565b9150506080830151613f10608086018261388d565b508091505092915050565b6000613f278383613e97565b905092915050565b6000602082019050919050565b6000613f4782613e5c565b613f518185613e67565b935083602082028501613f6385613e78565b8060005b85811015613f9f5784840389528151613f808582613f1b565b9450613f8b83613f2f565b925060208a01995050600181019050613f67565b50829750879550505050505092915050565b60006020820190508181036000830152613fcb8184613f3c565b905092915050565b600060a0820190508181036000830152613fed8188613a4c565b9050613ffc6020830187613a92565b818103604083015261400e8186613a4c565b905081810360608301526140228185613a4c565b90506140316080830184613aa1565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060808301600083015161407f600086018261388d565b506020830151848203602086015261409782826138f3565b915050604083015184820360408601526140b182826138f3565b915050606083015184820360608601526140cb82826138f3565b9150508091505092915050565b60006140e48383614067565b905092915050565b6000602082019050919050565b60006141048261403b565b61410e8185614046565b93508360208202850161412085614057565b8060005b8581101561415c578484038952815161413d85826140d8565b9450614148836140ec565b925060208a01995050600181019050614124565b50829750879550505050505092915050565b6000602082019050818103600083015261418881846140f9565b905092915050565b600060808201905081810360008301526141aa8187613a4c565b905081810360208301526141be8186613a4c565b905081810360408301526141d28185613a4c565b905081810360608301526141e68184613a4c565b905095945050505050565b60008060408385031215614208576142076137cc565b5b600083013567ffffffffffffffff811115614226576142256137d1565b5b61423285828601613c4a565b925050602083013567ffffffffffffffff811115614253576142526137d1565b5b61425f85828601613c4a565b9150509250929050565b60008060008060808587031215614283576142826137cc565b5b600085013567ffffffffffffffff8111156142a1576142a06137d1565b5b6142ad87828801613c4a565b94505060206142be87828801613c8f565b935050604085013567ffffffffffffffff8111156142df576142de6137d1565b5b6142eb87828801613c4a565b925050606085013567ffffffffffffffff81111561430c5761430b6137d1565b5b61431887828801613c4a565b91505092959194509250565b6000608082019050818103600083015261433e8187613a4c565b905061434d6020830186613a92565b818103604083015261435f8185613a4c565b905081810360608301526143738184613a4c565b905095945050505050565b60008060008060808587031215614398576143976137cc565b5b600085013567ffffffffffffffff8111156143b6576143b56137d1565b5b6143c287828801613c4a565b945050602085013567ffffffffffffffff8111156143e3576143e26137d1565b5b6143ef87828801613c4a565b935050604085013567ffffffffffffffff8111156144105761440f6137d1565b5b61441c87828801613c4a565b925050606085013567ffffffffffffffff81111561443d5761443c6137d1565b5b61444987828801613c4a565b91505092959194509250565b60008060006060848603121561446e5761446d6137cc565b5b600061447c8682870161381f565b935050602061448d8682870161381f565b925050604084013567ffffffffffffffff8111156144ae576144ad6137d1565b5b6144ba86828701613c4a565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061450b57607f821691505b60208210810361451e5761451d6144c4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458d82613a85565b915060ff82036145a05761459f614553565b5b600182019050919050565b7f446f63746f72206e6f7420666f756e6400000000000000000000000000000000600082015250565b60006145e1601083613a3b565b91506145ec826145ab565b602082019050919050565b60006020820190508181036000830152614610816145d4565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026146797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261463c565b614683868361463c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006146c06146bb6146b684613d2f565b61469b565b613d2f565b9050919050565b6000819050919050565b6146da836146a5565b6146ee6146e6826146c7565b848454614649565b825550505050565b600090565b6147036146f6565b61470e8184846146d1565b505050565b5b81811015614732576147276000826146fb565b600181019050614714565b5050565b601f8211156147775761474881614617565b6147518461462c565b81016020851015614760578190505b61477461476c8561462c565b830182614713565b50505b505050565b600082821c905092915050565b600061479a6000198460080261477c565b1980831691505092915050565b60006147b38383614789565b9150826002028217905092915050565b6147cc8261389c565b67ffffffffffffffff8111156147e5576147e4613b4d565b5b6147ef82546144f3565b6147fa828285614736565b600060209050601f83116001811461482d576000841561481b578287015190505b61482585826147a7565b86555061488d565b601f19841661483b86614617565b60005b828110156148635784890151825560018201915060208501945060208101905061483e565b86831015614880578489015161487c601f891682614789565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b50565b60006148b0600083614895565b91506148bb826148a0565b600082019050919050565b60006148d1826148a3565b9150819050919050565b60006148e68261389c565b6148f08185614895565b93506149008185602086016138b8565b80840191505092915050565b600061491882846148db565b915081905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061497f602183613a3b565b915061498a82614923565b604082019050919050565b600060208201905081810360008301526149ae81614972565b9050919050565b600060208201905081810360008301526149cf8184613a4c565b90509291505056fea26469706673582212205aed4f71df2820cda562c53bda6d852d5074e93aba09326df31aa8c8a68f58d064736f6c63430008110033"; type HealthBlockConstructorParams = | [signer?: Signer] diff --git a/client/src/providers/HealthProvider.tsx b/client/src/providers/HealthProvider.tsx index 3303b8b..42288ae 100644 --- a/client/src/providers/HealthProvider.tsx +++ b/client/src/providers/HealthProvider.tsx @@ -12,6 +12,11 @@ interface Request { credentialsHash: string; status: string; } +interface DocToProviderRequest { + doctor: string; + doctorName: string; + status: string; +} export type Patient = { name: string; @@ -30,7 +35,7 @@ interface HealthAppContextInterface { connectWallet?: () => Promise; healthBlockContract?: () => Promise; registerHealthBlockContract?: (name: string, age: number, email: string) => Promise; - updateProfile?: (hcAddress: string, docAddress: string) => Promise; + updateProfile?: (hcAddress: string, docAddress: string, status: string) => Promise; registerDoctorHealthBlockContract?: ( name: string, age: number, @@ -50,9 +55,16 @@ interface HealthAppContextInterface { fetchPatientInfoContract?: (address: string) => Promise; fetchRequests?: () => Promise; fetchAllDoctors?: (provider: string) => Promise; + fetchDocToProviderRequests?: (provider: string) => Promise; + handleDocToHCRaiseRequest?: ( + doctorName: string, + doctorAddress: string, + provider: string, + ) => Promise; currentAccount?: string; verificationRequests?: Request[]; doctorList?: Doctor[]; + reqArr?: DocToProviderRequest[]; } const fetchContract = (signerOrProvider: ethers.Signer | ethers.providers.Provider) => @@ -71,6 +83,7 @@ export const HealthProvider: React.FC = ({ children, ...props }) => { const [doctorName, setDoctorName] = useState(''); const [file, setFile] = useState(null); const [doctorList, setDoctorList] = useState([]); + const [reqArr, setReqArr] = useState([]); //fetch metamask accounts const checkIfWalletIsConnected = async () => { @@ -257,6 +270,36 @@ export const HealthProvider: React.FC = ({ children, ...props }) => { } }; + const fetchDocToProviderRequests = async (hc: string) => { + console.log('fetchdoc'); + try { + const web3modal = new Web3Modal(); + const connection = await web3modal.connect(); + const provider = new ethers.providers.Web3Provider(connection); + const signer = provider.getSigner(); + const contract = await fetchContract(signer); + const requests = await contract.getDoctorRequestsForHC(hc); + console.log('requests-->', requests); + let reqArr = []; + + for (let i = 0; i < requests.length; i++) { + let obj = { + doctor: requests[i][0], + doctorName: requests[i][1], + status: requests[i][2], + }; + reqArr.push(obj); + } + console.log('reqArr-->', reqArr); + setReqArr(reqArr); + //setReqArr(reqArr); + //setVerificationRequests(requests); + } catch (error) { + console.log('error from fetchdoc'); + setError('Error Loading Health Contract'); + } + }; + const fetchAllDoctors = async (provider: string) => { try { const web3modal = new Web3Modal(); @@ -284,21 +327,44 @@ export const HealthProvider: React.FC = ({ children, ...props }) => { setError('Error Loading Health Contract'); } }; - const updateProfile = async (hcAddress: string, docAddress: string) => { + const updateProfile = async (hcAddress: string, docAddress: string, status: string) => { try { const web3modal = new Web3Modal(); const connection = await web3modal.connect(); const provider = new ethers.providers.Web3Provider(connection); const signer = provider.getSigner(); const contract: HealthBlock = fetchContract(signer); - const update = await contract.mapDoctorToProvider(hcAddress, docAddress); + console.log('contract-->', contract); + let update = await contract.mapDoctorToProvider(hcAddress, docAddress); update.wait(); } catch (err: any) { + console.log('Err-->', err); setError(`Error Loading Health Contract ${err}`); } }; + const handleDocToHCRaiseRequest = async ( + doctorName: string, + doctorAddress: string, + hc: string, + ) => { + try { + const web3modal = new Web3Modal(); + const connection = await web3modal.connect(); + const provider = new ethers.providers.Web3Provider(connection); + const signer = provider.getSigner(); + const contract = await fetchContract(signer); + console.log('contracts--->', contract); + const raise = await contract.raiseJoinNetworkRequest(hc, doctorAddress, doctorName); + console.log('raisee-->', raise); + + raise.wait(); + } catch (Err: any) { + console.log('err', Err); + } + }; + return ( = ({ children, ...props }) => { fetchAllDoctors, doctorList, updateProfile, + handleDocToHCRaiseRequest, + fetchDocToProviderRequests, + reqArr, }} > {children} diff --git a/contracts/HealthBlock.sol b/contracts/HealthBlock.sol index 0b83ed0..e42c7a0 100644 --- a/contracts/HealthBlock.sol +++ b/contracts/HealthBlock.sol @@ -38,8 +38,16 @@ contract HealthBlock { string credentialsHash; string status; } + +struct JoinRequest{ + address doctor; + string doctorName; + string status; +} + mapping(address => Request[]) private doctorRequests; mapping(address => doctor[]) public providerToDoctors; + mapping(address => JoinRequest[]) public hcproviderToDoctorRequests; /* * @dev Set contract deployer as owner @@ -172,10 +180,64 @@ contract HealthBlock { } function mapDoctorToProvider(address _providerAddress, address _doctorAddress) public{ doctor storage d = doctors[_doctorAddress]; + uint8 idx =0; + bool found = false; + for(uint8 i =0;i< hcproviderToDoctorRequests[_providerAddress].length;i++){ + if(hcproviderToDoctorRequests[_providerAddress][i].doctor == _doctorAddress){ + idx = i; + break; + found = true; + + + } + } + require(found == true,'Doctor not found'); + hcproviderToDoctorRequests[_providerAddress][idx].status = 'confirmed'; + + providerToDoctors[_providerAddress].push(doctor({name:d.name,email:d.email,specialization:d.specialization,id:_doctorAddress,age:d.age})); } + function rejectDoctorRequest(address _providerAddress, address _doctorAddress) public{ + doctor storage d = doctors[_doctorAddress]; + uint8 idx =0; + bool found = false; + for(uint8 i =0;i< hcproviderToDoctorRequests[_providerAddress].length;i++){ + if(hcproviderToDoctorRequests[_providerAddress][i].doctor == _doctorAddress){ + idx = i; + break; + found = true; + + + } + } + require(found == true,'Doctor not found'); + hcproviderToDoctorRequests[_providerAddress][idx].status = 'reject'; + + + + + } + + function raiseJoinNetworkRequest(address _providerAddress, address _doctorAddress, string memory docName) public{ + hcprovider storage d = hcproviders[_providerAddress]; + JoinRequest memory request = JoinRequest({ + doctor: _doctorAddress, + doctorName:docName, + status:"pending" + }); + hcproviderToDoctorRequests[_providerAddress].push(request); + + } + + function getDoctorRequestsForHC(address _providerAddress) public view returns (JoinRequest[] memory){ + return hcproviderToDoctorRequests[_providerAddress]; + + } + + +