{"version":3,"file":"static/js/bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7FA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AASA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AAEA;;;;;;;;;;AAkBA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAPA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAlBA;AAwBA;AAGA;AACA;AACA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAtDA;AAuBA;AAAA;AAgCA;AAEA;AACA;;;;;AAzGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;AAhBA;AAAA;AAEA;AACA;AACA;AACA;AACA;AALA;AADA;AAqHA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AADA;AAGA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AA1CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClLA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAiBA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AAcA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAwHA;AAAA;AACA;AAAA;AAAA;AADA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AADA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AADA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AADA;AAGA;AAEA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AA1PA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;;;AAYA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AADA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAEA;AACA;AAFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;;;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AALA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAFA;AADA;AAHA;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BA;;;AAvJA;AAAA;AA2QA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AACA;AACA;AAFA;AAvBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjTA;AACA;AAAA;AAAA;AAAA;AASA;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AA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;;;ACrFA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AC/CA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;ACZA;AACA;AACA;AACA;AACA;ACJA;AACA;AACA;AACA;AACA;ACAA;AAYA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAOA;AAQA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAYA;AAEA;AAEA;AACA;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AA8EA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAOA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAGA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AA4CA;AACA;AACA;;;AA5CA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AC9dA;ACaA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;ACrFA;AAEA;AACA;AAMA;AACA;AAEA;AAgBA;AACA;AACA;AAEA;AAaA;AACA;AACA;AAEA;AAWA;AACA;AAEA;AACA;AAGA;AAGA;AAEA;AACA;AAIA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;ACpFA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AC/DA;AAiBA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAyDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;AAGA;;;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAMA;AACA;;;AApKA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAiHA;AACA;AACA;AACA;AAAA;AAKA;AAEA;AAhMA;AAiMA;AAAA;ACpNA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAIA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAKA;AACA;AACA;AAIA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;ACtHA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AC1CA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AACA;AAiBA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA8BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAIA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAIA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;ACxXA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAIA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AC9FA;AAEA;AACA;AACA;;AAEA;AAcA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAjEA;AAkEA;AAAA;AC5HA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAsBA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;AA7BA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAaA;AACA;AACA;AAxCA;AAyCA;AAAA;ACjFA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAxCA;AAyCA;AAAA;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAIA;;AAEA;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAMA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAWA;AAAA;AANA;AAEA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AAXA;;;AAaA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AA3EA;AA4EA;AAAA;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAoFA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;;;AAIA;AACA;AAEA;AAAA;AACA;AAAA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAnFA;AAoFA;AAAA;ACx5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AC77BA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AAEA;AAMA;AAqDA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AAOA;AAEA;AACA;AAGA;AAEA;AACA;AAOA;AAEA;AACA;AAOA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AAGA;AAnEA;AAoEA;AAAA;AC3jBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAWA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AAEA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9iBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AA+BA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAGA;AACA;AAEA;AAEA;AAAA;AAGA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AAGA;AACA;AAEA;AAEA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAlGA;AAmGA;AAAA;ACvYA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AACA;;AC5CA;AAOA;AACA;AAAA;AAqCA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAWA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAUA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAxMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAgMA;AACA;AAEA;AAIA;AAGA;AACA;AACA;AAYA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAOA;AACA;AACA;AAEA;AAIA;AACA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AAGA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;ACrZA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA2BA;AACA;AACA;AAAA;AAAA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAqBA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAwBA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA3DA;AAgFA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAbA;AAoCA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA1DA;AAgFA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA0BA;AAGA;AACA;AACA;AACA;AAAA;AAKA;AAMA;AACA;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AAMA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC5zBA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAEA;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAIA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AAEA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAKA;AA1FA;AA2FA;AAAA;ACxXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;;AAEA;AAgDA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAhEA;AAiEA;AAAA;AC5fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAEA;AAUA;AACA;AAEA;AACA;;AAEA;AAyDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAhEA;AAiEA;AAAA;AC9hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAgDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAjEA;AAkEA;AAAA;ACrhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAqDA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAhEA;AAiEA;AAAA;AC/jBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAEA;AAwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AArEA;AAsEA;AAAA;ACriBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAwBA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAhEA;AAiEA;AAAA;AC7GA;AAIA;AAGA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAGA;AACA;AAIA;AAGA;AAQA;AACA;AAEA;AAQA;AACA;AAEA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAMA;AAWA;AAEA;AAIA;AAIA;ACnHA;AAOA;AAAA;AAMA;AAAA;AAOA;AACA;AACA;AACA;;;AAGA;;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AAGA;AAOA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;ACvCA;AAGA;AACA;AACA;AAEA;AAKA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AAQA;AACA;AAoBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAoGA;AAAA;AAtFA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AAEA;;AACA;AAEA;AACA;AACA;AAAA;AASA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAIA;AACA;AACA;AACA;AAjJA;AACA;AACA;AACA;AACA;AAEA;AA4IA;AAAA;AChSA;AAAA;AAAA;ACSA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AAyBA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAKA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAKA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAvEA;AACA;AACA;AAEA;AAoEA;AAAA;ACjKA;AAEA;AACA;AASA;AACA;AACA;AAIA;AACA;AACA;AAIA;;AAEA;AA0BA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAOA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAMA;AAMA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AA3EA;AA4EA;AAAA;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AA8BA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AA/DA;AAgEA;AAAA;AC1IA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAhCA;AAiCA;AAAA;AC1BA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;ACnEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAsBA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AApEA;AAqEA;AAAA;ACpGA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AChEA;AACA;AACA;AAEA;AACA;AAIA;;AAEA;AAmBA;AAAA;AAAA;AAAA;AAOA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAzEA;AA0EA;AAAA;AC5GA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAEA;AA2BA;AAAA;AAAA;AAAA;AAQA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;;AACA;AAQA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAtEA;AACA;AACA;AAEA;AAmEA;AAAA;;;;;;;;;;;ACxIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;ACUA;;AAeA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;ACzBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AAEA;AACA;AAOA;AAGA;AAOA;AAEA;AACA;AAYA;AAGA;AACA;AACA;AAEA;AACA;AAaA;AAEA;AACA;AASA;AAEA;AAEA;AACA;AASA;AAGA;AASA;AAEA;AACA;AASA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAOA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAOA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5cA;AASA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAOA;AAGA;AACA;AACA;AAGA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAWA;AAUA;AANA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAHA;AAAA;AAAA;AAAA;AAAA;AAKA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AAAA;AACA;AADA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AAIA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAcA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AAQA;AAGA;AAGA;AAeA;AAEA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;AC/FA;AACA;AAUA;AAMA;AAOA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACrCA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;ACXA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACkBA;AAGA;AAAA;AAEA;AAIA;AAGA;AACA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAEA;AAKA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAIA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;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A;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AAMA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACXA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;ACiIA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACpJA;AAOA;AACA;AAGA;AACA;AACA;AALA;AAOA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACpCA;AASA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnCA;AAEA;AAqBA;AAIA;AAFA;AACA;AAEA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAEA;AAIA;AACA;AACA;AAUA;AACA;AAwDA;AAmBA;AAZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAkBA;AACA;AACA;AAEA;AAaA;AACA;AAIA;AAAA;AAAA;AACA;AAIA;AAIA;AACA;AACA;AACA;AAKA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAMA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC7OA;AAcA;AAGA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAWA;AAAA;AAAA;AARA;AACA;AACA;AAOA;AAGA;AAIA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;AC5IA;AAEA;AAWA;AACA;AAEA;AACA;AAUA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AAeA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9GA;AAEA;AAYA;AAGA;AADA;AAEA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAEA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AAIA;AAIA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvEA;AAEA;AAcA;AAGA;AADA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;AC9CA;AACA;AAEA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAMA;AACA;AAEA;AACA;AAAA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;AC1CA;AAOA;AACA;AAOA;AACA;AACA;AATA;AAYA;AAOA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzCA;AAEA;AACA;AAQA;AAGA;AACA;AAEA;AACA;AAGA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AAYA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAqBA;AAAA;AACA;AAOA;AAaA;AAEA;AACA;AACA;AAIA;AACA;AAOA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAIA;AAWA;AACA;AACA;AAEA;AAkBA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAKA;AAEA;AAKA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAGA;AAEA;AACA;AAIA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AASA;AAiBA;AAEA;AAIA;AAAA;AAAA;AACA;AAOA;AAAA;AAPA;AAYA;AAMA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAIA;AACA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAIA;AACA;AACA;AACA;AAIA;AAAA;AACA;AAEA;AACA;AACA;AAOA;AAQA;AACA;AAMA;AAIA;AAEA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AAIA;AAOA;AAAA;AA1DA;AAAA;AA4DA;AAEA;AACA;AACA;AAEA;AAEA;AAQA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAMA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAKA;AAEA;AACA;AAEA;AAIA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AAEA;AAGA;AAEA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAMA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAEA;AAIA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACvtBA;AAOA;AAEA;AAwCA;AAWA;AALA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAKA;AAKA;AAGA;AAMA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAIA;AAKA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;AC9KA;AAEA;AAGA;AAGA;AAGA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AAOA;AAEA;AACA;AACA;AAKA;AAcA;AAWA;AAJA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AASA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AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAIA;AACA;AACA;AAEA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;ACzEA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAOA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AAAA;AAEA;AACA;AAAA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAIA;AAAA;AACA;AAKA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;ACjeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpLA;;AAEA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AAAA;AAAA;AAAA;AAAA;AAEA;AAMA;AACA;AACA;AACA;AAiBA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAMA;AAuCA;AAtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAEA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AAGA;AAGA;AACA;AAEA;AAAA;AAEA;AAGA;AAAA;AAEA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAGA;AAAA;AAEA;AAKA;AACA;AAIA;AAeA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAAA;AAEA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3TA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AACA;AAGA;AAkBA;AAhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAEA;AAFA;AAAA;AAIA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAIA;AAAA;AAEA;AAGA;AACA;AAKA;AAEA;AAAA;AAGA;AACA;AAAA;AAOA;AAGA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAEA;AAKA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;AChPA;AAEA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;ACvDA;AAEA;AAKA;;;;;;;;;;;;;;;;ACPA;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AACA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC9CA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;ACpCA;AAIA;AAKA;;;;;;;;;;;;;;;;;;ACXA;AAEA;A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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;AC9ZA;AAMA;AAAA;AAIA;AAIA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;ACrBA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AAQA;AAAA;AAAA;AAOA;AAAA;AANA;AACA;AAKA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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AA;AAAA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAKA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AAEA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;;AAKA;AACA;AACA;AACA;;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;;AAMA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;;AAKA;AACA;;AAGA;AAAA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9XA;AASA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AA;AANA;AACA;AAAA;AAAA;AACA;;;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAHA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFA;AAAA;AAAA;AAGA;AAeA;AAEA;AAYA;AACA;;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAKA;AACA;AACA;AACA;;AAGA;AACA;;;AAKA;AACA;AAEA;AACA;;;AAIA;AAAA;AAAA;AAAA;AAEA;AAEA;AAGA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;;AAGA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAIA;AACA;;AAIA;AAMA;;;AAMA;AACA;AAEA;;;;;;;;;;;;;;;;;ACnPA;AAAA;AAIA;AAIA;AAIA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAOA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AAEA;AAOA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IA;AACA;AAEA;AACA;AAIA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAHA;AAIA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AASA;AAAA;AAAA;AAWA;AAAA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAEA;AACA;AAMA;;AAIA;AAEA;AACA;AACA;;AAMA;AAEA;AACA;AACA;;AAEA;AAEA;AACA;AACA;;AAMA;AAuBA;AAAA;AAAA;AAcA;AAAA;AAXA;AAAA;AAAA;AAEA;AACA;;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAeA;AAGA;AACA;AACA;AAaA;AACA;AACA;AAEA;AA0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACxNA;AAAA;AAIA;AAIA;AAIA;AAIA;AAKA;AAKA;AAMA;AACA;AAGA;AAAA;AACA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;;AC9CA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;A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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAeA;AAAA;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAMA;AAGA;AAGA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAIA;AAKA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpKA;AAAA;AAGA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AA/DA;AACA;AAAA;AAAA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AAMA;AAIA;AACA;;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AAMA;AAGA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;;AAEA;;AAEA;AAAA;AAAA;AAAA;AACA;AAMA;AAIA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;AC5GA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAUA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;;AAGA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACtFA;AAsFA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACvGA;AACA;AACA;AAMA;AACA;AACA;;AAGA;AACA;AACA;AAEA;AACA;;AAMA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjHA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AAEA;AAIA;AAFA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACpBA;AAEA;AAEA;AAEA;AAGA;AACA;AAMA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;AC7BA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;AAEA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AAGA;;AAKA;AACA;AAKA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAMA;AAKA;AAOA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;;;AAKA;AAEA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAQA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AA6CA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AAsBA;AAGA;AAAA;AAHA;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AASA;AACA;AACA;AACA;AAQA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClYA;AAkBA;AAUA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;;AAEA;;AAEA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AAUA;AARA;AACA;AACA;AAOA;AAEA;AAEA;AAEA;AAFA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AAAA;AAEA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/NA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAIA;AAGA;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;;AAGA;AAGA;AACA;;AAEA;AACA;AAGA;AAEA;AAAA;AACA;AACA;AAEA;AA8BA;AAAA;AA1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmBA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAIA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;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A;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAIA;AACA;AAIA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;;;;ACvQA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AAEA;AAkBA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAkBA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAkBA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;;;;AC/TA;;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAUA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAIA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1PA;AACA;AAIA;AACA;AACA;AAaA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAMA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;AAGA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;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A;AACA;AAKA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5CA;AACA;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;;AAIA;;;;;;;;;;;;;;;;;ACbA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;;;;;;;;;;;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpDA;AAMA;AAqBA;AAAA;AAAA;AAMA;AAAA;AALA;AACA;;AAGA;AACA;AAAA;AAAA;AAyBA;AAAA;AAAA;AAcA;AAAA;AAbA;AACA;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAYA;AAIA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1FA;AAQA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAEA;AACA;;AAEA;AACA;AAEA;AAAA;AAAA;AACA;;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAEA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAQA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACXA;AAEA;AAAA;AAAA;AAGA;AAaA;AAGA;AAEA;AACA;AAAA;AACA;;AAGA;AACA;AAAA;AAAA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;;;;AAOA;AACA;;AAKA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AAAA;AAGA;AAMA;AAKA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;;AAQA;AACA;AAEA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAeA;AAZA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AAGA;AAFA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AAKA;AAHA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACJA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACZA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;AClDA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;ACTA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAKA;;;;;;;;;;;;;;;;;ACfA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3EA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAcA;AACA;AAEA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AApCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA8BA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AA1EA;AA6EA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1OA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;A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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtJA;AAyJA;;;;;;;;;;;;;;;;;;;;;;;;;ACp/BA;AAAA;AAAA;AASA;AACA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAKA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AACA;AAEA;AAQA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACxDA;AAEA;AACA;AAFA;AAKA;AACA;AAFA;AAMA;;;;;;;;;;;;;;;ACXA;AAEA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAKA;AACA;AAFA;AAMA;;;;;;;;;;;;;;;;;;;AClWA;AAGA;AACA;AACA;AAEA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AAEA;AACA;AACA;AAQA;AAKA;AACA;AACA;AADA;AAEA;AAFA;AAGA;AAEA;AAAA;AAEA;AAMA;AAKA;AAHA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AAAA;AAkBA;AAAA;AAbA;AAHA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAGA;AADA;AAEA;AACA;AADA;AAEA;AAAA;AAAA;AAFA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9FA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AAAA;AASA;AACA;AAGA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AALA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjNA;AASA;AAKA;AAOA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AADA;AAEA;AAFA;AAGA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAFA;AAAA;AAOA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AALA;AAQA;AAIA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AACA;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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;AAAA;AAgDA;AAAA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACtNA;AACA;AAMA;AASA;AAAA;AAAA;AACA;AACA;AACA;AADA;AAAA;AAKA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AClCA;AAYA;AAIA;AAMA;AAJA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAJA;AAAA;AASA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChDA;AAEA;AAKA;AAIA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAAA;AAWA;AACA;AAEA;AAMA;AAJA;AAKA;AAAA;AAAA;AACA;AACA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClEA;AAGA;AAMA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAGA;AACA;AAYA;AAIA;AAMA;AAJA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAYA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AAEA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClCA;AAEA;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAIA;AACA;AACA;AAGA;AAIA;AAEA;AACA;AAEA;AACA;AACA;AAOA;AAGA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAzFA;;;;;;;;;;;;;;;ACjDA;AACA;AAAA;AAAA;AADA;;;;;;;;;;;;;;;ACEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACQA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AAIA;AAIA;AAEA;AAEA;AACA;AACA;AAAA;AA0IA;AAAA;AAgBA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AAOA;AAIA;AAIA;AACA;AACA;AACA;AA2BA;AACA;AACA;AAKA;AACA;AACA;AAFA;AAIA;AAIA;AAEA;AACA;AACA;AACA;AAHA;AAMA;AAOA;AADA;AAIA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAzJA;AA2JA;AACA;AAAA;AAAA;AACA;AA7JA;AAkKA;AACA;AACA;AApKA;AAwKA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArLA;AAyLA;AACA;AAKA;AACA;AACA;AAjMA;AAqMA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AArOA;AAuOA;AACA;AACA;AACA;AADA;AAGA;AACA;AADA;AAGA;AAAA;AAAA;AAAA;AACA;AAIA;AAKA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAFA;AAIA;AAjQA;AAyQA;AACA;AAIA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AA3TA;AA6TA;AACA;AAUA;AACA;AAzUA;AA2UA;AAEA;AASA;AACA;AAvVA;AA2VA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAKA;AACA;AAAA;AAEA;AACA;AACA;AAHA;AAOA;AAlXA;AAqXA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAFA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AAAA;AAAA;AADA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AAFA;AAKA;AACA;AAAA;AAAA;AAEA;AAOA;AAR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A;AACA;AAAA;AAIA;AAEA;AAKA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AADA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AACA;AAAA;AAAA;AASA;AACA;AAgBA;AACA;AACA;AACA;AAHA;AAAA;AAuCA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA7HA;AAiIA;AACA;AACA;AAEA;AACA;AAQA;AACA;AACA;AAIA;AACA;AAAA;AAEA;AACA;AACA;AACA;AA1JA;AA4JA;AACA;AAEA;AACA;AAhKA;AAAA;AAAA;AAAA;AAAA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAtCA;AAAA;AAAA;AAyCA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AApDA;AAAA;AAAA;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AA3EA;AAAA;AAAA;AA8EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtFA;AAAA;AAAA;AAyFA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAoDA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAJA;AAQA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAZA;AAiBA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAcA;AAAA;AAKA;AAAA;AAAA;AAAA;A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A;AAuBA;AAOA;AAIA;AACA;AAIA;AAGA;AACA;AADA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAKA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAwBA;AAGA;AASA;AANA;AAEA;AAFA;AAGA;AACA;AAJA;AAKA;AAAA;AAKA;AAAA;AAeA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAhFA;AAsFA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AApGA;AAuGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnHA;AAwHA;AAEA;AAKA;AA/HA;AAkIA;AAEA;AAGA;AAOA;AACA;AACA;AACA;AAFA;AAKA;AAAA;AACA;AAKA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AAEA;AACA;AA/KA;AAoLA;AAEA;AACA;AACA;AAtLA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AAEA;AAQA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAoHA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAIA;AAEA;AAMA;AAAA;AAAA;AAEA;AAIA;AACA;AAGA;AACA;AACA;AAC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CA;AACA;AAAA;AAAA;AA/ZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiaA;AAIA;AACA;AACA;AAKA;AAKA;AAKA;AAEA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAKA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AAEA;AAAA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AA3EA;AAAA;AA7aA;AADA;AAyBA;AAsCA;AAAA;AACA;AA5BA;AAuBA;AAHA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAicA;AAMA;AACA;AACA;AAGA;AAsBA;AAEA;AAOA;AAMA;AAEA;AACA;AAGA;AAGA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAPA;AAWA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AAKA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAKA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAFA;AAMA;AACA;AAAA;AAAA;AACA;AACA;AA5KA;AA8KA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAMA;AACA;AAEA;AAAA;AAIA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;AC9yBA;AACA;AAMA;AAEA;AAKA;AACA;AAGA;AAKA;AAEA;AAIA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAcA;AAAA;AACA;AAEA;AAAA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AAMA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAKA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AADA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AAQA;AA+DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAkBA;AAAA;AAAA;AAoBA;AACA;AAAA;AAAA;AAaA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AALA;AACA;AACA;AAHA;AAcA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AApCA;AAAA;AAAA;AAyCA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AA5KA;AAAA;AAAA;AA+KA;AAAA;AAAA;AAMA;AAKA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7UA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAKA;AAAA;AAAA;AACA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAEA;AAIA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAIA;AAFA;AAOA;AAPA;AAFA;AAYA;AACA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAEA;AACA;AAOA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnHA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAAA;AAAA;AAAA;AACA;AACA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AASA;AAAA;AAAA;AAAA;AACA;AACA;AA7DA;;;;;;;;;;;;;;;;AChBA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAfA;AAiBA;AAnBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AAMA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AADA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AAMA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AAFA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AADA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAKA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AADA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AC1CA;AAMA;AAkBA;AACA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AAKA;AAPA;AAAA;;;;;;;AAAA;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAKA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AADA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AAMA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AADA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;ACjDA;AAIA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AAEA;AACA;AACA;AACA;AA+CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAiBA;AAOA;AAOA;AAMA;AA+CA;AASA;AAEA;AAKA;;;;;;;;;;;;;;;;;;;ACrKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AAAA;AAEA;AACA;AAEA;AAGA;AACA;;;;;;;;;;;;;;;;AC7DA;AAEA;AACA;AACA;AACA;AACA;AAJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AAAA;AA6BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AA7CA;AAgDA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtKA;AACA;AAAA;AA8BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AAMA;AAEA;AACA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1KA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAgBA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAIA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxKA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AAAA;AA0BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAbA;AAAA;AAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6VA;AAAA;AAAA;AAGA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAjXA;AACA;AA1BA;AAAA;AAAA;AAiCA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AA7EA;AAAA;AAAA;AAmFA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AA/FA;AAAA;AAAA;AAsGA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AAEA;AAOA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAIA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AACA;AA7LA;AAAA;AAAA;AAoMA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAIA;AAzQA;AAAA;AAAA;AAgRA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AA1RA;AAAA;AAAA;AA6RA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AArSA;AAAA;AAAA;AAwSA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAGA;AAGA;AACA;AACA;AACA;AA9WA;AAAA;AAAA;AA6YA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAHA;AAQA;AACA;AACA;AAAA;AAEA;AAbA;AAeA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA;AAoBA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AATA;AAWA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AATA;AAYA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AApjBA;AAAA;AAAA;AA0jBA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAXA;AAaA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAKA;AAGA;AAEA;AAKA;AAGA;AAEA;AAKA;AAGA;AAEA;AAKA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAxtBA;AAAA;AAAA;AAiuBA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAOA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACp2BA;AAGA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;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CA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AAEA;AACA;AACA;AAFA;AAKA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAKA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChKA;AAYA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAFA;AAIA;AA/EA;AAAA;AAAA;AAmFA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAgBA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAgBA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AA3JA;AAAA;AAAA;AAkKA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9OA;AAOA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AASA;AAEA;AACA;AAFA;AAOA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAFA;AAKA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAcA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpKA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAdA;AAAA;AAAA;AAuBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AChGA;AAGA;AADA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AAFA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAQA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAaA;AARA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAGA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAJA;AAWA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAQA;AAJA;AACA;AACA;AAJA;AAKA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAHA;AAKA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAHA;AAIA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAKA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnIA;AAAA;AAGA;AACA;AACA;AA6BA;AAAA;AA0CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AACA;AACA;AACA;AACA;AACA;AAzCA;AA+DA;AAEA;AACA;AACA;AACA;AACA;AACA;AAtEA;AAwEA;AAAA;AAEA;AACA;AAEA;AACA;AA9EA;AAkIA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AA5IA;AAyTA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAKA;AAKA;AAAA;AALA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AApYA;AACA;AACA;AAAA;AAAA;AAAA;AApBA;AACA;AAxBA;AAAA;AAAA;AA6BA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAsBA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AAFA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAMA;AACA;AAIA;AAGA;AAEA;AAjBA;AAmBA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AArMA;AAAA;AAAA;AAyMA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAKA;AAGA;AADA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAGA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAGA;AACA;AAAA;AADA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAIA;AACA;AADA;AAGA;AAAA;AAAA;AAAA;AA9VA;AAAA;AAAA;AAkbA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AADA;AAIA;AAJA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAOA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrlBA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAFA;AAKA;AAAA;AAAA;AAAA;AAMA;AAHA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AADA;AAGA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AAEA;AACA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAYA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAKA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AAEA;AAKA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AADA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAFA;AAGA;AAQA;AAAA;AAAA;AAAA;AAKA;AAFA;AAAA;AAGA;AAUA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAUA;AANA;AACA;AAMA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;AAUA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAHA;AAMA;AACA;AADA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjOA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AAEA;AACA;AAKA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AADA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AACA;AAFA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAWA;AARA;AADA;AAEA;AAFA;AAGA;AAHA;AAIA;AAJA;AAKA;AALA;AAMA;AANA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtKA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAxCA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;AAGA;AAOA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AAKA;AAEA;AAAA;AAAA;AAAA;AAeA;AAZA;AADA;AAEA;AAFA;AAGA;AAHA;AAIA;AAJA;AAKA;AALA;AAMA;AANA;AAQA;AARA;AASA;AATA;AAUA;AAVA;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAYA;AAAA;AAAA;AAAA;AAEA;AACA;AADA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3KA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAOA;AACA;AACA;AACA;AACA;AAJA;AAOA;AAOA;AAMA;;;;;;;;;;;;;;;;;;;;ACrCA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAcA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AA7EA;AAEA;AACA;AACA;AACA;AALA;AAUA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAeA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AA1GA;AAEA;AAEA;AACA;AACA;AANA;AAWA;AACA;AAAA;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAgBA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAOA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AAlEA;AAEA;AAEA;AACA;AACA;AACA;AAPA;AAYA;AACA;AAAA;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AA0BA;AAAA;AAAA;AACA;AAaA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAxLA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAXA;AAcA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAjIA;AAEA;AAEA;AACA;AACA;AANA;AAWA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AAeA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAGA;AAAA;AA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;;AC3BA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;ACiBA;AAMA;AA6BA;AAGA;;;;;;;;;;;;;;;;;ACnEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AAmIA;AAKA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;AC1PA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;AFHA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AG9BA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAEA;AAIA;AAEA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AAEA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAEA;AAKA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAYA;AAAA;AACA;AAaA;AAAA;AACA;AAYA;AAAA;AACA;AAYA;AAAA;AACA;AAcA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AACA;AAeA;AAIA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvOA;;;;;;;;;;;;;;;;;ACGA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAFA;AADA;AADA;AAAA;AAYA;AACA;AACA;AAAA;AAAA;AACA;AAMA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AAAA;AAAA;;AAEA;AAAA;AAAA;AAAA;AACA;AAgCA;AAEA;AACA;AACA;;AAEA;AACA;AAGA;AACA;AACA;AAOA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;AACA;AADA;AAYA;AAZA;AAEA;AAEA;AAAA;AAAA;AAAA;AAFA;AAFA;;AADA;AAAA;AAAA;AAUA;AAAA;AAAA;;;AAVA;AAAA;AAgBA;;;AAhBA;AAAA;AADA;AAqBA;;;;;;;AClGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChLA;AACA;AACA;;;ACNA;;;;;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AChFA;AAEA;ACXA;ACSA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AAIA;AAGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAGA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAEA;ACtFA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAiDA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AACA;AACA;AAEA;AACA;AAKA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AC1lBA;AACA;AAIA;AACA;AACA;;;ACZA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAEA;AACA;AAIA;AANA;;;AANA;AACA;AAkBA;AACA;AAKA;AACA;AAAA;AAAA;;AAGA;AAEA;AACA;AACA;AACA;AAlCA;AAoCA;AC3BA;AAAA;AAKA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;;AAMA;AACA;;AAMA;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAGA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;;AAMA;AACA;;AAMA;AACA;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;ACrEA;AACA;AAEA;ACDA;;;AAEA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AAFA;;;;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AADA;;;;AASA;AAAA;AACA;AACA;AACA;AACA;AACA;AAHA;AADA;;;;AASA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AADA;;;;AA/BA;AAwCA;AACA;AADA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAPA;AChDA;AACA;AADA;AAMA;AAAA;AAAA;AAAA;;AACA;AACA;ACJA;;;AACA;AAAA;AAAA;AACA;AACA;AAFA;;;;AAKA;AAEA;;;;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;AAnBA;AAiCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAPA;;ACnCA;AAAA;AAAA;AACA;AACA;AAFA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;;AAFA;ACRA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAGA;AAEA;;;AAEA;AAAA;AAAA;AACA;AADA;AAiBA;AACA;AAGA;AACA;AACA;AACA;;;AAKA;AACA;;AAGA;AAjCA;AAAA;AAyNA;AAzNA;AAAA;AA6NA;AA7NA;AAAA;AAgOA;AAhOA;AAAA;AA0OA;AACA;AACA;AACA;;AAEA;AA/OA;AAAA;AA6RA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAJA;AAxSA;AAAA;AAgTA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAzTA;AAEA;AACA;AACA;AACA;AACA;AAAA;AADA;AAEA;AAAA;AAFA;AAGA;AAAA;AAHA;AAIA;AAAA;AAJA;AAKA;AAAA;AALA;AAMA;AAAA;;AANA;AAQA;AAAA;AAAA;AAAA;AAbA;;;;AAoCA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;AAIA;AACA;;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AACA;;AAEA;AACA;;;;AAGA;AACA;AACA;AACA;AADA;AAEA;AAFA;AAGA;;;;AAGA;AAAA;AAGA;AACA;AADA;AAGA;AAAA;AAAA;AAHA;;;;AAOA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAFA;AAKA;AACA;AANA;;;;AAUA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AADA;AAGA;;;;;AAIA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AADA;AAAA;;AAGA;AACA;AACA;AAAA;AAAA;;;AAGA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AANA;;;;AAaA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AAAA;AACA;AACA;AACA;;AAEA;;;;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAMA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AARA;AAUA;AACA;AACA;AAZA;;;;AA8BA;AACA;AACA;AACA;AACA;;;;AAYA;AACA;;;;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAJA;;;;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;;;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;;;;AA5RA;AAgUA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;;AATA;AChWA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;;;AARA;AAAA;AAYA;;;AAZA;AAAA;AAgBA;;;AAhBA;AAAA;AAoBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;;AAvBA;AAAA;AA6BA;AACA;AACA;AACA;AAHA;AAUA;AACA;AADA;AAIA;;AChDA;AAOA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAGA;AACA;AACA;;;AALA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;;;AAvBA;AAAA;AAgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AACA;AACA;AAHA;AAMA;;ACnDA;AAEA;AACA;;AAGA;AACA;;AAGA;AACA;;AAGA;AAEA;AACA;;AAGA;AACA;;AAGA;AACA;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;;;AAEA;AAAA;AAAA;AACA;AACA;AACA;AADA;AAFA;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AADA;;;;AAUA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAFA;AAIA;AACA;AACA;AACA;;;;AAtCA;AA8CA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AATA;AAUA;AAGA;;AAdA;AC9GA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AANA;;AAFA;AAAA;AAAA;AAaA;AACA;;AAEA;AACA;AACA;;;AAlBA;AAAA;AAsBA;AACA;;AAGA;AACA;AACA;;;AA5BA;AAAA;AAgCA;AACA;AACA;AACA;;AAEA;;;AArCA;AAAA;AAyCA;;;AAzCA;AAAA;AA6CA;;;AA7CA;AAAA;AAiDA;AACA;;AAEA;;;AApDA;AAAA;AAwDA;;;AAxDA;AAAA;AA4DA;AACA;AACA;AACA;AACA;;;AAhEA;AAAA;AAqEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAHA;;AAMA;AACA;;AAEA;AAXA;;;AAtEA;AAAA;AAsFA;;;AAtFA;AAAA;AA0FA;;;AA1FA;AAAA;AA8FA;;;AA9FA;AAAA;AAkGA;;;AAlGA;AAAA;AAsGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;AA/GA;AAAA;AAoHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AAEA;AAAA;AADA;AAEA;AAAA;;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;ACzJA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;;;;AARA;AAAA;AAaA;AACA;;;AAdA;AAAA;AAmBA;AACA;AACA;;;AArBA;AAAA;AA2BA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AAIA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AADA;AAIA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;;AACA;;;;AAvDA;AAAA;AAiEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AACA;AACA;AACA;AAJA;AAOA;AACA;AACA;AACA;AAHA;AAKA;AACA;;AANA;AAUA;;AC5FA;;;;;;;;;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;AAPA;;ACJA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;;;AAEA;AAAA;AAAA;AACA;AACA;AACA;AADA;AAFA;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AADA;;;;AAUA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AADA;AADA;AAQA;AACA;AACA;AAAA;;;;AA1CA;AAiDA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAPA;AAQA;AAGA;;AAZA;;AC3DA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AASA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;;AAGA;AACA;AAAA;AAAA;AAAA;;;AAIA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AANA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AANA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AANA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AANA;AAQA;AAGA;AACA;AACA;AACA;AACA;AAJA;AAcA;AAKA;AAJA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AAEA;;;AAEA;AAAA;AAAA;AACA;AACA;AACA;AADA;AAFA;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAJA;;;;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AADA;;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAFA;AAIA;AAAA;AAAA;AAAA;AAMA;AAEA;AAIA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAZA;AAgBA;AACA;;;;AAtEA;AA8EA;AACA;AAKA;AACA;AACA;AACA;AATA;AAYA;AACA;AACA;AAFA;AAKA;AAAA;AAAA;AAAA;AACA;AACA;AAFA;AAIA;AACA;AALA;AAOA;AACA;AARA;AAUA;AACA;;AAXA;AAAA;AAeA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAEA;AAFA;AAFA;AAOA;AACA;AACA;AACA;AACA;AADA;AAEA;AAFA;AAFA;AAOA;AACA;AAGA;AADA;AAEA;AAFA;AAKA;AACA;AAGA;AADA;AAEA;AAFA;;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AATA;AAUA;AAGA;AApBA;AAsBA;AACA;AACA;AACA;AACA;;AA1BA;AC/UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;AAEA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AARA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAEA;AACA;;AAzCA;AAKA;AAEA;;;;;;;;;AAoCA;AAMA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAEA;AACA;AAEA;AAMA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AAEA;AACA;;;;;;;;;;;;;;AC7FA;;;;;;;;;;;;;;;;AAIA;;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANA;AAUA;;AAfA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;;AAAA;AAGA;AACA;AACA;AAMA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACVA;AAAA;AAEA;AACA;;;;;;AAEA;;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAiDA;AAIA;;;;;;;;;;;;;;;;;;;;;;AC9EA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AAGA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAWA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/KA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAMA;AAOA;AAaA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AAMA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAMA;AACA;AAEA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AArMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6PA;AAIA;AAIA;AAEA;AAAA;AAgBA;AAAA;AAAA;AACA;AAAA;AAdA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AA8TA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AAAA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AA5WA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AAEA;AAKA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAEA;AAGA;AAEA;AAKA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAPA;AAAA;AAAA;AAQA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAIA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAAA;AAAA;AAvEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AMA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAKA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA5IA;AAAA;AAoHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA;AAAA;AAAA;AA9LA;AAmDA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AC3DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AAKA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;AAAA;AAEA;AAAA;AAAA;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFA;AACA;AAEA;AAEA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;AAAA;AAAA;AAMA;AAJA;AACA;AAKA;AACA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;AA5DA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDA;AAAA;AAAA;AAlFA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AClBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AAGA;AAFA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;AAAA;AAEA;AAAA;AAAA;AA3EA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACZA;AAaA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAOA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AAGA;AAQA;AAAA;AAGA;AACA;AAGA;AAEA;AAIA;AAAA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAKA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAKA;AAAA;AACA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AAEA;AAGA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAMA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAOA;AACA;AAEA;AAIA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAAA;AAOA;AAGA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAKA;AACA;AAEA;AAAA;AAAA;AAEA;AAKA;AAUA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AAEA;AACA;AAGA;AAMA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAtVA;AAmOA;AAlLA;AAAA;AAaA;AACA;AAcA;AA6BA;AAUA;AAEA;AAUA;AAAA;AA8GA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAIA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAvHA;AAOA;AAAA;AACA;AAEA;AAGA;;;;;;AA0GA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3IA;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA;AAAA;AAOA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAMA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAzMA;AACA;AA4BA;AA8CA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiIA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAOA;AACA;AAAA;AAAA;AAnSA;AACA;AAmBA;AAgDA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmOA;AAIA;AAEA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAOA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA;AAKA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAxeA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAweA;AAEA;AACA;AAAA;AAAA;AAEA;AASA;AAAA;AAAA;AAvfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwfA;AACA;AAAA;AAAA;AAEA;AAOA;AAAA;AAAA;AAlgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmgBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC5hBA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;ACtDA;AACA;AAQA;AAEA;AAGA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACDA;AAAA;AAMA;AACA;AAEA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AAIA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;;;;;;AAAA;AAEA;AAAA;AACA;AAGA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AAEA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AASA;AACA;AACA;AAwBA;AAIA;AAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAQA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAEA;AAIA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAGA;AACA;AAEA;AAGA;AAGA;AAIA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAIA;AAEA;AAEA;AACA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpMA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAIA;AAFA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAKA;AAKA;AAIA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAKA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAAA;AA3HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6HA;AACA;AAEA;AACA;AACA;AAEA;AAOA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAtKA;AAVA;AAAA;AAUA;AAIA;AACA;;;;;;AAiKA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC9LA;AAUA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAOA;AACA;AAAA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;;;;;;;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;;;;;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;AAAA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAGA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5LA;AAOA;AAKA;AACA;AAEA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;;;;;;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAMA;AAIA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAxJA;AAqBA;AASA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0HA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;;;;;;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;AC9NA;;;;;;;;;;;;;;;;;;;;ACCA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA5FA;AAkCA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AAFA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AArMA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4LA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAhNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiNA;;;;;;;;;;;;;;;;;;;;;ACpNA;AAEA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA3CA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAzEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAlFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAnHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AA9IA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+IA;AACA;AACA;AACA;;;;;;;;;;ACpJA;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AAIA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;ACxBA;;;;;;;;;;;;;;;ACLA;AACA;AAMA;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AAEA;AACA;AACA;AAMA;AAEA;AAMA;AAEA;AAEA;AAKA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AAQA;AACA;AACA;AAKA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AAFA;AAGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAcA;AAKA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAlMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmMA;AACA;AACA;AACA;AASA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAFA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAjRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AA3RA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4RA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACjSA;AACA;AAEA;AAKA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAUA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAlFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoFA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA3GA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmGA;AACA;AACA;AACA;AAAA;AAAA;AA7EA;AA3BA;AASA;AAmCA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAtIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwIA;AACA;AAAA;AAAA;AAjIA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AAEA;AAGA;AADA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAIA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AAAA;AAAA;AA3LA;AAwBA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACtBA;AAMA;AAJA;AAKA;AACA;AAEA;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;AC5DA;AAKA;;;;;;;;;;;;;;;;;;ACLA;AAAA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAFA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAC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A;AAPA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAIA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAKA;AAAA;AARA;AAmBA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AAFA;AADA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA;AACA;AASA;AA4CA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAQA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAYA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AAAA;AAAA;AAWA;AAUA;AARA;AACA;AACA;AACA;AACA;AAKA;AAEA;AACA;AADA;AAcA;AAEA;AAYA;AAVA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAQA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AAEA;AAUA;AARA;AACA;AACA;AACA;AACA;AAKA;AACA;AADA;AAGA;AAWA;AAMA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAEA;AA4BA;AA3BA;AADA;AAEA;AAFA;AAGA;AAHA;AAIA;AAJA;AAKA;AALA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAFA;AAIA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAHA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AASA;AACA;AACA;AAEA;AACA;AADA;AASA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AADA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAhDA;AAiDA;AACA;AAEA;AApDA;AAgEA;AAEA;AAAA;AAQA;AA8BA;AAAA;AAAA;AAEA;AACA;AAIA;AADA;AAJA;AAoBA;AACA;AAIA;AACA;AAAA;AAAA;AADA;AADA;AAMA;AAAA;AAVA;AAeA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AARA;AAcA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AATA;AAkBA;AAlBA;AAqBA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBA;AAuBA;AAEA;AACA;AACA;AADA;AAGA;AACA;AAAA;AAAA;AAAA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AAVA;AAYA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AALA;AAvBA;;;;;;;;;;;;;;;;;;;;;;;;;AC5iBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAYA;AAMA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAMA;AACA;AAEA;AAQA;AANA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AAEA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAHA;AAHA;AAUA;AAAA;AAEA;AAEA;AAEA;AAEA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAZA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AADA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3IA;AAAA;AAAA;AAAA;AAUA;AACA;AAkCA;AACA;AAEA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AAEA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AAWA;AAuBA;AArBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAMA;AAOA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AADA;AAOA;AACA;AAEA;AAIA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AALA;AAWA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;AACA;AAHA;AAMA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AADA;AAOA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAAA;AAAA;AAEA;AAEA;AAKA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA;AAiBA;AAAA;AAAA;AAGA;AAAA;AAIA;AAEA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AACA;AAHA;AAKA;AAGA;AAHA;AArBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChSA;AAAA;AAAA;AAQA;AACA;AACA;AA0BA;AAkBA;AAhBA;AACA;AACA;AAJA;AAKA;AALA;AAMA;AANA;AAOA;AACA;AACA;AATA;AAUA;AAAA;AAVA;AAAA;AAWA;AAAA;AAXA;AAYA;AACA;AACA;AAdA;AAeA;AAfA;AAgBA;AAhBA;AAiBA;AAEA;AACA;AACA;AAFA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAHA;AAMA;AAKA;AAAA;AAIA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AARA;AAUA;AAAA;AAEA;AAAA;AAGA;AAAA;AALA;AAUA;AAKA;AAAA;AAIA;AAIA;AAEA;AACA;AACA;AACA;AAFA;AADA;;;;;;;;;;;;;;;;;;;;;;;;AClJA;AAGA;AAGA;AAGA;;;;;;;;;;;;;;;;;;;ACTA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAOA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AAWA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;ACHA;AACA;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;AAWA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC7FA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACpDA;AACA;;;;;;;;;;;;;;;;;;;;;;ACSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9GA;AACA;;;;;;;;;;;;;;;;ACAA;AACA;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACjWA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpDA;AAWA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AAWA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;ACjCA;AACA;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACzIA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxFA;AACA;;;;;;;;;;;;;;;;ACDA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACfA;AACA;;;;;;;;;;;;;;;;ACSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtDA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACvJA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxEA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/IA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AA2BA;AACA;AAAA;AAAA;AAAA;AAyBA;AACA;AAAA;AAAA;AAAA;AAqBA;AAAA;AAAA;AAcA;AACA;AAAA;AAAA;AAAA;AAgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzfA;AACA;;;;;;;;;;;;;;;;;;;;;ACAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACTA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAIA;AACA;AAKA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC9cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AClEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AAiBA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3KA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChLA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5XA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiGA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAoEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AAMA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AASA;AACA;AACA;AA6EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACxzBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjIA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACjGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/HA;AACA;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/BA;AACA;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBA;AACA;;;;;;;;;;;;;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACRA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1BA;AACA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrIA;AAOA;AAIA;AAKA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9DA;AACA;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5iBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACPA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AClLA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACdA;AAWA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;AChCA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC3EA;AACA;AACA;AAUA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzBA;AACA;AA2CA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;ACTA;AACA;AAMA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;AClBA;;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA6EA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7dA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC6FA;AACA;AACA;AACA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AAUA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAaA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACpkBA;AAOA;AACA;AACA;AAGA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AC/JA;AACA;AACA;AACA;AAOA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/DA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;ACTA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AClBA;;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtJA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAcA;AAOA;AAMA;AAIA;AAMA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAOA;AAQA;AAMA;AAQA;AAQA;AAOA;AAOA;AAOA;AAMA;AAOA;AAOA;AACA;AAIA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvjBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9HA;;AAAA;AAAA;AAEA;AACA;AAAA;AA+CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxPA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA2CA;AAGA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoCA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAKA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACncA;AACA;;;;;;;;;;;;;;;;ACDA;AACA;;;;;;;;;;;;;;;ACDA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1DA;;AAAA;AAAA;AAEA;AACA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC5CA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACnNA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;ACnGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACzHA;AAWA;AACA;AACA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACbA;AAWA;AACA;AACA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;ACtBA;AAWA;AACA;AACA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AC/QA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAYA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC/PA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;ACtCA;;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAwBA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AArBA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpJA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AClIA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACjHA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AClGA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAwBA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAUA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAOA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACjQA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAQA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AChLA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC9DA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAMA;AAAA;AAAA;AAAA;AAAA;AACA;AAeA;AAGA;AAGA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAUA;AAGA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;AC/IA;;AAAA;AAAA;AAEA;AAAA;AAyBA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;ACpEA;;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACjEA;AAUA;;;;;;;;;;;;;;;;;;ACVA;;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AA4BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAnJA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAsIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/LA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AA6GA;AAAA;AA6FA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AArMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkHA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/aA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AAcA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoGA;AAgEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAiCA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACpZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC/CA;;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAwDA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAYA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;ACrIA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AAIA;AAEA;AACA;AAIA;AAEA;AACA;AAIA;AAEA;AACA;AAMA;AAEA;AACA;AAMA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;AC/FA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpBA;AACA;;;;;;;;;;;ACSA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACXA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;AC3BA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC1BA;;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAcA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AASA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnMA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC9KA;AAWA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACxGA;AAWA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AAAA;AAWA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AAWA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAcA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AArFA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA3CA;AA6HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACxJA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/DA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA+BA;AAAA;AAwKA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AA3lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AA4bA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAkDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAOA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAQA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA1pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA6GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAuDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AA0bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACh7CA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;;;;;;;;;;;;;;;ACtXA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC3DA;AAKA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACYA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACjGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAUA;AAUA;AACA;AACA;AAqCA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAOA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAIA;AACA;AACA;AAAA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGzXA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;ACnBA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACZA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;ACJA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;ACrBA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACDA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACLA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvEA;AACA;AAAA;AAGA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAxBA;AAEA;AAFA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA;AAAA;AAAA;AA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;;;;;;;;;;;ACdA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AAEA;AACA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEzCA;AACA;AACA;;;;;;;;;;;;;;;;;;ACFA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAUA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AAAA;AAEA;AAEA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AChDA;AAAA;AAGA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAAA;AAAA;AAAA;AAGA;AACA;AAIA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAWA;AAQA;AANA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3FA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AAAA;AAAA;AAGA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AAAA;AAGA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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A;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AAAA;AAIA;AAEA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AAEA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACxDA;AAAA;AAGA;AACA;AAAA;AAWA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAAA;AAEA;AACA;AAAA;AAOA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAUA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AAEA;AAEA;AAAA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACtDA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AArLA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmLA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AA9LA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4LA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAjMA;AAFA;AAFA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmMA;AAEA;AAEA;AACA;AAEA;AAEA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1TA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAtBA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAUA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAnCA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrHA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAWA;AATA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AA1CA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAvDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AADA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA3DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4DA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAlEA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+DA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA9EA;AAQA;AAJA;AADA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACvGA;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACdA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AAAA;AAEA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAEA;AAAA;AAEA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvFA;AAAA;AAIA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AChEA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AAAA;AAaA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzCA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AAAA;AAGA;AACA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEVA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;;;;;;;;;;;;;;;;;;;ACDA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AElBA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AA5BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;AC7GA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzGA;AACA;AACA;AAAA;AAAA;AAGA;AAEA;AAEA;AAAA;AAAA;AAOA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAFA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7IA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AATA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1OA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AAGA;AACA;AAEA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAJA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAbA;AAAA;AAeA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFA;AAEA;AAAA;AAAA;AAEA;AAEA;AAEA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAXA;AAAA;AAAA;AAaA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC3FA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;AC1GA;AAAA;AAAA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AAGA;AACA;AACA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AAAA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AA+BA;AACA;AAAA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAhDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkDA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AClGA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AADA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AATA;AAAA;AAAA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAIA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACjRA;AAAA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAGA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAGA;AAGA;AACA;AAAA;AAAA;AACA;AAAA;AAJA;AAAA;AAMA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AAAA;AAGA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACDA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACFA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;;;;;;;;;;;;;;;;;;ACSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGtBA;AACA;AAEA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhBA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAeA;AAOA;AALA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AAIA;AAAA;AAAA;AAAA;AAHA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAMA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3GA;AACA;AAAA;AAEA;AAGA;AACA;AAAA;AAAA;AAaA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/GA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBA;AAAA;AAmBA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AANA;AAAA;AAAA;AAQA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAPA;AAAA;AAUA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;AC9EA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAeA;AAQA;AANA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AA2BA;AAYA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;AC7TA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACvFA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEDA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAQA;AAEA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnOA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAUA;AACA;AAAA;AAAA;AASA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAEA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAKA;AAAA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAhTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkTA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AAAA;AAEA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AC/VA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AChDA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAEA;AACA;AAAA;AAKA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;ACfA;AAGA;AAGA;AACA;AAAA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AAGA;AAGA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAAA;AAAA;AAAA;AAIA;AAGA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AAOA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AG1HA;AAAA;AAAA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAKA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AChFA;AAAA;AAAA;AAAA;AAQA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE5BA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AATA;AAAA;AAAA;AAWA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChFA;AAAA;AAEA;AACA;AAIA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAMA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AAOA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/EA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AApDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA1DA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAKA;;;;;;;;;;;;;;;;;;ACnHA;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;;;;;;;;;;;;;;;;;;ACFA;AAOA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AERA;AAEA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AETA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AAAA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACnEA;AACA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;ACrBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACVA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACzCA;AAIA;AAEA;AAAA;AAAA;AAGA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;AC7EA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9DA;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;ACpBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEAA;AACA;AAEA;AAWA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAlDA;AAAA;AAoDA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAMA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAdA;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAKA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACrHA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AA5EA;AAAA;AAAA;AAMA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAzFA;AAAA;AAHA;AAGA;AAMA;AANA;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoFA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;ACpGA;AACA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAGA;AAMA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrFA;AAEA;AACA;AAGA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9CA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACpKA;AACA;AAKA;AAEA;AAAA;AAMA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA;AAAA;AAAA;AAAA;AAAA;AAuBA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAMA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;ACnGA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAWA;AAMA;AAJA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAKA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACrFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAOA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACjHA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AAGA;AAKA;AAMA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AAIA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACvCA;AACA;AAEA;AAAA;AAOA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AAEA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;AC1CA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEFA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AAAA;AAEA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3CA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AAAA;AAMA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE7CA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AAAA;AAKA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjLA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAFA;AAAA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrEA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC9CA;AACA;AAEA;AAKA;AACA;AAAA;AAEA;AAAA;AACA;AAEA;AACA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AAEA;AAKA;AACA;AAAA;AAEA;AAAA;AACA;AAEA;AACA;AAQA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AAEA;AAKA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;AC9EA;AACA;AAEA;AAIA;AAAA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAHA;AAAA;AAAA;AAKA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpGA;AACA;AAMA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA7BA;AAAA;AAAA;AAAA;AAAA;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AAKA;AAEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AAEA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAKA;AAAA;AAEA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAKA;AAKA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAOA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAKA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvJA;AACA;AAEA;AAGA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AAGA;AAMA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AAGA;AAEA;AAAA;AACA;AAAA;AASA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAbA;AAAA;AAgBA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEA;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AAOA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAMA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AAEA;AAeA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAKA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AG3CA;AACA;AAGA;AAGA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAAA;AAAA;AAGA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACzBA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACdA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AECA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAOA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChHA;AAIA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;AC9CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEAA;AACA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACpIA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtGA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAEA;AACA;AAAA;AAAA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGhDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACnHA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC7BA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AELA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AA7CA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAhDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoDA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACzHA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9CA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AAAA;AAAA;AAGA;AACA;AAGA;AAAA;AAAA;AAEA;AAEA;AAMA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AAGA;AAGA;AAAA;AAAA;AACA;AACA;AAIA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAMA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChHA;AAAA;AAAA;AAGA;AACA;AAAA;AAMA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAMA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEhBA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AArBA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AA1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AExCA;AAEA;AACA;AAOA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AExBA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAUA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrHA;AACA;AAEA;AAEA;AASA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEvBA;;;;;;;;;;;;;;;;;;;;;ACEA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAEA;AAWA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE1LA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;ACpFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AECA;AAAA;AAGA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9EA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzFA;AACA;AAAA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAOA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;AC7CA;;;;;;;;;;;;;;;;;;;;;;ACEA;AAAA;AAQA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AA5CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AACA;AAEA;AACA;AAIA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACjIA;AACA;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AAGA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACvBA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AACA;AAIA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;AClEA;AAIA;AACA;AAEA;AACA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;AACA;AA4BA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE/CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAYA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AATA;AAAA;AAAA;AAUA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AChOA;AAEA;AACA;AAEA;AAGA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AAEA;AAGA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAAA;AAAA;AAGA;AAGA;AAAA;AAIA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA;AAEA;AACA;AAIA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrCA;AAEA;AACA;AAAA;AAAA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEDA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAGA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACjLA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAWA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AALA;AAOA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAKA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzKA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAMA;AAAA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACpEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAKA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtEA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAAA;AAAA;AAGA;AACA;AAGA;AACA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACnDA;AAAA;AAEA;AAEA;AACA;AAEA;AAAA;AAAA;AAUA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AAbA;AAAA;AAeA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAEA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAIA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAMA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC3IA;AACA;AAAA;AAAA;AAEA;AAEA;AAIA;AAAA;AAAA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChDA;AAAA;AAAA;AAGA;AAIA;AAAA;AAAA;AAEA;AACA;AAQA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AAAA;AAAA;AAAA;AAMA;AAEA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAIA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAGA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnIA;AAAA;AAGA;AACA;AAEA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAOA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvKA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAUA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAAA;AAAA;AAAA;AAUA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AChKA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AAGA;AAEA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/QA;AAEA;AACA;AAGA;AAEA;AACA;AAAA;AAOA;AAAA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AAEA;AAAA;AAQA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;ACjBA;AAAA;AAGA;AAAA;AAMA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AAEA;AAEA;AAGA;AACA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AAEA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AAEA;AAAA;AAIA;AACA;AASA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1CA;AAEA;AACA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AENA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAOA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AAAA;AAAA;AAGA;AAGA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5EA;AAAA;AAGA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAMA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAAA;AAGA;AAMA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AACA;AACA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9FA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AAhBA;AAAA;AAAA;AAmBA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAMA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzGA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAEA;AACA;AAEA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1HA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAGA;AAEA;AAAA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAAA;AAAA;AAAA;AAaA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AACA;AAEA;AAGA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;AC5CA;AACA;AAIA;AACA;AAAA;AAGA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACrDA;;;;;;;;;;;;;;;;;ACKA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AAEA;;;;;;;;;;;;;;;;ACDA;AAAA;AAAA;;;;;;;;;;;;;;;;;;ACFA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACzBA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AAEA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;AChBA;AAKA;AAaA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AExDA;AACA;AACA;AACA;AAGA;AA0BA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAMA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;AC/EA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AA9BA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACNA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AC9BA;AACA;AAEA;AACA;AAGA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AAEA;AAAA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AA9BA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEJA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACvDA;AACA;AAAA;AAAA;AAGA;AAAA;AAAA;AASA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAGA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;AAGA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChGA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AAAA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAHA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAAA;AAEA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AAcA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AATA;AAAA;AAYA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAbA;AAAA;AAAA;AAeA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AAAA;AAGA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAMA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACnHA;AAAA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACpBA;AAAA;AAGA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAAA;AAGA;AACA;AACA;AAIA;AAEA;AAEA;AAAA;AAAA;AAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AAAA;AAAA;AAOA;AAAA;AAAA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAGA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AADA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAVA;AAAA;AAAA;AAYA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA;AAAA;AAiBA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAXA;AAAA;AAcA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACJA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AClBA;AACA;AAOA;AAEA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrBA;AAAA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACpBA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;AC5CA;AAYA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEFA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AAAA;AAAA;AAGA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;ACNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE5DA;AACA;AAEA;AAEA;AACA;AAGA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AARA;AAAA;AAAA;AAUA;AAAA;AAEA;AACA;AAAA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACmLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoLA;AACA;AACA;AACA;AACA;AACA;AAkDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkOA;AACA;AACA;AACA;AACA;AAkBA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/jCA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxBA;AACA;AAGA;AACA;AACA;;;;;;;;;;;;;;;;;ACNA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAIA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAyCA;AAAA;AAzCA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAhBA;AAAA;AAAA;AAkBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AClKA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACFA;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AAAA;AAFA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAGA;AACA;AAKA;AACA;AAEA;AAAA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpIA;;;;;;;;;;;;;;;;;;;;;;ACAA;AAAA;AAEA;AAEA;AAEA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAVA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACrCA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAAA;AAAA;AAkBA;AAAA;AAjBA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AAEA;AAaA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AACA;AAGA;AACA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAGA;AAEA;AAAA;AAAA;AAEA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;AC9NA;AAGA;;;;;;;;;;;;;;;;;;;ACHA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEDA;AAGA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACDA;;;;;;;;;;;;;;;;;ACEA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;ACFA;AASA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;;;;;;;;;;;;;;;;;ACEA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AAeA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC3DA;;;;;;;;;;;;;;;;ACEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;ACAA;AAWA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;AClCA;AAEA;AACA;AASA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AE9BA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAGA;;;;;;;;;;;;;;;;;;ACtBA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;ACjBA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAZA;AAAA;AAAA;AAcA;AAAA;AACA;AACA;AAAA;AAFA;AAAA;AAAA;;;;;;;;;;;;;;;;;ACtBA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACPA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;ACLA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AApDA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACPA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;ACCA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;ACZA;AACA;AAGA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;ACTA;AAEA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AAAA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAIA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAVA;AAAA;AAAA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxBA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AAEA;AAAA;AACA;AACA;AAAA;AAFA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AAFA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AAAA;AAFA;AAAA;AAAA;;;;;;;;;;;;;;;ACXA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;ACFA;AACA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvJA;;;;;;;;AAQA;;AACA;AACA;AACA;AACA;;;AAGA;;AACA;AACA;;AACA;AACA;AACA;AACA;;;;;;AAKA;AAhBA;AADA;AAoBA;;;AAGA;;AC/BA;AACA;AAAA;AAAA;AAEA;AAEA;AAAA;AACA;;ACNA;;;;;;;;AAOA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;;AAEA;AACA;;;AAEA;;;AAEA;;;ACvBA;AAEA;;AAEA;;AAEA;AAFA;AAIA;;;ACJA;AACA;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;AAIA;AAJA;AAMA;;;ACdA;AACA;AACA;;AACA;AACA;AACA;AACA;;ACRA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;AChCA;;;;;;;AAOA;AACA;;AAEA;;;;AAIA;AACA;AADA;AAGA;;AACA;AACA;AACA;;AAJA;AAOA;AACA;;;;;ACvBA;;;;;;;;;AAQA;AACA;AACA;;;AAEA;;;ACbA;;;;;;;AAOA;AACA;;;ACCA;;;;;;;AAMA;;AAEA;AACA;;;AAGA;AACA;;;;;AAMA;AACA;AAdA;;;AAkBA;AACA;AAnBA;;;AAuBA;AACA;;;AAGA;;;ACtBA;;;;;;;;;AAQA;;;AACA;AACA;AACA;;;;;;;;;;;AAQA;;AAEA;AACA;;;AAGA;AACA;;;AAEA;;;;;;;;AAOA;AACA;;;;;;;;;AAQA;AACA;AACA;AACA;AACA;;AAFA;AAKA;;;;;;;;;AAQA;AACA;AACA;;AAGA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;;;;AAKA;;;;;AAKA;AAGA;;;;;;;;;;AASA;AACA;AACA;;;;;;AC5HA;;;;;;;;AAQA;AACA;AACA;AACA;;;AAEA;;;AAEA;;;ACbA;;;;;;;AAMA;AACA;;AAGA;AACA;AACA;AACA;AAFA;;;AAMA;AACA;AACA;;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AAFA;;;ACzBA;;;;;;;AAMA;;;AAGA;AACA;;AACA;AACA;AACA;AACA;AAFA;AAIA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AALA;;;ACpBA;;;;;;;;;AAQA;AACA;AACA;;;AAEA;AACA;AAEA;;;ACfA;;;;;;;;;AAQA;AACA;AACA;;;AAEA;AACA;AACA;;;ACbA;;;;;;;;AAOA;AACA;AACA;;;AAGA;AACA;;;AAEA;;;AChBA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAFA;AAKA;AACA;AACA;AAFA;;;AAMA;AACA;;;ACvBA;;;;;;;;AAQA;AACA;AACA;AACA;AAFA;;;ACPA;;;;;;;;;AAQA;AACA;;;ACRA;;;;;;;;AAOA;AACA;;;ACNA;;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAVA;;AAaA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AC3BA;;;;;;;AAMA;AACA;AACA;AACA;;AAGA;AACA;AAPA;;;AAWA;AACA;AADA;AAGA;;;AAGA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;;AAGA;AACA;AACA;;AAEA;AACA;AADA;AAGA;AADA;AAGA;;;AAGA;AACA;;;AAEA;;;AC5EA;;;;;;;;AAOA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AAVA;;;;AAeA;;AAGA;;AAGA;AAEA;AACA;;;AClCA;;;;;;AAOA;AACA;;;ACNA;;;;;;;;AAOA;AACA;AACA;AADA;;;ACRA;;;;;;;;AAOA;AACA;AACA;AADA;;;ACVA;;;;;;AAMA;AACA;AACA;;;ACHA;;;;;;;;;AAQA;;;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;;AAFA;;AAMA;;;;;;;;;;;AAQA;;;;;;;AAMA;AACA;AACA;AACA;;;;;;;;AAOA;AACA;AACA;AACA;;;;;;ACxDA;;;;;;;;AAQA;AACA;AACA;AADA;AAGA;;AACA;AACA;;AACA;;;AAEA;;;AAEA;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AALA;;AASA;AACA;AACA;AACA;AACA;;AAJA;AAOA;AACA;;AAGA;AACA;AACA;;;;;;;;;;AASA;;;;;AACA;;;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AAQA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AAGA;;AAGA;AACA;AACA;AACA;;AAHA;AAMA;AApBA;;;AAwBA;;AAxBA;;;AA6BA;AAEA;AACA;AACA;AACA;AACA;AAJA;;AAOA;;AAEA;;;;;AAvDA;;AC7CA;;;;;;AAMA;AACA;;;ACLA;;;;;;;;;AAQA;AACA;AACA;AACA;;AAEA;AACA;;AACA;AACA;;;AAEA;AACA;;;AAGA;AACA;AACA;AADA;AAGA;AACA;AADA;;;;AAM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AAAA;AADA;AAGA;;AA5EA;AAkFA;AACA;;AAjFA;AACA;AADA;AAGA;;AAgFA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AAHA;AASA;AAAA;AAKA;;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAHA;AAKA;AAEA;AACA;AACA;AAHA;AASA;AAAA;AAKA;;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAJA;AAOA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAHA;AAQA;AAAA;AAIA;;AAEA;AACA;AAOA;;AA9KA;;AAAA;AASA;AACA;AACA;AAHA;;AAyKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AARA;AAUA;AACA;AADA;AAXA;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1NA;AACA;AAcA;;AA+GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApBA;AAuBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAHA;;AAKA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAHA;AAKA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAHA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAAA;;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAFA;AAIA;AACA;AAzBA;AA2BA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA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A;AAAA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAGA;AAIA;AACA;AAAA;AACA;AAAA;AAAA;AAIA;AAIA;AAEA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAGA;AAEA;AAAA;AAGA;AACA;AAAA;AAGA;AAIA;AAEA;AAEA;AAEA;AAEA;AACA;AAGA;AAIA;AAAA;AAAA;AAMA;AAEA;AAEA;AACA;AAIA;AACA;AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAGA;AAIA;AAMA;AACA;AAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;ACnLA;AAMA;AAGA;AACA;AAAA;AAGA;AAIA;AAEA;AAIA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AAIA;AACA;AACA;AAAA;AAAA;AAIA;AAIA;AACA;AACA;AAEA;AAAA;AAGA;AACA;AAAA;AAGA;AAIA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAGA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAAA;AAIA;AACA;AAAA;AAGA;AAIA;AAMA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAGA;AACA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAGA;AAEA;AACA;AAAA;AAGA;AAAA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;ACpJA;AACA;AAKA;AACA;AACA;AAAA;AAIA;AACA;AACA;AAIA;AACA;AACA;AAAA;AAGA;;ACrCA;AAOA;AAAA;AACA;AAEA;AACA;AAEA;AAAA;AAEA;AAAA;;ACqCA;AACA;AACA;AACA;AACA;AAAA;AAGA;AAMA;AACA;AACA;AAAA;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ACA;AACA;AAAA;AAAA;AAIA;AAGA;AAKA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAKA;AAzHA;AA0HA;AAGA;AAGA;AACA;AAIA;AACA;AACA;AAAA;AAAA;AASA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAzEA;;A5BlDA;;;;;;;;;;;;;;;;A8BxBA;AAEA;AAGA;AAKA;;;;;;;;;;;;;;;ACVA;AACA;AAQA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAMA;AAUA;AAgBA;AAAA;AA0CA;AAAA;;AACA;AArCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAsKA;;AACA;AACA;AAEA;AACA;AACA;AAOA;AACA;AAmHA;;AAGA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AA6BA;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAUA;AAQA;AACA;AACA;AACA;AAUA;AAGA;AAEA;;AACA;AAEA;AAYA;AASA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AAOA;AAEA;;AACA;;AAEA;AACA;AACA;AAEA;AAMA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAQA;AAaA;;AAKA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAIA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAMA;AAQA;AAOA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AA6FA;;;AAGA;AACA;AACA;AACA;AAjuBA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;;AAIA;AACA;AACA;AACA;AAIA;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;;AAEA;AACA;AAKA;AACA;;AAEA;AACA;AAOA;AACA;;AAEA;AACA;AAOA;AACA;AAGA;AAkBA;;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAcA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAOA;AAIA;AAcA;AACA;AAIA;AACA;AAmBA;AAOA;AACA;AAWA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAiGA;AACA;AACA;AACA;AACA;AACA;AAiFA;AAGA;AACA;AAEA;AACA;AAEA;AA4EA;AAAA;;AACA;AACA;AACA;;;AAAA;AAgDA;;;;;AAKA;AACA;;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AACA;AACA;AAEA;;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAMA;AACA;AAEA;;AAMA;AACA;AACA;AACA;AACA;AAEA;;AAIA;AACA;AACA;AACA;AAEA;;AACA;AACA;AAOA;AALA;;;AAGA;AACA;AACA;AACA;AACA;;;AAAA;AAKA;AAHA;;AAEA;AACA;AACA;AACA;;;AAAA;AAhuBA;AACA;AACA;AACA;AAsuBA;AAAA;AAEA;;;;;;;;;;;;;;;ACpzBA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChCA;AAQA;AACA;AAEA;AAAA;AAQA;AAAA;;AAoBA;AAGA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AAGA;AAxCA;AAEA;AACA;AACA;AAuCA;AACA;AAIA;;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAJA;;;AAGA;AACA;AACA;AACA;;;AAAA;AAEA;;;;AAIA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAAA;AACA;AACA;;;AAAA;AAEA;;AAKA;AACA;AAIA;AACA;AACA;AAGA;AAIA;AAKA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AAAA;;;;;;;;;;;;;;;;;AC5KA;AACA;AASA;AACA;AACA;AAEA;AAkDA;AAoBA;;;AAGA;AACA;AAEA;;AAEA;AACA;;AAGA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAQA;AAEA;AACA;AACA;AACA;;AAEA;AAEA;AAEA;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;AAIA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAeA;AAEA;AAEA;AAMA;;AAUA;;AAOA;AASA;AAGA;AACA;AAIA;AACA;AAIA;AACA;AAKA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAMA;AAOA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAOA;AACA;AACA;AAIA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAGA;;AAEA;AACA;AAOA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAEA;;;AAGA;AACA;AAIA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AAEA;;;AAGA;AACA;;;;;;;;;;;;;;;;ACpdA;AAYA;;AAEA;AACA;AAAA;AAAA;AAAA;AAKA;;AAqBA;AAnBA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AACA;AAGA;AACA;AAxBA;AACA;AACA;AAuBA;AAAA;AA1BA;;;;;;;;;;;;;;;ACfA;;;;;;;;;;AAUA;AACA;AAMA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9CA;AAgDA;AAAA;AASA;AACA;AATA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAAA;AAVA;;;;;;;;;;;;;;;AC3DA;AAEA;;;AAGA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAyBA;AA/CA;AACA;AACA;AACA;AAqBA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA7DA;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AAHA;;;;;;;;;;;;;;;;ACAA;AAIA;AACA;AACA;AACA;AAiCA;;;;AAIA;AAEA;AAAA;AAGA;AAEA;AAKA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACA;AACA;AACA;;;AAAA;AACA;;AAAA;;;AADA;;;AAOA;AACA;AACA;AAGA;AACA;AACA;AAMA;AACA;AACA;AACA;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArDA;AAuDA;;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAGA;AAjBA;AAmBA;AAMA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AAEA;;AAAA;AASA;;AAAA;;;;;;AAWA;AACA;;AAIA;AACA;AACA;AAGA;AACA;AAIA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AAGA;AAEA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC/OA;AA6BA;;;;;;AAMA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AAEA;AACA;AA5CA;AA8CA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpHA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;;;;;;;;;;;;;;;;ACPA;AAGA;AACA;AACA;AAUA;;;;AAIA;AACA;AAAA;AAKA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACA;AACA;AACA;;;AAAA;AACA;;AAAA;;;AADA;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzCA;AA2CA;;AAEA;AACA;;;;;;AAMA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AAEA;;AAAA;AASA;;AAAA;;;;;;AAUA;;;;;;;;;;;;;;;AC1GA;AAAA;AACA;AAAA;AAEA;;AACA;AACA;AAAA;;;;;;;;;;;;;;;ACLA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC3BA;AACA;AAEA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;ACdA;AAAA;AACA;AAMA;AAEA;AAAA;AACA;AACA;AAIA;AACA;AAIA;AAAA;AACA;AACA;AAGA;AACA;AAIA;AACA;AAQA;AAAA;AACA;AAAA;AAAA;AAEA;AAAA;;;;;;;;;;;;;;;;AC1CA;AAGA;AAIA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAwBA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA;AArBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAYA;AACA;AAAA;AAEA;;;;;;;;;;;;;;ACxEA;AAIA;AAEA;;;;;;;;;;;;;;;ACNA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACPA;AAEA;AAEA;AACA;AACA;AACA;AAoBA;AAnBA;AAIA;AAGA;AACA;AAYA;AAVA;AACA;AACA;AASA;AAPA;AACA;AACA;AAMA;;;;;;;;;;;;;;;AC/BA;;AAEA;AACA;AAKA;AADA;AAEA;AACA;AACA;AACA;AACA;AACA;AAKA;AAHA;;AAEA;AACA;AACA;AACA;;;AAAA;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA7CA;;;;;;;;;;;;;;;;ACUA;AAIA;AAUA;AAGA;AAGA;AAGA;AAGA;AACA;AACA;AA5BA;AA8BA;AAGA;AAWA;AACA;AAfA;AAiBA;AACA;AAKA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAZA;AAcA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAfA;;;;;;;;;;;;;;;ACzEA;AACA;AAEA;;;AAGA;AACA;AAoBA;AAnBA;;AAEA;AACA;AAEA;AAEA;AACA;AASA;AAUA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAA;;AAOA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAEA;AACA;AACA;;AACA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAAA;AAEA;AAGA;AAIA;AACA;AACA;AAKA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;;;;;;;;;;;;;;;AC7JA;AAGA;;AAEA;AACA;AAKA;AAAA;;AAHA;AACA;AAkCA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AAGA;AACA;AACA;AACA;AAGA;;AACA;AAQA;AACA;AAEA;;;AAGA;AACA;AAOA;;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AAAA;AAGA;AACA;AAEA;AApHA;AACA;AAEA;AAEA;AAMA;AACA;AAEA;AAMA;AAEA;AAKA;AAHA;;AAEA;AACA;AACA;AACA;;;AAAA;AAwFA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACt0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpLA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;ACLA;;;;;;;;;;;;;;;;AIDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnqBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzFA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAUA;;;;;;;;;;;ACxzhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3rnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/NA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACngBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACXA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpLA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnHA;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3q6BA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5NA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzZA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AEfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACXA;AACA;AACA;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClrFA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;ACkBA;AAAA;AAoBA;AAlBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAlBA;AAmBA;AAAA;AApBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AAWA;;;;;;AAMA;AACA;AAAA;AAAA;AAAA;AAQA;;AAkEA;AAhEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAxEA;AAyEA;AAAA;AA1EA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;;;;;;;;;;;;;;;;;;;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAyFA;AAAA;AA4CA;AAAA;AA9BA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAwJA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AA4GA;AACA;AACA;AA8GA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoDA;AACA;AACA;AAwCA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAwBA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAtkBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlBA;AAoBA;AAaA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqBA;AACA;AACA;AAyBA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AA5oBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAkoBA;AAAA;AA9oBA;AAgpBA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;ACr5BA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAKA;AAiBA;AAAA;AAcA;AAAA;AAZA;AAKA;AACA;AACA;AACA;AACA;AACA;AA+DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AA5MA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAQA;AAEA;AACA;AAcA;AAiBA;AA+EA;AACA;AACA;AAzJA;AA4NA;AAAA;AA7NA;AA+NA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7RA;AAuBA;AAkBA;AAAA;AAJA;AAkKA;AACA;AACA;AACA;AACA;AAjKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;AC1VA;AAEA;AACA;AAEA;AACA;AACA;AAyBA;AAuBA;AAAA;AATA;AACA;AAGA;AACA;AAEA;AA+TA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArVA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;ACjaA;AACA;AACA;AACA;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACNA;;;;;;AAMA;AACA;AAAA;AAYA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AAEA;;;AAGA;AACA;AAWA;AANA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAvEA;AAyEA;AAAA;AAAA;;AAIA;AAHA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AAEA;AAEA;AAAA;AAOA;AAIA;AACA;AALA;AAWA;AACA;AAEA;AACA;AACA;AACA;;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AApDA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;AAEA;;;;;;;;;;;;AAYA;AAEA;AAAA;AACA;AACA;AAuBA;AAbA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AAAA;AAzBA;AA2BA;AAAA;AAKA;AAAA;AAEA;AACA;AACA;;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AArCA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CA;AAAA;AACA;AAAA;AAEA;;AACA;AACA;AAAA;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AAGA;AAAA;AAMA;AAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAxEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;AAEA;AAAA;AA8CA;AA7CA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AAAA;AA9CA;AAgDA;AAAA;AAQA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAnKA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDA;AAoBA;AAAA;AAAA;;AAOA;AAJA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AAsBA;AAAA;AACA;AACA;AACA;AAGA;AAAA;;;;;;;;;;;;;;AC5BA;;AAEA;;;;;;;;;;;;;;;AAEA;AACA;AAOA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;AC3EA;;AAEA;;;;;;;;;;;;;;;AAEA;AACA;AAGA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;ACnEA;;AAEA;;;;;;;;;;;;;;;AAEA;AACA;AAGA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AAeA;AAAA;AAqCA;AAAA;AAnCA;AACA;AACA;AAEA;AACA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAUA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvPA;AA6BA;AAAA;AAAA;AAAA;AACA;;AAuCA;AApCA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;ACxEA;AAgBA;AAfA;AAgBA;AAkBA;AAjCA;AAiBA;AADA;AAfA;AAmBA;AAlBA;AAoBA;AAnBA;AAsBA;AArBA;AAoBA;AAnBA;AAqBA;AApBA;AAYA;AACA;AAZA;AAcA;AAbA;AAeA;AAbA;AAwBA;;;;;;;;;;;;;;ACpCA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AAOA;AACA;AACA;;;;AAIA;AAEA;AAAA;AAeA;AAAA;AAFA;AAwEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA1FA;AACA;AACA;AACA;;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AAIA;AAEA;AACA;AAKA;AAlFA;AACA;AACA;AACA;AACA;AACA;AACA;AAqGA;AAAA;AA5GA;;;;;;;;;;;;;;AChBA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;;;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAwCA;AAvCA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AA3CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AAGA;AAEA;;;;;AAKA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AA6DA;AACA;AACA;;AA4BA;AA1FA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzHA;AAAA;AA2BA;AA1BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AA3BA;;;;;;;;;;;;;;ACHA;AAMA;AAAA;AA2IA;AA1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjJA;AAEA;AACA;AAAA;AAIA;AAAA;AAHA;AACA;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAGA;AAAA;AAvCA;;;;;;;;;;;;;ACHA;;;AAGA;;AAKA;AAIA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;;;;ACzEA;AAAA;AAIA;AAHA;AACA;AACA;AACA;AAAA;;;;;;;;;;;;ACJA;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACznBA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AAEA;AACA;;;;;;;;;;;;;;;ACHA;AAGA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;;;;;;;;;;;;;;ACzBA;AAOA;AALA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;;AAkHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AAWA;AACA;AACA;AACA;;AA0FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC7WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5DA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA;;AAwCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjNA;;AAsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACnSA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACzJA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChvBA;;;;;;;;;;;;;;;;;;;;;;;ACmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoDA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/mBA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;AACA;AACA;AACA;;AAGA;;AAGA;AACA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACllBA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AChbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjDA;AACA;;AAGA;AACA;AACA;;AAKA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrJA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC5QA;;;;;;;;;;;;;;;;;;;;AtBAA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AuBJA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3OA;AAUA;AACA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5NA;AAOA;AACA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClLA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtJA;;AA0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACzRA;;AAqEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ApBvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AqBjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkMA;AACA;AACA;AACA;AACA;AACA;AAwBA;AACA;AACA;;ACzcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;;ACDA;;ACGA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvQA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACl/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A/GdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AgHtPA;AACA;AACA;;AAKA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AChLA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC3FA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC1HA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACxGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC/JA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC7EA;AAwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5BA;;AAyCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AACA;;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AAaA;AAEA;AAEA;AAMA;AAEA;AAAA;AAAA;AACA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;;AAEA;AACA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAKA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AAGA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AAKA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7qBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACnBA;AAEA;AAAA;AAIA;AAHA;AACA;AACA;AACA;AAAA;AAJA;;;;;;;;;;;;;;ACFA;AAAA;AAoBA;AAnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AApBA;;;;;;;;;;;;;;ACAA;AAGA;AAFA;AAEA;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACn6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAAA;AACA;AAcA;AACA;;;;;;;;;;;;ACphBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpKA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;ACNA;AACA;AACA;AAGA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACxCA;AACA;AACA;AACA;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3BA;AACA;AACA;AACA;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACJA;AACA;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChBA;AACA;AACA;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACVA;AACA;AACA;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC1BA;AACA;AACA;;;;;;;;;;;;;;;ACFA;AACA;AACA;;;;;;;;;;;;;;;ACFA;AACA;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACr+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACt5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC1HA;AAMA;AACA;;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AAHA;AAKA;;AACA;AAfA;AAiBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AADA;AAGA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AAGA;;AA/EA;AAkFA;;;;;;;;;;;;;;;;;;;;;;AChFA;AAKA;AACA;AACA;AAAA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;;AACA;AACA;AACA;AAAA;;AACA;AACA;AADA;AAGA;;AACA;AACA;AAXA;AAaA;;;AAGA;;AAOA;AAMA;AAGA;AACA;;;AAGA;AAMA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAHA;AAMA;AAEA;AAEA;AAIA;AA5BA;;AA+BA;;AAGA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAGA;AACA;AACA;AAGA;AACA;AAGA;AACA;AAEA;AAEA;;AAMA;;AAKA;AACA;AACA;;AAKA;AACA;AAGA;AACA;;AACA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAKA;AAnJA;AAqJA;AAvJA;AAyJA;AAEA;AAIA;AACA;AAEA;AAIA;AACA;AAEA;AACA;AACA;AACA;;AACA;AAIA;AACA;AACA;AAKA;;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AAIA;AACA;AACA;AAKA;;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACpMA;AAaA;AAKA;AAGA;AAKA;AACA;AAUA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAUA;AAGA;AAFA;AAMA;;AAEA;AASA;AACA;AAIA;;AAEA;AAAA;AAAA;AAAA;AAGA;AAEA;AACA;AAAA;AAAA;AAAA;AADA;AAFA;AAMA;;AAEA;AACA;AACA;AAFA;AAMA;AAEA;AACA;AAAA;AAAA;AAAA;AADA;AAFA;AAMA;;AAEA;AASA;;AACA;AAAA;AAAA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AAGA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAWA;;AA9HA;;;;;;;;;;;;;;;;;;AC3BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC0EA;AAEA;AAgBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAEA;AAGA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;;AAGA;AAEA;AACA;AACA;AACA;AAHA;AAKA;AACA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAHA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AACA;AALA;AAOA;AACA;AAAA;AAAA;AAAA;AAAA;AARA;AAUA;AACA;AAAA;AAAA;AAXA;AAaA;AACA;AAAA;AAAA;AAdA;AAgBA;AACA;AACA;AAlBA;AAqBA;AAtBA;;AAyBA;;AACA;AAAA;;AACA;AAAA;;AACA;AAAA;AAAA;AAAA;;AAEA;AAIA;;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;;AACA;;AAGA;AAOA;;AAOA;AAQA;AAOA;AAAA;AAAA;AAAA;AACA;AAlDA;AAoDA;AAAA;;AACA;AACA;;AAOA;AACA;AACA;;AAEA;;AAOA;AAQA;AAMA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAHA;;AAKA;AACA;AAEA;AAFA;;AAIA;AACA;AAEA;AAFA;;AAIA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;AAWA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAPA;;AASA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAPA;;AASA;AACA;AAEA;AAFA;AAlDA;AAHA;;AA2DA;AAEA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AAHA;AAJA;AAUA;;AAlRA;AAqRA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7SA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AAWA;AAEA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AADA;AADA;AAKA;;AAEA;AACA;AACA;;AAEA;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AADA;AADA;AAKA;;AAEA;AAAA;;AACA;AAEA;AACA;AAHA;AAYA;AACA;AAEA;AACA;;AAhGA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AAEA;AAoBA;AAIA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AAEA;;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AAHA;AAKA;;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AADA;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AAMA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;;AAEA;AAIA;;AAEA;AACA;AACA;;AAEA;AAEA;AAFA;AAMA;AAEA;AACA;;AAEA;AACA;AAIA;AAOA;AACA;AACA;AACA;AACA;AACA;AAZA;AAeA;AAMA;;AAEA;AACA;AACA;AACA;AACA;AAAA;;AACA;AAKA;AAMA;AAAA;;AACA;AAKA;AAMA;AACA;;;AAGA;AACA;AAAA;AAAA;AACA;AADA;AAGA;AAnCA;AAqCA;;AA1KA;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;;AACA;AACA;AADA;;AAGA;AACA;AADA;;AAIA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AAXA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AAUA;AACA;AACA;;;AACA;AAGA;AACA;AACA;AACA;AAHA;AAHA;;AAUA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AACA;AAXA;AAcA;AACA;AACA;AACA;;;AACA;AACA;AADA;AAIA;AACA;AACA;AACA;;;AACA;AACA;AADA;;AAIA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AAEA;AAMA;AACA;;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AADA;AAIA;AACA;AACA;AACA;AADA;AAFA;AAMA;;AAEA;AAlBA;AAoBA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AADA;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AAIA;AACA;;AAEA;AACA;;AAnFA;AAsFA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC2CA;AAEA;AAsBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAGA;AAAA;AAAA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAIA;;AAGA;AACA;AACA;AACA;AACA;AAJA;AAOA;AACA;;AAEA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;AAAA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAKA;;AAEA;AACA;AAKA;;AAEA;AAAA;;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;;AAGA;AACA;;AAEA;AAAA;;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAGA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;;AAEA;AAGA;;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AAGA;;;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAGA;AACA;;AAEA;;AAGA;AACA;AACA;AACA;AAHA;AAOA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AARA;AADA;;AAaA;;AAGA;AACA;AACA;AAGA;;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AAEA;;AAGA;;AAGA;AAGA;;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;;AAEA;AAAA;;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AACA;AACA;;;AAGA;AACA;AACA;AACA;AAAA;;AACA;AACA;AACA;AAGA;;AACA;AACA;AACA;;AAEA;;AAGA;AACA;;AAMA;AACA;AACA;AACA;;AACA;AA5BA;AA8BA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAhCA;AAkCA;AACA;AAAA;AAAA;AAnCA;AAqCA;AACA;AAAA;AAAA;AAtCA;AAwCA;AACA;AACA;AA1CA;AA6CA;AAEA;AACA;;AAEA;AACA;AAEA;;AACA;AACA;AACA;AAEA;AACA;AAHA;;AAKA;AACA;AAEA;AAFA;;AAIA;AACA;AAEA;AAFA;;AAIA;AACA;AAEA;AACA;AACA;AACA;AAGA;AACA;AACA;AAFA;AARA;;AAaA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAHA;AARA;;AAcA;AACA;;AAEA;AACA;AAAA;AACA;;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AARA;;AAUA;AACA;AAEA;AAFA;;AAIA;AACA;AAEA;AAFA;AArEA;AAHA;;AA+EA;AAEA;AACA;AACA;AADA;AAIA;AAAA;AAAA;AAAA;AAAA;AALA;AAOA;;AAncA;;AAscA;AAQA;AAKA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZA;AAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9iBA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAIA;;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;AASA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;;AAEA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AADA;AADA;AAKA;;AAEA;AAQA;AACA;;AAEA;AACA;AACA;;AAEA;AAIA;;AAEA;AACA;AACA;;AAEA;AACA;;AAKA;AACA;AACA;AAGA;;AAEA;AACA;AACA;AAAA;AAAA;AACA;AADA;AADA;AAKA;;AAEA;AACA;AACA;AACA;AADA;AADA;AAKA;;AAEA;AACA;AACA;AACA;AADA;AADA;AAKA;;AAtIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAEA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AAGA;;AACA;AACA;;AAsCA;AAiBA;AACA;AAEA;AAGA;;AAQA;AAGA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AACA;;AAEA;AAKA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AAAA;AACA;;AAcA;AAKA;AAGA;AAAA;AAKA;;AAEA;AAGA;;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AADA;AADA;AAKA;;AAWA;AAKA;AACA;AAEA;AACA;AACA;AAFA;AAKA;AACA;AACA;AADA;AAGA;AACA;AACA;;AAQA;AAKA;;AAEA;AACA;AACA;;AAEA;AAMA;AACA;;AAWA;AAKA;AAEA;AAAA;;AACA;AACA;AADA;;AAIA;AACA;AACA;;AACA;AAEA;AAFA;AAIA;AACA;AACA;;AAWA;AAKA;AAEA;AAIA;;AAAA;AAGA;AACA;AAAA;AAAA;AAHA;AADA;AASA;;AAEA;AACA;AACA;;AAEA;AACA;;AA6BA;AAYA;AACA;;AAGA;AACA;AACA;;AAEA;AAEA;AAGA;;AA6BA;AAYA;AAGA;;AA6BA;AAcA;AACA;AAKA;AACA;;AA6BA;AAcA;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAIA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAGA;AACA;AACA;;;AAGA;;AAKA;AACA;AACA;;AAIA;AACA;AAKA;AACA;;AAEA;AACA;;AAEA;AAIA;;AAGA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AAGA;AACA;AACA;;;AAGA;;AAKA;AACA;AACA;;AAIA;AACA;AAKA;AACA;;AAEA;AACA;;AAEA;AAuBA;AACA;AAOA;;AAEA;AAEA;AACA;AACA;AAJA;;AAOA;AACA;AAIA;;;AAGA;AACA;AAEA;;AACA;AACA;AACA;;AAEA;AAOA;;AAEA;AAGA;AACA;AACA;;AACA;AAEA;AACA;AACA;AAJA;AAMA;;AAEA;AACA;AACA;AACA;;AA/tBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBA;AAoCA;AAUA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAKA;;AAEA;AACA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAUA;AACA;AAEA;;AAEA;AAIA;AAKA;;AAEA;AACA;AACA;AACA;AACA;AAHA;AAKA;;AAEA;AAIA;AACA;;;AAGA;AACA;AACA;;AAEA;AAEA;;AAGA;AASA;AACA;;;AAGA;;AAGA;AAMA;AACA;;AAEA;;AAGA;AAMA;AACA;AACA;;AAEA;AASA;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;AADA;AAWA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAFA;AAMA;AAEA;AAAA;AAAA;AAFA;AAIA;;AAEA;AASA;AAEA;AAGA;AAEA;AACA;;AAEA;AAEA;;AACA;AAEA;AAFA;AAIA;AACA;AACA;AACA;;AAEA;AAGA;AACA;;AAGA;;AAKA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AAKA;AACA;;AAEA;AAMA;;AACA;AAEA;AACA;AACA;AACA;AAHA;AAKA;;AAEA;AAAA;;AACA;AAGA;;AAEA;AACA;AAEA;;AAEA;AAMA;AACA;;AAEA;AACA;AAIA;AACA;AANA;AAQA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAUA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AAIA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAEA;;AAGA;AACA;;AAGA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;;AAGA;AAMA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AACA;;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;AAGA;AAKA;;AAGA;AAIA;AACA;AACA;;AAIA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AA8BA;AACA;;AAEA;AACA;AAIA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;;AAGA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;;AAKA;AAIA;AACA;;AAEA;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AA9BA;;AAiCA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;;AACA;AACA;AACA;AAAA;;AACA;AACA;AACA;;;AAGA;AACA;AAAA;AAAA;AACA;AADA;AAGA;;;AAGA;AACA;AACA;AACA;AAFA;AAIA;AAvBA;AAyBA;;AAjrBA;;AAorBA;AAIA;AAKA;;AAEA;AAIA;AAKA;;AAEA;AAOA;AACA;AAEA;AACA;;AACA;AACA;;AAEA;AAMA;AAMA;;AAEA;AAIA;AACA;AAGA;;;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;AACA;AACA;AACA;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;ACx0BA;AAIA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AADA;AAGA;AACA;;AAEA;AACA;AACA;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AA/BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACwCA;AACA;AACA;;AAEA;AACA;AAGA;AAEA;AAGA;AACA;AACA;AACA;;AANA;AASA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AALA;;AAOA;AACA;AADA;;AAIA;AACA;AADA;;AAIA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;AASA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AALA;;AAOA;AARA;AAUA;;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAGA;AACA;AADA;AAGA;AACA;;AAEA;AAEA;;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AAIA;;AAKA;AACA;AACA;AACA;AACA;;AAEA;;AAGA;;AAGA;AAEA;AACA;AACA;AACA;;AACA;AANA;AASA;AACA;AACA;AACA;AACA;AAbA;AAhCA;AAgDA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AALA;AAOA;AACA;AARA;AAUA;;;;;;;;;;;;;;;;;;ACxNA;AAGA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AAFA;AAIA;;AAEA;AACA;AACA;;AAEA;AAEA;;AAEA;AAEA;;AA9BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACUA;AAwDA;AAEA;AAEA;AACA;AACA;AAEA;AAIA;AAGA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAQA;AACA;AACA;;AAEA;AACA;AAAA;AAAA;AAAA;AACA;;AAEA;AAAA;AAAA;AACA;AAEA;AAOA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;AACA;AAAA;AAAA;AACA;;AAEA;AACA;AAAA;AAAA;AACA;;AAEA;AAAA;AACA;AAEA;AAQA;AACA;AAAA;AAEA;AAEA;AAQA;AAEA;AAAA;AAGA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AANA;;AASA;AACA;AACA;AACA;AACA;AAHA;AAKA;AACA;AACA;;AAEA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AACA;AAKA;AACA;AACA;AAGA;AAEA;AACA;AACA;;AACA;AACA;AACA;AAEA;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAEA;AACA;AACA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;;;AAGA;;AACA;AACA;AACA;;;AAGA;;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AACA;AAEA;AAIA;AACA;AACA;AADA;AAGA;AACA;AACA;AACA;AACA;;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACzaA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;;AACA;AAIA;AACA;AACA;;AACA;AACA;;AAEA;;;AAGA;;AAEA;AACA;;AAEA;AAAA;AAAA;AACA;;;AAKA;AACA;;AAEA;AACA;AAkBA;;;;AAIA;AAJA;;AAOA;AACA;AACA;;;;;;AAUA;;AAEA;;;;AAIA;;AAGA;;;;;;;;;;;;;;;;;;;;;;;ACvFA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAIA;;AAWA;AACA;AADA;;;AAKA;;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;;AAEA;AACA;AACA;AAEA;;AAIA;;AAEA;AAEA;;;;AAUA;AAJA;;AAsBA;;;;;;;;;;;;;;;;;;;;;;;ACrEA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AAQA;AAmBA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;;;AAgBA;;;;;;;;;AAeA;;;;AAMA;;;;AAMA;;;AAGA;;AAIA;AAQA;AAEA;AAGA;AAKA;;AACA;AAEA;AACA;;AAQA;AACA;AACA;AAAA;;AACA;;;AAIA;AACA;;;AAGA;;;;;AACA;;AAQA;;;AAGA;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA;;AAiCA;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFA;AAKA;;;AACA;AACA;AAEA;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AAKA;;;AAEA;AACA;AAEA;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC0BA;;;;AAgBA;AAEA;;;AAUA;AAEA;;;AAeA;;AAIA;;AAKA;;;;;;AAGA;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;ACCA;;AAaA;AACA;;;;;;;;;;;;;;;;;;;;;;ACxIA;;;;;;;;;;;;;;;;;;ACJA;AAIA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjjBA;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClrEA;;;;;;;;;;;;;;;;;;;;;Ac5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACzgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA;;ACFA;;ACAA;;ACGA;AAEA;AAEA;AACA;AACA;;ACJA;AAEA;AACA;AACA;AACA;;ACVA;;ACIA;;ACFA;AACA;AAGA;AAGA;;ACTA;AACA;AACA;;ACEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;;AChCA;;ACAA;;ACKA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA;AACA;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA;AACA;AAOA;AACA;AAKA;;ACvFA;AAMA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;ACzBA;;ACMA;AAMA;AACA;AAEA;AAEA;AACA;AAGA;AAGA;;AC5BA;;ACEA;AAMA;AACA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;;ACVA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;ACXA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAIA;AAKA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAMA;;ACvGA;;ACIA;AAOA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AAEA;AACA;;ACmGA;;;;;;;;;;;;;;;AAeA;AACA;AAGA;AACA;AAOA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAOA;AAWA;AACA;AACA;AAEA;AAOA;AAEA;AACA;;ACjMA;;ACEA;;ACIA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;;;;;;;;;;;;;;;;;;;;;;;AAuBA;AACA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;ACrLA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA;AACA;;ACvCA;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBA;AACA;AAIA;AACA;AACA;AAeA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AAcA;;AC1IA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AAGA;AACA;AAEA;AACA;AACA;;ACNA;AAMA;AACA;AACA;;ACRA;AASA;AACA;AACA;AACA;AACA;AACA;;ACfA;AAMA;AACA;AACA;AAGA;;ACHA;AAKA;AACA;AACA;AACA;AACA;;ACnBA;;ACEA;;ACFA;;ACEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;;ACTA;;ACDA;;ACFA;;ACOA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AC7BA;AACA;AACA;AACA;AAEA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAGA;;AClBA;AAKA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AAEA;AACA;AACA;AACA;AACA;;ACoBA;AAOA;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAMA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;ACzRA;AACA;AACA;;ACJA;;ACQA;AAKA;AACA;AACA;AACA;AACA;AACA;;AChBA;AAKA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;ACfA;AACA;AACA;;ACAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;;ACnBA;AACA;AACA;;ACIA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;;ACnDA;AACA;AACA;AACA;;ACwCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA;AACA;AAOA;AACA;AAMA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAKA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AACA;AACA;AAIA;AAMA;AACA;AAIA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAOA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AAGA;AAEA;AAIA;AACA;AAOA;AAGA;AACA;AACA;AAKA;AACA;AACA;AAIA;AAEA;AAKA;AACA;AACA;AACA;AACA;AAQA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AASA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAGA;AACA;;AC3YA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;;ACAA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;;AC1CA;;ACGA;;ACDA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACFA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAKA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAKA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;;AC3DA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;;ACxBA;AAMA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AAQA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;;AC7CA;AAgBA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;ACtBA;;ACiFA;AACA;AACA;AACA;AACA;AAEA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAKA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AAEA;AACA;AAMA;AACA;AACA;AACA;AAKA;AAEA;AACA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AAUA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAYA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAMA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAKA;AACA;AACA;AAEA;AACA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAGA;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA;AAWA;AAKA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAMA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAGA;AAEA;AACA;AACA;AAAA;AACA;AAIA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAQA;AACA;AAEA;AASA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAOA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AAKA;AAMA;AACA;AAEA;AACA;AAAA;AACA;AASA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AAGA;AAGA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAEA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAQA;AACA;AASA;AACA;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAOA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAIA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1zCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA;AACA;AAOA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAGA;AAQA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACvPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACtkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC1BA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACVA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;;;;;ACAA;;;;;;;;;;;;;;ACAA;AAEA;AAEA","sources":["/Users/ramiel/Desktop/Hobby/feedme/App.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/ActionSheet/ActionGroup.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/ActionSheet/CustomActionSheet.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/ActionSheet/TouchableNativeFeedbackSafe.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/ActionSheet/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/ActionSheetProvider.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/connectActionSheet.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/context.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/react-native-action-sheet/lib/module/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/FontAwesome5.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/Ionicons.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/MaterialIcons.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/FontAwesome5.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/Ionicons.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/MaterialIcons.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/createIconSet.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/createIconSetFromFontAwesome5.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/src/createMultiStyleIconSet.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/create-icon-set.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/create-icon-source-cache.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/ensure-native-module-available.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/icon-button.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/lib/object-utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/tslib/tslib.es6.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/invariant/invariant.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/map-context.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/reduce.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/foreach.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/helper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/GoogleMap.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/isbrowser.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/injectscript.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/prevent-google-fonts.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/make-load-script-url.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/LoadScript.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/useLoadScript.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/LoadScriptNext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/@googlemaps/js-api-loader/dist/index.esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/useJsApiLoader.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/maps/TrafficLayer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/maps/BicyclingLayer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/maps/TransitLayer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/DrawingManager.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Marker.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/@react-google-maps/marker-clusterer/dist/esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/addons/MarkerClusterer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/@react-google-maps/infobox/dist/esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/addons/InfoBox.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/fast-deep-equal/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/kdbush/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/supercluster/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/node_modules/@googlemaps/markerclusterer/dist/index.esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/addons/GoogleMarkerClusterer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/InfoWindow.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Polyline.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Polygon.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Rectangle.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Circle.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/drawing/Data.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/kml/KmlLayer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/dom/dom-helper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/dom/Overlay.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/dom/OverlayView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/utils/noop.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/overlays/GroundOverlay.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/heatmap/HeatmapLayer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/streetview/StreetViewPanorama.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/streetview/StreetViewService.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/directions/DirectionsService.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/directions/DirectionsRenderer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/distance-matrix/DistanceMatrixService.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/places/StandaloneSearchBox.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-google-maps/api/src/components/places/Autocomplete.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-native-community/slider/dist/RNCSliderNativeComponent.web.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-native-community/slider/dist/Slider.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-native-community/slider/dist/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-native/assets-registry/registry.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-native/normalize-color/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/BaseNavigationContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/CurrentRenderContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/EnsureSingleNavigator.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/Group.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationBuilderContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationContainerRefContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationHelpersContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationRouteContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/NavigationStateContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/PreventRemoveContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/PreventRemoveProvider.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/SceneView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/Screen.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/StaticContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/UnhandledActionContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/checkDuplicateRouteNames.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/checkSerializable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/createNavigationContainerRef.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/createNavigatorFactory.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/findFocusedRoute.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/fromEntries.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/getActionFromState.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/getFocusedRouteNameFromRoute.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/getPathFromState.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/getStateFromPath.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/isArrayEqual.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/isRecordEqual.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/types.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useChildListeners.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useCurrentRender.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useDescriptors.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useEventEmitter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useFocusEffect.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useFocusEvents.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useFocusedListenersChildrenAdapter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useIsFocused.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useKeyedChildListeners.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigation.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigationBuilder.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigationCache.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigationContainerRef.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigationHelpers.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useNavigationState.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useOnAction.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useOnGetState.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useOnPreventRemove.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useOnRouteFocus.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useOptionsGetters.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/usePreventRemove.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/usePreventRemoveContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useRegisterNavigator.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useRoute.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useRouteCache.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useScheduleUpdate.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/useSyncState.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/src/validatePathConfig.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/node_modules/query-string/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/node_modules/react-is/cjs/react-is.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/core/node_modules/react-is/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Background.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/Header.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderBackButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderBackContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderBackground.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderHeightContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderShownContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/HeaderTitle.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/getDefaultHeaderHeight.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/getHeaderTitle.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Header/useHeaderHeight.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/MaskedView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/PlatformPressable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/SafeAreaProviderCompat.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/Screen.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/elements/src/getNamedContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/material-top-tabs/src/navigators/createMaterialTopTabNavigator.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/material-top-tabs/src/views/MaterialTopTabBar.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/material-top-tabs/src/views/MaterialTopTabView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native-stack/src/navigators/createNativeStackNavigator.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native-stack/src/views/NativeStackView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/LinkingContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/NavigationContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/ServerContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/createMemoryHistory.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/theming/DefaultTheme.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/theming/ThemeContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/theming/ThemeProvider.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/theming/useTheme.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/useBackButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/useDocumentTitle.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/useLinking.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/native/src/useThenable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/BaseRouter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/CommonActions.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/DrawerRouter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/StackRouter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/TabRouter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@react-navigation/routers/src/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-application/src/Application.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-application/src/ExpoApplication.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/Asset.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/AssetSourceResolver.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/AssetSources.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/AssetUris.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/ImageAssets.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/LocalAssets.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/PlatformUtils.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-asset/src/resolveAssetSource.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/AV.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/AV.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/Audio/AudioAvailability.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/Audio/RecordingConstants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/Audio/Sound.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-av/src/ExponentAV.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/Clipboard.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/Clipboard.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/ClipboardPasteButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/ExpoClipboard.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/ExpoClipboardPasteButton.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/web/ClipboardModule.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/web/Exceptions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-clipboard/src/web/Utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-constants/src/Constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-constants/src/Constants.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-constants/src/ExponentConstants.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-crypto/src/Crypto.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-crypto/src/Crypto.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-crypto/src/ExpoCrypto.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-client/src/DevClient.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-launcher/src/DevLauncher.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-launcher/src/DevLauncherErrorManager.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-launcher/src/WebUnsupportedError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-menu/src/DevMenu.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-menu/src/ExpoDevMenu.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-dev-menu/src/WebUnsupportedError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-device/src/Device.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-device/src/Device.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-device/src/ExpoDevice.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-font/src/ExpoFontLoader.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-font/src/Font.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-font/src/Font.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-font/src/FontLoader.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-haptics/src/ExpoHaptics.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-haptics/src/Haptics.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-haptics/src/Haptics.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image-picker/src/ExponentImagePicker.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image-picker/src/ImagePicker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image-picker/src/ImagePicker.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/ExpoImage.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/Image.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/AssetSourceResolver.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/blurhash/base83.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/blurhash/decode.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/blurhash/error.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/blurhash/useBlurhash.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/blurhash/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/resolveAssetSource.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/resolveHashString.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/resolveSources.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/utils/thumbhash/thumbhash.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/web/AnimationManager.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/web/ImageWrapper.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/web/style.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-image/src/web/useSourceSelection.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-keep-awake/src/ExpoKeepAwake.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-keep-awake/src/KeepAwake.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-keep-awake/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linear-gradient/src/LinearGradient.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linear-gradient/src/NativeLinearGradient.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linear-gradient/src/normalizeColor.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/src/ExpoLinking.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/src/Linking.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/src/Linking.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/src/Schemes.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/node_modules/qs/lib/formats.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/node_modules/qs/lib/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/node_modules/qs/lib/parse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/node_modules/qs/lib/stringify.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-linking/node_modules/qs/lib/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-localization/src/ExpoLocalization.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-localization/src/Localization.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-localization/src/Localization.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/ExpoLocation.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/GeolocationPolyfill.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/Location.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/Location.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/LocationEventEmitter.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-location/src/LocationSubscribers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-mail-composer/src/ExpoMailComposer.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-mail-composer/src/MailComposer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-mail-composer/src/MailComposer.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/EventEmitter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/NativeModulesProxy.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/NativeViewManagerAdapter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/PermissionsHook.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/PermissionsInterface.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/Platform.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/SyntheticPlatformEmitter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/TypedArrays.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/deprecate.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/environment/browser.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/errors/CodedError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/errors/UnavailabilityError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/requireNativeModule.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/sweet/NativeErrorManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-modules-core/src/sweet/setUpErrorManager.fx.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/BadgeModule.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/NotificationChannelManager.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/NotificationPermissions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/NotificationPermissionsModule.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/NotificationsHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/NotificationsHandlerModule.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/getDevicePushTokenAsync.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/setBadgeCountAsync.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-notifications/src/setNotificationChannelAsync.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-splash-screen/src/ExpoSplashScreen.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-splash-screen/src/SplashScreen.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-splash-screen/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-store-review/src/ExpoStoreReview.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-store-review/src/StoreReview.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-web-browser/src/ExpoWebBrowser.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-web-browser/src/WebBrowser.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo-web-browser/src/WebBrowser.types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/Expo.fx.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/environment/DevLoadingView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/environment/DevLoadingViewNativeModule.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/environment/getInitialSafeArea.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/launch/registerRootComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/src/launch/withDevTools.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/CodeField.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/CodeField.styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/Cursor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/MaskSymbol.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/useBlurOnFulfill.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/useClearByFocusCell.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/useEvent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/useFocusState.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/useTimer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-confirmation-code-field/esm/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/DatePickerAndroid.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/DatePickerIOS.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/colorToHex.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/modal.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/propChecker.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-date-picker/src/propTypes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/internal/asyncHookWrappers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/internal/devicesWithDynamicIsland.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/internal/devicesWithNotch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/internal/nativeInterface.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/internal/supported-platform-info.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-device-info/lib/module/web/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/CellDecorators.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/CellRendererComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/DraggableFlatList.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/NestableDraggableFlatList.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/NestableScrollContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/PlaceholderItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/RowItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/components/ScrollOffsetListener.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/animatedValueContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/cellContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/draggableFlatListContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/nestableScrollContainerContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/propsContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/context/refContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/hooks/useAutoScroll.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/hooks/useCellTranslate.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/hooks/useNestedAutoScroll.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/hooks/useOnCellActiveAnimation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/hooks/useStableCallback.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-draggable-flatlist/lib/module/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/ActionType.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/Directions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/EnableNewWebImplementation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/GestureHandlerRootViewContext.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/PlatformConstants.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/RNGestureHandlerModule.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/RNRenderer.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/State.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/TouchEventType.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/DrawerLayout.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/GestureButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/GestureComponents.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/GestureHandlerButton.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/GestureHandlerRootView.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/Swipeable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/gestureHandlerRootHOC.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/GenericTouchable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableHighlight.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableNativeFeedback.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableOpacity.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/TouchableWithoutFeedback.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/components/touchables/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/getShadowNodeFromRef.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/FlingGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/ForceTouchGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/LongPressGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/NativeViewGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/PanGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/PinchGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/PressabilityDebugView.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/RotationGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/TapGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/createHandler.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/createNativeWrapper.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestureHandlerCommon.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/GestureDetector.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/eventReceiver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/flingGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/forceTouchGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureComposition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureObjects.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/gestureStateManager.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/longPressGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/manualGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/nativeGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/panGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/pinchGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/reanimatedWrapper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/rotationGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/gestures/tapGesture.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/handlers/handlersRegistry.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/init.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/detectors/RotationGestureDetector.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/detectors/ScaleGestureDetector.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/FlingGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/GestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/LongPressGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/ManualGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/NativeViewGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/PanGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/PinchGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/RotationGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/handlers/TapGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/interfaces.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/CircularBuffer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/EventManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/GestureHandlerOrchestrator.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/InteractionManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/LeastSquareSolver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/NodeManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/PointerEventManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/PointerTracker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/TouchEventManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/tools/VelocityTracker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/DiscreteGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/DraggingGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/Errors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/FlingGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/GestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/IndiscreteGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/LongPressGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/NativeViewGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/NodeManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/PanGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/PinchGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/PressGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/RotationGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/TapGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-gesture-handler/lib/module/web_hammer/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/ball-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/ball-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/bar-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/bar-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/dot-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/dot-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/material-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/material-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/pacman-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/pacman-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/pulse-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/pulse-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/skype-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/skype-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/ui-activity-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/ui-activity-indicator/styles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/wave-indicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-indicators/src/components/wave-indicator/styles.js","/Users/ramiel/Desktop/Hobby/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/createMMKV.mock.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/MMKV.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/PlatformChecker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/createMMKV.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/createTextEncoder.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/hooks.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-mmkv/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/polyfills.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/helpers.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/react-is/cjs/react-is.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/react-is/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/object-assign/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/prop-types/lib/ReactPropTypesSecret.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/prop-types/lib/has.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/prop-types/checkPropTypes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/prop-types/factoryWithTypeCheckers.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/node_modules/prop-types/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/with-context.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/menuRegistry.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/constants.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/Backdrop.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/logger.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/MenuPlaceholder.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/renderers/MenuOutside.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/MenuProvider.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/MenuOptions.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/MenuTrigger.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/renderers/ContextMenu.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/Menu.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/MenuOption.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/renderers/NotAnimatedContextMenu.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/renderers/SlideInMenu.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/renderers/Popover.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-popup-menu/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/Carousel.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/LazyView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/ScrollViewGesture.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/computeNewIndexWhenDataChanges.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useAutoPlay.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useCarouselController.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useCheckMounted.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useCommonVariables.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useInitProps.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useLayoutConfig.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useOffsetX.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useOnProgressChange.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/usePropsErrorBoundary.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/hooks/useVisibleRanges.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/layouts/BaseLayout.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/layouts/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/layouts/normal.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/layouts/parallax.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/layouts/stack.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/store/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/utils/computedWithAutoFillData.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/utils/dealWithAnimation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/utils/handlerOffsetDirection.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated-carousel/lib/commonjs/utils/log.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/Animated.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/ConfigHelper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/createAnimatedComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/index.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/Bezier.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/Colors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/Easing.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/NativeMethods.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/NativeReanimated/NativeReanimated.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/NativeReanimated/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/PlatformChecker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/PropAdapters.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/PropsRegistry.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/Sensor.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/SensorContainer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/UpdateProps.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/ViewDescriptorsSet.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/WorkletEventHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/decay.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/delay.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/repeat.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/sequence.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/spring.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/springUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/styleAnimation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/timing.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/transformationMatrix/matrixUtils.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/animation/util.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/commonTypes.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/component/FlatList.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/component/Image.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/component/ScrollView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/component/Text.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/component/View.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/core.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/errors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/fabricUtils.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/frameCallback/FrameCallbackRegistryJS.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/Hooks.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedGestureHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedKeyboard.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedReaction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedRef.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedScrollHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedSensor.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useAnimatedStyle.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useDerivedValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useFrameCallback.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useReducedMotion.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useScrollViewOffset.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/useSharedValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/hook/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/initializers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/interpolateColor.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/interpolation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/js-reanimated/JSReanimated.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/js-reanimated/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/animationBuilder/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Fade.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Flip.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultAnimations/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/defaultTransitions/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/sharedTransitions/ProgressTransitionManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/mappers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/mutables.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/platform-specific/RNRenderer.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/platform-specific/checkCppVersion.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/platform-specific/jsVersion.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/pluginUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/shareables.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/threads.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/reanimated2/valueSetter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-reanimated/lib/module/setAndForwardRef.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-safe-area-context/src/InitialWindow.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-safe-area-context/src/NativeSafeAreaProvider.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-safe-area-context/src/SafeAreaContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-safe-area-context/src/SafeAreaView.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/Pager.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/PanResponderAdapter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/PlatformPressable.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/SceneMap.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/SceneView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/TabBar.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/TabBarIndicator.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/TabBarItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/TabView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-tab-view/lib/module/useAnimatedValue.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/AccessibilityInfo/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/ActivityIndicator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Alert/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Animated/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/AppRegistry/AppContainer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/AppRegistry/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/AppRegistry/renderApplication.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/AppState/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Appearance/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/BackHandler/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Button/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/CheckBox/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Clipboard/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/DeviceEventEmitter/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Dimensions/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Easing/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/FlatList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/I18nManager/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Image/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/ImageBackground/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/InteractionManager/TaskQueue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/InteractionManager/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Keyboard/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/KeyboardAvoidingView/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/LayoutAnimation/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Linking/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/LogBox/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Modal/ModalAnimation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Modal/ModalContent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Modal/ModalFocusTrap.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Modal/ModalPortal.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Modal/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/NativeEventEmitter/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/NativeModules/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/PanResponder/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Picker/PickerItem.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Picker/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/PixelRatio/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Platform/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Pressable/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/ProgressBar/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/RefreshControl/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/SafeAreaView/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/ScrollView/ScrollViewBase.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/ScrollView/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/SectionList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Share/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StatusBar/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/hash.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/hyphenateStyleName.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeColor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeValueWithProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/compiler/unitlessNumbers.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/dom/createCSSStyleSheet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/dom/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/preprocess.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/StyleSheet/validate.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Switch/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Text/TextAncestorContext.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Text/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/TextInput/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Touchable/BoundingDimensions.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Touchable/Position.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Touchable/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/TouchableHighlight/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/TouchableNativeFeedback/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/TouchableOpacity/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/TouchableWithoutFeedback/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/UIManager/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/Vibration/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/View/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/VirtualizedList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/YellowBox/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/createElement/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/findNodeHandle/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/processColor/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/render/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/unmountComponentAtNode/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/useColorScheme/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/useLocaleContext/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/exports/useWindowDimensions/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/AccessibilityUtil/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/AccessibilityUtil/isDisabled.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAccessibilityComponent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAriaRole.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/AssetRegistry/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/ImageLoader/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/TextInputState/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/UnimplementedView/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/addEventListener/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/canUseDom/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/createDOMProps/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/dismissKeyboard/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/forwardedProps/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/getBoundingClientRect/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/isSelectionValid/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/isWebColor/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/mergeRefs/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/modality/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/multiplyStyleLengthValue/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/pick/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/prefixStyles/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/prefixStyles/static.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/requestIdleCallback/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/setValueForStyles/dangerousStyleValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/setValueForStyles/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/unitlessNumbers/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useElementLayout/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useEvent/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useHover/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useLayoutEffect/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useLocale/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useLocale/isLocaleRTL.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useMergeRefs/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/usePlatformMethods/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/usePressEvents/PressResponder.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/usePressEvents/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderEventTypes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderSystem.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/ResponderTouchHistoryStore.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/createResponderEvent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useResponderEvents/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/useStable/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/modules/warnOnce/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/Animated.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedEvent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedImplementation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedMock.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/Easing.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedHelper.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedModule.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedTurboModule.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/SpringConfig.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/Animation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/DecayAnimation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/SpringAnimation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/animations/TimingAnimation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/bezier.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedFlatList.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedImage.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedScrollView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedSectionList.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedText.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/createAnimatedComponent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedAddition.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedColor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDiffClamp.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDivision.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedInterpolation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedModulo.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedMultiplication.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedNode.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedStyle.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedSubtraction.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTracking.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTransform.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValueXY.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedWithChildren.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Animated/useAnimatedProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Batchinator/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/EventEmitter/NativeEventEmitter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/FillRateHelper/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/FlatList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/LayoutAnimation/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/PanResponder/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/PooledClass/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/ReactNative/ReactNativeFeatureFlags.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/SectionList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/TouchHistoryMath/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/TurboModule/TurboModuleRegistry.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Utilities/Platform.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Utilities/clamp.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Utilities/useMergeRefs.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/Utilities/useRefEffect.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/ViewabilityHelper/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizeUtils/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/CellRenderMask.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/ChildListCollection.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/StateSafePureComponent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListContext.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/VirtualizedSectionList/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/deepDiffer/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/infoLog/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/dist/vendor/react-native/vendor/emitter/EventEmitter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native-web/node_modules/memoize-one/dist/memoize-one.esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-native/Libraries/Image/AssetRegistry.js","/Users/ramiel/Desktop/Hobby/feedme/src/basket/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/state/basketStore.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/types.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBasketProductExtraPrice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBasketProductQuantity.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBranchBasket.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBranchBasketPrice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBranchBasketProduct.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getBranchBasketProducts.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getProductQuantity.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/getTotalNumberOfProductsInBranchBasket.ts","/Users/ramiel/Desktop/Hobby/feedme/src/basket/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/ActionButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ActivityIndicator.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/AddressSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/AnimatedBodyText.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/AnimatedLock.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ApplicationActivityIndicator.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/BaseFab.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/BodyText.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/BottomSheet.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/BottomSheet/components/Handle.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/BottomSheet/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/BranchRatings.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Checkmark.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ChevronRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput/components/DateInputContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput/utils/datifyString.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/DateInput/utils/stringifyDate.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/DraggableScrollView.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/DraggableScrollView/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/DraggableScrollView/hooks/useDraggableScroll.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/ErrorView.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ExpandedImage.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/FlashingBorderBox.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/FloatingActionButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/HeaderIconContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Input.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/InputRadio.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/LoaderOverlay.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/LoadingView.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/NoContent.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Notice.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/OneTimePasswordInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/PaginatedCarousel.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Pagination.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/PasswordInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/PhoneInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Popover.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/PriceAndPriceOld.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/QueryStatusChecker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/RButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/RadioIcon.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/RatingBox.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ReloadButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/ResendButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Ribbon.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Row.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Screen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SearchBar.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Section.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SegmentControl/ActiveOverlay.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SegmentControl/SegmentControl.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SegmentControl/SegmentControlItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SegmentControl/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/SegmentControl/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/components/Seperator.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/StatusChecker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Stepper.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/SwitchInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Table.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/TextArea.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/TextInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Toast.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/Touchable.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/WarningAlert.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/colors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/config.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/dimensions.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/keys.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/statusCodes.ts","/Users/ramiel/Desktop/Hobby/feedme/src/constants/styles.ts","/Users/ramiel/Desktop/Hobby/feedme/src/contexts/event/Provider.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/contexts/event/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/contexts/event/useEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/src/contexts/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/components/AddressInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/components/GlowingText.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/components/RegionInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/constants/models.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/constants/styles.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/AddAddress.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/AddressItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/AddressItemSeperator.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/AddressList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/AllRegions.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/EditAddressesHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/AddressListScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/CreateAddressScreen/CreateAddressForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/CreateAddressScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/CreateAddressScreen/useCreateAddressQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/ActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/LocationControl.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/Map.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/MapCenterMarker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/MapTypeControl.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/ZoomControl.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/MapScreen/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/Accordion.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/AccordionChild.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/AccordionParent.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/ExpandableSection.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/FindMyLocation.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/RegionAccordion.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/SelectRegionScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/UpdateAddressScreen/UpdateAddressForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/UpdateAddressScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/UpdateAddressScreen/useUpdateAddressQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/state/addressListSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/state/addressListSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/utils/getSelectedAddressItemIndices.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/address/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/hooks/useHeaderDismissAuthScreensIcon.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/ForgotPasswordScreen/ActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/ForgotPasswordScreen/ForgotPassworHeader.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/ForgotPasswordScreen/ForgotPasswordForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/ForgotPasswordScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/LoginScreen/ForgotPasswordButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/LoginScreen/LoginForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/LoginScreen/LoginFormInputs.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/LoginScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpConfirmScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpScreen/AgreeToTerms.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpScreen/InputWithToolTip.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpScreen/SignUpForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpScreen/SignupHeader.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/SignUpScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/auth/utils/popAuthScreens.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchInfo.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchProductDetails.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchSummaryListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesProductsImagesHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesView.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesView/components/BranchesList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesView/components/BranchesList/components/BranchesListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesView/components/BranchesList/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/BranchesView/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/CartFAB.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/CartFAB/components/Price.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/CartFAB/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/Favorite.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/components/GridProduct.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/components/Stepper.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/helpers/ProductsGridListContext.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ProductsGridList/helpers/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/ShareHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/hooks/useBranch.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/routes/BranchTabs.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/routes/BranchesTabs.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/routes/FavoritesTabs.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/routes/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/routes/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/BranchBasket.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/BranchBasket/components/BasketSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/BranchBasket/components/BranchInfo.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/BranchBasket/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/HeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/hooks/useBasketsQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/hooks/useBasketsQuery/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BasketsScreen/hooks/useBasketsQuery/utils/selectBranchBasketsSummary.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchCategoriesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchOrderTimesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductPreviewScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductScreen/AddToCartFAB.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductScreen/Footer.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductScreen/HeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductsScreen/BranchProductsList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductsScreen/BranchProductsListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchProductsScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchReviewsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchReviewsScreen/components/BranchReview.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchReviewsScreen/components/ReviewsHeader.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchReviewsScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/components/BranchActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/components/BranchSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/components/HeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/contexts/BranchIdContext.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/contexts/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/hooks/useBranchQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchScreen/hooks/useNavigateToProduct.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesProductsImagesScreen/BranchProductImage.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesProductsImagesScreen/ProductsSearch.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesProductsImagesScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesScreen/hooks/useBranchesQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesScreen/hooks/useFilteredBranches.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/BranchesScreen/hooks/useSearchedBranches.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/components/CategoryClassList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/components/CategoryList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/components/HeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/components/ProductsList.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsScreen/hooks/useOffset.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsSearchScreen/Search.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsSearchScreen/SearchResult.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/CategorizedBranchProductsSearchScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/EditBasketProductScreen/ConfirmFab.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/EditBasketProductScreen/EditBasketProductFooter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/EditBasketProductScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FavoriteBranchesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FavoriteBranchesScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FavoriteBranchesScreen/hooks/useFavoriteBranchesQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FavoriteProductsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/Filter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/MinimumPriceFilter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/PaymentTypeFilter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/ServicesFilter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/SortFilter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/FilterBranchesScreen/queries.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/ProductsSearchHistoryScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/SearchedProductsScreen/SearchedProduct.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/SearchedProductsScreen/SortSearchedProductsHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/SearchedProductsScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/branch/branchSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/branch/branchSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/branch/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/product/checkIfRequiredProductFieldsFilled.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/product/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/product/selectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/state/product/slice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/stores/branchesFilter.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/stores/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/branch/utils/sortBranches.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/components/SelectorItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/components/SelectorItemSeperator.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/screens/MultipleItemSelectorScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/screens/SingleItemSelectorScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/control/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/HomeScreen/CallHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/HomeScreen/HomeActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/HomeScreen/HomeCarousel.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/HomeScreen/MenuHeaderButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/HomeScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/MenuScreen/ServerSwitch.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/MenuScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/dashboard/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/layout/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/layout/screens/ImageDisplayScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/layout/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/screens/AboutScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/screens/TermsAndConditionsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/screens/TermsAndConditionsScreen/components/TermsAndConditionsView.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/screens/TermsAndConditionsScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/legal/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/Chat.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/FloatingMessageDate.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/ListFooter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/Message.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/MessageDate.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/MessageInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/MessageInput/components/TextInput.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/MessageInput/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/ScrollDown.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/SendMessageIcon.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/components/HeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/components/HeaderRight/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/components/HeaderRight/hooks/useCustomerUsername.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/useChatQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/ChatScreen/useResetMessageCount.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/state/liveSupportSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/liveSupport/state/liveSupportSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/notification/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/notification/screens/NotificationHistoryScreen/NotificationItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/notification/screens/NotificationHistoryScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/notification/screens/NotificationOptionsScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/notification/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/screens/OfferDetailsScreen/OfferCarousel.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/screens/OfferDetailsScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/screens/OffersScreen/OfferListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/screens/OffersScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/offer/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/components/CreditCardType.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/components/Note.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/components/ProductSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useCancelOrder.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useCancelOrderMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useCreditCards.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useOnOrderSubmitted.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useRepeatOrder.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useRepeatOrderMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useRepeatOrderMutation/utils/createBasketProductsFromPreviousOrder.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/hooks/useRepeatOrderMutation/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/CardNumberInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/CcvInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/ExpiryDateInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/Input.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/InputError.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/InputTitle.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/AddCreditCardScreen/hooks/usePaymentCardInsertMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/BasketScreen/BasketFooter.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/BasketScreen/BasketHeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/BasketScreen/BasketListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/BasketScreen/BasketNextButton.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/BasketScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/CreditCardHelpScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/CreditCardsListScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/ConfirmOrder.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/ConfirmOrder/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/ConfirmOrder/hooks/useOnlinePaymentMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/ConfirmOrder/hooks/useOrderSubmitMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/ConfirmOrderSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/TotalPrice.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/UseBonus.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderConfirmScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderDetailsScreen/OrderDetailsActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderDetailsScreen/OrderDetailsHeader.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderDetailsScreen/OrderReview.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderDetailsScreen/OrderSummary.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderDetailsScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/CheckoutCouponCode.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/ConfirmOrderPreferences.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/CreditCardPicker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/DeliveryNotes.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/LocationWarning.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/OrderDatePicker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/OrderPaymentPicker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/OrderTimePicker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/OrderTimeSwitch.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/Picker.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderPreferencesScreen/hooks/useOrderPreferencesQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/BranchInfo.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/OrderComment.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/OrderRating.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/OrderReviewHeaderRight.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/UploadedImage.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderReviewScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrderSubmittedScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrdersScreen/OrderListItem.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/OrdersScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen/components/PaymentWebview.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen/components/PaymentWebview/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen/components/PaymentWebview/utils/createHtml.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen/components/PaymentWebview/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/PaymentWebviewScreen/components/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/state/orderConfirmSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/state/orderConfirmSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/state/orderReviewSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/state/orderReviewSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/store/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/store/useCreditCardStore.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/chooseFromAlbum.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/constructPaymentScreenParams.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/formatLocalCreditCard.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/isLocalCard.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/order/utils/takePicture.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/BonusesScreen/AvaialbleBonus.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/BonusesScreen/BonusHistoryTable.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/BonusesScreen/CouponInput.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/BonusesScreen/RemainingBonusesTable.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/BonusesScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ChangePasswordScreen/ChangePasswordActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ChangePasswordScreen/ChangePasswordForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ChangePasswordScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ProfileScreen/ProfileActionButtons.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ProfileScreen/ProfileForm.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ProfileScreen/PromotionCode.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ProfileScreen/index.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/ProfileUpdateConfirmScreen.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/features/profile/screens/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useActionOnWakeUp.ts","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useGridFlashlistDimensions.ts","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useHeaderDismissIcon.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useKeyboardManager.ts","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useNewOrder.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/hooks/useWindowSize.ts","/Users/ramiel/Desktop/Hobby/feedme/src/language/config.ts","/Users/ramiel/Desktop/Hobby/feedme/src/language/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/language/plugins/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/language/plugins/languageDetector.ts","/Users/ramiel/Desktop/Hobby/feedme/src/language/resources/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/models/error/InternetConnectionError.ts","/Users/ramiel/Desktop/Hobby/feedme/src/models/error/ServerError.ts","/Users/ramiel/Desktop/Hobby/feedme/src/models/error/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/models/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/constants/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/constants/queryClient.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/endpoints.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/hooks/useHomeQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/types.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/utils/errorHandlers.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/utils/getHomeQueryCache.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/utils/getUserAddressId.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/utils/http_post.ts","/Users/ramiel/Desktop/Hobby/feedme/src/network/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/hooks/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/hooks/useClearNotificationBadge.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/hooks/useNotificationHandlers.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/hooks/useNotifications.web.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/utils/alertIfNotificationsAreDisabled.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/utils/setupAndroidNotificationChannels.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/utils/setupInAppNotifications.ts","/Users/ramiel/Desktop/Hobby/feedme/src/notifications/utils/storePushNotificationToken.ts","/Users/ramiel/Desktop/Hobby/feedme/src/routes/Navigation.tsx","/Users/ramiel/Desktop/Hobby/feedme/src/routes/helpers.ts","/Users/ramiel/Desktop/Hobby/feedme/src/routes/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/routes/types.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/hooks.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/loading/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/loading/selectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/loading/slice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-info/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-info/selectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-info/slice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-location/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-location/userLocationSelectors.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/modules/user-location/userLocationSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/store.ts","/Users/ramiel/Desktop/Hobby/feedme/src/state/storeListeners.ts","/Users/ramiel/Desktop/Hobby/feedme/src/storage/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/storage/local-storage/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/Alert.web.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/alertToEnableLocation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/confirmAction.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/convertImageUrlToThumbnailUrl.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/deviceId.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/flattenObject.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/formatPhoneNumber.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/generateRandomId.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/getColumnsCountFromWidth.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/getUserLocation.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/goBackToScreen.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/index.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/logZustandActionToSentry.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/normalizeArray.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/normalizeArrayBy.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/openDeviceSettings.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/rateApp.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/search.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/sentry.web.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/sessionId.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/sleep.ts","/Users/ramiel/Desktop/Hobby/feedme/src/utils/warn.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/Calendar.css","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/assign.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/utils-consts.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/prefixed.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/browser.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/touchactionjs/get-touchaction-props.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/touchactionjs/touchaction-Consts.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/input-consts.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/each.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/bool-or-fn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/in-str.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/touchactionjs/clean-touch-actions.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/touchactionjs/touchaction-constructor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/has-parent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-center.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/simple-clone-input-data.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-distance.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-angle.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-direction.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/compute-delta-xy.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-velocity.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-scale.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/get-rotation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/compute-interval-input-data.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/compute-input-data.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/input-handler.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/split-str.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/add-event-listeners.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/remove-event-listeners.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/get-window-for-element.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/input-constructor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/in-array.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/input/pointerevent.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/to-array.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/unique-array.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/input/touch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/input/mouse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/input/touchmouse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/inputjs/create-input-instance.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/invoke-array-arg.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizerjs/recognizer-consts.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/unique-id.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizerjs/get-recognizer-by-name-if-manager.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizerjs/state-str.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizerjs/recognizer-constructor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/tap.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/attribute.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizerjs/direction-str.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/pan.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/swipe.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/pinch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/rotate.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/recognizers/press.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/defaults.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/manager.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/input/singletouch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/deprecate.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/extend.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/merge.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/inherit.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/utils/bind-fn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/hammer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@egjs/hammerjs/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/hook/context.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/hook/provider.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/hook/useToast.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/toast-container.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/toast.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-toast-notifications/lib/module/utils/useDimensions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@itsramiel/react-native-web-lottie/dist/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/configureStore.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/isPlainObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/createAction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/createReducer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/mapBuilders.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/createSlice.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/entity_state.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/nanoid.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/tsHelpers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/matchers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/AnimatedFlashList.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/FlashList.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/FlashListProps.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/GridLayoutProviderWithProps.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/MasonryFlashList.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/PureComponentWrapper.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/AutoScrollHelper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/JSFPSMonitor.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/roundToDecimalPlaces.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/useBenchmark.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/useBlankAreaTracker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/useDataMultiplier.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/benchmark/useFlatListBenchmark.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/errors/CustomError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/errors/ExceptionList.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/errors/Warnings.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/native/auto-layout/AutoLayoutView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/native/auto-layout/AutoLayoutViewNativeComponent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/native/cell-container/CellContainer.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/native/config/PlatformHelper.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/utils/AverageWindow.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/utils/ContentContainerUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/viewability/ViewabilityHelper.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/src/viewability/ViewabilityManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@shopify/flash-list/node_modules/tslib/tslib.es6.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/badgin/build/index.es.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/base64-js/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/call-bind/callBound.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/call-bind/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/card-number.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/cardholder-name.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/cvv.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/expiration-date.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/expiration-month.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/expiration-year.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/lib/is-array.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/lib/parse-date.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/luhn-10.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/card-validator/dist/postal-code.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color-convert/conversions.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color-convert/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color-convert/route.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color-name/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color-string/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/color/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/compare-urls/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/compare-versions/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/add-matching-cards-to-results.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/card-types.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/clone.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/find-best-match.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/is-valid-input-type.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/credit-card-type/dist/lib/matches.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/assignStyle.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/camelCaseProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/cssifyDeclaration.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/cssifyObject.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/hyphenateProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/isPrefixedProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/isPrefixedValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/isUnitlessProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/normalizeProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/resolveArrayValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/unprefixProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/es/unprefixValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/lib/hyphenateProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-in-js-utils/lib/isPrefixedValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-loader/dist/runtime/api.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/css-loader/dist/runtime/sourceMaps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/decode-uri-component/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/escape-string-regexp/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/eventemitter3/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/fast-deep-equal/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/fbjs/lib/emptyFunction.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/fbjs/lib/invariant.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/fbjs/lib/warning.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/filter-obj/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/fontfaceobserver/fontfaceobserver.standalone.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/function-bind/implementation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/function-bind/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/get-intrinsic/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/has-proto/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/has-symbols/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/has-symbols/shams.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/has/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/hoist-non-react-statics/node_modules/react-is/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/html-parse-stringify/src/parse-tag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/html-parse-stringify/src/parse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/html-parse-stringify/src/stringify.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/html-parse-stringify/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/hyphenate-style-name/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/createPrefixer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/backgroundClip.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/crossFade.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/cursor.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/filter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/imageSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/logical.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/position.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/sizing.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/plugins/transition.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/utils/addNewValuesOnly.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/utils/capitalizeString.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/utils/isObject.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/utils/prefixProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/inline-style-prefixer/lib/utils/prefixValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/invariant/browser.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/is-arrayish/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash.debounce/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash.memoize/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_DataView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Hash.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_ListCache.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Map.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_MapCache.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Promise.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Set.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_SetCache.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Stack.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Symbol.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_Uint8Array.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_WeakMap.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_arrayFilter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_arrayLikeKeys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_arrayMap.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_arrayPush.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_arraySome.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_assignValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_assocIndexOf.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseAssignValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseGet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseGetAllKeys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseGetTag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseHasIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsArguments.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsEqual.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsEqualDeep.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsMatch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsNative.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIsTypedArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseIteratee.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseKeys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseKeysIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseMatches.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseMatchesProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_basePickBy.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_basePropertyDeep.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseTimes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseToString.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_baseUnary.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_cacheHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_castPath.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_coreJsData.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_defineProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_equalArrays.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_equalByTag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_equalObjects.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_freeGlobal.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getAllKeys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getAllKeysIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getMapData.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getMatchData.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getNative.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getPrototype.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getRawTag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getSymbols.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getSymbolsIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getTag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_getValue.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hasPath.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hashClear.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hashDelete.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hashGet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hashHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_hashSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isIndex.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isKey.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isKeyable.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isMasked.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isPrototype.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_isStrictComparable.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_listCacheClear.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_listCacheDelete.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_listCacheGet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_listCacheHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_listCacheSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapCacheClear.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapCacheDelete.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapCacheGet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapCacheHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapCacheSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_mapToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_matchesStrictComparable.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_memoizeCapped.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_nativeCreate.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_nativeKeys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_nativeKeysIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_nodeUtil.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_objectToString.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_overArg.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_root.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_setCacheAdd.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_setCacheHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_setToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stackClear.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stackDelete.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stackGet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stackHas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stackSet.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_stringToPath.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_toKey.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/_toSource.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/eq.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/get.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/hasIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/identity.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isArguments.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isArrayLike.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isBuffer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isEqual.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isFunction.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isLength.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isObject.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isObjectLike.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isSymbol.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isTypedArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/isUndefined.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/keys.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/keysIn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/lodash.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/memoize.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/negate.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/omitBy.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/pickBy.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/property.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/stubArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/stubFalse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lodash/toString.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/lottie-web/build/player/lottie.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/normalize-url/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/normalize-url/node_modules/query-string/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/normalize-url/node_modules/strict-uri-encode/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/nullthrows/nullthrows.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/object-assign/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/object-inspect/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/path-browserify/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/postcss-value-parser/lib/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/postcss-value-parser/lib/parse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/postcss-value-parser/lib/stringify.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/postcss-value-parser/lib/unit.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/postcss-value-parser/lib/walk.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prepend-http/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/checkPropTypes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/factoryWithTypeCheckers.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/lib/ReactPropTypesSecret.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/lib/has.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/prop-types/node_modules/react-is/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/punycode/punycode.es6.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/query-string/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/querystringify/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-countdown-hook/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-dom/cjs/react-dom.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-dom/client.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-dom/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-is/cjs/react-is.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-is/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/components/Context.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/components/Provider.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/components/connect.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/invalidArgFactory.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/mapDispatchToProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/mapStateToProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/mergeProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/selectorFactory.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/verifySubselectors.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/connect/wrapMapToProps.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/exports.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/hooks/useDispatch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/hooks/useReduxContext.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/hooks/useSelector.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/hooks/useStore.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/types.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/Subscription.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/batch.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/bindActionCreators.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/isPlainObject.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/reactBatchedUpdates.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/shallowEqual.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/useSyncExternalStore.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/verifyPlainObject.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-redux/es/utils/warning.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react/cjs/react-jsx-runtime.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react/cjs/react.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react/jsx-runtime.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/ItemAnimator.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/ProgressiveListView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/RecyclerListView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/StickyContainer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/ViewabilityTracker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/VirtualRenderer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/constants/Constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/constants/Messages.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/dependencies/ContextProvider.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/dependencies/DataProvider.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/dependencies/GridLayoutProvider.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/dependencies/LayoutProvider.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/exceptions/CustomError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/exceptions/RecyclerListViewExceptions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/layoutmanager/GridLayoutManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/layoutmanager/LayoutManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/scrollcomponent/BaseScrollComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/scrollcomponent/BaseScrollView.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/sticky/StickyFooter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/sticky/StickyHeader.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/sticky/StickyObject.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/core/viewrenderer/BaseViewRenderer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/platform/reactnative/itemanimators/defaultjsanimator/DefaultJSItemAnimator.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/platform/reactnative/scrollcomponent/ScrollComponent.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/platform/reactnative/viewrenderer/ViewRenderer.web.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/platform/web/itemanimators/DefaultWebItemAnimator.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/platform/web/viewrenderer/ViewRenderer.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/utils/AutoScroll.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/utils/BinarySearch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/utils/ComponentCompat.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/utils/RecycleItemPool.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/src/utils/TSCast.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/recyclerlistview/sticky/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/redux-thunk/es/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/redux/es/redux.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/requires-port/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/reselect/es/defaultMemoize.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/reselect/es/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/rtl-detect/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/rtl-detect/lib/rtl-detect.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/scheduler/cjs/scheduler.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/scheduler/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/src/sentry.web.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/src/version.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/backgroundtab.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/browsertracing.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/metrics/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/metrics/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/request.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/router.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/types.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/getCLS.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/getFID.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/getLCP.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/bindReporter.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/generateUniqueID.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/getActivationStart.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/getNavigationEntry.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/getVisibilityWatcher.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/initMetric.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/observe.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry-internal/src/browser/web-vitals/lib/onHidden.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/client.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventbuilder.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/helpers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/breadcrumbs.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/dedupe.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/globalhandlers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/httpcontext.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/linkederrors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integrations/trycatch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/profiling/cache.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/profiling/hubextensions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/profiling/integration.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/profiling/sendProfile.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/profiling/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/sdk.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/stack-parsers.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/transports/fetch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/transports/offline.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/transports/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/transports/xhr.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/userfeedback.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/api.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/baseclient.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/envelope.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/exports.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/hub.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/integration.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/integrations/functiontostring.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/integrations/inboundfilters.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/scope.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/sdk.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/session.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/errors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/hubextensions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/idletransaction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/span.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/trace.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/transaction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/transports/base.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/transports/multiplexed.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/transports/offline.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/utils/hasTracingEnabled.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/utils/prepareEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/version.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/errorboundary.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/profiler.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/reactrouter.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/reactrouterv3.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/reactrouterv6.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/redux.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/types.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/sentry/callbackWrapper.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/ext/tslib/tslib.es6.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/createBreadcrumb.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/timestampToMs.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/addEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/addBreadcrumbEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleSlowClick.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/getAttributesToRecord.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleDom.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleKeyboardEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/dedupePerformanceEntries.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/performanceObserver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/replay-worker/build/npm/esm/worker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/replay-worker/build/npm/esm/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventBuffer/EventBufferArray.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventBuffer/WorkerHandler.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventBuffer/EventBufferCompressionWorker.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventBuffer/EventBufferProxy.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/eventBuffer/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/clearSession.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/isExpired.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/isSessionExpired.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/isSampled.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/saveSession.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/Session.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/createSession.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/fetchSession.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/session/getSession.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/eventUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleAfterSendEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/isRrwebError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/shouldSampleForBufferEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleGlobalEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/createPerformanceSpans.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleHistory.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/shouldFilterRequest.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/addNetworkBreadcrumb.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleFetch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleXhr.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/truncateJson/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/truncateJson/completeJson.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/truncateJson/evaluateJson.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/truncateJson/fixJson.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/networkUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/fetchUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/util/xhrUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleNetworkBreadcrumbs.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/coreHandlers/handleScope.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/addGlobalListeners.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/addMemoryEntry.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/createPerformanceEntries.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/debounce.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/types/rrweb.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/handleRecordingEmit.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/createReplayEnvelope.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/prepareRecordingData.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/prepareReplayEvent.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/sendReplayRequest.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/sendReplay.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/replay.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/getPrivacyOptions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/util/isBrowser.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/src/integration.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/baggage.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/browser.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/clientreport.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/dsn.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/env.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/error.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/instrument.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/is.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/logger.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/memo.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/misc.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/node-stack-trace.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/node.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/normalize.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/object.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/promisebuffer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/ratelimit.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/severity.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/stacktrace.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/string.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/supports.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/syncpromise.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/time.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/tracing.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/url.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/vendor/supportsHistory.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sentry-expo/node_modules/@sentry/src/worldwide.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/side-channel/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/simple-swizzle/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sort-keys/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/sort-keys/node_modules/is-plain-obj/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/split-on-first/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/strict-uri-encode/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/insertBySelector.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/insertStyleElement.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/styleDomAPI.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/style-loader/dist/runtime/styleTagTransform.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/styleq/dist/styleq.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/styleq/dist/transform-localize-style.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/tabbable/src/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/tiny-warning/dist/tiny-warning.esm.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/ts-object-utils/src/Default.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/ts-object-utils/src/ObjectUtil.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/ts-object-utils/src/index.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/ua-parser-js/src/ua-parser.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url-parse/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/punycode/punycode.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/qs/lib/formats.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/qs/lib/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/qs/lib/parse.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/qs/lib/stringify.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/node_modules/qs/lib/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/url/url.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/use-latest-callback/lib/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/use-sync-external-store/shim/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/use-sync-external-store/shim/with-selector.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/uuid/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/uuid/lib/bytesToUuid.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/uuid/lib/rng-browser.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/uuid/v1.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/uuid/v4.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/void-elements/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/warn-once/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/zustand-logger-middleware/dist/index.js","webpack://web/./node_modules/react-calendar/dist/Calendar.css?588c","/Users/ramiel/Desktop/Hobby/feedme/ignored|/Users/ramiel/Desktop/Hobby/feedme/node_modules/object-inspect|./util.inspect","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/arrayLikeToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/arrayWithHoles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/assertThisInitialized.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/classCallCheck.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/createClass.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/defineProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/extends.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/getPrototypeOf.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/inherits.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/interopRequireDefault.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/interopRequireWildcard.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/iterableToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/nonIterableRest.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/nonIterableSpread.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/objectWithoutProperties.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/setPrototypeOf.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/slicedToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/toConsumableArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/toPrimitive.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/toPropertyKey.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/typeof.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/construct.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/createClass.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/defineProperty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/extends.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/get.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/inherits.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/superPropBase.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/toArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/typeof.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/node_modules/@babel/runtime/helpers/esm/extends.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/react/dist/floating-ui.react.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@floating-ui/utils/react/dist/floating-ui.utils.react.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/focusManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/infiniteQueryBehavior.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/infiniteQueryObserver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/logger.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/mutation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/mutationCache.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/mutationObserver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/notifyManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/onlineManager.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/query.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/queryCache.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/queryClient.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/queryObserver.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/removable.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/retryer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/subscribable.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/query-core/src/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/QueryClientProvider.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/QueryErrorResetBoundary.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/errorBoundaryUtils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/isRestoring.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/suspense.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useBaseQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useInfiniteQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useIsFetching.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useIsMutating.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useMutation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useQuery.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/useSyncExternalStore.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@tanstack/react-query/src/utils.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/@wojtekmaj/date-utils/dist/esm/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/clsx/dist/clsx.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/eventemitter3/index.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/get-user-locale/dist/esm/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/i18next/dist/esm/i18next.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/utils/errors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/utils/common.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/utils/plugins.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/core/scope.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/core/finalize.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/core/proxy.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/core/immerClass.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/core/current.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/plugins/es5.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/plugins/patches.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/plugins/mapset.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/plugins/all.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/immer.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/immer/src/utils/env.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/nanoid/index.browser.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/nanoid/non-secure/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/nanoid/url-alphabet/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/Calendar.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/Calendar/Navigation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/CenturyView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/CenturyView/Decade.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/CenturyView/Decades.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/DecadeView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/DecadeView/Year.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/DecadeView/Years.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/Flex.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView/Day.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView/Days.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView/WeekNumber.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView/WeekNumbers.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/MonthView/Weekdays.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/Tile.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/TileGroup.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/YearView.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/YearView/Month.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/YearView/Months.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/shared/const.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/shared/dateFormatter.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/shared/dates.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/shared/propTypes.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-calendar/dist/esm/shared/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isCheckBoxInput.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isDateObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isNullOrUndefined.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getEventValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getNodeParentName.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/isNameInFieldArray.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isPlainObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isWeb.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/cloneObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/compact.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isUndefined.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/get.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/constants.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useFormContext.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getProxyFormState.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isEmptyObject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/shouldRenderFormState.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/convertToArrayPayload.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/shouldSubscribeByName.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useSubscribe.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useFormState.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isString.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/generateWatchOutput.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useWatch.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isKey.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/stringToPath.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/set.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useController.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/controller.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/form.tsx","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/appendErrors.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/focusFieldBy.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/generateId.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getFocusFieldName.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getValidationModes.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/isWatched.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/updateFieldArrayRootError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isBoolean.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isFileInput.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isFunction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isHTMLElement.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isMessage.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isRadioInput.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isRegex.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getCheckboxValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getRadioValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getValidateError.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getValueAndMessage.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/validateField.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/append.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/fillEmptyArray.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/insert.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/move.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/prepend.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/remove.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/swap.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/unset.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/update.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useFieldArray.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/createSubject.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isPrimitive.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/deepEqual.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isMultipleSelect.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/isRadioOrCheckbox.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/live.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/utils/objectHasFunction.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getDirtyFields.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getFieldValueAs.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getFieldValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getResolverOptions.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/getRuleValue.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/hasValidation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/schemaErrorLookup.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/skipValidation.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/unsetEmptyArray.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/logic/createFormControl.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-hook-form/src/useForm.ts","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/I18nextProvider.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/Trans.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/TransWithoutContext.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/Translation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/context.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/defaults.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/i18nInstance.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/index.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/initReactI18next.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/unescape.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/useSSR.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/useTranslation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/utils.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/withSSR.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/react-i18next/dist/es/withTranslation.js","/Users/ramiel/Desktop/Hobby/feedme/node_modules/zustand/esm/index.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/zustand/esm/middleware.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/zustand/esm/middleware/immer.mjs","/Users/ramiel/Desktop/Hobby/feedme/node_modules/zustand/esm/vanilla.mjs","/Users/ramiel/Desktop/Hobby/feedme/webpack/bootstrap","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/amd options","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/compat get default export","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/create fake namespace object","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/define property getters","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/global","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/harmony module decorator","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/hasOwnProperty shorthand","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/make namespace object","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/node module decorator","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/publicPath","/Users/ramiel/Desktop/Hobby/feedme/webpack/runtime/nonce","/Users/ramiel/Desktop/Hobby/feedme/node_modules/expo/AppEntry.js"],"sourcesContent":["import \"expo-dev-client\";\nimport React, { useCallback, useEffect } from \"react\";\nimport * as Sentry from \"sentry-expo\";\nimport { Provider } from \"react-redux\";\nimport * as SplashScreen from \"expo-splash-screen\";\nimport { MenuProvider } from \"react-native-popup-menu\";\nimport KeyboardManager from \"react-native-keyboard-manager\";\nimport { LayoutChangeEvent, LogBox, Platform, StyleSheet } from \"react-native\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport { SafeAreaProvider } from \"react-native-safe-area-context\";\nimport { GestureHandlerRootView } from \"react-native-gesture-handler\";\nimport { ActionSheetProvider } from \"@expo/react-native-action-sheet\";\nimport { ToastProvider } from \"@itsramiel/react-native-toast-notifications\";\n\nimport \"@/language\";\nimport \"@/state/storeListeners\";\nimport { Navigation } from \"@/routes\";\nimport { queryClient } from \"@/network\";\nimport { globalStyles } from \"@/constants\";\nimport { setWindowSize, useActionOnWakeUp } from \"@/hooks\";\nimport { store, useAppSelector } from \"@/state\";\nimport { EventProvider } from \"@/contexts\";\nimport { ApplicationActivityIndicator, LoaderOverlay, Toast } from \"@/components\";\nimport { setupAndroidNotificationChannels, setupInAppNotifications, storePushNotificationToken, useClearNotificationBadge } from \"@/notifications\";\n\nSentry.init({\n dsn: \"https://7db7af6b8b6c4026827647f53829c680@o4504479152013312.ingest.sentry.io/4504479166562304\",\n enableInExpoDevelopment: false,\n});\n\n// Handles keyboard covering input on IOS, android makes it by default\nif (Platform.OS === \"ios\") {\n KeyboardManager.setEnable(false);\n KeyboardManager.setToolbarPreviousNextButtonEnable(true);\n}\n\nLogBox.ignoreLogs([\n // We are passing functions to SelectRegion and AddressList screens which do not\n // have deep linking so it is fine\n \"Non-serializable values were found in the navigation state\",\n]);\n\n// Keep the splash screen visible while we fetch resources\nSplashScreen.preventAutoHideAsync();\nexport default function App() {\n useEffect(() => {\n setupInAppNotifications();\n setupAndroidNotificationChannels();\n storePushNotificationToken();\n }, []);\n useClearNotificationBadge();\n useActionOnWakeUp(storePushNotificationToken);\n\n const onLayout = useCallback((e: LayoutChangeEvent) => {\n const { width, height } = e.nativeEvent.layout;\n setWindowSize(width, height);\n }, []);\n\n return (\n \n \n \n {/* shows toasts inside app */}\n \n {/* allows tooltip inside application */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: {\n backgroundColor: \"#888\",\n opacity: 0.5,\n },\n});\n\nexport const ApplicatonLoaderScreen = () => {\n const isLoading = useAppSelector((state) => state.loading.isLoadingVisible);\n return <>{isLoading && };\n};\n","import * as React from 'react';\nimport {\n AccessibilityInfo,\n findNodeHandle,\n Image,\n Platform,\n ScrollView,\n StyleSheet,\n Text,\n UIManager,\n View,\n} from 'react-native';\n\nimport { ActionSheetOptions } from '../types';\nimport TouchableNativeFeedbackSafe from './TouchableNativeFeedbackSafe';\n\ntype Props = ActionSheetOptions & {\n tintIcons: boolean | null;\n onSelect: (i: number) => boolean;\n startIndex: number;\n length: number;\n};\n\nconst BLACK_54PC_TRANSPARENT = '#0000008a';\nconst BLACK_87PC_TRANSPARENT = '#000000de';\nconst DESTRUCTIVE_COLOR = '#d32f2f';\n\n/**\n * Can be used as a React ref for a component to auto-focus for accessibility on render.\n * @param ref The component to auto-focus\n */\nconst focusViewOnRender = (ref: React.Component | null) => {\n if (ref) {\n const reactTag = findNodeHandle(ref);\n if (reactTag) {\n if (Platform.OS === 'android') {\n // @ts-ignore: sendAccessibilityEvent is missing from @types/react-native\n UIManager.sendAccessibilityEvent(\n reactTag,\n // @ts-ignore: AccessibilityEventTypes is missing from @types/react-native\n UIManager.AccessibilityEventTypes.typeViewFocused\n );\n } else {\n AccessibilityInfo.setAccessibilityFocus(reactTag);\n }\n }\n }\n};\n\nconst isIndexDestructive = (index: number, destructiveIndex?: number | number[]) => {\n if (Array.isArray(destructiveIndex)) {\n return destructiveIndex.includes(index);\n }\n\n return index === destructiveIndex;\n};\n\nconst isIndexDisabled = (index: number, disabledButtonIndices: number[] = []) => {\n return disabledButtonIndices.includes(index);\n};\n\nexport default class ActionGroup extends React.Component {\n static defaultProps = {\n title: null,\n message: null,\n showSeparators: false,\n tintIcons: true,\n textStyle: {},\n };\n\n render() {\n return (\n \n {this._renderTitleContent()}\n {this._renderOptionViews()}\n \n );\n }\n\n _renderRowSeparator = (key: string | number) => {\n return (\n \n );\n };\n\n _renderTitleContent = () => {\n const { title, titleTextStyle, message, messageTextStyle, showSeparators } = this.props;\n\n if (!title && !message) {\n return null;\n }\n\n return (\n \n \n {!!title && {title}}\n {!!message && {message}}\n \n {!!showSeparators && this._renderRowSeparator('title')}\n \n );\n };\n\n _renderIconElement = (iconSource: React.ReactNode | null, color: string) => {\n const { tintIcons } = this.props;\n if (!iconSource) {\n return null;\n }\n\n if (typeof iconSource === 'number') {\n const iconStyle = [styles.icon, { tintColor: tintIcons ? color : undefined }];\n return ;\n } else {\n return {iconSource};\n }\n };\n\n _renderOptionViews = () => {\n const {\n options,\n icons,\n cancelButtonIndex,\n cancelButtonTintColor,\n destructiveButtonIndex,\n disabledButtonIndices,\n destructiveColor = DESTRUCTIVE_COLOR,\n onSelect,\n startIndex,\n length,\n textStyle,\n tintColor,\n autoFocus,\n showSeparators,\n } = this.props;\n const optionViews: React.ReactNode[] = [];\n const nativeFeedbackBackground = TouchableNativeFeedbackSafe.Ripple(\n 'rgba(180, 180, 180, 1)',\n false\n );\n\n for (let i = startIndex; i < startIndex + length; i++) {\n const defaultColor = tintColor\n ? tintColor\n : (textStyle || {}).color || BLACK_87PC_TRANSPARENT;\n const disabled = isIndexDisabled(i, disabledButtonIndices);\n const isCancelButton = i === cancelButtonIndex;\n const color = isIndexDestructive(i, destructiveButtonIndex)\n ? destructiveColor\n : isCancelButton\n ? cancelButtonTintColor || defaultColor\n : defaultColor;\n const iconSource = icons != null ? icons[i] : null;\n\n optionViews.push(\n onSelect(i)}\n style={[styles.button, disabled && styles.disabledButton]}\n accessibilityRole=\"button\"\n accessibilityLabel={options[i]}>\n {this._renderIconElement(iconSource, color)}\n {options[i]}\n \n );\n\n if (showSeparators && i < startIndex + length - 1) {\n optionViews.push(this._renderRowSeparator(i));\n }\n }\n\n return optionViews;\n };\n}\n\nconst styles = StyleSheet.create({\n button: {\n justifyContent: 'flex-start',\n alignItems: 'center',\n flexDirection: 'row',\n height: 56,\n paddingHorizontal: 16,\n },\n disabledButton: {\n opacity: 0.5,\n },\n groupContainer: {\n backgroundColor: '#ffffff',\n overflow: 'hidden',\n },\n icon: {\n width: 24,\n height: 24,\n marginRight: 32,\n justifyContent: 'center',\n },\n message: {\n marginTop: 12,\n fontSize: 14,\n color: BLACK_54PC_TRANSPARENT,\n textAlignVertical: 'center',\n },\n rowSeparator: {\n backgroundColor: '#dddddd',\n height: 1,\n width: '100%',\n },\n text: {\n fontSize: 16,\n color: BLACK_87PC_TRANSPARENT,\n textAlignVertical: 'center',\n },\n title: {\n fontSize: 16,\n color: BLACK_54PC_TRANSPARENT,\n textAlignVertical: 'center',\n },\n titleContainer: {\n alignItems: 'flex-start',\n padding: 16,\n paddingTop: 24,\n },\n});\n","import * as React from 'react';\nimport {\n Animated,\n BackHandler,\n Easing,\n Modal,\n Platform,\n StyleSheet,\n TouchableWithoutFeedback,\n View,\n ViewProps,\n} from 'react-native';\n\nimport { ActionSheetOptions } from '../types';\nimport ActionGroup from './ActionGroup';\n\ninterface State {\n isVisible: boolean;\n isAnimating: boolean;\n options: ActionSheetOptions | null;\n onSelect: ((i: number) => void) | null;\n overlayOpacity: any;\n sheetOpacity: any;\n}\n\nexport interface Props {\n readonly children: React.ReactNode;\n readonly useNativeDriver?: boolean;\n readonly pointerEvents?: ViewProps['pointerEvents'];\n}\n\nconst OPACITY_ANIMATION_IN_TIME = 225;\nconst OPACITY_ANIMATION_OUT_TIME = 195;\nconst EASING_OUT = Easing.bezier(0.25, 0.46, 0.45, 0.94);\nconst EASING_IN = Easing.out(EASING_OUT);\nconst ESCAPE_KEY = 'Escape';\n\n// Has same API as https://facebook.github.io/react-native/docs/actionsheetios.html\nexport default class CustomActionSheet extends React.Component {\n _actionSheetHeight = 360;\n\n state: State = {\n isVisible: false,\n isAnimating: false,\n options: null,\n onSelect: null,\n overlayOpacity: new Animated.Value(0),\n sheetOpacity: new Animated.Value(0),\n };\n\n _deferAfterAnimation?: () => void = undefined;\n\n componentDidMount() {\n if (Platform.OS === 'web') {\n document.addEventListener('keydown', this._handleWebKeyDown);\n }\n }\n\n componentWillUnmount() {\n if (Platform.OS === 'web') {\n document.removeEventListener('keydown', this._handleWebKeyDown);\n }\n }\n\n _handleWebKeyDown = (event: KeyboardEvent): void => {\n if (event.key === ESCAPE_KEY && this.state.isVisible) {\n event.preventDefault();\n this._selectCancelButton();\n }\n };\n\n _setActionSheetHeight = ({ nativeEvent }: any) =>\n (this._actionSheetHeight = nativeEvent.layout.height);\n\n render() {\n const { isVisible, overlayOpacity, options } = this.state;\n const useModal = options ? options.autoFocus || options.useModal === true : false;\n const overlay = isVisible ? (\n \n ) : null;\n\n // While the sheet is visible, hide the rest of the app's content from screen readers.\n const appContent = (\n \n {React.Children.only(this.props.children)}\n \n );\n\n return (\n \n {appContent}\n {isVisible && !useModal && (\n <>\n {overlay}\n {this._renderSheet()}\n \n )}\n {isVisible && useModal && (\n \n {overlay}\n {this._renderSheet()}\n \n )}\n \n );\n }\n\n _renderSheet() {\n const { options, isAnimating, sheetOpacity } = this.state;\n\n if (!options) {\n return null;\n }\n\n const {\n options: optionsArray,\n icons,\n tintIcons,\n destructiveButtonIndex,\n disabledButtonIndices,\n destructiveColor,\n textStyle,\n tintColor,\n title,\n titleTextStyle,\n message,\n messageTextStyle,\n autoFocus,\n showSeparators,\n containerStyle,\n separatorStyle,\n cancelButtonIndex,\n cancelButtonTintColor,\n } = options;\n return (\n \n \n \n \n \n \n \n );\n }\n\n showActionSheetWithOptions = (options: ActionSheetOptions, onSelect: (i: number) => void) => {\n const { isVisible, overlayOpacity, sheetOpacity } = this.state;\n const { useNativeDriver = true } = this.props;\n\n if (isVisible) {\n this._deferAfterAnimation = this.showActionSheetWithOptions.bind(this, options, onSelect);\n return;\n }\n\n this.setState({\n options,\n onSelect,\n isVisible: true,\n isAnimating: true,\n });\n overlayOpacity.setValue(0);\n sheetOpacity.setValue(0);\n Animated.parallel([\n Animated.timing(overlayOpacity, {\n toValue: 0.32,\n easing: EASING_OUT,\n duration: OPACITY_ANIMATION_IN_TIME,\n useNativeDriver,\n }),\n Animated.timing(sheetOpacity, {\n toValue: 1,\n easing: EASING_OUT,\n duration: OPACITY_ANIMATION_IN_TIME,\n useNativeDriver,\n }),\n ]).start((result) => {\n if (result.finished) {\n this.setState({\n isAnimating: false,\n });\n this._deferAfterAnimation = undefined;\n }\n });\n // @ts-ignore: Argument of type '\"actionSheetHardwareBackPress\"' is not assignable to parameter of type '\"hardwareBackPress\"'\n BackHandler.addEventListener('actionSheetHardwareBackPress', this._selectCancelButton);\n };\n\n _selectCancelButton = () => {\n const { options } = this.state;\n\n if (!options) {\n return false;\n }\n\n if (typeof options.cancelButtonIndex === 'undefined') {\n return false;\n } else if (typeof options.cancelButtonIndex === 'number') {\n return this._onSelect(options.cancelButtonIndex);\n } else {\n return this._animateOut();\n }\n };\n\n _onSelect = (index: number): boolean => {\n const { isAnimating, onSelect } = this.state;\n\n if (isAnimating) {\n return false;\n }\n\n if (onSelect) {\n this._deferAfterAnimation = onSelect.bind(this, index);\n }\n\n return this._animateOut();\n };\n\n _animateOut = (): boolean => {\n const { isAnimating, overlayOpacity, sheetOpacity } = this.state;\n const { useNativeDriver = true } = this.props;\n\n if (isAnimating) {\n return false;\n }\n\n // @ts-ignore: Argument of type '\"actionSheetHardwareBackPress\"' is not assignable to parameter of type '\"hardwareBackPress\"'\n BackHandler.removeEventListener('actionSheetHardwareBackPress', this._selectCancelButton);\n this.setState({\n isAnimating: true,\n });\n Animated.parallel([\n Animated.timing(overlayOpacity, {\n toValue: 0,\n easing: EASING_IN,\n duration: OPACITY_ANIMATION_OUT_TIME,\n useNativeDriver,\n }),\n Animated.timing(sheetOpacity, {\n toValue: 0,\n easing: EASING_IN,\n duration: OPACITY_ANIMATION_OUT_TIME,\n useNativeDriver,\n }),\n ]).start((result) => {\n if (result.finished) {\n this.setState({\n isVisible: false,\n isAnimating: false,\n });\n\n if (this._deferAfterAnimation) {\n this._deferAfterAnimation();\n }\n }\n });\n return true;\n };\n}\n\nconst styles = StyleSheet.create({\n flexContainer: {\n flex: 1,\n },\n overlay: {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n backgroundColor: 'black',\n },\n sheetContainer: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n top: 0,\n backgroundColor: 'transparent',\n alignItems: 'flex-end',\n justifyContent: 'center',\n flexDirection: 'row',\n },\n sheet: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n});\n","import * as React from 'react';\nimport {\n Platform,\n TouchableNativeFeedback,\n TouchableOpacity,\n View,\n TouchableWithoutFeedbackProps,\n} from 'react-native';\n\n// This TouchableOpacity has the same staic method of TouchableNativeFeedback\nclass CustomTouchableOpacity extends React.Component {\n static SelectableBackground = () => ({});\n static SelectableBackgroundBorderless = () => ({});\n static Ripple = (color: string, borderless?: boolean) => ({});\n\n render() {\n return {this.props.children};\n }\n}\n\nconst TouchableComponent = Platform.select({\n web: CustomTouchableOpacity,\n default: Platform.Version <= 20 ? CustomTouchableOpacity : TouchableNativeFeedback,\n});\n\ntype Props = TouchableWithoutFeedbackProps & {\n pressInDelay: number;\n background: any;\n};\n\nexport default class TouchableNativeFeedbackSafe extends React.Component {\n static SelectableBackground = TouchableComponent.SelectableBackground;\n static SelectableBackgroundBorderless = TouchableComponent.SelectableBackgroundBorderless;\n static Ripple = TouchableComponent.Ripple;\n\n render() {\n if (TouchableComponent === TouchableNativeFeedback) {\n return (\n \n {this.props.children}\n \n );\n }\n\n // @ts-ignore: JSX element type 'TouchableComponent' does not have any construct or call signatures\n return {this.props.children};\n }\n}\n","import CustomActionSheet from './CustomActionSheet';\nexport default CustomActionSheet;\n","import * as React from 'react';\n\n// NativeActionSheet will always be custom when on Android/web\nimport NativeActionSheet from './ActionSheet';\nimport CustomActionSheet from './ActionSheet/CustomActionSheet';\nimport { Provider } from './context';\nimport { ActionSheetOptions, ActionSheetProviderRef } from './types';\n\ninterface Props {\n children: React.ReactNode;\n useNativeDriver?: boolean;\n useCustomActionSheet?: boolean;\n}\n\nexport default React.forwardRef(function ActionSheetProvider(\n { children, useNativeDriver, useCustomActionSheet = false },\n ref\n) {\n const actionSheetRef = React.useRef(null);\n\n const context = React.useMemo(\n () => ({\n showActionSheetWithOptions: (options: ActionSheetOptions, callback: (i: number) => void) => {\n if (actionSheetRef.current) {\n actionSheetRef.current.showActionSheetWithOptions(options, callback);\n }\n },\n }),\n [actionSheetRef]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n // backwards compatible with 13.x before context was being passed right on the ref\n getContext: () => context,\n showActionSheetWithOptions: context.showActionSheetWithOptions,\n }),\n [context]\n );\n\n const ActionSheet = React.useMemo(\n () => (useCustomActionSheet ? CustomActionSheet : NativeActionSheet),\n [useCustomActionSheet]\n );\n\n return (\n \n \n {React.Children.only(children)}\n \n \n );\n});\n","import hoistNonReactStatic from 'hoist-non-react-statics';\nimport * as React from 'react';\n\nimport { Consumer } from './context';\nimport { ActionSheetProps } from './types';\n\nexport default function connectActionSheet(\n WrappedComponent: React.ComponentType\n): React.FunctionComponent {\n const ConnectedActionSheet = (props: OwnProps) => {\n return (\n \n {({ showActionSheetWithOptions }) => {\n return (\n \n );\n }}\n \n );\n };\n\n return hoistNonReactStatic(ConnectedActionSheet, WrappedComponent);\n}\n","import * as React from 'react';\n\nimport { ActionSheetOptions, ActionSheetProps } from './types';\n\nconst context = React.createContext({\n showActionSheetWithOptions: (options: ActionSheetOptions, callback: (i: number) => void) => {},\n});\n\nexport function useActionSheet() {\n return React.useContext(context);\n}\n\nconst { Provider, Consumer } = context;\n\nexport { Provider, Consumer };\n","export { default as ActionSheetProvider } from './ActionSheetProvider';\nexport { default as connectActionSheet } from './connectActionSheet';\nexport { useActionSheet } from './context';\nexport * from './types';\n","import FontAwesome5 from './build/FontAwesome5';\nexport default FontAwesome5;\n","import Ionicons from './build/Ionicons';\nexport default Ionicons;\n","import MaterialIcons from './build/MaterialIcons';\nexport default MaterialIcons;\n","import { createFA5iconSet } from './createIconSetFromFontAwesome5';\n\nimport glyphMap from './vendor/react-native-vector-icons/glyphmaps/FontAwesome5Free.json';\nimport metadata from './vendor/react-native-vector-icons/glyphmaps/FontAwesome5Free_meta.json';\nconst fontMap = {\n Regular: require('./vendor/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf'),\n Light: require('./vendor/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf'),\n Solid: require('./vendor/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf'),\n Brand: require('./vendor/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf'),\n};\n\nexport const FA5Style = {\n regular: 'regular',\n light: 'light',\n solid: 'solid',\n brand: 'brand',\n};\n\nconst iconSet = createFA5iconSet(glyphMap, metadata, fontMap, false);\n\nexport default iconSet;\n","import createIconSet from './createIconSet';\nimport font from './vendor/react-native-vector-icons/Fonts/Ionicons.ttf';\nimport glyphMap from './vendor/react-native-vector-icons/glyphmaps/Ionicons.json';\n\nexport default createIconSet(glyphMap, 'ionicons', font);\n","import createIconSet from './createIconSet';\nimport font from './vendor/react-native-vector-icons/Fonts/MaterialIcons.ttf';\nimport glyphMap from './vendor/react-native-vector-icons/glyphmaps/MaterialIcons.json';\n\nexport default createIconSet(glyphMap, 'material', font);\n","import * as Font from \"expo-font\";\nimport React, { ComponentClass } from \"react\";\nimport {\n Text,\n TextProps,\n TouchableHighlightProps,\n ViewProps,\n OpaqueColorValue,\n TextStyle,\n ViewStyle,\n} from \"react-native\";\n\nimport createIconSet from \"./vendor/react-native-vector-icons/lib/create-icon-set\";\nimport createIconButtonComponent from \"./vendor/react-native-vector-icons/lib/icon-button\";\n\nexport {\n DEFAULT_ICON_COLOR,\n DEFAULT_ICON_SIZE,\n} from \"./vendor/react-native-vector-icons/lib/create-icon-set\";\n\nexport interface IconProps extends TextProps {\n /**\n * Size of the icon, can also be passed as fontSize in the style object.\n *\n * @default 12\n */\n size?: number;\n\n /**\n * Name of the icon to show\n *\n * See Icon Explorer app\n * {@link https://expo.github.io/vector-icons/}\n */\n name: GLYPHS;\n\n /**\n * Color of the icon. Can be a string or OpaqueColorValue (returned from\n * PlatformColor(..))\n *\n */\n color?: string | OpaqueColorValue;\n}\n\nexport interface IconButtonProps\n extends IconProps,\n ViewProps,\n TouchableHighlightProps {\n /**\n * Text and icon color\n * Use iconStyle or nest a Text component if you need different colors.\n * Can be a string or OpaqueColorValue (returned from PlatformColor(..))\n *\n * @default 'white'\n */\n color?: string | OpaqueColorValue;\n\n /**\n * Border radius of the button\n * Set to 0 to disable.\n *\n * @default 5\n */\n borderRadius?: number;\n\n /**\n * Styles applied to the icon only\n * Good for setting margins or a different color.\n *\n * @default {marginRight: 10}\n */\n iconStyle?: TextStyle;\n\n /**\n * Style prop inherited from TextProps and TouchableWithoutFeedbackProperties\n * Only exist here so we can have ViewStyle or TextStyle\n *\n */\n style?: ViewStyle | TextStyle;\n\n /**\n * Background color of the button. Can be a string or OpaqueColorValue (returned from\n * PlatformColor(..))\n *\n * @default '#007AFF'\n */\n backgroundColor?: string | OpaqueColorValue;\n}\n\nexport type GlyphMap = { [K in G]: number | string };\n\nexport interface Icon {\n defaultProps: any;\n Button: ComponentClass>;\n glyphMap: GlyphMap;\n getRawGlyphMap: () => GlyphMap;\n getFontFamily: () => FN;\n loadFont: () => Promise;\n font: { [x: string]: any };\n new (props: IconProps): React.Component>;\n}\n\nexport default function (\n glyphMap: GlyphMap,\n fontName: FN,\n expoAssetId,\n fontStyle?: any\n): Icon {\n const font = { [fontName]: expoAssetId };\n const RNVIconComponent = createIconSet(glyphMap, fontName, null, fontStyle);\n\n return class Icon extends React.Component> {\n static defaultProps = RNVIconComponent.defaultProps;\n static Button = createIconButtonComponent(Icon);\n static glyphMap = glyphMap;\n static getRawGlyphMap = () => glyphMap;\n static getFontFamily = () => fontName;\n static loadFont = () => Font.loadAsync(font);\n static font = font;\n\n _mounted = false;\n _icon?: any;\n\n state = {\n fontIsLoaded: Font.isLoaded(fontName),\n };\n\n async componentDidMount() {\n this._mounted = true;\n if (!this.state.fontIsLoaded) {\n await Font.loadAsync(font);\n this._mounted && this.setState({ fontIsLoaded: true });\n }\n }\n\n componentWillUnmount() {\n this._mounted = false;\n }\n\n setNativeProps(props) {\n if (this._icon) {\n this._icon.setNativeProps(props);\n }\n }\n\n render() {\n if (__DEV__ && this.props.name && !(this.props.name in glyphMap)) {\n console.warn(\n `\"${this.props.name}\" is not a valid icon name for family \"${fontName}\"`\n );\n }\n\n if (!this.state.fontIsLoaded) {\n return ;\n }\n\n return (\n {\n this._icon = view;\n }}\n {...this.props}\n />\n );\n }\n };\n}\n","import { Platform } from 'react-native';\nimport createMultiStyleIconSet from './createMultiStyleIconSet';\n\nexport const FA5Style = {\n regular: 'regular',\n light: 'light',\n solid: 'solid',\n brand: 'brand',\n};\n\nexport function createFA5iconSet(glyphMap, metadata = {}, fonts, pro = false) {\n const metadataKeys = Object.keys(metadata);\n const fontFamily = `FontAwesome5${pro ? 'Pro' : 'Free'}`;\n\n function fallbackFamily(glyph) {\n for (let i = 0; i < metadataKeys.length; i += 1) {\n const family = metadataKeys[i];\n if (metadata[family].indexOf(glyph) !== -1) {\n return family === 'brands' ? 'brand' : family;\n }\n }\n\n return 'regular';\n }\n\n function glyphValidator(glyph, style) {\n const family = style === 'brand' ? 'brands' : style;\n if (metadataKeys.indexOf(family) === -1) return false;\n return metadata[family].indexOf(glyph) !== -1;\n }\n\n function createFontAwesomeStyle(styleName, fontWeight, family = fontFamily) {\n let fontFile = fonts[styleName];\n\n return {\n fontFamily: `${family}-${styleName}`,\n fontFile,\n fontStyle: Platform.select({\n ios: {\n fontWeight,\n },\n default: {},\n }),\n glyphMap,\n };\n }\n\n const brandIcons = createFontAwesomeStyle('Brand', '400');\n const lightIcons = createFontAwesomeStyle('Light', '100');\n const regularIcons = createFontAwesomeStyle('Regular', '400');\n const solidIcons = createFontAwesomeStyle('Solid', '700');\n const Icon = createMultiStyleIconSet(\n {\n brand: brandIcons,\n light: lightIcons,\n regular: regularIcons,\n solid: solidIcons,\n },\n {\n defaultStyle: 'regular',\n fallbackFamily,\n glyphValidator,\n },\n );\n\n return Icon;\n}","import React, { PureComponent } from 'react';\n\nimport createIconSet from './createIconSet';\n\ntype FontStyle = {\n fontFamily: string;\n fontFile: any;\n glyphMap: any;\n fontStyle: any;\n};\n\ntype FontStyles = {\n [key: string]: FontStyle;\n};\n\nexport default function createMultiStyleIconSet(\n styles: FontStyles,\n optionsInput = {}\n): any {\n const styleNames = Object.keys(styles);\n\n if (styleNames.length === 0) {\n throw new Error('You need to add at least one style');\n }\n\n const options = {\n defaultStyle: styleNames[0],\n fallbackFamily: (_unused: any) => styleNames[0],\n glyphValidator: (_unused: any, __unused: any) => true,\n ...optionsInput,\n };\n\n const iconSets = styleNames.reduce((acc, name) => {\n const style = styles[name];\n\n acc[name] = createIconSet(\n style.glyphMap || {},\n style.fontFamily || '',\n style.fontFile || '',\n style.fontStyle || {}\n );\n\n return acc;\n }, {});\n\n function styleFromProps(props) {\n return Object.keys(props).reduce(\n (result, propName) =>\n styleNames.indexOf(propName) !== -1 && props[propName] === true\n ? propName\n : result,\n options.defaultStyle\n );\n }\n\n function getIconSetForProps(props) {\n const { name } = props;\n const style = styleFromProps(props);\n\n if (options.glyphValidator(name, style)) return iconSets[style];\n\n const family = options.fallbackFamily(name);\n\n if (styleNames.indexOf(family) === -1) {\n return options.defaultStyle;\n }\n\n return iconSets[family];\n }\n\n function selectIconClass(iconSet, iconClass) {\n return iconClass.length > 0 ? iconSet[iconClass] : iconSet;\n }\n\n function reduceProps(props) {\n return Object.keys(props).reduce((acc, prop) => {\n if (styleNames.indexOf(prop) === -1) {\n acc[prop] = props[prop];\n }\n\n return acc;\n }, {});\n }\n\n function getStyledIconSet(style, name = '') {\n if (styleNames.indexOf(style) === -1) {\n return iconSets[options.defaultStyle];\n }\n\n return !name\n ? iconSets[styleFromProps({ [style]: true })]\n : getIconSetForProps({ name, [style]: true });\n }\n\n function getFontFamily(style = options.defaultStyle) {\n return getStyledIconSet(style).getFontFamily();\n }\n\n function getRawGlyphMap(style = options.defaultStyle) {\n return getStyledIconSet(style).getRawGlyphMap();\n }\n\n function hasIcon(name, style = options.defaultStyle) {\n return options.glyphValidator(name, style);\n }\n\n function createStyledIconClass(selectClass = '') {\n class IconClass extends PureComponent {\n static defaultProps = styleNames.reduce((acc, name) => {\n acc[name] = false;\n return acc;\n }, {});\n\n static font = Object.values(styles).reduce((acc, style) => {\n acc[style.fontFamily] = style.fontFile;\n return acc;\n }, {});\n\n static Button: any;\n\n static StyledIconSet = getStyledIconSet;\n static getFontFamily = getFontFamily;\n static getRawGlyphMap = getRawGlyphMap;\n static hasIcon = hasIcon;\n\n render() {\n const selectedIconSet = getIconSetForProps(this.props);\n const SelectedIconClass = selectIconClass(selectedIconSet, selectClass);\n const props = reduceProps(this.props);\n\n return React.createElement(SelectedIconClass, props);\n }\n }\n\n return IconClass;\n }\n\n const Icon = createStyledIconClass();\n Icon.Button = createStyledIconClass('Button');\n return Icon;\n}\n","import React, { PureComponent } from 'react';\nimport {\n NativeModules,\n Platform,\n PixelRatio,\n processColor,\n Text,\n} from 'react-native';\n\nimport ensureNativeModuleAvailable from './ensure-native-module-available';\nimport createIconSourceCache from './create-icon-source-cache';\nimport createIconButtonComponent from './icon-button';\n\nexport const NativeIconAPI =\n NativeModules.RNVectorIconsManager || NativeModules.RNVectorIconsModule;\n\nexport const DEFAULT_ICON_SIZE = 12;\nexport const DEFAULT_ICON_COLOR = 'black';\n\nexport default function createIconSet(\n glyphMap,\n fontFamily,\n fontFile,\n fontStyle\n) {\n // Android doesn't care about actual fontFamily name, it will only look in fonts folder.\n const fontBasename = fontFile\n ? fontFile.replace(/\\.(otf|ttf)$/, '')\n : fontFamily;\n\n const fontReference = Platform.select({\n windows: `/Assets/${fontFile}#${fontFamily}`,\n android: fontBasename,\n web: fontBasename,\n default: fontFamily,\n });\n\n class Icon extends PureComponent {\n root = null;\n\n static defaultProps = {\n size: DEFAULT_ICON_SIZE,\n allowFontScaling: false,\n };\n\n setNativeProps(nativeProps) {\n if (this.root) {\n this.root.setNativeProps(nativeProps);\n }\n }\n\n handleRef = ref => {\n this.root = ref;\n };\n\n render() {\n const { name, size, color, style, children, ...props } = this.props;\n\n let glyph = name ? glyphMap[name] || '?' : '';\n if (typeof glyph === 'number') {\n glyph = String.fromCodePoint(glyph);\n }\n\n const styleDefaults = {\n fontSize: size,\n color,\n };\n\n const styleOverrides = {\n fontFamily: fontReference,\n fontWeight: 'normal',\n fontStyle: 'normal',\n };\n\n props.style = [styleDefaults, style, styleOverrides, fontStyle || {}];\n props.ref = this.handleRef;\n\n return (\n \n {glyph}\n {children}\n \n );\n }\n }\n\n const imageSourceCache = createIconSourceCache();\n\n function resolveGlyph(name) {\n const glyph = glyphMap[name] || '?';\n if (typeof glyph === 'number') {\n return String.fromCodePoint(glyph);\n }\n return glyph;\n }\n\n function getImageSourceSync(\n name,\n size = DEFAULT_ICON_SIZE,\n color = DEFAULT_ICON_COLOR\n ) {\n ensureNativeModuleAvailable();\n\n const glyph = resolveGlyph(name);\n const processedColor = processColor(color);\n const cacheKey = `${glyph}:${size}:${processedColor}`;\n\n if (imageSourceCache.has(cacheKey)) {\n return imageSourceCache.get(cacheKey);\n }\n try {\n const imagePath = NativeIconAPI.getImageForFontSync(\n fontReference,\n glyph,\n size,\n processedColor\n );\n const value = { uri: imagePath, scale: PixelRatio.get() };\n imageSourceCache.setValue(cacheKey, value);\n return value;\n } catch (error) {\n imageSourceCache.setError(cacheKey, error);\n throw error;\n }\n }\n\n async function getImageSource(\n name,\n size = DEFAULT_ICON_SIZE,\n color = DEFAULT_ICON_COLOR\n ) {\n ensureNativeModuleAvailable();\n\n const glyph = resolveGlyph(name);\n const processedColor = processColor(color);\n const cacheKey = `${glyph}:${size}:${processedColor}`;\n\n if (imageSourceCache.has(cacheKey)) {\n return imageSourceCache.get(cacheKey);\n }\n try {\n const imagePath = await NativeIconAPI.getImageForFont(\n fontReference,\n glyph,\n size,\n processedColor\n );\n const value = { uri: imagePath, scale: PixelRatio.get() };\n imageSourceCache.setValue(cacheKey, value);\n return value;\n } catch (error) {\n imageSourceCache.setError(cacheKey, error);\n throw error;\n }\n }\n\n async function loadFont(file = fontFile) {\n if (Platform.OS === 'ios') {\n ensureNativeModuleAvailable();\n if (!file) {\n throw new Error('Unable to load font, because no file was specified. ');\n }\n await NativeIconAPI.loadFontWithFileName(...file.split('.'));\n }\n }\n\n function hasIcon(name) {\n return Object.prototype.hasOwnProperty.call(glyphMap, name);\n }\n\n function getRawGlyphMap() {\n return glyphMap;\n }\n\n function getFontFamily() {\n return fontReference;\n }\n\n Icon.Button = createIconButtonComponent(Icon);\n Icon.getImageSource = getImageSource;\n Icon.getImageSourceSync = getImageSourceSync;\n Icon.loadFont = loadFont;\n Icon.hasIcon = hasIcon;\n Icon.getRawGlyphMap = getRawGlyphMap;\n Icon.getFontFamily = getFontFamily;\n\n return Icon;\n}\n","const TYPE_VALUE = 'value';\nconst TYPE_ERROR = 'error';\n\nexport default function createIconSourceCache() {\n const cache = new Map();\n\n const setValue = (key, value) =>\n cache.set(key, { type: TYPE_VALUE, data: value });\n\n const setError = (key, error) =>\n cache.set(key, { type: TYPE_ERROR, data: error });\n\n const has = key => cache.has(key);\n\n const get = key => {\n if (!cache.has(key)) {\n return undefined;\n }\n const { type, data } = cache.get(key);\n if (type === TYPE_ERROR) {\n throw data;\n }\n return data;\n };\n\n return { setValue, setError, has, get };\n}\n","import { Platform, NativeModules } from 'react-native';\n\nconst NativeIconAPI =\n NativeModules.RNVectorIconsManager || NativeModules.RNVectorIconsModule;\n\nexport default function ensureNativeModuleAvailable() {\n if (!NativeIconAPI) {\n if (Platform.OS === 'android') {\n throw new Error(\n 'RNVectorIconsModule not available, did you properly integrate the module? Try running `react-native link react-native-vector-icons` and recompiling.'\n );\n }\n throw new Error(\n 'RNVectorIconsManager not available, did you add the library to your project and link with libRNVectorIcons.a? Try running `react-native link react-native-vector-icons` and recompiling.'\n );\n }\n}\n","import React, { PureComponent } from 'react';\nimport { StyleSheet, Text, TouchableHighlight, View } from 'react-native';\nimport { pick, omit } from './object-utils';\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'center',\n padding: 8,\n },\n touchable: {\n overflow: 'hidden',\n },\n icon: {\n marginRight: 10,\n },\n text: {\n fontWeight: '600',\n backgroundColor: 'transparent',\n },\n});\n\nconst IOS7_BLUE = '#007AFF';\n\nconst TEXT_PROP_NAMES = [\n 'ellipsizeMode',\n 'numberOfLines',\n 'textBreakStrategy',\n 'selectable',\n 'suppressHighlighting',\n 'allowFontScaling',\n 'adjustsFontSizeToFit',\n 'minimumFontScale',\n];\n\nconst TOUCHABLE_PROP_NAMES = [\n 'accessible',\n 'accessibilityLabel',\n 'accessibilityHint',\n 'accessibilityComponentType',\n 'accessibilityRole',\n 'accessibilityStates',\n 'accessibilityTraits',\n 'onFocus',\n 'onBlur',\n 'disabled',\n 'onPress',\n 'onPressIn',\n 'onPressOut',\n 'onLayout',\n 'onLongPress',\n 'nativeID',\n 'testID',\n 'delayPressIn',\n 'delayPressOut',\n 'delayLongPress',\n 'activeOpacity',\n 'underlayColor',\n 'selectionColor',\n 'onShowUnderlay',\n 'onHideUnderlay',\n 'hasTVPreferredFocus',\n 'tvParallaxProperties',\n];\n\nexport default function createIconButtonComponent(Icon) {\n return class IconButton extends PureComponent {\n static defaultProps = {\n backgroundColor: IOS7_BLUE,\n borderRadius: 5,\n color: 'white',\n size: 20,\n };\n\n render() {\n const { style, iconStyle, children, ...restProps } = this.props;\n\n const iconProps = pick(\n restProps,\n TEXT_PROP_NAMES,\n 'style',\n 'name',\n 'size',\n 'color'\n );\n const touchableProps = pick(restProps, TOUCHABLE_PROP_NAMES);\n const props = omit(\n restProps,\n Object.keys(iconProps),\n Object.keys(touchableProps),\n 'iconStyle',\n 'borderRadius',\n 'backgroundColor'\n );\n iconProps.style = iconStyle ? [styles.icon, iconStyle] : styles.icon;\n\n const colorStyle = pick(this.props, 'color');\n const blockStyle = pick(this.props, 'backgroundColor', 'borderRadius');\n\n return (\n \n \n \n {typeof children === 'string' ? (\n \n {children}\n \n ) : (\n children\n )}\n \n \n );\n }\n };\n}\n","const pick = (obj, ...keys) =>\n keys\n .flat()\n .filter(key => Object.prototype.hasOwnProperty.call(obj, key))\n .reduce((acc, key) => {\n acc[key] = obj[key];\n return acc;\n }, {});\n\nconst omit = (obj, ...keysToOmit) => {\n const keysToOmitSet = new Set(keysToOmit.flat());\n return Object.getOwnPropertyNames(obj)\n .filter(key => !keysToOmitSet.has(key))\n .reduce((acc, key) => {\n acc[key] = obj[key];\n return acc;\n }, {});\n};\n\nmodule.exports = { pick, omit };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","import { useContext, createContext } from 'react'\nimport invariant from 'invariant'\n\nconst MapContext = createContext(null)\n\nexport function useGoogleMap(): google.maps.Map | null {\n invariant(!!useContext, 'useGoogleMap is React hook and requires React version 16.8+')\n\n const map = useContext(MapContext)\n\n invariant(!!map, 'useGoogleMap needs a GoogleMap available up in the tree')\n\n return map\n}\n\nexport default MapContext\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function reduce(obj: any, fn: any, acc: any): any {\n return Object.keys(obj).reduce(function reducer(newAcc, key) {\n return fn(newAcc, obj[key], key)\n }, acc)\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function forEach(obj: any, fn: any): any {\n Object.keys(obj).forEach((key) => {\n return fn(obj[key], key)\n })\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { reduce } from './reduce'\nimport { forEach } from './foreach'\n\nexport function applyUpdaterToNextProps(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n updaterMap: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevProps: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nextProps: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const map: any = {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const iter = (fn: any, key: string): void => {\n const nextValue = nextProps[key]\n\n if (nextValue !== prevProps[key]) {\n map[key] = nextValue\n fn(instance, nextValue)\n }\n }\n\n forEach(updaterMap, iter)\n\n return map\n}\n\nexport function registerEvents(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any,\n eventMap: Record\n): google.maps.MapsEventListener[] {\n const registeredList = reduce(\n eventMap,\n function reducer(\n acc: google.maps.MapsEventListener[],\n googleEventName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onEventName: any\n ): google.maps.MapsEventListener[] {\n if (typeof props[onEventName] === 'function') {\n acc.push(google.maps.event.addListener(instance, googleEventName, props[onEventName]))\n }\n\n return acc\n },\n []\n )\n\n return registeredList\n}\n\nfunction unregisterEvent(registered: google.maps.MapsEventListener): void {\n google.maps.event.removeListener(registered)\n}\n\nexport function unregisterEvents(events: google.maps.MapsEventListener[] = []): void {\n events.forEach(unregisterEvent)\n}\n\nexport function applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps,\n instance,\n}: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n updaterMap: any\n eventMap: Record\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevProps: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nextProps: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n instance: any\n}): google.maps.MapsEventListener[] {\n const registeredEvents = registerEvents(nextProps, instance, eventMap)\n\n applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance)\n\n return registeredEvents\n}\n","import { type CSSProperties, PureComponent, type ReactNode, useState, useRef, useEffect, memo } from 'react'\n\nimport MapContext from './map-context'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from './utils/helper'\n\nconst eventMap = {\n onDblClick: 'dblclick',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMapTypeIdChanged: 'maptypeid_changed',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onTilesLoaded: 'tilesloaded',\n onBoundsChanged: 'bounds_changed',\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDrag: 'drag',\n onHeadingChanged: 'heading_changed',\n onIdle: 'idle',\n onProjectionChanged: 'projection_changed',\n onResize: 'resize',\n onTiltChanged: 'tilt_changed',\n onZoomChanged: 'zoom_changed',\n}\n\nconst updaterMap = {\n extraMapTypes(map: google.maps.Map, extra: google.maps.MapType[]): void {\n extra.forEach(function forEachExtra(it, i) {\n map.mapTypes.set(String(i), it)\n })\n },\n center(map: google.maps.Map, center: google.maps.LatLng | google.maps.LatLngLiteral): void {\n map.setCenter(center)\n },\n clickableIcons(map: google.maps.Map, clickable: boolean): void {\n map.setClickableIcons(clickable)\n },\n heading(map: google.maps.Map, heading: number): void {\n map.setHeading(heading)\n },\n mapTypeId(map: google.maps.Map, mapTypeId: string): void {\n map.setMapTypeId(mapTypeId)\n },\n options(map: google.maps.Map, options: google.maps.MapOptions): void {\n map.setOptions(options)\n },\n streetView(map: google.maps.Map, streetView: google.maps.StreetViewPanorama): void {\n map.setStreetView(streetView)\n },\n tilt(map: google.maps.Map, tilt: number): void {\n map.setTilt(tilt)\n },\n zoom(map: google.maps.Map, zoom: number): void {\n map.setZoom(zoom)\n },\n}\n\nexport interface GoogleMapState {\n map: google.maps.Map | null\n}\n\nexport interface GoogleMapProps {\n children?: ReactNode | undefined\n id?: string | undefined\n mapContainerStyle?: CSSProperties | undefined\n mapContainerClassName?: string | undefined\n options?: google.maps.MapOptions | undefined\n /** Additional map types to overlay. Overlay map types will display on top of the base map they are attached to, in the order in which they appear in the overlayMapTypes array (overlays with higher index values are displayed in front of overlays with lower index values). */\n extraMapTypes?: google.maps.MapType[] | undefined\n /** The initial Map center. */\n center?: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n /** When false, map icons are not clickable. A map icon represents a point of interest, also known as a POI. By default map icons are clickable. */\n clickableIcons?: boolean | undefined\n /** The heading for aerial imagery in degrees measured clockwise from cardinal direction North. Headings are snapped to the nearest available angle for which imagery is available. */\n heading?: number | undefined\n /** The initial Map mapTypeId. Defaults to ROADMAP. */\n mapTypeId?: string | undefined\n /** A StreetViewPanorama to display when the Street View pegman is dropped on the map. If no panorama is specified, a default StreetViewPanorama will be displayed in the map's div when the pegman is dropped. */\n streetView?: google.maps.StreetViewPanorama | undefined\n /** Controls the automatic switching behavior for the angle of incidence of the map. The only allowed values are 0 and 45. The value 0 causes the map to always use a 0° overhead view regardless of the zoom level and viewport. The value 45 causes the tilt angle to automatically switch to 45 whenever 45° imagery is available for the current zoom level and viewport, and switch back to 0 whenever 45° imagery is not available (this is the default behavior). 45° imagery is only available for satellite and hybrid map types, within some locations, and at some zoom levels. Note: getTilt returns the current tilt angle, not the value specified by this option. Because getTilt and this option refer to different things, do not bind() the tilt property; doing so may yield unpredictable effects. */\n tilt?: number | undefined\n /** The initial Map zoom level. Required. Valid values: Integers between zero, and up to the supported maximum zoom level. */\n zoom?: number | undefined\n /** This event is fired when the user clicks on the map. An ApiMouseEvent with properties for the clicked location is returned unless a place icon was clicked, in which case an IconMouseEvent with a placeId is returned. IconMouseEvent and ApiMouseEvent are identical, except that IconMouseEvent has the placeId field. The event can always be treated as an ApiMouseEvent when the placeId is not important. The click event is not fired if a Marker or InfoWindow was clicked. */\n onClick?:( (e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user double-clicks on the map. Note that the click event will also fire, right before this one. */\n onDblClick?:( (e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the map. */\n onDrag?:( () => void) | undefined\n /** This event is fired when the user stops dragging the map. */\n onDragEnd?:( () => void) | undefined\n /** This event is fired when the user starts dragging the map. */\n onDragStart?:( () => void) | undefined\n /** This event is fired whenever the user's mouse moves over the map container. */\n onMouseMove?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user's mouse exits the map container. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user's mouse enters the map container. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousedown event is fired on the map container. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mouseup event is fired on the map container. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM contextmenu event is fired on the map container. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the mapTypeId property changes. */\n onMapTypeIdChanged?:( () => void) | undefined\n /** This event is fired when the visible tiles have finished loading. */\n onTilesLoaded?: (() => void) | undefined\n /** This event is fired when the viewport bounds have changed. */\n onBoundsChanged?: (() => void) | undefined\n /** This event is fired when the map center property changes. */\n onCenterChanged?: (() => void) | undefined\n /** This event is fired when the map heading property changes. */\n onHeadingChanged?: (() => void) | undefined\n /** This event is fired when the map becomes idle after panning or zooming. */\n onIdle?: (() => void) | undefined\n /** This event is fired when the projection has changed. */\n onProjectionChanged?: (() => void) | undefined\n /** This event is fired when the map size has changed. */\n onResize?: (() => void) | undefined\n /** This event is fired when the map tilt property changes. */\n onTiltChanged?: (() => void) | undefined\n /** This event is fired when the map zoom property changes. */\n onZoomChanged?: (() => void) | undefined\n /** This callback is called when the map instance has loaded. It is called with the map instance. */\n onLoad?: ((map: google.maps.Map) => void | Promise) | undefined\n /** This callback is called when the component unmounts. It is called with the map instance. */\n onUnmount?: ((map: google.maps.Map) => void | Promise) | undefined\n}\n\n\n// TODO: unfinished!\nfunction GoogleMapFunctional({\n children,\n options,\n id,\n mapContainerStyle,\n mapContainerClassName,\n center,\n // clickableIcons,\n // extraMapTypes,\n // heading,\n // mapTypeId,\n onClick,\n onDblClick,\n onDrag,\n onDragEnd,\n onDragStart,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseDown,\n onMouseUp,\n onRightClick,\n // onMapTypeIdChanged,\n // onTilesLoaded,\n // onBoundsChanged,\n onCenterChanged,\n // onHeadingChanged,\n // onIdle,\n // onProjectionChanged,\n // onResize,\n // onTiltChanged,\n // onZoomChanged,\n onLoad,\n onUnmount,\n}: GoogleMapProps): JSX.Element {\n const [map, setMap] = useState(null)\n const ref = useRef(null)\n\n // const [extraMapTypesListener, setExtraMapTypesListener] = useState(null)\n const [centerChangedListener, setCenterChangedListener] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (options && map !== null) {\n map.setOptions(options)\n }\n }, [map, options])\n\n useEffect(() => {\n if (map !== null && typeof center !== 'undefined') {\n map.setCenter(center)\n }\n }, [map, center])\n\n useEffect(() => {\n if (map && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(map, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (map && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(map, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (map && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(map, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (map && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(map, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (map && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(map, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (map && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(map, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (map && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(map, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (map && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(map, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (map && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(map, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (map && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(map, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (map && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(map, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n if (map && onCenterChanged) {\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener)\n }\n\n setCenterChangedListener(\n google.maps.event.addListener(map, 'center_changed', onCenterChanged)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n const map = ref.current === null\n ? null\n : new google.maps.Map(ref.current, options)\n\n setMap(map)\n\n if (map !== null && onLoad) {\n onLoad(map)\n }\n\n return () => {\n if (map !== null) {\n if (onUnmount) {\n onUnmount(map)\n }\n\n\n }\n }\n }, [])\n\n return (\n \n \n {map !== null ? children : <>}\n \n \n )\n}\n\nexport const GoogleMapF = memo(GoogleMapFunctional)\n\nexport class GoogleMap extends PureComponent {\n override state: GoogleMapState = {\n map: null,\n }\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n mapRef: HTMLDivElement | null = null\n\n getInstance = (): google.maps.Map | null => {\n if (this.mapRef === null) {\n return null\n }\n\n return new google.maps.Map(this.mapRef, this.props.options)\n }\n\n panTo = (latLng: google.maps.LatLng | google.maps.LatLngLiteral): void => {\n const map = this.getInstance()\n if (map) {\n map.panTo(latLng)\n }\n }\n\n setMapCallback = (): void => {\n if (this.state.map !== null) {\n if (this.props.onLoad) {\n this.props.onLoad(this.state.map)\n }\n }\n }\n\n override componentDidMount(): void {\n const map = this.getInstance()\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: map,\n })\n\n this.setState(function setMap() {\n return {\n map,\n }\n }, this.setMapCallback)\n }\n\n override componentDidUpdate(prevProps: GoogleMapProps): void {\n if (this.state.map !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.map,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.map !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.map)\n }\n\n unregisterEvents(this.registeredEvents)\n }\n }\n\n getRef: React.LegacyRef = (ref: HTMLDivElement | null): void => {\n this.mapRef = ref\n }\n\n override render(): ReactNode {\n return (\n \n \n {this.state.map !== null ? this.props.children : <>}\n \n \n )\n }\n}\n\nexport default GoogleMap\n","export const isBrowser: boolean = typeof document !== 'undefined'\n","import { isBrowser } from './isbrowser'\n\ninterface WindowWithGoogleMap extends Window {\n initMap?: (() => void) | undefined\n}\n\ninterface InjectScriptArg {\n url: string\n id: string\n nonce?: string | undefined\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function injectScript({ url, id, nonce }: InjectScriptArg): Promise {\n if (!isBrowser) {\n return Promise.reject(new Error('document is undefined'))\n }\n\n return new Promise(function injectScriptCallback(resolve, reject) {\n const existingScript = document.getElementById(id) as HTMLScriptElement | undefined\n\n const windowWithGoogleMap: WindowWithGoogleMap = window\n\n if (existingScript) {\n // Same script id/url: keep same script\n const dataStateAttribute = existingScript.getAttribute('data-state')\n\n if (existingScript.src === url && dataStateAttribute !== 'error') {\n if (dataStateAttribute === 'ready') {\n return resolve(id)\n } else {\n const originalInitMap = windowWithGoogleMap.initMap\n\n const originalErrorCallback = existingScript.onerror\n\n windowWithGoogleMap.initMap = function initMap(): void {\n if (originalInitMap) {\n originalInitMap()\n }\n resolve(id)\n }\n\n existingScript.onerror = function(err): void {\n if (originalErrorCallback) {\n originalErrorCallback(err)\n }\n reject(err)\n }\n\n return\n }\n }\n // Same script id, but either\n // 1. requested URL is different\n // 2. script failed to load\n else {\n existingScript.remove()\n }\n }\n\n const script = document.createElement('script')\n\n script.type = 'text/javascript'\n script.src = url\n script.id = id\n script.async = true\n script.nonce = nonce || ''\n script.onerror = function onerror(err): void {\n script.setAttribute('data-state', 'error')\n\n reject(err)\n }\n\n windowWithGoogleMap.initMap = function onload(): void {\n script.setAttribute('data-state', 'ready')\n\n resolve(id)\n }\n\n document.head.appendChild(script)\n }).catch(err => {\n console.error('injectScript error: ', err)\n\n throw err\n })\n}\n","function isGoogleFontStyle(element: Node): boolean {\n // 'Roboto' or 'Google Sans Text' font download\n const href = (element as HTMLLinkElement).href;\n if (\n href && (\n href.indexOf('https://fonts.googleapis.com/css?family=Roboto') === 0 ||\n href.indexOf('https://fonts.googleapis.com/css?family=Google+Sans+Text') === 0\n )\n ) {\n return true\n }\n // font style elements\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText.replace('\\r\\n', '').indexOf('.gm-style') === 0\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.styleSheet.cssText = ''\n return true\n }\n // font style elements for other browsers\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML.replace('\\r\\n', '').indexOf('.gm-style') === 0\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.innerHTML = ''\n return true\n }\n // when google tries to add empty style\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n element.tagName.toLowerCase() === 'style' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n !element.styleSheet &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n !element.innerHTML\n ) {\n return true\n }\n\n return false\n}\n\n// Preventing the Google Maps library from downloading an extra font\nexport function preventGoogleFonts (): void {\n // we override these methods only for one particular head element\n // default methods for other elements are not affected\n const head = document.getElementsByTagName('head')[0]\n\n if (head) {\n const trueInsertBefore = head.insertBefore.bind(head)\n\n // TODO: adding return before reflect solves the TS issue\n\n head.insertBefore = function insertBefore(\n newElement: T,\n referenceElement: HTMLElement\n ): T {\n if (!isGoogleFontStyle(newElement)) {\n Reflect.apply(trueInsertBefore, head, [newElement, referenceElement])\n }\n\n return newElement\n }\n\n const trueAppend = head.appendChild.bind(head)\n\n // TODO: adding return before reflect solves the TS issue\n\n head.appendChild = function appendChild(textNode: T): T {\n if (!isGoogleFontStyle(textNode)) {\n Reflect.apply(trueAppend, head, [textNode])\n }\n\n return textNode\n }\n }\n\n}\n","import type { Library } from '@googlemaps/js-api-loader'\nimport invariant from 'invariant'\n\nexport type Libraries = Library[]\n\nexport interface LoadScriptUrlOptions {\n googleMapsApiKey: string | \"\"\n googleMapsClientId?: string | undefined\n version?: string | undefined\n language?: string | undefined\n region?: string | undefined\n libraries?: Libraries | undefined\n channel?: string | undefined\n mapIds?: string[] | undefined\n authReferrerPolicy?: 'origin' | undefined\n}\n\nexport function makeLoadScriptUrl({\n googleMapsApiKey,\n googleMapsClientId,\n version = 'weekly',\n language,\n region,\n libraries,\n channel,\n mapIds,\n authReferrerPolicy\n}: LoadScriptUrlOptions): string {\n const params = []\n\n invariant(\n (googleMapsApiKey && googleMapsClientId) || !(googleMapsApiKey && googleMapsClientId),\n 'You need to specify either googleMapsApiKey or googleMapsClientId for @react-google-maps/api load script to work. You cannot use both at the same time.'\n )\n\n if (googleMapsApiKey) {\n params.push(`key=${googleMapsApiKey}`)\n } else if (googleMapsClientId) {\n params.push(`client=${googleMapsClientId}`)\n }\n\n if (version) {\n params.push(`v=${version}`)\n }\n\n if (language) {\n params.push(`language=${language}`)\n }\n\n if (region) {\n params.push(`region=${region}`)\n }\n\n if (libraries && libraries.length) {\n params.push(`libraries=${libraries.sort().join(',')}`)\n }\n\n if (channel) {\n params.push(`channel=${channel}`)\n }\n\n if (mapIds && mapIds.length) {\n params.push(`map_ids=${mapIds.join(',')}`)\n }\n\n if (authReferrerPolicy) {\n params.push(`auth_referrer_policy=${authReferrerPolicy}`)\n }\n\n params.push('callback=initMap')\n\n return `https://maps.googleapis.com/maps/api/js?${params.join('&')}`\n}\n","import { createRef, PureComponent, type ReactNode, type RefObject } from 'react'\nimport invariant from 'invariant'\n\nimport { injectScript } from './utils/injectscript'\nimport { preventGoogleFonts } from './utils/prevent-google-fonts'\n\nimport { isBrowser } from './utils/isbrowser'\nimport { LoadScriptUrlOptions, makeLoadScriptUrl } from './utils/make-load-script-url'\n\nlet cleaningUp = false\n\ninterface LoadScriptState {\n loaded: boolean\n}\n\nexport interface LoadScriptProps extends LoadScriptUrlOptions {\n children?: ReactNode | undefined\n id: string\n nonce?: string | undefined\n loadingElement?: ReactNode\n onLoad?: () => void\n onError?: (error: Error) => void\n onUnmount?: () => void\n preventGoogleFontsLoading?: boolean\n}\n\nexport function DefaultLoadingElement(): JSX.Element {\n return
{`Loading...`}
\n}\n\nexport const defaultLoadScriptProps = {\n id: 'script-loader',\n version: 'weekly',\n}\n\nclass LoadScript extends PureComponent {\n public static defaultProps = defaultLoadScriptProps\n\n check: RefObject = createRef()\n\n override state = {\n loaded: false,\n }\n\n cleanupCallback = (): void => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete window.google.maps\n\n this.injectScript()\n }\n\n override componentDidMount(): void {\n if (isBrowser) {\n if (window.google && window.google.maps && !cleaningUp) {\n console.error('google api is already presented')\n\n return\n }\n\n this.isCleaningUp()\n .then(this.injectScript)\n .catch(function error(err) {\n console.error('Error at injecting script after cleaning up: ', err)\n })\n }\n }\n\n override componentDidUpdate(prevProps: LoadScriptProps): void {\n if (this.props.libraries !== prevProps.libraries) {\n console.warn(\n 'Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables'\n )\n }\n\n if (isBrowser && prevProps.language !== this.props.language) {\n this.cleanup()\n // TODO: refactor to use gDSFP maybe... wait for hooks refactoring.\n this.setState(function setLoaded() {\n return {\n loaded: false,\n }\n }, this.cleanupCallback)\n }\n }\n\n override componentWillUnmount(): void {\n if (isBrowser) {\n this.cleanup()\n\n const timeoutCallback = (): void => {\n if (!this.check.current) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete window.google\n cleaningUp = false\n }\n }\n\n window.setTimeout(timeoutCallback, 1)\n\n if (this.props.onUnmount) {\n this.props.onUnmount()\n }\n }\n }\n\n isCleaningUp = async (): Promise => {\n function promiseCallback(resolve: () => void): void {\n if (!cleaningUp) {\n resolve()\n } else {\n if (isBrowser) {\n const timer = window.setInterval(function interval() {\n if (!cleaningUp) {\n window.clearInterval(timer)\n\n resolve()\n }\n }, 1)\n }\n }\n\n return\n }\n\n return new Promise(promiseCallback)\n }\n\n cleanup = (): void => {\n cleaningUp = true\n const script = document.getElementById(this.props.id)\n\n if (script && script.parentNode) {\n script.parentNode.removeChild(script)\n }\n\n Array.prototype.slice\n .call(document.getElementsByTagName('script'))\n .filter(function filter(script: HTMLScriptElement): boolean {\n return typeof script.src === 'string' && script.src.includes('maps.googleapis')\n })\n .forEach(function forEach(script: HTMLScriptElement): void {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n\n Array.prototype.slice\n .call(document.getElementsByTagName('link'))\n .filter(function filter(link: HTMLLinkElement): boolean {\n return (\n link.href === 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Google+Sans'\n )\n })\n .forEach(function forEach(link: HTMLLinkElement) {\n if (link.parentNode) {\n link.parentNode.removeChild(link)\n }\n })\n\n Array.prototype.slice\n .call(document.getElementsByTagName('style'))\n .filter(function filter(style: HTMLStyleElement): boolean {\n return (\n style.innerText !== undefined &&\n style.innerText.length > 0 &&\n style.innerText.includes('.gm-')\n )\n })\n .forEach(function forEach(style: HTMLStyleElement) {\n if (style.parentNode) {\n style.parentNode.removeChild(style)\n }\n })\n }\n\n injectScript = (): void => {\n if (this.props.preventGoogleFontsLoading) {\n preventGoogleFonts()\n }\n\n invariant(!!this.props.id, 'LoadScript requires \"id\" prop to be a string: %s', this.props.id)\n\n const injectScriptOptions = {\n id: this.props.id,\n nonce: this.props.nonce,\n url: makeLoadScriptUrl(this.props),\n }\n\n injectScript(injectScriptOptions)\n .then(() => {\n if (this.props.onLoad) {\n this.props.onLoad()\n }\n\n this.setState(function setLoaded() {\n return {\n loaded: true,\n }\n })\n\n return\n })\n .catch(err => {\n if (this.props.onError) {\n this.props.onError(err)\n }\n\n console.error(`\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (${this\n .props.googleMapsApiKey || '-'}) or Client ID (${this.props.googleMapsClientId ||\n '-'}) to \n Otherwise it is a Network issue.\n `)\n })\n }\n\n override render(): ReactNode {\n return (\n <>\n
\n\n {this.state.loaded\n ? this.props.children\n : this.props.loadingElement || }\n \n )\n }\n}\n\nexport default LoadScript\n","/* eslint-disable filenames/match-regex */\nimport { useEffect, useRef, useState } from 'react'\nimport invariant from 'invariant'\n\nimport { isBrowser } from './utils/isbrowser'\nimport { injectScript } from './utils/injectscript'\nimport { preventGoogleFonts } from './utils/prevent-google-fonts'\nimport { makeLoadScriptUrl, LoadScriptUrlOptions } from './utils/make-load-script-url'\n\nimport { defaultLoadScriptProps } from './LoadScript'\n\nexport interface UseLoadScriptOptions extends LoadScriptUrlOptions {\n id?: string | undefined\n nonce?: string | undefined\n preventGoogleFontsLoading?: boolean | undefined\n}\n\nlet previouslyLoadedUrl: string\n\nexport function useLoadScript({\n id = defaultLoadScriptProps.id,\n version = defaultLoadScriptProps.version,\n nonce,\n googleMapsApiKey,\n googleMapsClientId,\n language,\n region,\n libraries,\n preventGoogleFontsLoading,\n channel,\n mapIds,\n authReferrerPolicy,\n}: UseLoadScriptOptions): {\n isLoaded: boolean\n loadError: Error | undefined\n url: string\n} {\n const isMounted = useRef(false)\n const [isLoaded, setLoaded] = useState(false)\n const [loadError, setLoadError] = useState(undefined)\n\n useEffect(function trackMountedState() {\n isMounted.current = true\n return (): void => {\n isMounted.current = false\n }\n }, [])\n\n useEffect(\n function applyPreventGoogleFonts() {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts()\n }\n },\n [preventGoogleFontsLoading]\n )\n\n useEffect(\n function validateLoadedState() {\n if (isLoaded) {\n invariant(\n !!window.google,\n 'useLoadScript was marked as loaded, but window.google is not present. Something went wrong.'\n )\n }\n },\n [isLoaded]\n )\n\n const url = makeLoadScriptUrl({\n version,\n googleMapsApiKey,\n googleMapsClientId,\n language,\n region,\n libraries,\n channel,\n mapIds,\n authReferrerPolicy\n })\n\n useEffect(\n function loadScriptAndModifyLoadedState() {\n if (!isBrowser) {\n return\n }\n\n function setLoadedIfMounted(): void {\n if (isMounted.current) {\n setLoaded(true)\n previouslyLoadedUrl = url\n }\n }\n\n if (window.google && window.google.maps && previouslyLoadedUrl === url) {\n setLoadedIfMounted()\n return\n }\n\n injectScript({ id, url, nonce })\n .then(setLoadedIfMounted)\n .catch(function handleInjectError(err) {\n if (isMounted.current) {\n setLoadError(err)\n }\n console.warn(`\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (${googleMapsApiKey ||\n '-'}) or Client ID (${googleMapsClientId || '-'})\n Otherwise it is a Network issue.\n `)\n console.error(err)\n })\n },\n [id, url, nonce]\n )\n\n const prevLibraries = useRef()\n\n useEffect(\n function checkPerformance() {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn(\n 'Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables'\n )\n }\n prevLibraries.current = libraries\n },\n [libraries]\n )\n\n return { isLoaded, loadError, url }\n}\n","import { memo, ReactElement, useEffect } from 'react'\n\nimport { DefaultLoadingElement } from './LoadScript'\nimport { useLoadScript, UseLoadScriptOptions } from './useLoadScript'\n\nexport interface LoadScriptNextProps extends UseLoadScriptOptions {\n loadingElement?: ReactElement | undefined\n onLoad?: (() => void) | undefined\n onError?: ((error: Error) => void) | undefined\n onUnmount?: (() => void) | undefined\n children: ReactElement\n}\n\nconst defaultLoadingElement = \n\nfunction LoadScriptNext({\n loadingElement,\n onLoad,\n onError,\n onUnmount,\n children,\n ...hookOptions\n}: LoadScriptNextProps): JSX.Element {\n const { isLoaded, loadError } = useLoadScript(hookOptions)\n\n useEffect(\n function handleOnLoad() {\n if (isLoaded && typeof onLoad === 'function') {\n onLoad()\n }\n },\n [isLoaded, onLoad]\n )\n\n useEffect(\n function handleOnError() {\n if (loadError && typeof onError === 'function') {\n onError(loadError)\n }\n },\n [loadError, onError]\n )\n\n useEffect(\n function handleOnUnmount() {\n return () => {\n if (onUnmount) {\n onUnmount()\n }\n }\n },\n [onUnmount]\n )\n\n return isLoaded ? children : loadingElement || defaultLoadingElement\n}\n\nexport default memo(LoadScriptNext)\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!fastDeepEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.esm.js.map\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport { Loader } from '@googlemaps/js-api-loader'\n\nimport { isBrowser } from './utils/isbrowser'\nimport { preventGoogleFonts } from './utils/prevent-google-fonts'\nimport type { LoadScriptUrlOptions, Libraries } from './utils/make-load-script-url'\n\nimport { defaultLoadScriptProps } from './LoadScript'\n\nexport interface UseLoadScriptOptions extends LoadScriptUrlOptions {\n id?: string | undefined\n nonce?: string | undefined\n preventGoogleFontsLoading?: boolean | undefined\n}\n\nconst defaultLibraries: Libraries = ['maps']\n\nexport function useJsApiLoader({\n id = defaultLoadScriptProps.id,\n version = defaultLoadScriptProps.version,\n nonce,\n googleMapsApiKey,\n // googleMapsClientId,\n language,\n region,\n libraries = defaultLibraries,\n preventGoogleFontsLoading,\n // channel,\n mapIds,\n authReferrerPolicy,\n}: UseLoadScriptOptions): {\n isLoaded: boolean\n loadError: Error | undefined\n} {\n const isMounted = useRef(false)\n const [isLoaded, setLoaded] = useState(false)\n const [loadError, setLoadError] = useState(undefined)\n\n useEffect(function trackMountedState() {\n isMounted.current = true\n return (): void => {\n isMounted.current = false\n }\n }, [])\n\n const loader = useMemo(() => {\n return new Loader({\n id,\n apiKey: googleMapsApiKey,\n version,\n libraries,\n language: language || 'en',\n region: region || 'US',\n mapIds: mapIds || [],\n nonce: nonce || '',\n authReferrerPolicy: authReferrerPolicy || 'origin',\n })\n }, [id, googleMapsApiKey, version, libraries, language, region, mapIds, nonce, authReferrerPolicy])\n\n useEffect(function effect() {\n if (isLoaded) {\n return\n } else {\n loader.load().then(() => {\n if (isMounted.current) {setLoaded(true)}\n\n return\n })\n .catch((error) => {\n setLoadError(error)\n })\n }\n }, [])\n\n\n useEffect(\n () => {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts()\n }\n },\n [preventGoogleFontsLoading]\n )\n\n const prevLibraries = useRef()\n\n useEffect(\n () => {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn(\n 'Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables'\n )\n }\n prevLibraries.current = libraries\n },\n [libraries]\n )\n\n return { isLoaded, loadError }\n}\n","import { memo, PureComponent, useContext, useEffect, useState, type ContextType } from 'react'\n\nimport { applyUpdatersToPropsAndRegisterEvents, unregisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {}\n\nconst updaterMap = {\n options(instance: google.maps.TrafficLayer, options: google.maps.TrafficLayerOptions): void {\n instance.setOptions(options)\n },\n}\n\ninterface TrafficLayerState {\n trafficLayer: google.maps.TrafficLayer | null\n}\n\nexport interface TrafficLayerProps {\n options?: google.maps.TrafficLayerOptions | undefined\n /** This callback is called when the trafficLayer instance has loaded. It is called with the trafficLayer instance. */\n onLoad?: ((trafficLayer: google.maps.TrafficLayer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the trafficLayer instance. */\n onUnmount?: ((trafficLayer: google.maps.TrafficLayer) => void) | undefined\n}\n\nfunction TrafficLayerFunctional({ options, onLoad, onUnmount }: TrafficLayerProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (options && instance !== null) {\n\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n const trafficLayer = new google.maps.TrafficLayer({\n ...(options || {}),\n map,\n })\n\n setInstance(trafficLayer)\n\n if (onLoad) {\n onLoad(trafficLayer)\n }\n\n return () => {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const TrafficLayerF = memo(TrafficLayerFunctional)\n\nexport class TrafficLayer extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n override state: TrafficLayerState = {\n trafficLayer: null,\n }\n\n setTrafficLayerCallback = () => {\n if (this.state.trafficLayer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.trafficLayer)\n }\n }\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override componentDidMount(): void {\n const trafficLayer = new google.maps.TrafficLayer({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: trafficLayer,\n })\n\n this.setState(function setTrafficLayer() {\n return {\n trafficLayer,\n }\n }, this.setTrafficLayerCallback)\n }\n\n override componentDidUpdate(prevProps: TrafficLayerProps): void {\n if (this.state.trafficLayer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.trafficLayer,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.trafficLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.trafficLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n\n this.state.trafficLayer.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default TrafficLayer\n","import { memo, PureComponent, useContext, useEffect, useState, type ContextType } from 'react'\n\nimport MapContext from '../../map-context'\n\ninterface BicyclingLayerState {\n bicyclingLayer: google.maps.BicyclingLayer | null\n}\n\nexport interface BicyclingLayerProps {\n /** This callback is called when the bicyclingLayer instance has loaded. It is called with the bicyclingLayer instance. */\n onLoad?: ((bicyclingLayer: google.maps.BicyclingLayer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the bicyclingLayer instance. */\n onUnmount?: ((bicyclingLayer: google.maps.BicyclingLayer) => void) | undefined\n}\n\nfunction BicyclingLayerFunctional({ onLoad, onUnmount }: BicyclingLayerProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n const bicyclingLayer = new google.maps.BicyclingLayer()\n\n setInstance(bicyclingLayer)\n\n bicyclingLayer.setMap(map)\n\n if (onLoad) {\n onLoad(bicyclingLayer)\n }\n\n return () => {\n if (bicyclingLayer !== null) {\n if (onUnmount) {\n onUnmount(bicyclingLayer)\n }\n\n bicyclingLayer.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const BicyclingLayerF = memo(BicyclingLayerFunctional)\n\nexport class BicyclingLayer extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n override state: BicyclingLayerState = {\n bicyclingLayer: null,\n }\n\n override componentDidMount(): void {\n const bicyclingLayer = new google.maps.BicyclingLayer()\n\n this.setState(() => {\n return {\n bicyclingLayer,\n }\n }, this.setBicyclingLayerCallback)\n }\n\n override componentWillUnmount(): void {\n if (this.state.bicyclingLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.bicyclingLayer)\n }\n\n this.state.bicyclingLayer.setMap(null)\n }\n }\n\n setBicyclingLayerCallback = (): void => {\n if (this.state.bicyclingLayer !== null) {\n\n this.state.bicyclingLayer.setMap(this.context)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.bicyclingLayer)\n }\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default BicyclingLayer\n","import { type ContextType, PureComponent, useContext, useEffect, useState, memo } from 'react'\n\nimport MapContext from '../../map-context'\n\ninterface TransitLayerState {\n transitLayer: google.maps.TransitLayer | null\n}\n\nexport interface TransitLayerProps {\n /** This callback is called when the transitLayer instance has loaded. It is called with the transitLayer instance. */\n onLoad?: ((transitLayer: google.maps.TransitLayer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the transitLayer instance. */\n onUnmount?: ((transitLayer: google.maps.TransitLayer) => void) | undefined\n}\n\nfunction TransitLayerFunctional({ onLoad, onUnmount }: TransitLayerProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n const transitLayer = new google.maps.TransitLayer()\n\n setInstance(transitLayer)\n\n transitLayer.setMap(map)\n\n if (onLoad) {\n onLoad(transitLayer)\n }\n\n return () => {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const TransitLayerF = memo(TransitLayerFunctional)\n\nexport class TransitLayer extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n override state: TransitLayerState = {\n transitLayer: null,\n }\n\n setTransitLayerCallback = (): void => {\n if (this.state.transitLayer !== null) {\n\n this.state.transitLayer.setMap(this.context)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.transitLayer)\n }\n }\n }\n\n override componentDidMount(): void {\n const transitLayer = new google.maps.TransitLayer()\n\n this.setState(function setTransitLayer() {\n return {\n transitLayer,\n }\n }, this.setTransitLayerCallback)\n }\n\n override componentWillUnmount(): void {\n if (this.state.transitLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.transitLayer)\n }\n\n this.state.transitLayer.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default TransitLayer\n","/* globals google */\nimport { type ContextType, memo, PureComponent, useContext, useEffect, useState } from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCircleComplete: 'circlecomplete',\n onMarkerComplete: 'markercomplete',\n onOverlayComplete: 'overlaycomplete',\n onPolygonComplete: 'polygoncomplete',\n onPolylineComplete: 'polylinecomplete',\n onRectangleComplete: 'rectanglecomplete',\n}\n\nconst updaterMap = {\n drawingMode(\n instance: google.maps.drawing.DrawingManager,\n drawingMode: google.maps.drawing.OverlayType | null\n ): void {\n instance.setDrawingMode(drawingMode)\n },\n options(\n instance: google.maps.drawing.DrawingManager,\n options: google.maps.drawing.DrawingManagerOptions\n ): void {\n instance.setOptions(options)\n },\n}\n\ninterface DrawingManagerState {\n drawingManager: google.maps.drawing.DrawingManager | null\n}\n\nexport interface DrawingManagerProps {\n options?: google.maps.drawing.DrawingManagerOptions | undefined\n /** Changes the DrawingManager's drawing mode, which defines the type of overlay to be added on the map. Accepted values are 'marker', 'polygon', 'polyline', 'rectangle', 'circle', or null. A drawing mode of null means that the user can interact with the map as normal, and clicks do not draw anything. */\n drawingMode?: google.maps.drawing.OverlayType | null | undefined\n /** This event is fired when the user has finished drawing a circle. */\n onCircleComplete?: ((circle: google.maps.Circle) => void) | undefined\n /** This event is fired when the user has finished drawing a marker. */\n onMarkerComplete?: ((marker: google.maps.Marker) => void) | undefined\n /** This event is fired when the user has finished drawing an overlay of any type. */\n onOverlayComplete?: ((e: google.maps.drawing.OverlayCompleteEvent) => void) | undefined\n /** This event is fired when the user has finished drawing a polygon. */\n onPolygonComplete?: ((polygon: google.maps.Polygon) => void) | undefined\n /** This event is fired when the user has finished drawing a polyline. */\n onPolylineComplete?: ((polyline: google.maps.Polyline) => void) | undefined\n /** This event is fired when the user has finished drawing a rectangle. */\n onRectangleComplete?: ((rectangle: google.maps.Rectangle) => void) | undefined\n /** This callback is called when the drawingManager instance has loaded. It is called with the drawingManager instance. */\n onLoad?: ((drawingManager: google.maps.drawing.DrawingManager) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the drawingManager instance. */\n onUnmount?: ((drawingManager: google.maps.drawing.DrawingManager) => void) | undefined\n}\n\nfunction DrawingManagerFunctional({\n options,\n drawingMode,\n onCircleComplete,\n onMarkerComplete,\n onOverlayComplete,\n onPolygonComplete,\n onPolylineComplete,\n onRectangleComplete,\n onLoad,\n onUnmount\n}: DrawingManagerProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [circlecompleteListener, setCircleCompleteListener] = useState(null)\n const [markercompleteListener, setMarkerCompleteListener] = useState(null)\n const [overlaycompleteListener, setOverlayCompleteListener] = useState(null)\n const [polygoncompleteListener, setPolygonCompleteListener] = useState(null)\n const [polylinecompleteListener, setPolylineCompleteListener] = useState(null)\n const [rectanglecompleteListener, setRectangleCompleteListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (options && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (drawingMode && instance !== null) {\n instance.setDrawingMode(drawingMode)\n }\n }, [instance, drawingMode])\n\n useEffect(() => {\n if (instance && onCircleComplete) {\n if (circlecompleteListener !== null) {\n google.maps.event.removeListener(circlecompleteListener)\n }\n\n setCircleCompleteListener(\n google.maps.event.addListener(instance, 'circlecomplete', onCircleComplete)\n )\n }\n }, [instance, onCircleComplete])\n\n useEffect(() => {\n if (instance && onMarkerComplete) {\n if (markercompleteListener !== null) {\n google.maps.event.removeListener(markercompleteListener)\n }\n\n setMarkerCompleteListener(\n google.maps.event.addListener(instance, 'markercomplete', onMarkerComplete)\n )\n }\n }, [instance, onMarkerComplete])\n\n useEffect(() => {\n if (instance && onOverlayComplete) {\n if (overlaycompleteListener !== null) {\n google.maps.event.removeListener(overlaycompleteListener)\n }\n\n setOverlayCompleteListener(\n google.maps.event.addListener(instance, 'overlaycomplete', onOverlayComplete)\n )\n }\n }, [instance, onOverlayComplete])\n\n useEffect(() => {\n if (instance && onPolygonComplete) {\n if (polygoncompleteListener !== null) {\n google.maps.event.removeListener(polygoncompleteListener)\n }\n\n setPolygonCompleteListener(\n google.maps.event.addListener(instance, 'polygoncomplete', onPolygonComplete)\n )\n }\n }, [instance, onPolygonComplete])\n\n useEffect(() => {\n if (instance && onPolylineComplete) {\n if (polylinecompleteListener !== null) {\n google.maps.event.removeListener(polylinecompleteListener)\n }\n\n setPolylineCompleteListener(\n google.maps.event.addListener(instance, 'polylinecomplete', onPolylineComplete)\n )\n }\n }, [instance, onPolylineComplete])\n\n useEffect(() => {\n if (instance && onRectangleComplete) {\n if (rectanglecompleteListener !== null) {\n google.maps.event.removeListener(rectanglecompleteListener)\n }\n\n setRectangleCompleteListener(\n google.maps.event.addListener(instance, 'rectanglecomplete', onRectangleComplete)\n )\n }\n }, [instance, onRectangleComplete])\n\n useEffect(() => {\n invariant(\n !!google.maps.drawing,\n `Did you include prop libraries={['drawing']} in the URL? %s`,\n google.maps.drawing\n )\n\n const drawingManager = new google.maps.drawing.DrawingManager({\n ...(options || {}),\n map,\n })\n\n if (drawingMode) {\n drawingManager.setDrawingMode(drawingMode)\n }\n\n if (onCircleComplete) {\n setCircleCompleteListener(\n google.maps.event.addListener(drawingManager, 'circlecomplete', onCircleComplete)\n )\n }\n\n if (onMarkerComplete) {\n setMarkerCompleteListener(\n google.maps.event.addListener(drawingManager, 'markercomplete', onMarkerComplete)\n )\n }\n\n if (onOverlayComplete) {\n setOverlayCompleteListener(\n google.maps.event.addListener(drawingManager, 'overlaycomplete', onOverlayComplete)\n )\n }\n\n if (onPolygonComplete) {\n setPolygonCompleteListener(\n google.maps.event.addListener(drawingManager, 'polygoncomplete', onPolygonComplete)\n )\n }\n\n if (onPolylineComplete) {\n setPolylineCompleteListener(\n google.maps.event.addListener(drawingManager, 'polylinecomplete', onPolylineComplete)\n )\n }\n\n if (onRectangleComplete) {\n setRectangleCompleteListener(\n google.maps.event.addListener(drawingManager, 'rectanglecomplete', onRectangleComplete)\n )\n }\n\n setInstance(drawingManager)\n\n if (onLoad) {\n onLoad(drawingManager)\n }\n\n return () => {\n if (instance !== null) {\n if (circlecompleteListener) {\n google.maps.event.removeListener(circlecompleteListener)\n }\n\n if (markercompleteListener) {\n google.maps.event.removeListener(markercompleteListener)\n }\n\n if (overlaycompleteListener) {\n google.maps.event.removeListener(overlaycompleteListener)\n }\n\n if (polygoncompleteListener) {\n google.maps.event.removeListener(polygoncompleteListener)\n }\n\n if (polylinecompleteListener) {\n google.maps.event.removeListener(polylinecompleteListener)\n }\n\n if (rectanglecompleteListener) {\n google.maps.event.removeListener(rectanglecompleteListener)\n }\n\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const DrawingManagerF = memo(DrawingManagerFunctional)\n\nexport class DrawingManager extends PureComponent {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: DrawingManagerState = {\n drawingManager: null,\n }\n\n constructor(props: DrawingManagerProps) {\n super(props)\n\n invariant(\n !!google.maps.drawing,\n `Did you include prop libraries={['drawing']} in the URL? %s`,\n google.maps.drawing\n )\n }\n\n setDrawingManagerCallback = (): void => {\n if (this.state.drawingManager !== null && this.props.onLoad) {\n this.props.onLoad(this.state.drawingManager)\n }\n }\n\n override componentDidMount(): void {\n const drawingManager = new google.maps.drawing.DrawingManager({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: drawingManager,\n })\n\n this.setState(function setDrawingManager() {\n return {\n drawingManager,\n }\n }, this.setDrawingManagerCallback)\n }\n\n override componentDidUpdate(prevProps: DrawingManagerProps): void {\n if (this.state.drawingManager !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.drawingManager,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.drawingManager !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.drawingManager)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.drawingManager.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default DrawingManager\n","import {\n memo,\n useMemo,\n Children,\n useState,\n useEffect,\n useContext,\n cloneElement,\n PureComponent,\n isValidElement,\n type ReactNode,\n type ContextType,\n type ReactElement,\n} from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport type { HasMarkerAnchor } from '../../types'\n\nimport type{ Clusterer } from '@react-google-maps/marker-clusterer'\nimport type { MarkerClusterer as GoogleClusterer} from '@googlemaps/markerclusterer'\n\nconst eventMap = {\n onAnimationChanged: 'animation_changed',\n onClick: 'click',\n onClickableChanged: 'clickable_changed',\n onCursorChanged: 'cursor_changed',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDraggableChanged: 'draggable_changed',\n onDragStart: 'dragstart',\n onFlatChanged: 'flat_changed',\n onIconChanged: 'icon_changed',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onPositionChanged: 'position_changed',\n onRightClick: 'rightclick',\n onShapeChanged: 'shape_changed',\n onTitleChanged: 'title_changed',\n onVisibleChanged: 'visible_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n animation(instance: google.maps.Marker, animation: google.maps.Animation): void {\n instance.setAnimation(animation)\n },\n clickable(instance: google.maps.Marker, clickable: boolean): void {\n instance.setClickable(clickable)\n },\n cursor(instance: google.maps.Marker, cursor: string): void {\n instance.setCursor(cursor)\n },\n draggable(instance: google.maps.Marker, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n icon(instance: google.maps.Marker, icon: string | google.maps.Icon | google.maps.Symbol): void {\n instance.setIcon(icon)\n },\n label(instance: google.maps.Marker, label: string | google.maps.MarkerLabel): void {\n instance.setLabel(label)\n },\n map(instance: google.maps.Marker, map: google.maps.Map): void {\n instance.setMap(map)\n },\n opacity(instance: google.maps.Marker, opacity: number): void {\n instance.setOpacity(opacity)\n },\n options(instance: google.maps.Marker, options: google.maps.MarkerOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: google.maps.Marker,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n shape(instance: google.maps.Marker, shape: google.maps.MarkerShape): void {\n instance.setShape(shape)\n },\n title(instance: google.maps.Marker, title: string): void {\n instance.setTitle(title)\n },\n visible(instance: google.maps.Marker, visible: boolean): void {\n instance.setVisible(visible)\n },\n zIndex(instance: google.maps.Marker, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\nexport interface MarkerProps {\n // required\n /** Marker position. */\n position: google.maps.LatLng | google.maps.LatLngLiteral\n\n children?: ReactNode | undefined\n options?: google.maps.MarkerOptions | undefined\n /** Start an animation. Any ongoing animation will be cancelled. Currently supported animations are: BOUNCE, DROP. Passing in null will cause any animation to stop. */\n animation?: google.maps.Animation | undefined\n /** If true, the marker receives mouse and touch events. Default value is true. */\n clickable?: boolean | undefined\n /** Mouse cursor to show on hover */\n cursor?: string | undefined\n /** If true, the marker can be dragged. Default value is false. */\n draggable?: boolean | undefined\n /** Icon for the foreground. If a string is provided, it is treated as though it were an Icon with the string as url. */\n icon?: string | google.maps.Icon | google.maps.Symbol | undefined\n /** Adds a label to the marker. The label can either be a string, or a MarkerLabel object. */\n label?: string | google.maps.MarkerLabel | undefined\n /** The marker's opacity between 0.0 and 1.0. */\n opacity?: number | undefined\n\n /** Image map region definition used for drag/click. */\n shape?: google.maps.MarkerShape | undefined\n /** Rollover text */\n title?: string | undefined\n /** If true, the marker is visible */\n visible?: boolean | undefined\n /** All markers are displayed on the map in order of their zIndex, with higher values displaying in front of markers with lower values. By default, markers are displayed according to their vertical position on screen, with lower markers appearing in front of markers further up the screen. */\n zIndex?: number | undefined\n /** Render prop that handles clustering markers */\n clusterer?: Clusterer | GoogleClusterer | undefined\n /** Clusters are redrawn when a Marker is added unless noClustererRedraw? is set to true. */\n noClustererRedraw?: boolean | undefined\n /** This event is fired when the marker icon was clicked. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the marker's clickable property changes. */\n onClickableChanged?: (() => void) | undefined\n /** This event is fired when the marker's cursor property changes. */\n onCursorChanged?: (() => void) | undefined\n /** This event is fired when the marker's animation property changes. */\n onAnimationChanged?: (() => void) | undefined\n /** This event is fired when the marker icon was double clicked. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the marker. */\n onDrag?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user stops dragging the marker. */\n onDragEnd?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the marker's draggable property changes. */\n onDraggableChanged?: (() => void) | undefined\n /** This event is fired when the user starts dragging the marker. */\n onDragStart?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the marker's flat property changes. */\n onFlatChanged?: (() => void) | undefined\n /** This event is fired when the marker icon property changes. */\n onIconChanged?: (() => void) | undefined\n /** This event is fired for a mousedown on the marker. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the mouse leaves the area of the marker icon. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the mouse enters the area of the marker icon. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired for a mouseup on the marker. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the marker position property changes. */\n onPositionChanged?: (() => void) | undefined\n /** This event is fired for a rightclick on the marker. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the marker's shape property changes. */\n onShapeChanged?: (() => void) | undefined\n /** This event is fired when the marker title property changes. */\n onTitleChanged?: (() => void) | undefined\n /** This event is fired when the marker's visible property changes. */\n onVisibleChanged?: (() => void) | undefined\n /** This event is fired when the marker's zIndex property changes. */\n onZindexChanged?: (() => void) | undefined\n /** This callback is called when the marker instance has loaded. It is called with the marker instance. */\n onLoad?: ((marker: google.maps.Marker) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the marker instance. */\n onUnmount?: ((marker: google.maps.Marker) => void) | undefined\n}\n\nconst defaultOptions = {}\n\nfunction MarkerFunctional({\n position,\n options,\n clusterer,\n noClustererRedraw,\n\n children,\n\n draggable,\n visible,\n animation,\n clickable,\n cursor,\n icon,\n label,\n opacity,\n shape,\n title,\n zIndex,\n onClick,\n onDblClick,\n onDrag,\n onDragEnd,\n onDragStart,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onMouseDown,\n onRightClick,\n onClickableChanged,\n onCursorChanged,\n onAnimationChanged,\n onDraggableChanged,\n onFlatChanged,\n onIconChanged,\n onPositionChanged,\n onShapeChanged,\n onTitleChanged,\n onVisibleChanged,\n onZindexChanged,\n onLoad,\n onUnmount\n}: MarkerProps): JSX.Element | null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n\n const [clickableChangedListener, setClickableChangedListener] = useState(null)\n const [cursorChangedListener, setCursorChangedListener] = useState(null)\n const [animationChangedListener, setAnimationChangedListener] = useState(null)\n const [draggableChangedListener, setDraggableChangedListener] = useState(null)\n const [flatChangedListener, setFlatChangedListener] = useState(null)\n const [iconChangedListener, setIconChangedListener] = useState(null)\n const [positionChangedListener, setPositionChangedListener] = useState(null)\n const [shapeChangedListener, setShapeChangedListener] = useState(null)\n const [titleChangedListener, setTitleChangedListener] = useState(null)\n const [visibleChangedListener, setVisibleChangedListener] = useState(null)\n const [zIndexChangedListener, setZindexChangedListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable)\n }\n }, [instance, draggable])\n\n useEffect(() => {\n if (position && instance !== null) {\n instance.setPosition(position)\n }\n }, [instance, position])\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible)\n }\n }, [instance, visible])\n\n useEffect(() => {\n instance?.setAnimation(animation)\n }, [instance, animation])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(instance, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(instance, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(instance, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n if (instance && onClickableChanged) {\n if (clickableChangedListener !== null) {\n google.maps.event.removeListener(clickableChangedListener)\n }\n\n setClickableChangedListener(\n google.maps.event.addListener(instance, 'clickable_changed', onClickableChanged)\n )\n }\n }, [onClickableChanged])\n\n useEffect(() => {\n if (instance && onCursorChanged) {\n if (cursorChangedListener !== null) {\n google.maps.event.removeListener(cursorChangedListener)\n }\n\n setCursorChangedListener(\n google.maps.event.addListener(instance, 'cursor_changed', onCursorChanged)\n )\n }\n }, [onCursorChanged])\n\n useEffect(() => {\n if (instance && onAnimationChanged) {\n if (animationChangedListener !== null) {\n google.maps.event.removeListener(animationChangedListener)\n }\n\n setAnimationChangedListener(\n google.maps.event.addListener(instance, 'animation_changed', onAnimationChanged)\n )\n }\n }, [onAnimationChanged])\n\n useEffect(() => {\n if(instance && onDraggableChanged) {\n if (draggableChangedListener !== null) {\n google.maps.event.removeListener(draggableChangedListener)\n }\n\n setDraggableChangedListener(\n google.maps.event.addListener(instance, 'draggable_changed', onDraggableChanged)\n )\n }\n }, [onDraggableChanged])\n\n useEffect(() => {\n if (instance && onFlatChanged) {\n if (flatChangedListener !== null) {\n google.maps.event.removeListener(flatChangedListener)\n }\n\n setFlatChangedListener(\n google.maps.event.addListener(instance, 'flat_changed', onFlatChanged)\n )\n }\n }, [onFlatChanged])\n\n useEffect(() => {\n if (instance && onIconChanged) {\n if (iconChangedListener !== null) {\n google.maps.event.removeListener(iconChangedListener)\n }\n\n setIconChangedListener(\n google.maps.event.addListener(instance, 'icon_changed', onIconChanged)\n )\n }\n }, [onIconChanged])\n\n useEffect(() => {\n if (instance && onPositionChanged) {\n if (positionChangedListener !== null) {\n google.maps.event.removeListener(positionChangedListener)\n }\n\n setPositionChangedListener(\n google.maps.event.addListener(instance, 'position_changed', onPositionChanged)\n )\n }\n }, [onPositionChanged])\n\n useEffect(() => {\n if (instance && onShapeChanged) {\n if (shapeChangedListener !== null) {\n google.maps.event.removeListener(shapeChangedListener)\n }\n\n setShapeChangedListener(\n google.maps.event.addListener(instance, 'shape_changed', onShapeChanged)\n )\n }\n }, [onShapeChanged])\n\n useEffect(() => {\n if (instance && onTitleChanged) {\n if (titleChangedListener !== null) {\n google.maps.event.removeListener(titleChangedListener)\n }\n\n setTitleChangedListener(\n google.maps.event.addListener(instance, 'title_changed', onTitleChanged)\n )\n }\n }, [onTitleChanged])\n\n useEffect(() => {\n if (instance && onVisibleChanged) {\n if (visibleChangedListener !== null) {\n google.maps.event.removeListener(visibleChangedListener)\n }\n\n setVisibleChangedListener(\n google.maps.event.addListener(instance, 'visible_changed', onVisibleChanged)\n )\n }\n }, [onVisibleChanged])\n\n useEffect(() => {\n if (instance && onZindexChanged) {\n if (zIndexChangedListener !== null) {\n google.maps.event.removeListener(zIndexChangedListener)\n }\n\n setZindexChangedListener(\n google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged)\n )\n }\n }, [onZindexChanged])\n\n useEffect(() => {\n const markerOptions = {\n ...(options || defaultOptions),\n ...(clusterer ? defaultOptions : { map }),\n position,\n }\n\n const marker = new google.maps.Marker(markerOptions)\n\n if (clusterer) {\n clusterer.addMarker(marker, !!noClustererRedraw)\n } else {\n marker.setMap(map)\n }\n\n if (position) {\n marker.setPosition(position)\n }\n\n if (typeof visible !== 'undefined') {\n marker.setVisible(visible)\n }\n\n if (typeof draggable !== 'undefined') {\n marker.setDraggable(draggable)\n }\n\n if (typeof clickable !== 'undefined') {\n marker.setClickable(clickable)\n }\n\n if (typeof cursor === 'string') {\n marker.setCursor(cursor)\n }\n\n if (icon) {\n marker.setIcon(icon)\n }\n\n if (typeof label !== 'undefined') {\n marker.setLabel(label)\n }\n\n if (typeof opacity !== 'undefined') {\n marker.setOpacity(opacity)\n }\n\n if (shape) {\n marker.setShape(shape)\n }\n\n if (typeof title === 'string') {\n marker.setTitle(title)\n }\n\n if (typeof zIndex === 'number') {\n marker.setZIndex(zIndex)\n }\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(marker, 'dblclick', onDblClick)\n )\n }\n\n if (onDragEnd) {\n setDragendListener(\n google.maps.event.addListener(marker, 'dragend', onDragEnd)\n )\n }\n\n if (onDragStart) {\n setDragstartListener(\n google.maps.event.addListener(marker, 'dragstart', onDragStart)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(marker, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(marker, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(marker, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(marker, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightclickListener(\n google.maps.event.addListener(marker, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(marker, 'click', onClick)\n )\n }\n\n if (onDrag) {\n setDragListener(\n google.maps.event.addListener(marker, 'drag', onDrag)\n )\n }\n\n if (onClickableChanged) {\n setClickableChangedListener(\n google.maps.event.addListener(marker, 'clickable_changed', onClickableChanged)\n )\n }\n\n if (onCursorChanged) {\n setCursorChangedListener(\n google.maps.event.addListener(marker, 'cursor_changed', onCursorChanged)\n )\n }\n\n if (onAnimationChanged) {\n setAnimationChangedListener(\n google.maps.event.addListener(marker, 'animation_changed', onAnimationChanged)\n )\n }\n\n if (onDraggableChanged) {\n setDraggableChangedListener(\n google.maps.event.addListener(marker, 'draggable_changed', onDraggableChanged)\n )\n }\n\n if (onFlatChanged) {\n setFlatChangedListener(\n google.maps.event.addListener(marker, 'flat_changed', onFlatChanged)\n )\n }\n\n if (onIconChanged) {\n setIconChangedListener(\n google.maps.event.addListener(marker, 'icon_changed', onIconChanged)\n )\n }\n\n if (onPositionChanged) {\n setPositionChangedListener(\n google.maps.event.addListener(marker, 'position_changed', onPositionChanged)\n )\n }\n\n if (onShapeChanged) {\n setShapeChangedListener(\n google.maps.event.addListener(marker, 'shape_changed', onShapeChanged)\n )\n }\n\n if (onTitleChanged) {\n setTitleChangedListener(\n google.maps.event.addListener(marker, 'title_changed', onTitleChanged)\n )\n }\n\n if (onVisibleChanged) {\n setVisibleChangedListener(\n google.maps.event.addListener(marker, 'visible_changed', onVisibleChanged)\n )\n }\n\n if (onZindexChanged) {\n setZindexChangedListener(\n google.maps.event.addListener(marker, 'zindex_changed', onZindexChanged)\n )\n }\n\n setInstance(marker)\n\n if (onLoad) {\n onLoad(marker)\n }\n\n return () => {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (clickableChangedListener !== null) {\n google.maps.event.removeListener(clickableChangedListener)\n }\n\n if (cursorChangedListener !== null) {\n google.maps.event.removeListener(cursorChangedListener)\n }\n\n if (animationChangedListener !== null) {\n google.maps.event.removeListener(animationChangedListener)\n }\n\n if (draggableChangedListener !== null) {\n google.maps.event.removeListener(draggableChangedListener)\n }\n\n if (flatChangedListener !== null) {\n google.maps.event.removeListener(flatChangedListener)\n }\n\n if (iconChangedListener !== null) {\n google.maps.event.removeListener(iconChangedListener)\n }\n\n if (positionChangedListener !== null) {\n google.maps.event.removeListener(positionChangedListener)\n }\n\n if (titleChangedListener !== null) {\n google.maps.event.removeListener(titleChangedListener)\n }\n\n if (visibleChangedListener !== null) {\n google.maps.event.removeListener(visibleChangedListener)\n }\n\n if (zIndexChangedListener !== null) {\n google.maps.event.removeListener(zIndexChangedListener)\n }\n\n if (onUnmount) {\n onUnmount(marker)\n }\n\n if (clusterer) {\n clusterer.removeMarker(marker, !!noClustererRedraw)\n } else if (marker) {\n marker.setMap(null)\n }\n }\n }, [])\n\n const chx = useMemo(() => {\n return children\n ? Children.map(children, child => {\n if (!isValidElement(child)) {\n return child\n }\n\n const elementChild: ReactElement = child\n\n return cloneElement(elementChild, { anchor: instance })\n })\n : null\n }, [children, instance])\n\n return <>{chx} || null\n}\n\nexport const MarkerF = memo(MarkerFunctional)\n\nexport class Marker extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n marker: google.maps.Marker | undefined\n\n override componentDidMount(): void {\n const markerOptions = {\n ...(this.props.options || defaultOptions),\n ...(this.props.clusterer ? defaultOptions : { map: this.context }),\n position: this.props.position,\n }\n\n // Unfortunately we can't just do this in the contstructor, because the\n // `MapContext` might not be filled in yet.\n this.marker = new google.maps.Marker(markerOptions)\n\n if (this.props.clusterer) {\n this.props.clusterer.addMarker(this.marker, !!this.props.noClustererRedraw)\n } else {\n this.marker.setMap(this.context)\n }\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: this.marker,\n })\n\n if (this.props.onLoad) {\n this.props.onLoad(this.marker)\n }\n }\n\n override componentDidUpdate(prevProps: MarkerProps): void {\n if (this.marker) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.marker,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.marker) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.marker)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.props.clusterer) {\n this.props.clusterer.removeMarker(this.marker, !!this.props.noClustererRedraw)\n } else {\n this.marker && this.marker.setMap(null)\n }\n }\n }\n\n override render(): ReactNode {\n let children: ReactNode | null = null\n\n if (this.props.children) {\n children = Children.map(this.props.children, child => {\n if (!isValidElement(child)) {\n return child\n }\n\n const elementChild: ReactElement = child\n\n return cloneElement(elementChild, { anchor: this.marker })\n })\n }\n\n return children || null\n }\n}\n\nexport default Marker\n","var ClusterIcon = /** @class */ (function () {\n function ClusterIcon(cluster, styles) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView);\n this.cluster = cluster;\n this.clusterClassName = this.cluster.getClusterer().getClusterClass();\n this.className = this.clusterClassName;\n this.styles = styles;\n this.center = undefined;\n this.div = null;\n this.sums = null;\n this.visible = false;\n this.boundsChangedListener = null;\n this.url = '';\n this.height = 0;\n this.width = 0;\n this.anchorText = [0, 0];\n this.anchorIcon = [0, 0];\n this.textColor = 'black';\n this.textSize = 11;\n this.textDecoration = 'none';\n this.fontWeight = 'bold';\n this.fontStyle = 'normal';\n this.fontFamily = 'Arial,sans-serif';\n this.backgroundPosition = '0 0';\n this.cMouseDownInCluster = null;\n this.cDraggingMapByCluster = null;\n this.timeOut = null;\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n this.onBoundsChanged = this.onBoundsChanged.bind(this);\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onClick = this.onClick.bind(this);\n this.onMouseOver = this.onMouseOver.bind(this);\n this.onMouseOut = this.onMouseOut.bind(this);\n this.onAdd = this.onAdd.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.draw = this.draw.bind(this);\n this.hide = this.hide.bind(this);\n this.show = this.show.bind(this);\n this.useStyle = this.useStyle.bind(this);\n this.setCenter = this.setCenter.bind(this);\n this.getPosFromLatLng = this.getPosFromLatLng.bind(this);\n }\n ClusterIcon.prototype.onBoundsChanged = function () {\n this.cDraggingMapByCluster = this.cMouseDownInCluster;\n };\n ClusterIcon.prototype.onMouseDown = function () {\n this.cMouseDownInCluster = true;\n this.cDraggingMapByCluster = false;\n };\n ClusterIcon.prototype.onClick = function (event) {\n this.cMouseDownInCluster = false;\n if (!this.cDraggingMapByCluster) {\n var markerClusterer_1 = this.cluster.getClusterer();\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer_1, 'click', this.cluster);\n google.maps.event.trigger(markerClusterer_1, 'clusterclick', this.cluster); // deprecated name\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer_1.getZoomOnClick()) {\n // Zoom into the cluster.\n var maxZoom_1 = markerClusterer_1.getMaxZoom();\n var bounds_1 = this.cluster.getBounds();\n var map = markerClusterer_1.getMap();\n if (map !== null && 'fitBounds' in map) {\n map.fitBounds(bounds_1);\n }\n // There is a fix for Issue 170 here:\n this.timeOut = window.setTimeout(function () {\n var map = markerClusterer_1.getMap();\n if (map !== null) {\n if ('fitBounds' in map) {\n map.fitBounds(bounds_1);\n }\n var zoom = map.getZoom() || 0;\n // Don't zoom beyond the max zoom level\n if (maxZoom_1 !== null &&\n zoom > maxZoom_1) {\n map.setZoom(maxZoom_1 + 1);\n }\n }\n }, 100);\n }\n // Prevent event propagation to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n };\n ClusterIcon.prototype.onMouseOver = function () {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseover', this.cluster);\n };\n ClusterIcon.prototype.onMouseOut = function () {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseout', this.cluster);\n };\n ClusterIcon.prototype.onAdd = function () {\n var _a;\n this.div = document.createElement('div');\n this.div.className = this.className;\n if (this.visible) {\n this.show();\n }\n (_a = this.getPanes()) === null || _a === void 0 ? void 0 : _a.overlayMouseTarget.appendChild(this.div);\n var map = this.getMap();\n if (map !== null) {\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(map, 'bounds_changed', this.onBoundsChanged);\n this.div.addEventListener('mousedown', this.onMouseDown);\n this.div.addEventListener('click', this.onClick);\n this.div.addEventListener('mouseover', this.onMouseOver);\n this.div.addEventListener('mouseout', this.onMouseOut);\n }\n };\n ClusterIcon.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.hide();\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener);\n }\n this.div.removeEventListener('mousedown', this.onMouseDown);\n this.div.removeEventListener('click', this.onClick);\n this.div.removeEventListener('mouseover', this.onMouseOver);\n this.div.removeEventListener('mouseout', this.onMouseOut);\n this.div.parentNode.removeChild(this.div);\n if (this.timeOut !== null) {\n window.clearTimeout(this.timeOut);\n this.timeOut = null;\n }\n this.div = null;\n }\n };\n ClusterIcon.prototype.draw = function () {\n if (this.visible && this.div !== null && this.center) {\n var pos = this.getPosFromLatLng(this.center);\n this.div.style.top = pos !== null ? \"\".concat(pos.y, \"px\") : '0';\n this.div.style.left = pos !== null ? \"\".concat(pos.x, \"px\") : '0';\n }\n };\n ClusterIcon.prototype.hide = function () {\n if (this.div) {\n this.div.style.display = 'none';\n }\n this.visible = false;\n };\n ClusterIcon.prototype.show = function () {\n var _a, _b, _c, _d, _e, _f;\n if (this.div && this.center) {\n var divTitle = this.sums === null ||\n typeof this.sums.title === 'undefined' ||\n this.sums.title === '' ? this.cluster.getClusterer().getTitle() : this.sums.title;\n // NOTE: values must be specified in px units\n var bp = this.backgroundPosition.split(' ');\n var spriteH = parseInt(((_a = bp[0]) === null || _a === void 0 ? void 0 : _a.replace(/^\\s+|\\s+$/g, '')) || '0', 10);\n var spriteV = parseInt(((_b = bp[1]) === null || _b === void 0 ? void 0 : _b.replace(/^\\s+|\\s+$/g, '')) || '0', 10);\n var pos = this.getPosFromLatLng(this.center);\n this.div.className = this.className;\n this.div.setAttribute('style', \"cursor: pointer; position: absolute; top: \".concat(pos !== null ? \"\".concat(pos.y, \"px\") : '0', \"; left: \").concat(pos !== null ? \"\".concat(pos.x, \"px\") : '0', \"; width: \").concat(this.width, \"px; height: \").concat(this.height, \"px; \"));\n var img = document.createElement('img');\n img.alt = divTitle;\n img.src = this.url;\n img.width = this.width;\n img.height = this.height;\n img.setAttribute('style', \"position: absolute; top: \".concat(spriteV, \"px; left: \").concat(spriteH, \"px\"));\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img.style.clip = \"rect(-\".concat(spriteV, \"px, -\").concat(spriteH + this.width, \"px, -\").concat(spriteV + this.height, \", -\").concat(spriteH, \")\");\n }\n var textElm = document.createElement('div');\n textElm.setAttribute('style', \"position: absolute; top: \".concat(this.anchorText[0], \"px; left: \").concat(this.anchorText[1], \"px; color: \").concat(this.textColor, \"; font-size: \").concat(this.textSize, \"px; font-family: \").concat(this.fontFamily, \"; font-weight: \").concat(this.fontWeight, \"; fontStyle: \").concat(this.fontStyle, \"; text-decoration: \").concat(this.textDecoration, \"; text-align: center; width: \").concat(this.width, \"px; line-height: \").concat(this.height, \"px\"));\n if ((_c = this.sums) === null || _c === void 0 ? void 0 : _c.text)\n textElm.innerText = \"\".concat((_d = this.sums) === null || _d === void 0 ? void 0 : _d.text);\n if ((_e = this.sums) === null || _e === void 0 ? void 0 : _e.html)\n textElm.innerHTML = \"\".concat((_f = this.sums) === null || _f === void 0 ? void 0 : _f.html);\n this.div.innerHTML = '';\n this.div.appendChild(img);\n this.div.appendChild(textElm);\n this.div.title = divTitle;\n this.div.style.display = '';\n }\n this.visible = true;\n };\n ClusterIcon.prototype.useStyle = function (sums) {\n this.sums = sums;\n var styles = this.cluster.getClusterer().getStyles();\n var style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))];\n if (style) {\n this.url = style.url;\n this.height = style.height;\n this.width = style.width;\n if (style.className) {\n this.className = \"\".concat(this.clusterClassName, \" \").concat(style.className);\n }\n this.anchorText = style.anchorText || [0, 0];\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];\n this.textColor = style.textColor || 'black';\n this.textSize = style.textSize || 11;\n this.textDecoration = style.textDecoration || 'none';\n this.fontWeight = style.fontWeight || 'bold';\n this.fontStyle = style.fontStyle || 'normal';\n this.fontFamily = style.fontFamily || 'Arial,sans-serif';\n this.backgroundPosition = style.backgroundPosition || '0 0';\n }\n };\n ClusterIcon.prototype.setCenter = function (center) {\n this.center = center;\n };\n ClusterIcon.prototype.getPosFromLatLng = function (latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n if (pos !== null) {\n pos.x -= this.anchorIcon[1];\n pos.y -= this.anchorIcon[0];\n }\n return pos;\n };\n return ClusterIcon;\n}());\n\n/* global google */\nvar Cluster = /** @class */ (function () {\n function Cluster(markerClusterer) {\n this.markerClusterer = markerClusterer;\n this.map = this.markerClusterer.getMap();\n this.gridSize = this.markerClusterer.getGridSize();\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize();\n this.averageCenter = this.markerClusterer.getAverageCenter();\n this.markers = [];\n this.center = undefined;\n this.bounds = null;\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles());\n this.getSize = this.getSize.bind(this);\n this.getMarkers = this.getMarkers.bind(this);\n this.getCenter = this.getCenter.bind(this);\n this.getMap = this.getMap.bind(this);\n this.getClusterer = this.getClusterer.bind(this);\n this.getBounds = this.getBounds.bind(this);\n this.remove = this.remove.bind(this);\n this.addMarker = this.addMarker.bind(this);\n this.isMarkerInClusterBounds = this.isMarkerInClusterBounds.bind(this);\n this.calculateBounds = this.calculateBounds.bind(this);\n this.updateIcon = this.updateIcon.bind(this);\n this.isMarkerAlreadyAdded = this.isMarkerAlreadyAdded.bind(this);\n }\n Cluster.prototype.getSize = function () {\n return this.markers.length;\n };\n Cluster.prototype.getMarkers = function () {\n return this.markers;\n };\n Cluster.prototype.getCenter = function () {\n return this.center;\n };\n Cluster.prototype.getMap = function () {\n return this.map;\n };\n Cluster.prototype.getClusterer = function () {\n return this.markerClusterer;\n };\n Cluster.prototype.getBounds = function () {\n var bounds = new google.maps.LatLngBounds(this.center, this.center);\n var markers = this.getMarkers();\n for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {\n var marker = markers_1[_i];\n var position = marker.getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n return bounds;\n };\n Cluster.prototype.remove = function () {\n this.clusterIcon.setMap(null);\n this.markers = [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete this.markers;\n };\n Cluster.prototype.addMarker = function (marker) {\n var _a;\n if (this.isMarkerAlreadyAdded(marker)) {\n return false;\n }\n if (!this.center) {\n var position = marker.getPosition();\n if (position) {\n this.center = position;\n this.calculateBounds();\n }\n }\n else {\n if (this.averageCenter) {\n var position = marker.getPosition();\n if (position) {\n var length_1 = this.markers.length + 1;\n this.center = new google.maps.LatLng((this.center.lat() * (length_1 - 1) + position.lat()) / length_1, (this.center.lng() * (length_1 - 1) + position.lng()) / length_1);\n this.calculateBounds();\n }\n }\n }\n marker.isAdded = true;\n this.markers.push(marker);\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = (_a = this.map) === null || _a === void 0 ? void 0 : _a.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n }\n else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n }\n else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (var _i = 0, _b = this.markers; _i < _b.length; _i++) {\n var markerElement = _b[_i];\n markerElement.setMap(null);\n }\n }\n else {\n marker.setMap(null);\n }\n return true;\n };\n Cluster.prototype.isMarkerInClusterBounds = function (marker) {\n if (this.bounds !== null) {\n var position = marker.getPosition();\n if (position) {\n return this.bounds.contains(position);\n }\n }\n return false;\n };\n Cluster.prototype.calculateBounds = function () {\n this.bounds = this.markerClusterer.getExtendedBounds(new google.maps.LatLngBounds(this.center, this.center));\n };\n Cluster.prototype.updateIcon = function () {\n var _a;\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n var zoom = (_a = this.map) === null || _a === void 0 ? void 0 : _a.getZoom();\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide();\n return;\n }\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide();\n return;\n }\n if (this.center) {\n this.clusterIcon.setCenter(this.center);\n }\n this.clusterIcon.useStyle(this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length));\n this.clusterIcon.show();\n };\n Cluster.prototype.isMarkerAlreadyAdded = function (marker) {\n if (this.markers.includes) {\n return this.markers.includes(marker);\n }\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true;\n }\n }\n return false;\n };\n return Cluster;\n}());\n\n/* global google */\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nfunction CALCULATOR(markers, numStyles) {\n var count = markers.length;\n var numberOfDigits = count.toString().length;\n var index = Math.min(numberOfDigits, numStyles);\n return {\n text: count.toString(),\n index: index,\n title: '',\n };\n}\nvar BATCH_SIZE = 2000;\nvar BATCH_SIZE_IE = 500;\nvar IMAGE_PATH = 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\nvar IMAGE_EXTENSION = 'png';\nvar IMAGE_SIZES = [53, 56, 66, 78, 90];\nvar CLUSTERER_CLASS = 'cluster';\nvar Clusterer = /** @class */ (function () {\n function Clusterer(map, optMarkers, optOptions) {\n if (optMarkers === void 0) { optMarkers = []; }\n if (optOptions === void 0) { optOptions = {}; }\n this.getMinimumClusterSize = this.getMinimumClusterSize.bind(this);\n this.setMinimumClusterSize = this.setMinimumClusterSize.bind(this);\n this.getEnableRetinaIcons = this.getEnableRetinaIcons.bind(this);\n this.setEnableRetinaIcons = this.setEnableRetinaIcons.bind(this);\n this.addToClosestCluster = this.addToClosestCluster.bind(this);\n this.getImageExtension = this.getImageExtension.bind(this);\n this.setImageExtension = this.setImageExtension.bind(this);\n this.getExtendedBounds = this.getExtendedBounds.bind(this);\n this.getAverageCenter = this.getAverageCenter.bind(this);\n this.setAverageCenter = this.setAverageCenter.bind(this);\n this.getTotalClusters = this.getTotalClusters.bind(this);\n this.fitMapToMarkers = this.fitMapToMarkers.bind(this);\n this.getIgnoreHidden = this.getIgnoreHidden.bind(this);\n this.setIgnoreHidden = this.setIgnoreHidden.bind(this);\n this.getClusterClass = this.getClusterClass.bind(this);\n this.setClusterClass = this.setClusterClass.bind(this);\n this.getTotalMarkers = this.getTotalMarkers.bind(this);\n this.getZoomOnClick = this.getZoomOnClick.bind(this);\n this.setZoomOnClick = this.setZoomOnClick.bind(this);\n this.getBatchSizeIE = this.getBatchSizeIE.bind(this);\n this.setBatchSizeIE = this.setBatchSizeIE.bind(this);\n this.createClusters = this.createClusters.bind(this);\n this.onZoomChanged = this.onZoomChanged.bind(this);\n this.getImageSizes = this.getImageSizes.bind(this);\n this.setImageSizes = this.setImageSizes.bind(this);\n this.getCalculator = this.getCalculator.bind(this);\n this.setCalculator = this.setCalculator.bind(this);\n this.removeMarkers = this.removeMarkers.bind(this);\n this.resetViewport = this.resetViewport.bind(this);\n this.getImagePath = this.getImagePath.bind(this);\n this.setImagePath = this.setImagePath.bind(this);\n this.pushMarkerTo = this.pushMarkerTo.bind(this);\n this.removeMarker = this.removeMarker.bind(this);\n this.clearMarkers = this.clearMarkers.bind(this);\n this.setupStyles = this.setupStyles.bind(this);\n this.getGridSize = this.getGridSize.bind(this);\n this.setGridSize = this.setGridSize.bind(this);\n this.getClusters = this.getClusters.bind(this);\n this.getMaxZoom = this.getMaxZoom.bind(this);\n this.setMaxZoom = this.setMaxZoom.bind(this);\n this.getMarkers = this.getMarkers.bind(this);\n this.addMarkers = this.addMarkers.bind(this);\n this.getStyles = this.getStyles.bind(this);\n this.setStyles = this.setStyles.bind(this);\n this.addMarker = this.addMarker.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.getTitle = this.getTitle.bind(this);\n this.setTitle = this.setTitle.bind(this);\n this.repaint = this.repaint.bind(this);\n this.onIdle = this.onIdle.bind(this);\n this.redraw = this.redraw.bind(this);\n this.onAdd = this.onAdd.bind(this);\n this.draw = this.draw.bind(this);\n this.extend = this.extend.bind(this);\n this.extend(Clusterer, google.maps.OverlayView);\n this.markers = [];\n this.clusters = [];\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n this.gridSize = optOptions.gridSize || 60;\n this.minClusterSize = optOptions.minimumClusterSize || 2;\n this.maxZoom = optOptions.maxZoom || null;\n this.styles = optOptions.styles || [];\n this.title = optOptions.title || '';\n this.zoomOnClick = true;\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick;\n }\n this.averageCenter = false;\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter;\n }\n this.ignoreHidden = false;\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden;\n }\n this.enableRetinaIcons = false;\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons;\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH;\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION;\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES;\n this.calculator = optOptions.calculator || CALCULATOR;\n this.batchSize = optOptions.batchSize || BATCH_SIZE;\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE;\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS;\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE;\n }\n this.timerRefStatic = null;\n this.setupStyles();\n this.addMarkers(optMarkers, true);\n this.setMap(map); // Note: this causes onAdd to be called\n }\n Clusterer.prototype.onZoomChanged = function () {\n var _a, _b;\n this.resetViewport(false);\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (((_a = this.getMap()) === null || _a === void 0 ? void 0 : _a.getZoom()) === (this.get('minZoom') || 0) ||\n ((_b = this.getMap()) === null || _b === void 0 ? void 0 : _b.getZoom()) === this.get('maxZoom')) {\n google.maps.event.trigger(this, 'idle');\n }\n };\n Clusterer.prototype.onIdle = function () {\n this.redraw();\n };\n Clusterer.prototype.onAdd = function () {\n var map = this.getMap();\n this.activeMap = map;\n this.ready = true;\n this.repaint();\n if (map !== null) {\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(map, 'zoom_changed', this.onZoomChanged),\n google.maps.event.addListener(map, 'idle', this.onIdle),\n ];\n }\n };\n Clusterer.prototype.onRemove = function () {\n // Put all the managed markers back on the map:\n for (var _i = 0, _a = this.markers; _i < _a.length; _i++) {\n var marker = _a[_i];\n if (marker.getMap() !== this.activeMap) {\n marker.setMap(this.activeMap);\n }\n }\n // Remove all clusters:\n for (var _b = 0, _c = this.clusters; _b < _c.length; _b++) {\n var cluster = _c[_b];\n cluster.remove();\n }\n this.clusters = [];\n // Remove map event listeners:\n for (var _d = 0, _e = this.listeners; _d < _e.length; _d++) {\n var listener = _e[_d];\n google.maps.event.removeListener(listener);\n }\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n };\n Clusterer.prototype.draw = function () { return; };\n Clusterer.prototype.getMap = function () { return null; };\n Clusterer.prototype.getPanes = function () { return null; };\n Clusterer.prototype.getProjection = function () {\n return {\n fromContainerPixelToLatLng: function () { return null; },\n fromDivPixelToLatLng: function () { return null; },\n fromLatLngToContainerPixel: function () { return null; },\n fromLatLngToDivPixel: function () { return null; },\n getVisibleRegion: function () { return null; },\n getWorldWidth: function () { return 0; }\n };\n };\n Clusterer.prototype.setMap = function () { return; };\n Clusterer.prototype.addListener = function () {\n return {\n remove: function () { return; }\n };\n };\n Clusterer.prototype.bindTo = function () { return; };\n Clusterer.prototype.get = function () { return; };\n Clusterer.prototype.notify = function () { return; };\n Clusterer.prototype.set = function () { return; };\n Clusterer.prototype.setValues = function () { return; };\n Clusterer.prototype.unbind = function () { return; };\n Clusterer.prototype.unbindAll = function () { return; };\n Clusterer.prototype.setupStyles = function () {\n if (this.styles.length > 0) {\n return;\n }\n for (var i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: \"\".concat(this.imagePath + (i + 1), \".\").concat(this.imageExtension),\n height: this.imageSizes[i] || 0,\n width: this.imageSizes[i] || 0,\n });\n }\n };\n Clusterer.prototype.fitMapToMarkers = function () {\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {\n var marker = markers_1[_i];\n var position = marker.getPosition();\n if (position) {\n bounds.extend(position);\n }\n }\n var map = this.getMap();\n if (map !== null && 'fitBounds' in map) {\n map.fitBounds(bounds);\n }\n };\n Clusterer.prototype.getGridSize = function () {\n return this.gridSize;\n };\n Clusterer.prototype.setGridSize = function (gridSize) {\n this.gridSize = gridSize;\n };\n Clusterer.prototype.getMinimumClusterSize = function () {\n return this.minClusterSize;\n };\n Clusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {\n this.minClusterSize = minimumClusterSize;\n };\n Clusterer.prototype.getMaxZoom = function () {\n return this.maxZoom;\n };\n Clusterer.prototype.setMaxZoom = function (maxZoom) {\n this.maxZoom = maxZoom;\n };\n Clusterer.prototype.getStyles = function () {\n return this.styles;\n };\n Clusterer.prototype.setStyles = function (styles) {\n this.styles = styles;\n };\n Clusterer.prototype.getTitle = function () {\n return this.title;\n };\n Clusterer.prototype.setTitle = function (title) {\n this.title = title;\n };\n Clusterer.prototype.getZoomOnClick = function () {\n return this.zoomOnClick;\n };\n Clusterer.prototype.setZoomOnClick = function (zoomOnClick) {\n this.zoomOnClick = zoomOnClick;\n };\n Clusterer.prototype.getAverageCenter = function () {\n return this.averageCenter;\n };\n Clusterer.prototype.setAverageCenter = function (averageCenter) {\n this.averageCenter = averageCenter;\n };\n Clusterer.prototype.getIgnoreHidden = function () {\n return this.ignoreHidden;\n };\n Clusterer.prototype.setIgnoreHidden = function (ignoreHidden) {\n this.ignoreHidden = ignoreHidden;\n };\n Clusterer.prototype.getEnableRetinaIcons = function () {\n return this.enableRetinaIcons;\n };\n Clusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {\n this.enableRetinaIcons = enableRetinaIcons;\n };\n Clusterer.prototype.getImageExtension = function () {\n return this.imageExtension;\n };\n Clusterer.prototype.setImageExtension = function (imageExtension) {\n this.imageExtension = imageExtension;\n };\n Clusterer.prototype.getImagePath = function () {\n return this.imagePath;\n };\n Clusterer.prototype.setImagePath = function (imagePath) {\n this.imagePath = imagePath;\n };\n Clusterer.prototype.getImageSizes = function () {\n return this.imageSizes;\n };\n Clusterer.prototype.setImageSizes = function (imageSizes) {\n this.imageSizes = imageSizes;\n };\n Clusterer.prototype.getCalculator = function () {\n return this.calculator;\n };\n Clusterer.prototype.setCalculator = function (calculator) {\n this.calculator = calculator;\n };\n Clusterer.prototype.getBatchSizeIE = function () {\n return this.batchSizeIE;\n };\n Clusterer.prototype.setBatchSizeIE = function (batchSizeIE) {\n this.batchSizeIE = batchSizeIE;\n };\n Clusterer.prototype.getClusterClass = function () {\n return this.clusterClass;\n };\n Clusterer.prototype.setClusterClass = function (clusterClass) {\n this.clusterClass = clusterClass;\n };\n Clusterer.prototype.getMarkers = function () {\n return this.markers;\n };\n Clusterer.prototype.getTotalMarkers = function () {\n return this.markers.length;\n };\n Clusterer.prototype.getClusters = function () {\n return this.clusters;\n };\n Clusterer.prototype.getTotalClusters = function () {\n return this.clusters.length;\n };\n Clusterer.prototype.addMarker = function (marker, optNoDraw) {\n this.pushMarkerTo(marker);\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.addMarkers = function (markers, optNoDraw) {\n for (var key in markers) {\n if (Object.prototype.hasOwnProperty.call(markers, key)) {\n var marker = markers[key];\n if (marker) {\n this.pushMarkerTo(marker);\n }\n }\n }\n if (!optNoDraw) {\n this.redraw();\n }\n };\n Clusterer.prototype.pushMarkerTo = function (marker) {\n var _this = this;\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n google.maps.event.addListener(marker, 'dragend', function () {\n if (_this.ready) {\n marker.isAdded = false;\n _this.repaint();\n }\n });\n }\n marker.isAdded = false;\n this.markers.push(marker);\n };\n Clusterer.prototype.removeMarker_ = function (marker) {\n var index = -1;\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker);\n }\n else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i;\n break;\n }\n }\n }\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n marker.setMap(null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n return true;\n };\n Clusterer.prototype.removeMarker = function (marker, optNoDraw) {\n var removed = this.removeMarker_(marker);\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.removeMarkers = function (markers, optNoDraw) {\n var removed = false;\n for (var _i = 0, markers_2 = markers; _i < markers_2.length; _i++) {\n var marker = markers_2[_i];\n removed = removed || this.removeMarker_(marker);\n }\n if (!optNoDraw && removed) {\n this.repaint();\n }\n return removed;\n };\n Clusterer.prototype.clearMarkers = function () {\n this.resetViewport(true);\n this.markers = [];\n };\n Clusterer.prototype.repaint = function () {\n var oldClusters = this.clusters.slice();\n this.clusters = [];\n this.resetViewport(false);\n this.redraw();\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (var _i = 0, oldClusters_1 = oldClusters; _i < oldClusters_1.length; _i++) {\n var oldCluster = oldClusters_1[_i];\n oldCluster.remove();\n }\n }, 0);\n };\n Clusterer.prototype.getExtendedBounds = function (bounds) {\n var projection = this.getProjection();\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()));\n if (trPix !== null) {\n trPix.x += this.gridSize;\n trPix.y -= this.gridSize;\n }\n var blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()));\n if (blPix !== null) {\n blPix.x -= this.gridSize;\n blPix.y += this.gridSize;\n }\n // Extend the bounds to contain the new bounds.\n if (trPix !== null) {\n // Convert the pixel points back to LatLng nw\n var point1 = projection.fromDivPixelToLatLng(trPix);\n if (point1 !== null) {\n bounds.extend(point1);\n }\n }\n if (blPix !== null) {\n // Convert the pixel points back to LatLng sw\n var point2 = projection.fromDivPixelToLatLng(blPix);\n if (point2 !== null) {\n bounds.extend(point2);\n }\n }\n return bounds;\n };\n Clusterer.prototype.redraw = function () {\n // Redraws all the clusters.\n this.createClusters(0);\n };\n Clusterer.prototype.resetViewport = function (optHide) {\n // Remove all the clusters\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var cluster = _a[_i];\n cluster.remove();\n }\n this.clusters = [];\n // Reset the markers to not be added and to be removed from the map.\n for (var _b = 0, _c = this.markers; _b < _c.length; _b++) {\n var marker = _c[_b];\n marker.isAdded = false;\n if (optHide) {\n marker.setMap(null);\n }\n }\n };\n Clusterer.prototype.distanceBetweenPoints = function (p1, p2) {\n var R = 6371; // Radius of the Earth in km\n var dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180;\n var dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));\n };\n Clusterer.prototype.isMarkerInBounds = function (marker, bounds) {\n var position = marker.getPosition();\n if (position) {\n return bounds.contains(position);\n }\n return false;\n };\n Clusterer.prototype.addToClosestCluster = function (marker) {\n var cluster;\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var clusterElement = _a[_i];\n cluster = clusterElement;\n var center = cluster.getCenter();\n var position = marker.getPosition();\n if (center && position) {\n var d = this.distanceBetweenPoints(center, position);\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n }\n else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters.push(cluster);\n }\n };\n Clusterer.prototype.createClusters = function (iFirst) {\n var _this = this;\n if (!this.ready) {\n return;\n }\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the Clusterer begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this);\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n delete this.timerRefStatic;\n }\n }\n var map = this.getMap();\n var bounds = map !== null && 'getBounds' in map ? map.getBounds() : null;\n var zoom = (map === null || map === void 0 ? void 0 : map.getZoom()) || 0;\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n var mapBounds = zoom > 3\n ? new google.maps.LatLngBounds(bounds === null || bounds === void 0 ? void 0 : bounds.getSouthWest(), bounds === null || bounds === void 0 ? void 0 : bounds.getNorthEast())\n : new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n var extendedMapBounds = this.getExtendedBounds(mapBounds);\n var iLast = Math.min(iFirst + this.batchSize, this.markers.length);\n for (var i = iFirst; i < iLast; i++) {\n var marker = this.markers[i];\n if (marker && !marker.isAdded && this.isMarkerInBounds(marker, extendedMapBounds) && (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible()))) {\n this.addToClosestCluster(marker);\n }\n }\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(function () {\n _this.createClusters(iLast);\n }, 0);\n }\n else {\n this.timerRefStatic = null;\n /**\n * This event is fired when the Clusterer stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this);\n for (var _i = 0, _a = this.clusters; _i < _a.length; _i++) {\n var cluster = _a[_i];\n cluster.updateIcon();\n }\n }\n };\n Clusterer.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n var prop = property;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prototype[prop] = object.prototype[prop];\n }\n return this;\n }.apply(obj1, [obj2]);\n };\n return Clusterer;\n}());\n\nexport { Cluster, ClusterIcon, Clusterer };\n//# sourceMappingURL=esm.js.map\n","import {\n type ContextType,\n PureComponent,\n useState,\n memo,\n useContext,\n useEffect,\n} from 'react'\nimport {\n unregisterEvents,\n applyUpdatersToPropsAndRegisterEvents,\n} from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nimport {\n Cluster,\n Clusterer,\n type TCalculator,\n type ClusterIconStyle,\n type ClustererOptions,\n} from '@react-google-maps/marker-clusterer'\n\nconst eventMap = {\n onClick: 'click',\n onClusteringBegin: 'clusteringbegin',\n onClusteringEnd: 'clusteringend',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n}\n\nconst updaterMap = {\n averageCenter(instance: Clusterer, averageCenter: boolean): void {\n instance.setAverageCenter(averageCenter)\n },\n\n batchSizeIE(instance: Clusterer, batchSizeIE: number): void {\n instance.setBatchSizeIE(batchSizeIE)\n },\n\n calculator(instance: Clusterer, calculator: TCalculator): void {\n instance.setCalculator(calculator)\n },\n\n clusterClass(instance: Clusterer, clusterClass: string): void {\n instance.setClusterClass(clusterClass)\n },\n\n enableRetinaIcons(instance: Clusterer, enableRetinaIcons: boolean): void {\n instance.setEnableRetinaIcons(enableRetinaIcons)\n },\n\n gridSize(instance: Clusterer, gridSize: number): void {\n instance.setGridSize(gridSize)\n },\n\n ignoreHidden(instance: Clusterer, ignoreHidden: boolean): void {\n instance.setIgnoreHidden(ignoreHidden)\n },\n\n imageExtension(instance: Clusterer, imageExtension: string): void {\n instance.setImageExtension(imageExtension)\n },\n\n imagePath(instance: Clusterer, imagePath: string): void {\n instance.setImagePath(imagePath)\n },\n\n imageSizes(instance: Clusterer, imageSizes: number[]): void {\n instance.setImageSizes(imageSizes)\n },\n\n maxZoom(instance: Clusterer, maxZoom: number): void {\n instance.setMaxZoom(maxZoom)\n },\n\n minimumClusterSize(instance: Clusterer, minimumClusterSize: number): void {\n instance.setMinimumClusterSize(minimumClusterSize)\n },\n\n styles(instance: Clusterer, styles: ClusterIconStyle[]): void {\n instance.setStyles(styles)\n },\n\n title(instance: Clusterer, title: string): void {\n instance.setTitle(title)\n },\n\n zoomOnClick(instance: Clusterer, zoomOnClick: boolean): void {\n instance.setZoomOnClick(zoomOnClick)\n },\n}\n\ninterface ClustererState {\n markerClusterer: Clusterer | null\n}\n\nconst defaultOptions = {}\n\nexport interface MarkerClustererProps {\n // required\n children: (markerClusterer: Clusterer) => JSX.Element\n\n options?: ClustererOptions | undefined\n /** Whether the position of a cluster marker should be the average position of all markers in the cluster. If set to false, the cluster marker is positioned at the location of the first marker added to the cluster. The default value is false. */\n averageCenter?: boolean | undefined\n /** When Internet Explorer is being used, markers are processed in several batches with a small delay inserted between each batch in an attempt to avoid Javascript timeout errors. Set this property to the number of markers to be processed in a single batch; select as high a number as you can without causing a timeout error in the browser. This number might need to be as low as 100 if 15,000 markers are being managed, for example. The default value is MarkerClusterer.BATCH_SIZE_IE. */\n batchSizeIE?: number | undefined\n /** The function used to determine the text to be displayed on a cluster marker and the index indicating which style to use for the cluster marker. The input parameters for the function are (1) the array of markers represented by a cluster marker and (2) the number of cluster icon styles. It returns a ClusterIconInfo object. The default calculator returns a text property which is the number of markers in the cluster and an index property which is one higher than the lowest integer such that 10^i exceeds the number of markers in the cluster, or the size of the styles array, whichever is less. The styles array element used has an index of index minus 1. For example, the default calculator returns a text value of \"125\" and an index of 3 for a cluster icon representing 125 markers so the element used in the styles array is 2. A calculator may also return a title property that contains the text of the tooltip to be used for the cluster marker. If title is not defined, the tooltip is set to the value of the title property for the MarkerClusterer. The default value is MarkerClusterer.CALCULATOR. */\n calculator?: TCalculator | undefined\n /** The name of the CSS class defining general styles for the cluster markers. Use this class to define CSS styles that are not set up by the code that processes the styles array. The default value is \"cluster\". */\n clusterClass?: string | undefined\n /** Whether to allow the use of cluster icons that have sizes that are some multiple (typically double) of their actual display size. Icons such as these look better when viewed on high-resolution monitors such as Apple's Retina displays. Note: if this property is true, sprites cannot be used as cluster icons. The default value is false. */\n enableRetinaIcons?: boolean | undefined\n /** The grid size of a cluster in pixels. The grid is a square. The default value is 60. */\n gridSize?: number | undefined\n /** Whether to ignore hidden markers in clusters. You may want to set this to true to ensure that hidden markers are not included in the marker count that appears on a cluster marker (this count is the value of the text property of the result returned by the default calculator). If set to true and you change the visibility of a marker being clustered, be sure to also call MarkerClusterer.repaint(). The default value is false. */\n ignoreHidden?: boolean | undefined\n /** The extension name for the cluster icon image files (e.g., \"png\" or \"jpg\"). The default value is MarkerClusterer.IMAGE_EXTENSION. */\n imageExtension?: string | undefined\n /** The full URL of the root name of the group of image files to use for cluster icons. The complete file name is of the form imagePath.imageExtension where n is the image file number (1, 2, etc.). The default value is MarkerClusterer.IMAGE_PATH. */\n imagePath?: string | undefined\n /** An array of numbers containing the widths of the group of imagePath.imageExtension image files. (The images are assumed to be square.) The default value is MarkerClusterer.IMAGE_SIZES. */\n imageSizes?: number[] | undefined\n /** The maximum zoom level at which clustering is enabled or null if clustering is to be enabled at all zoom levels. The default value is null. */\n maxZoom?: number | undefined\n /** The minimum number of markers needed in a cluster before the markers are hidden and a cluster marker appears. The default value is 2. */\n minimumClusterSize?: number | undefined\n /** An array of ClusterIconStyle elements defining the styles of the cluster markers to be used. The element to be used to style a given cluster marker is determined by the function defined by the calculator property. The default is an array of ClusterIconStyle elements whose properties are derived from the values for imagePath, imageExtension, and imageSizes. */\n styles?: ClusterIconStyle[] | undefined\n /** The tooltip to display when the mouse moves over a cluster marker. (Alternatively, you can use a custom calculator function to specify a different tooltip for each cluster marker.) The default value is \"\". */\n title?: string | undefined\n /** Whether to zoom the map when a cluster marker is clicked. You may want to set this to false if you have installed a handler for the click event and it deals with zooming on its own. The default value is true. */\n zoomOnClick?: boolean | undefined\n /** This event is fired when a cluster marker is clicked. */\n onClick?: ((cluster: Cluster) => void) | undefined\n /** This event is fired when the MarkerClusterer begins clustering markers. */\n onClusteringBegin?: ((markerClusterer: Clusterer) => void) | undefined\n /** This event is fired when the MarkerClusterer stops clustering markers. */\n onClusteringEnd?: ((markerClusterer: Clusterer) => void) | undefined\n /** \tThis event is fired when the mouse moves over a cluster marker. */\n onMouseOver?: (cluster: Cluster) => void | undefined\n /** This event is fired when the mouse moves out of a cluster marker. */\n onMouseOut?: (cluster: Cluster) => void | undefined\n /** This callback is called when the markerClusterer instance has loaded. It is called with the markerClusterer instance. */\n onLoad?: ((markerClusterer: Clusterer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the markerClusterer instance. */\n onUnmount?: ((markerClusterer: Clusterer) => void) | undefined\n}\n\nfunction MarkerClustererFunctional(\n props: MarkerClustererProps\n): JSX.Element | null {\n const {\n children,\n options,\n averageCenter,\n batchSizeIE,\n calculator,\n clusterClass,\n enableRetinaIcons,\n gridSize,\n ignoreHidden,\n imageExtension,\n imagePath,\n imageSizes,\n maxZoom,\n minimumClusterSize,\n styles,\n title,\n zoomOnClick,\n onClick,\n onClusteringBegin,\n onClusteringEnd,\n onMouseOver,\n onMouseOut,\n onLoad,\n onUnmount,\n } = props\n const [instance, setInstance] = useState(null)\n const map = useContext(MapContext)\n\n const [clickListener, setClickListener] = useState(null)\n const [clusteringBeginListener, setClusteringBeginListener] = useState(null)\n const [clusteringEndListener, setClusteringEndListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, eventMap.onMouseOut, onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(\n instance,\n eventMap.onMouseOver,\n onMouseOver\n )\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, eventMap.onClick, onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onClusteringBegin) {\n if (clusteringBeginListener !== null) {\n google.maps.event.removeListener(clusteringBeginListener)\n }\n\n setClusteringBeginListener(\n google.maps.event.addListener(\n instance,\n eventMap.onClusteringBegin,\n onClusteringBegin\n )\n )\n }\n }, [onClusteringBegin])\n\n useEffect(() => {\n if (instance && onClusteringEnd) {\n if (clusteringEndListener !== null) {\n google.maps.event.removeListener(clusteringEndListener)\n }\n\n setClusteringBeginListener(\n google.maps.event.addListener(\n instance,\n eventMap.onClusteringEnd,\n onClusteringEnd\n )\n )\n }\n }, [onClusteringEnd])\n\n useEffect(() => {\n if (typeof averageCenter !== 'undefined' && instance !== null) {\n updaterMap.averageCenter(instance, averageCenter)\n }\n }, [instance, averageCenter])\n\n useEffect(() => {\n if (typeof batchSizeIE !== 'undefined' && instance !== null) {\n updaterMap.batchSizeIE(instance, batchSizeIE)\n }\n }, [instance, batchSizeIE])\n\n useEffect(() => {\n if (typeof calculator !== 'undefined' && instance !== null) {\n updaterMap.calculator(instance, calculator)\n }\n }, [instance, calculator])\n\n useEffect(() => {\n if (typeof clusterClass !== 'undefined' && instance !== null) {\n updaterMap.clusterClass(instance, clusterClass)\n }\n }, [instance, clusterClass])\n\n useEffect(() => {\n if (typeof enableRetinaIcons !== 'undefined' && instance !== null) {\n updaterMap.enableRetinaIcons(instance, enableRetinaIcons)\n }\n }, [instance, enableRetinaIcons])\n\n useEffect(() => {\n if (typeof gridSize !== 'undefined' && instance !== null) {\n updaterMap.gridSize(instance, gridSize)\n }\n }, [instance, gridSize])\n\n useEffect(() => {\n if (typeof ignoreHidden !== 'undefined' && instance !== null) {\n updaterMap.ignoreHidden(instance, ignoreHidden)\n }\n }, [instance, ignoreHidden])\n\n useEffect(() => {\n if (typeof imageExtension !== 'undefined' && instance !== null) {\n updaterMap.imageExtension(instance, imageExtension)\n }\n }, [instance, imageExtension])\n\n useEffect(() => {\n if (typeof imagePath !== 'undefined' && instance !== null) {\n updaterMap.imagePath(instance, imagePath)\n }\n }, [instance, imagePath])\n\n useEffect(() => {\n if (typeof imageSizes !== 'undefined' && instance !== null) {\n updaterMap.imageSizes(instance, imageSizes)\n }\n }, [instance, imageSizes])\n\n useEffect(() => {\n if (typeof maxZoom !== 'undefined' && instance !== null) {\n updaterMap.maxZoom(instance, maxZoom)\n }\n }, [instance, maxZoom])\n\n useEffect(() => {\n if (typeof minimumClusterSize !== 'undefined' && instance !== null) {\n updaterMap.minimumClusterSize(instance, minimumClusterSize)\n }\n }, [instance, minimumClusterSize])\n\n useEffect(() => {\n if (typeof styles !== 'undefined' && instance !== null) {\n updaterMap.styles(instance, styles)\n }\n }, [instance, styles])\n\n useEffect(() => {\n if (typeof title !== 'undefined' && instance !== null) {\n updaterMap.title(instance, title)\n }\n }, [instance, title])\n\n useEffect(() => {\n if (typeof zoomOnClick !== 'undefined' && instance !== null) {\n updaterMap.zoomOnClick(instance, zoomOnClick)\n }\n }, [instance, zoomOnClick])\n\n useEffect(() => {\n if (!map) return\n\n const clustererOptions = {\n ...(options || defaultOptions),\n }\n\n const clusterer = new Clusterer(map, [], clustererOptions)\n\n if (averageCenter) {\n updaterMap.averageCenter(clusterer, averageCenter)\n }\n\n if (batchSizeIE) {\n updaterMap.batchSizeIE(clusterer, batchSizeIE)\n }\n\n if (calculator) {\n updaterMap.calculator(clusterer, calculator)\n }\n\n if (clusterClass) {\n updaterMap.clusterClass(clusterer, clusterClass)\n }\n\n if (enableRetinaIcons) {\n updaterMap.enableRetinaIcons(clusterer, enableRetinaIcons)\n }\n\n if (gridSize) {\n updaterMap.gridSize(clusterer, gridSize)\n }\n\n if (ignoreHidden) {\n updaterMap.ignoreHidden(clusterer, ignoreHidden)\n }\n\n if (imageExtension) {\n updaterMap.imageExtension(clusterer, imageExtension)\n }\n\n if (imagePath) {\n updaterMap.imagePath(clusterer, imagePath)\n }\n\n if (imageSizes) {\n updaterMap.imageSizes(clusterer, imageSizes)\n }\n\n if (maxZoom) {\n updaterMap.maxZoom(clusterer, maxZoom)\n }\n\n if (minimumClusterSize) {\n updaterMap.minimumClusterSize(clusterer, minimumClusterSize)\n }\n\n if (styles) {\n updaterMap.styles(clusterer, styles)\n }\n\n if (title) {\n updaterMap.title(clusterer, title)\n }\n\n if (zoomOnClick) {\n updaterMap.zoomOnClick(clusterer, zoomOnClick)\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(\n clusterer,\n eventMap.onMouseOut,\n onMouseOut\n )\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(\n clusterer,\n eventMap.onMouseOver,\n onMouseOver\n )\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(clusterer, eventMap.onClick, onClick)\n )\n }\n\n if (onClusteringBegin) {\n setClusteringBeginListener(\n google.maps.event.addListener(\n clusterer,\n eventMap.onClusteringBegin,\n onClusteringBegin\n )\n )\n }\n\n if (onClusteringEnd) {\n setClusteringEndListener(\n google.maps.event.addListener(\n clusterer,\n eventMap.onClusteringEnd,\n onClusteringEnd\n )\n )\n }\n\n setInstance(clusterer)\n\n if (onLoad) {\n onLoad(clusterer)\n }\n\n return () => {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (clusteringBeginListener !== null) {\n google.maps.event.removeListener(clusteringBeginListener)\n }\n\n if (clusteringEndListener !== null) {\n google.maps.event.removeListener(clusteringEndListener)\n }\n\n if (onUnmount) {\n onUnmount(clusterer)\n }\n }\n }, [])\n\n return instance !== null ? children(instance) || null : null\n}\n\nexport const MarkerClustererF = memo(MarkerClustererFunctional)\n\nexport class ClustererComponent extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: ClustererState = {\n markerClusterer: null,\n }\n\n setClustererCallback = (): void => {\n if (this.state.markerClusterer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.markerClusterer)\n }\n }\n\n override componentDidMount(): void {\n if (this.context) {\n const markerClusterer = new Clusterer(this.context, [], this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: markerClusterer,\n })\n\n this.setState((): ClustererState => {\n return {\n markerClusterer,\n }\n }, this.setClustererCallback)\n }\n }\n\n override componentDidUpdate(prevProps: MarkerClustererProps): void {\n if (this.state.markerClusterer) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.markerClusterer,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.markerClusterer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.markerClusterer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.state.markerClusterer.setMap(null)\n }\n }\n\n override render(): JSX.Element | null {\n return this.state.markerClusterer !== null\n ? this.props.children(this.state.markerClusterer)\n : null\n }\n}\n\nexport default ClustererComponent\n","// This handler prevents an event in the InfoBox from being passed on to the map.\nfunction cancelHandler(event) {\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n}\nvar InfoBox = /** @class */ (function () {\n function InfoBox(options) {\n if (options === void 0) { options = {}; }\n this.getCloseClickHandler = this.getCloseClickHandler.bind(this);\n this.closeClickHandler = this.closeClickHandler.bind(this);\n this.createInfoBoxDiv = this.createInfoBoxDiv.bind(this);\n this.addClickHandler = this.addClickHandler.bind(this);\n this.getCloseBoxImg = this.getCloseBoxImg.bind(this);\n this.getBoxWidths = this.getBoxWidths.bind(this);\n this.setBoxStyle = this.setBoxStyle.bind(this);\n this.setPosition = this.setPosition.bind(this);\n this.getPosition = this.getPosition.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.setContent = this.setContent.bind(this);\n this.setVisible = this.setVisible.bind(this);\n this.getContent = this.getContent.bind(this);\n this.getVisible = this.getVisible.bind(this);\n this.setZIndex = this.setZIndex.bind(this);\n this.getZIndex = this.getZIndex.bind(this);\n this.onRemove = this.onRemove.bind(this);\n this.panBox = this.panBox.bind(this);\n this.extend = this.extend.bind(this);\n this.close = this.close.bind(this);\n this.draw = this.draw.bind(this);\n this.show = this.show.bind(this);\n this.hide = this.hide.bind(this);\n this.open = this.open.bind(this);\n this.extend(InfoBox, google.maps.OverlayView);\n // Standard options (in common with google.maps.InfoWindow):\n this.content = options.content || '';\n this.disableAutoPan = options.disableAutoPan || false;\n this.maxWidth = options.maxWidth || 0;\n this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);\n this.position = options.position || new google.maps.LatLng(0, 0);\n this.zIndex = options.zIndex || null;\n // Additional options (unique to InfoBox):\n this.boxClass = options.boxClass || 'infoBox';\n this.boxStyle = options.boxStyle || {};\n this.closeBoxMargin = options.closeBoxMargin || '2px';\n this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\n if (options.closeBoxURL === '') {\n this.closeBoxURL = '';\n }\n this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);\n if (typeof options.visible === 'undefined') {\n if (typeof options.isHidden === 'undefined') {\n options.visible = true;\n }\n else {\n options.visible = !options.isHidden;\n }\n }\n this.isHidden = !options.visible;\n this.alignBottom = options.alignBottom || false;\n this.pane = options.pane || 'floatPane';\n this.enableEventPropagation = options.enableEventPropagation || false;\n this.div = null;\n this.closeListener = null;\n this.moveListener = null;\n this.mapListener = null;\n this.contextListener = null;\n this.eventListeners = null;\n this.fixedWidthSet = null;\n }\n InfoBox.prototype.createInfoBoxDiv = function () {\n var _this = this;\n // This handler ignores the current event in the InfoBox and conditionally prevents\n // the event from being passed on to the map. It is used for the contextmenu event.\n var ignoreHandler = function (event) {\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (!_this.enableEventPropagation) {\n cancelHandler(event);\n }\n };\n if (!this.div) {\n this.div = document.createElement('div');\n this.setBoxStyle();\n if (typeof this.content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + this.content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(this.content);\n }\n var panes = this.getPanes();\n if (panes !== null) {\n panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM\n }\n this.addClickHandler();\n if (this.div.style.width) {\n this.fixedWidthSet = true;\n }\n else {\n if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {\n this.div.style.width = this.maxWidth + 'px';\n this.fixedWidthSet = true;\n }\n else {\n // The following code is needed to overcome problems with MSIE\n var bw = this.getBoxWidths();\n this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';\n this.fixedWidthSet = false;\n }\n }\n this.panBox(this.disableAutoPan);\n if (!this.enableEventPropagation) {\n this.eventListeners = [];\n // Cancel event propagation.\n // Note: mousemove not included (to resolve Issue 152)\n var events = [\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click',\n 'dblclick',\n 'touchstart',\n 'touchend',\n 'touchmove',\n ];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n this.eventListeners.push(google.maps.event.addListener(this.div, event_1, cancelHandler));\n }\n // Workaround for Google bug that causes the cursor to change to a pointer\n // when the mouse moves over a marker underneath InfoBox.\n this.eventListeners.push(google.maps.event.addListener(this.div, 'mouseover', function () {\n if (_this.div) {\n _this.div.style.cursor = 'default';\n }\n }));\n }\n this.contextListener = google.maps.event.addListener(this.div, 'contextmenu', ignoreHandler);\n /**\n * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\n * @name InfoBox#domready\n * @event\n */\n google.maps.event.trigger(this, 'domready');\n }\n };\n InfoBox.prototype.getCloseBoxImg = function () {\n var img = '';\n if (this.closeBoxURL !== '') {\n img = '\"\"';\n\";\n }\n return img;\n };\n InfoBox.prototype.addClickHandler = function () {\n this.closeListener = this.div && this.div.firstChild && this.closeBoxURL !== ''\n ? google.maps.event.addListener(this.div.firstChild, 'click', this.getCloseClickHandler())\n : null;\n };\n InfoBox.prototype.closeClickHandler = function (event) {\n // 1.0.3 fix: Always prevent propagation of a close box click to the map:\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n /**\n * This event is fired when the InfoBox's close box is clicked.\n * @name InfoBox#closeclick\n * @event\n */\n google.maps.event.trigger(this, 'closeclick');\n this.close();\n };\n InfoBox.prototype.getCloseClickHandler = function () {\n return this.closeClickHandler;\n };\n InfoBox.prototype.panBox = function (disablePan) {\n if (this.div && !disablePan) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var map = this.getMap();\n // Only pan if attached to map, not panorama\n if (map instanceof google.maps.Map) {\n var xOffset = 0;\n var yOffset = 0;\n var bounds = map.getBounds();\n if (bounds && !bounds.contains(this.position)) {\n // Marker not in visible area of map, so set center\n // of map to the marker position first.\n map.setCenter(this.position);\n }\n var mapDiv = map.getDiv();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var mapWidth = mapDiv.offsetWidth;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var mapHeight = mapDiv.offsetHeight;\n var iwOffsetX = this.pixelOffset.width;\n var iwOffsetY = this.pixelOffset.height;\n var iwWidth = this.div.offsetWidth;\n var iwHeight = this.div.offsetHeight;\n var padX = this.infoBoxClearance.width;\n var padY = this.infoBoxClearance.height;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToContainerPixel(this.position);\n if (pixPosition !== null) {\n if (pixPosition.x < -iwOffsetX + padX) {\n xOffset = pixPosition.x + iwOffsetX - padX;\n }\n else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\n xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\n }\n if (this.alignBottom) {\n if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\n yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\n }\n else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\n }\n }\n else {\n if (pixPosition.y < -iwOffsetY + padY) {\n yOffset = pixPosition.y + iwOffsetY - padY;\n }\n else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\n }\n }\n }\n if (!(xOffset === 0 && yOffset === 0)) {\n // Move the map to the shifted center.\n map.panBy(xOffset, yOffset);\n }\n }\n }\n };\n InfoBox.prototype.setBoxStyle = function () {\n if (this.div) {\n // Apply style values from the style sheet defined in the boxClass parameter:\n this.div.className = this.boxClass;\n // Clear existing inline style values:\n this.div.style.cssText = '';\n // Apply style values defined in the boxStyle parameter:\n var boxStyle = this.boxStyle;\n for (var i in boxStyle) {\n if (Object.prototype.hasOwnProperty.call(boxStyle, i)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.div.style[i] = boxStyle[i];\n }\n }\n // Fix for iOS disappearing InfoBox problem\n // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad\n this.div.style.webkitTransform = 'translateZ(0)';\n // Fix up opacity style for benefit of MSIE\n if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {\n // See http://www.quirksmode.org/css/opacity.html\n var opacity = parseFloat(this.div.style.opacity || '');\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.div.style.msFilter =\n '\"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')\"';\n this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n }\n // Apply required styles\n this.div.style.position = 'absolute';\n this.div.style.visibility = 'hidden';\n if (this.zIndex !== null) {\n this.div.style.zIndex = this.zIndex + '';\n }\n if (!this.div.style.overflow) {\n this.div.style.overflow = 'auto';\n }\n }\n };\n InfoBox.prototype.getBoxWidths = function () {\n var bw = { top: 0, bottom: 0, left: 0, right: 0 };\n if (!this.div) {\n return bw;\n }\n if (document.defaultView) {\n var ownerDocument = this.div.ownerDocument;\n var computedStyle = ownerDocument && ownerDocument.defaultView\n ? ownerDocument.defaultView.getComputedStyle(this.div, '')\n : null;\n if (computedStyle) {\n // The computed styles are always in pixel units (good!)\n bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;\n }\n }\n else if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n document.documentElement.currentStyle // MSIE\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var currentStyle = this.div.currentStyle;\n if (currentStyle) {\n // The current styles may not be in pixel units, but assume they are (bad!)\n bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;\n }\n }\n return bw;\n };\n InfoBox.prototype.onRemove = function () {\n if (this.div && this.div.parentNode) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n InfoBox.prototype.draw = function () {\n this.createInfoBoxDiv();\n if (this.div) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToDivPixel(this.position);\n if (pixPosition !== null) {\n this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';\n if (this.alignBottom) {\n this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';\n }\n else {\n this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';\n }\n }\n if (this.isHidden) {\n this.div.style.visibility = 'hidden';\n }\n else {\n this.div.style.visibility = 'visible';\n }\n }\n };\n InfoBox.prototype.setOptions = function (options) {\n if (options === void 0) { options = {}; }\n if (typeof options.boxClass !== 'undefined') {\n // Must be first\n this.boxClass = options.boxClass;\n this.setBoxStyle();\n }\n if (typeof options.boxStyle !== 'undefined') {\n // Must be second\n this.boxStyle = options.boxStyle;\n this.setBoxStyle();\n }\n if (typeof options.content !== 'undefined') {\n this.setContent(options.content);\n }\n if (typeof options.disableAutoPan !== 'undefined') {\n this.disableAutoPan = options.disableAutoPan;\n }\n if (typeof options.maxWidth !== 'undefined') {\n this.maxWidth = options.maxWidth;\n }\n if (typeof options.pixelOffset !== 'undefined') {\n this.pixelOffset = options.pixelOffset;\n }\n if (typeof options.alignBottom !== 'undefined') {\n this.alignBottom = options.alignBottom;\n }\n if (typeof options.position !== 'undefined') {\n this.setPosition(options.position);\n }\n if (typeof options.zIndex !== 'undefined') {\n this.setZIndex(options.zIndex);\n }\n if (typeof options.closeBoxMargin !== 'undefined') {\n this.closeBoxMargin = options.closeBoxMargin;\n }\n if (typeof options.closeBoxURL !== 'undefined') {\n this.closeBoxURL = options.closeBoxURL;\n }\n if (typeof options.infoBoxClearance !== 'undefined') {\n this.infoBoxClearance = options.infoBoxClearance;\n }\n if (typeof options.isHidden !== 'undefined') {\n this.isHidden = options.isHidden;\n }\n if (typeof options.visible !== 'undefined') {\n this.isHidden = !options.visible;\n }\n if (typeof options.enableEventPropagation !== 'undefined') {\n this.enableEventPropagation = options.enableEventPropagation;\n }\n if (this.div) {\n this.draw();\n }\n };\n InfoBox.prototype.setContent = function (content) {\n this.content = content;\n if (this.div) {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n // Odd code required to make things work with MSIE.\n if (!this.fixedWidthSet) {\n this.div.style.width = '';\n }\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n // Perverse code required to make things work with MSIE.\n // (Ensures the close box does, in fact, float to the right.)\n if (!this.fixedWidthSet) {\n this.div.style.width = this.div.offsetWidth + 'px';\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n }\n else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n }\n this.addClickHandler();\n }\n /**\n * This event is fired when the content of the InfoBox changes.\n * @name InfoBox#content_changed\n * @event\n */\n google.maps.event.trigger(this, 'content_changed');\n };\n InfoBox.prototype.setPosition = function (latLng) {\n this.position = latLng;\n if (this.div) {\n this.draw();\n }\n /**\n * This event is fired when the position of the InfoBox changes.\n * @name InfoBox#position_changed\n * @event\n */\n google.maps.event.trigger(this, 'position_changed');\n };\n InfoBox.prototype.setVisible = function (isVisible) {\n this.isHidden = !isVisible;\n if (this.div) {\n this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';\n }\n };\n InfoBox.prototype.setZIndex = function (index) {\n this.zIndex = index;\n if (this.div) {\n this.div.style.zIndex = index + '';\n }\n /**\n * This event is fired when the zIndex of the InfoBox changes.\n * @name InfoBox#zindex_changed\n * @event\n */\n google.maps.event.trigger(this, 'zindex_changed');\n };\n InfoBox.prototype.getContent = function () {\n return this.content;\n };\n InfoBox.prototype.getPosition = function () {\n return this.position;\n };\n InfoBox.prototype.getZIndex = function () {\n return this.zIndex;\n };\n InfoBox.prototype.getVisible = function () {\n var map = this.getMap();\n return typeof map === 'undefined' || map === null ? false : !this.isHidden;\n };\n InfoBox.prototype.show = function () {\n this.isHidden = false;\n if (this.div) {\n this.div.style.visibility = 'visible';\n }\n };\n InfoBox.prototype.hide = function () {\n this.isHidden = true;\n if (this.div) {\n this.div.style.visibility = 'hidden';\n }\n };\n InfoBox.prototype.open = function (map, anchor) {\n var _this = this;\n if (anchor) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.position = anchor.getPosition();\n this.moveListener = google.maps.event.addListener(anchor, 'position_changed', function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n var position = anchor.getPosition();\n _this.setPosition(position);\n });\n this.mapListener = google.maps.event.addListener(anchor, 'map_changed', function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n _this.setMap(anchor.map);\n });\n }\n this.setMap(map);\n if (this.div) {\n this.panBox();\n }\n };\n InfoBox.prototype.close = function () {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n if (this.eventListeners) {\n for (var _i = 0, _a = this.eventListeners; _i < _a.length; _i++) {\n var eventListener = _a[_i];\n google.maps.event.removeListener(eventListener);\n }\n this.eventListeners = null;\n }\n if (this.moveListener) {\n google.maps.event.removeListener(this.moveListener);\n this.moveListener = null;\n }\n if (this.mapListener) {\n google.maps.event.removeListener(this.mapListener);\n this.mapListener = null;\n }\n if (this.contextListener) {\n google.maps.event.removeListener(this.contextListener);\n this.contextListener = null;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.setMap(null);\n };\n InfoBox.prototype.extend = function (obj1, obj2) {\n return function applyExtend(object) {\n for (var property in object.prototype) {\n if (!Object.prototype.hasOwnProperty.call(this, property)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n }\n }\n return this;\n }.apply(obj1, [obj2]);\n };\n return InfoBox;\n}());\n\nexport { InfoBox };\n//# sourceMappingURL=esm.js.map\n","/* global google */\nimport { Children, memo, PureComponent, useContext, useEffect, useRef, useState, type ReactNode, type ReactPortal, type ContextType } from 'react'\nimport { createPortal } from 'react-dom'\nimport invariant from 'invariant'\nimport {\n InfoBox as GoogleMapsInfoBox,\n type InfoBoxOptions,\n} from '@react-google-maps/infobox'\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n options(instance: GoogleMapsInfoBox, options: InfoBoxOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: GoogleMapsInfoBox,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n if (position instanceof google.maps.LatLng) {\n instance.setPosition(position)\n } else {\n instance.setPosition(new google.maps.LatLng(position.lat, position.lng))\n }\n },\n visible(instance: GoogleMapsInfoBox, visible: boolean): void {\n instance.setVisible(visible)\n },\n zIndex(instance: GoogleMapsInfoBox, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ninterface InfoBoxState {\n infoBox: GoogleMapsInfoBox | null\n}\n\nexport interface InfoBoxProps {\n children?: ReactNode | undefined\n /** Can be any MVCObject that exposes a LatLng position property and optionally a Point anchorPoint property for calculating the pixelOffset. The anchorPoint is the offset from the anchor's position to the tip of the InfoBox. */\n anchor?: google.maps.MVCObject | undefined\n options?: InfoBoxOptions | undefined\n /** The LatLng at which to display this InfoBox. If the InfoBox is opened with an anchor, the anchor's position will be used instead. */\n position?: google.maps.LatLng | undefined\n /** All InfoBoxes are displayed on the map in order of their zIndex, with higher values displaying in front of InfoBoxes with lower values. By default, InfoBoxes are displayed according to their latitude, with InfoBoxes of lower latitudes appearing in front of InfoBoxes at higher latitudes. InfoBoxes are always displayed in front of markers. */\n zIndex?: number | undefined\n /** This event is fired when the close button was clicked. */\n onCloseClick?: (() => void) | undefined\n /** This event is fired when the
containing the InfoBox's content is attached to the DOM. You may wish to monitor this event if you are building out your info window content dynamically. */\n onDomReady?: (() => void) | undefined\n /** This event is fired when the content property changes. */\n onContentChanged?: (() => void) | undefined\n /** This event is fired when the position property changes. */\n onPositionChanged?: (() => void) | undefined\n /** This event is fired when the InfoBox's zIndex changes. */\n onZindexChanged?: (() => void) | undefined\n /** This callback is called when the infoBox instance has loaded. It is called with the infoBox instance. */\n onLoad?: ((infoBox: GoogleMapsInfoBox) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the infoBox instance. */\n onUnmount?: ((infoBox: GoogleMapsInfoBox) => void) | undefined\n}\n\nconst defaultOptions: InfoBoxOptions = {}\n\nfunction InfoBoxFunctional({\n children,\n anchor,\n options,\n position,\n zIndex,\n onCloseClick,\n onDomReady,\n onContentChanged,\n onPositionChanged,\n onZindexChanged,\n onLoad,\n onUnmount\n}: InfoBoxProps): ReactPortal | null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [closeClickListener, setCloseClickListener] = useState(null)\n const [domReadyClickListener, setDomReadyClickListener] = useState(null)\n const [contentChangedClickListener, setContentChangedClickListener] = useState(null)\n const [positionChangedClickListener, setPositionChangedClickListener] = useState(null)\n const [zIndexChangedClickListener, setZindexChangedClickListener] = useState(null)\n\n const containerElementRef = useRef(null)\n\n // Order does matter\n useEffect(() => {\n if (map && instance !== null) {\n instance.close()\n\n if (anchor) {\n instance.open(map, anchor)\n } else if (instance.getPosition()) {\n instance.open(map)\n }\n }\n }, [map, instance, anchor])\n\n useEffect(() => {\n if (options && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (position && instance !== null) {\n const positionLatLng = position instanceof google.maps.LatLng\n ? position\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n : new google.maps.LatLng(position.lat, position.lng)\n\n instance.setPosition(positionLatLng)\n }\n }, [position])\n\n useEffect(() => {\n if (typeof zIndex === 'number' && instance !== null) {\n instance.setZIndex(zIndex)\n }\n }, [zIndex])\n\n useEffect(() => {\n if (instance && onCloseClick) {\n if (closeClickListener !== null) {\n google.maps.event.removeListener(closeClickListener)\n }\n\n setCloseClickListener(\n google.maps.event.addListener(instance, 'closeclick', onCloseClick)\n )\n }\n }, [onCloseClick])\n\n useEffect(() => {\n if (instance && onDomReady) {\n if (domReadyClickListener !== null) {\n google.maps.event.removeListener(domReadyClickListener)\n }\n\n setDomReadyClickListener(\n google.maps.event.addListener(instance, 'domready', onDomReady)\n )\n }\n }, [onDomReady])\n\n useEffect(() => {\n if (instance && onContentChanged) {\n if (contentChangedClickListener !== null) {\n google.maps.event.removeListener(contentChangedClickListener)\n }\n\n setContentChangedClickListener(\n google.maps.event.addListener(instance, 'content_changed', onContentChanged)\n )\n }\n }, [onContentChanged])\n\n useEffect(() => {\n if (instance && onPositionChanged) {\n if (positionChangedClickListener !== null) {\n google.maps.event.removeListener(positionChangedClickListener)\n }\n\n setPositionChangedClickListener(\n google.maps.event.addListener(instance, 'position_changed', onPositionChanged)\n )\n }\n }, [onPositionChanged])\n\n useEffect(() => {\n if (instance && onZindexChanged) {\n if (zIndexChangedClickListener !== null) {\n google.maps.event.removeListener(zIndexChangedClickListener)\n }\n\n setZindexChangedClickListener(\n google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged)\n )\n }\n }, [onZindexChanged])\n\n useEffect(() => {\n if (map) {\n const { position, ...infoBoxOptions }: InfoBoxOptions = options || defaultOptions\n\n let positionLatLng: google.maps.LatLng | undefined\n\n if (position && !(position instanceof google.maps.LatLng)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n positionLatLng = new google.maps.LatLng(position.lat, position.lng)\n }\n\n const infoBox = new GoogleMapsInfoBox({\n ...infoBoxOptions,\n ...(positionLatLng ? { position: positionLatLng } : {}),\n })\n\n containerElementRef.current = document.createElement('div')\n\n setInstance(infoBox)\n\n if (onCloseClick) {\n setCloseClickListener(\n google.maps.event.addListener(infoBox, 'closeclick', onCloseClick)\n )\n }\n\n if (onDomReady) {\n setDomReadyClickListener(\n google.maps.event.addListener(infoBox, 'domready', onDomReady)\n )\n }\n\n if (onContentChanged) {\n setContentChangedClickListener(\n google.maps.event.addListener(infoBox, 'content_changed', onContentChanged)\n )\n }\n\n if (onPositionChanged) {\n setPositionChangedClickListener(\n google.maps.event.addListener(infoBox, 'position_changed', onPositionChanged)\n )\n }\n\n if (onZindexChanged) {\n setZindexChangedClickListener(\n google.maps.event.addListener(infoBox, 'zindex_changed', onZindexChanged)\n )\n }\n\n infoBox.setContent(containerElementRef.current)\n\n if (anchor) {\n infoBox.open(map, anchor)\n } else if (infoBox.getPosition()) {\n infoBox.open(map)\n } else {\n invariant(false, 'You must provide either an anchor or a position prop for .')\n }\n\n if (onLoad) {\n onLoad(infoBox)\n }\n }\n\n return () => {\n if (instance !== null) {\n if (closeClickListener) {\n google.maps.event.removeListener(closeClickListener)\n }\n\n if (contentChangedClickListener) {\n google.maps.event.removeListener(contentChangedClickListener)\n }\n\n if (domReadyClickListener) {\n google.maps.event.removeListener(domReadyClickListener)\n }\n\n if (positionChangedClickListener) {\n google.maps.event.removeListener(positionChangedClickListener)\n }\n\n if (zIndexChangedClickListener) {\n google.maps.event.removeListener(zIndexChangedClickListener)\n }\n\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.close()\n }\n }\n }, [])\n\n return containerElementRef.current ? createPortal(Children.only(children), containerElementRef.current) : null\n}\n\nexport const InfoBoxF = memo(InfoBoxFunctional)\n\nexport class InfoBoxComponent extends PureComponent {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: HTMLElement | null = null\n\n override state: InfoBoxState = {\n infoBox: null,\n }\n\n open = (infoBox: GoogleMapsInfoBox, anchor?: google.maps.MVCObject): void => {\n if (anchor) {\n if (this.context !== null) {\n infoBox.open(this.context, anchor)\n }\n } else if (infoBox.getPosition()) {\n if (this.context !== null) {\n infoBox.open(this.context)\n }\n } else {\n invariant(false, 'You must provide either an anchor or a position prop for .')\n }\n }\n\n setInfoBoxCallback = (): void => {\n if (this.state.infoBox !== null && this.containerElement !== null) {\n this.state.infoBox.setContent(this.containerElement)\n\n this.open(this.state.infoBox, this.props.anchor)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.infoBox)\n }\n }\n }\n\n override componentDidMount(): void {\n const { position, ...infoBoxOptions }: InfoBoxOptions = this.props.options || {}\n\n let positionLatLng: google.maps.LatLng | undefined\n\n if (position && !(position instanceof google.maps.LatLng)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n positionLatLng = new google.maps.LatLng(position.lat, position.lng)\n }\n\n const infoBox = new GoogleMapsInfoBox({\n ...infoBoxOptions,\n ...(positionLatLng ? { position: positionLatLng } : {}),\n })\n\n this.containerElement = document.createElement('div')\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: infoBox,\n })\n\n this.setState({ infoBox }, this.setInfoBoxCallback)\n }\n\n override componentDidUpdate(prevProps: InfoBoxProps): void {\n const { infoBox } = this.state\n\n if (infoBox !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: infoBox,\n })\n }\n }\n\n override componentWillUnmount(): void {\n const { onUnmount } = this.props\n const { infoBox } = this.state\n\n if (infoBox !== null) {\n if (onUnmount) {\n onUnmount(infoBox)\n }\n\n unregisterEvents(this.registeredEvents)\n infoBox.close()\n }\n }\n\n override render(): ReactPortal | null {\n return this.containerElement ? createPortal(Children.only(this.props.children), this.containerElement) : null\n }\n}\n\nexport default InfoBoxComponent\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","\nconst ARRAY_TYPES = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array\n];\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nconst VERSION = 1; // serialized format version\nconst HEADER_SIZE = 8;\n\nexport default class KDBush {\n\n /**\n * Creates an index from raw `ArrayBuffer` data.\n * @param {ArrayBuffer} data\n */\n static from(data) {\n if (!(data instanceof ArrayBuffer)) {\n throw new Error('Data must be an instance of ArrayBuffer.');\n }\n const [magic, versionAndType] = new Uint8Array(data, 0, 2);\n if (magic !== 0xdb) {\n throw new Error('Data does not appear to be in a KDBush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, 2, 1);\n const [numItems] = new Uint32Array(data, 4, 1);\n\n return new KDBush(numItems, nodeSize, ArrayType, data);\n }\n\n /**\n * Creates an index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=64] Size of the KD-tree node (64 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBuffer} [data] (For internal use only)\n */\n constructor(numItems, nodeSize = 64, ArrayType = Float64Array, data) {\n if (isNaN(numItems) || numItems < 0) throw new Error(`Unpexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.ArrayType = ArrayType;\n this.IndexArrayType = numItems < 65536 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const coordsByteSize = numItems * 2 * this.ArrayType.BYTES_PER_ELEMENT;\n const idsByteSize = numItems * this.IndexArrayType.BYTES_PER_ELEMENT;\n const padCoords = (8 - idsByteSize % 8) % 8;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n if (data && (data instanceof ArrayBuffer)) { // reconstruct an index from a buffer\n this.data = data;\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = numItems * 2;\n this._finished = true;\n } else { // initialize a new index\n this.data = new ArrayBuffer(HEADER_SIZE + coordsByteSize + idsByteSize + padCoords);\n this.ids = new this.IndexArrayType(this.data, HEADER_SIZE, numItems);\n this.coords = new this.ArrayType(this.data, HEADER_SIZE + idsByteSize + padCoords, numItems * 2);\n this._pos = 0;\n this._finished = false;\n\n // set header\n new Uint8Array(this.data, 0, 2).set([0xdb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n }\n\n /**\n * Add a point to the index.\n * @param {number} x\n * @param {number} y\n * @returns {number} An incremental index associated with the added item (starting from `0`).\n */\n add(x, y) {\n const index = this._pos >> 1;\n this.ids[index] = index;\n this.coords[this._pos++] = x;\n this.coords[this._pos++] = y;\n return index;\n }\n\n /**\n * Perform indexing of the added points.\n */\n finish() {\n const numAdded = this._pos >> 1;\n if (numAdded !== this.numItems) {\n throw new Error(`Added ${numAdded} items when expected ${this.numItems}.`);\n }\n // kd-sort both arrays for efficient search\n sort(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0);\n\n this._finished = true;\n return this;\n }\n\n /**\n * Search the index for items within a given bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number[]} An array of indices correponding to the found items.\n */\n range(minX, minY, maxX, maxY) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n\n // recursively search for items in range in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (x >= minX && x <= maxX && y >= minY && y <= maxY) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? minX <= x : minY <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? maxX >= x : maxY >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n\n /**\n * Search the index for items within a given radius.\n * @param {number} qx\n * @param {number} qy\n * @param {number} r Query radius.\n * @returns {number[]} An array of indices correponding to the found items.\n */\n within(qx, qy, r) {\n if (!this._finished) throw new Error('Data not yet indexed - call index.finish().');\n\n const {ids, coords, nodeSize} = this;\n const stack = [0, ids.length - 1, 0];\n const result = [];\n const r2 = r * r;\n\n // recursively search for items within radius in the kd-sorted arrays\n while (stack.length) {\n const axis = stack.pop() || 0;\n const right = stack.pop() || 0;\n const left = stack.pop() || 0;\n\n // if we reached \"tree node\", search linearly\n if (right - left <= nodeSize) {\n for (let i = left; i <= right; i++) {\n if (sqDist(coords[2 * i], coords[2 * i + 1], qx, qy) <= r2) result.push(ids[i]);\n }\n continue;\n }\n\n // otherwise find the middle index\n const m = (left + right) >> 1;\n\n // include the middle item if it's in range\n const x = coords[2 * m];\n const y = coords[2 * m + 1];\n if (sqDist(x, y, qx, qy) <= r2) result.push(ids[m]);\n\n // queue search in halves that intersect the query\n if (axis === 0 ? qx - r <= x : qy - r <= y) {\n stack.push(left);\n stack.push(m - 1);\n stack.push(1 - axis);\n }\n if (axis === 0 ? qx + r >= x : qy + r >= y) {\n stack.push(m + 1);\n stack.push(right);\n stack.push(1 - axis);\n }\n }\n\n return result;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} nodeSize\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction sort(ids, coords, nodeSize, left, right, axis) {\n if (right - left <= nodeSize) return;\n\n const m = (left + right) >> 1; // middle index\n\n // sort ids and coords around the middle index so that the halves lie\n // either left/right or top/bottom correspondingly (taking turns)\n select(ids, coords, m, left, right, axis);\n\n // recursively kd-sort first half and second half on the opposite axis\n sort(ids, coords, nodeSize, left, m - 1, 1 - axis);\n sort(ids, coords, nodeSize, m + 1, right, 1 - axis);\n}\n\n/**\n * Custom Floyd-Rivest selection algorithm: sort ids and coords so that\n * [left..k-1] items are smaller than k-th item (on either x or y axis)\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} k\n * @param {number} left\n * @param {number} right\n * @param {number} axis\n */\nfunction select(ids, coords, k, left, right, axis) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n select(ids, coords, k, newLeft, newRight, axis);\n }\n\n const t = coords[2 * k + axis];\n let i = left;\n let j = right;\n\n swapItem(ids, coords, left, k);\n if (coords[2 * right + axis] > t) swapItem(ids, coords, left, right);\n\n while (i < j) {\n swapItem(ids, coords, i, j);\n i++;\n j--;\n while (coords[2 * i + axis] < t) i++;\n while (coords[2 * j + axis] > t) j--;\n }\n\n if (coords[2 * left + axis] === t) swapItem(ids, coords, left, j);\n else {\n j++;\n swapItem(ids, coords, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @param {Uint16Array | Uint32Array} ids\n * @param {InstanceType} coords\n * @param {number} i\n * @param {number} j\n */\nfunction swapItem(ids, coords, i, j) {\n swap(ids, i, j);\n swap(coords, 2 * i, 2 * j);\n swap(coords, 2 * i + 1, 2 * j + 1);\n}\n\n/**\n * @param {InstanceType} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction sqDist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n","\nimport KDBush from 'kdbush';\n\nconst defaultOptions = {\n minZoom: 0, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n minPoints: 2, // minimum points to form a cluster\n radius: 40, // cluster radius in pixels\n extent: 512, // tile extent (radius is calculated relative to it)\n nodeSize: 64, // size of the KD-tree leaf node, affects performance\n log: false, // whether to log timing info\n\n // whether to generate numeric ids for input features (in vector tiles)\n generateId: false,\n\n // a reduce function for calculating custom cluster properties\n reduce: null, // (accumulated, props) => { accumulated.sum += props.sum; }\n\n // properties to use for individual points when running the reducer\n map: props => props // props => ({sum: props.my_value})\n};\n\nconst fround = Math.fround || (tmp => ((x) => { tmp[0] = +x; return tmp[0]; }))(new Float32Array(1));\n\nconst OFFSET_ZOOM = 2;\nconst OFFSET_ID = 3;\nconst OFFSET_PARENT = 4;\nconst OFFSET_NUM = 5;\nconst OFFSET_PROP = 6;\n\nexport default class Supercluster {\n constructor(options) {\n this.options = Object.assign(Object.create(defaultOptions), options);\n this.trees = new Array(this.options.maxZoom + 1);\n this.stride = this.options.reduce ? 7 : 6;\n this.clusterProps = [];\n }\n\n load(points) {\n const {log, minZoom, maxZoom} = this.options;\n\n if (log) console.time('total time');\n\n const timerId = `prepare ${ points.length } points`;\n if (log) console.time(timerId);\n\n this.points = points;\n\n // generate a cluster object for each point and index input points into a KD-tree\n const data = [];\n\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n if (!p.geometry) continue;\n\n const [lng, lat] = p.geometry.coordinates;\n const x = fround(lngX(lng));\n const y = fround(latY(lat));\n // store internal point/cluster data in flat numeric arrays for performance\n data.push(\n x, y, // projected point coordinates\n Infinity, // the last zoom the point was processed at\n i, // index of the source feature in the original input array\n -1, // parent cluster id\n 1 // number of points in a cluster\n );\n if (this.options.reduce) data.push(0); // noop\n }\n let tree = this.trees[maxZoom + 1] = this._createTree(data);\n\n if (log) console.timeEnd(timerId);\n\n // cluster points on max zoom, then cluster the results on previous zoom, etc.;\n // results in a cluster hierarchy across zoom levels\n for (let z = maxZoom; z >= minZoom; z--) {\n const now = +Date.now();\n\n // create a new set of clusters for the zoom and index them with a KD-tree\n tree = this.trees[z] = this._createTree(this._cluster(tree, z));\n\n if (log) console.log('z%d: %d clusters in %dms', z, tree.numItems, +Date.now() - now);\n }\n\n if (log) console.timeEnd('total time');\n\n return this;\n }\n\n getClusters(bbox, zoom) {\n let minLng = ((bbox[0] + 180) % 360 + 360) % 360 - 180;\n const minLat = Math.max(-90, Math.min(90, bbox[1]));\n let maxLng = bbox[2] === 180 ? 180 : ((bbox[2] + 180) % 360 + 360) % 360 - 180;\n const maxLat = Math.max(-90, Math.min(90, bbox[3]));\n\n if (bbox[2] - bbox[0] >= 360) {\n minLng = -180;\n maxLng = 180;\n } else if (minLng > maxLng) {\n const easternHem = this.getClusters([minLng, minLat, 180, maxLat], zoom);\n const westernHem = this.getClusters([-180, minLat, maxLng, maxLat], zoom);\n return easternHem.concat(westernHem);\n }\n\n const tree = this.trees[this._limitZoom(zoom)];\n const ids = tree.range(lngX(minLng), latY(maxLat), lngX(maxLng), latY(minLat));\n const data = tree.data;\n const clusters = [];\n for (const id of ids) {\n const k = this.stride * id;\n clusters.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n return clusters;\n }\n\n getChildren(clusterId) {\n const originId = this._getOriginId(clusterId);\n const originZoom = this._getOriginZoom(clusterId);\n const errorMsg = 'No cluster with the specified id.';\n\n const tree = this.trees[originZoom];\n if (!tree) throw new Error(errorMsg);\n\n const data = tree.data;\n if (originId * this.stride >= data.length) throw new Error(errorMsg);\n\n const r = this.options.radius / (this.options.extent * Math.pow(2, originZoom - 1));\n const x = data[originId * this.stride];\n const y = data[originId * this.stride + 1];\n const ids = tree.within(x, y, r);\n const children = [];\n for (const id of ids) {\n const k = id * this.stride;\n if (data[k + OFFSET_PARENT] === clusterId) {\n children.push(data[k + OFFSET_NUM] > 1 ? getClusterJSON(data, k, this.clusterProps) : this.points[data[k + OFFSET_ID]]);\n }\n }\n\n if (children.length === 0) throw new Error(errorMsg);\n\n return children;\n }\n\n getLeaves(clusterId, limit, offset) {\n limit = limit || 10;\n offset = offset || 0;\n\n const leaves = [];\n this._appendLeaves(leaves, clusterId, limit, offset, 0);\n\n return leaves;\n }\n\n getTile(z, x, y) {\n const tree = this.trees[this._limitZoom(z)];\n const z2 = Math.pow(2, z);\n const {extent, radius} = this.options;\n const p = radius / extent;\n const top = (y - p) / z2;\n const bottom = (y + 1 + p) / z2;\n\n const tile = {\n features: []\n };\n\n this._addTileFeatures(\n tree.range((x - p) / z2, top, (x + 1 + p) / z2, bottom),\n tree.data, x, y, z2, tile);\n\n if (x === 0) {\n this._addTileFeatures(\n tree.range(1 - p / z2, top, 1, bottom),\n tree.data, z2, y, z2, tile);\n }\n if (x === z2 - 1) {\n this._addTileFeatures(\n tree.range(0, top, p / z2, bottom),\n tree.data, -1, y, z2, tile);\n }\n\n return tile.features.length ? tile : null;\n }\n\n getClusterExpansionZoom(clusterId) {\n let expansionZoom = this._getOriginZoom(clusterId) - 1;\n while (expansionZoom <= this.options.maxZoom) {\n const children = this.getChildren(clusterId);\n expansionZoom++;\n if (children.length !== 1) break;\n clusterId = children[0].properties.cluster_id;\n }\n return expansionZoom;\n }\n\n _appendLeaves(result, clusterId, limit, offset, skipped) {\n const children = this.getChildren(clusterId);\n\n for (const child of children) {\n const props = child.properties;\n\n if (props && props.cluster) {\n if (skipped + props.point_count <= offset) {\n // skip the whole cluster\n skipped += props.point_count;\n } else {\n // enter the cluster\n skipped = this._appendLeaves(result, props.cluster_id, limit, offset, skipped);\n // exit the cluster\n }\n } else if (skipped < offset) {\n // skip a single point\n skipped++;\n } else {\n // add a single point\n result.push(child);\n }\n if (result.length === limit) break;\n }\n\n return skipped;\n }\n\n _createTree(data) {\n const tree = new KDBush(data.length / this.stride | 0, this.options.nodeSize, Float32Array);\n for (let i = 0; i < data.length; i += this.stride) tree.add(data[i], data[i + 1]);\n tree.finish();\n tree.data = data;\n return tree;\n }\n\n _addTileFeatures(ids, data, x, y, z2, tile) {\n for (const i of ids) {\n const k = i * this.stride;\n const isCluster = data[k + OFFSET_NUM] > 1;\n\n let tags, px, py;\n if (isCluster) {\n tags = getClusterProperties(data, k, this.clusterProps);\n px = data[k];\n py = data[k + 1];\n } else {\n const p = this.points[data[k + OFFSET_ID]];\n tags = p.properties;\n const [lng, lat] = p.geometry.coordinates;\n px = lngX(lng);\n py = latY(lat);\n }\n\n const f = {\n type: 1,\n geometry: [[\n Math.round(this.options.extent * (px * z2 - x)),\n Math.round(this.options.extent * (py * z2 - y))\n ]],\n tags\n };\n\n // assign id\n let id;\n if (isCluster || this.options.generateId) {\n // optionally generate id for points\n id = data[k + OFFSET_ID];\n } else {\n // keep id if already assigned\n id = this.points[data[k + OFFSET_ID]].id;\n }\n\n if (id !== undefined) f.id = id;\n\n tile.features.push(f);\n }\n }\n\n _limitZoom(z) {\n return Math.max(this.options.minZoom, Math.min(Math.floor(+z), this.options.maxZoom + 1));\n }\n\n _cluster(tree, zoom) {\n const {radius, extent, reduce, minPoints} = this.options;\n const r = radius / (extent * Math.pow(2, zoom));\n const data = tree.data;\n const nextData = [];\n const stride = this.stride;\n\n // loop through each point\n for (let i = 0; i < data.length; i += stride) {\n // if we've already visited the point at this zoom level, skip it\n if (data[i + OFFSET_ZOOM] <= zoom) continue;\n data[i + OFFSET_ZOOM] = zoom;\n\n // find all nearby points\n const x = data[i];\n const y = data[i + 1];\n const neighborIds = tree.within(data[i], data[i + 1], r);\n\n const numPointsOrigin = data[i + OFFSET_NUM];\n let numPoints = numPointsOrigin;\n\n // count the number of points in a potential cluster\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n // filter out neighbors that are already processed\n if (data[k + OFFSET_ZOOM] > zoom) numPoints += data[k + OFFSET_NUM];\n }\n\n // if there were neighbors to merge, and there are enough points to form a cluster\n if (numPoints > numPointsOrigin && numPoints >= minPoints) {\n let wx = x * numPointsOrigin;\n let wy = y * numPointsOrigin;\n\n let clusterProperties;\n let clusterPropIndex = -1;\n\n // encode both zoom and point index on which the cluster originated -- offset by total length of features\n const id = ((i / stride | 0) << 5) + (zoom + 1) + this.points.length;\n\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom; // save the zoom (so it doesn't get processed twice)\n\n const numPoints2 = data[k + OFFSET_NUM];\n wx += data[k] * numPoints2; // accumulate coordinates for calculating weighted center\n wy += data[k + 1] * numPoints2;\n\n data[k + OFFSET_PARENT] = id;\n\n if (reduce) {\n if (!clusterProperties) {\n clusterProperties = this._map(data, i, true);\n clusterPropIndex = this.clusterProps.length;\n this.clusterProps.push(clusterProperties);\n }\n reduce(clusterProperties, this._map(data, k));\n }\n }\n\n data[i + OFFSET_PARENT] = id;\n nextData.push(wx / numPoints, wy / numPoints, Infinity, id, -1, numPoints);\n if (reduce) nextData.push(clusterPropIndex);\n\n } else { // left points as unclustered\n for (let j = 0; j < stride; j++) nextData.push(data[i + j]);\n\n if (numPoints > 1) {\n for (const neighborId of neighborIds) {\n const k = neighborId * stride;\n if (data[k + OFFSET_ZOOM] <= zoom) continue;\n data[k + OFFSET_ZOOM] = zoom;\n for (let j = 0; j < stride; j++) nextData.push(data[k + j]);\n }\n }\n }\n }\n\n return nextData;\n }\n\n // get index of the point from which the cluster originated\n _getOriginId(clusterId) {\n return (clusterId - this.points.length) >> 5;\n }\n\n // get zoom of the point from which the cluster originated\n _getOriginZoom(clusterId) {\n return (clusterId - this.points.length) % 32;\n }\n\n _map(data, i, clone) {\n if (data[i + OFFSET_NUM] > 1) {\n const props = this.clusterProps[data[i + OFFSET_PROP]];\n return clone ? Object.assign({}, props) : props;\n }\n const original = this.points[data[i + OFFSET_ID]].properties;\n const result = this.options.map(original);\n return clone && result === original ? Object.assign({}, result) : result;\n }\n}\n\nfunction getClusterJSON(data, i, clusterProps) {\n return {\n type: 'Feature',\n id: data[i + OFFSET_ID],\n properties: getClusterProperties(data, i, clusterProps),\n geometry: {\n type: 'Point',\n coordinates: [xLng(data[i]), yLat(data[i + 1])]\n }\n };\n}\n\nfunction getClusterProperties(data, i, clusterProps) {\n const count = data[i + OFFSET_NUM];\n const abbrev =\n count >= 10000 ? `${Math.round(count / 1000) }k` :\n count >= 1000 ? `${Math.round(count / 100) / 10 }k` : count;\n const propIndex = data[i + OFFSET_PROP];\n const properties = propIndex === -1 ? {} : Object.assign({}, clusterProps[propIndex]);\n return Object.assign(properties, {\n cluster: true,\n cluster_id: data[i + OFFSET_ID],\n point_count: count,\n point_count_abbreviated: abbrev\n });\n}\n\n// longitude/latitude to spherical mercator in [0..1] range\nfunction lngX(lng) {\n return lng / 360 + 0.5;\n}\nfunction latY(lat) {\n const sin = Math.sin(lat * Math.PI / 180);\n const y = (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return y < 0 ? 0 : y > 1 ? 1 : y;\n}\n\n// spherical mercator to longitude/latitude\nfunction xLng(x) {\n return (x - 0.5) * 360;\n}\nfunction yLat(y) {\n const y2 = (180 - y * 360) * Math.PI / 180;\n return 360 * Math.atan(Math.exp(y2)) / Math.PI - 90;\n}\n","import equal from 'fast-deep-equal';\nimport SuperCluster from 'supercluster';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\n/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MarkerUtils {\n static isAdvancedMarkerAvailable(map) {\n return (google.maps.marker &&\n map.getMapCapabilities().isAdvancedMarkersAvailable === true);\n }\n static isAdvancedMarker(marker) {\n return (google.maps.marker &&\n marker instanceof google.maps.marker.AdvancedMarkerElement);\n }\n static setMap(marker, map) {\n if (this.isAdvancedMarker(marker)) {\n marker.map = map;\n }\n else {\n marker.setMap(map);\n }\n }\n static getPosition(marker) {\n // SuperClusterAlgorithm.calculate expects a LatLng instance so we fake it for Adv Markers\n if (this.isAdvancedMarker(marker)) {\n if (marker.position) {\n if (marker.position instanceof google.maps.LatLng) {\n return marker.position;\n }\n // since we can't cast to LatLngLiteral for reasons =(\n if (marker.position.lat && marker.position.lng) {\n return new google.maps.LatLng(marker.position.lat, marker.position.lng);\n }\n }\n return new google.maps.LatLng(null);\n }\n return marker.getPosition();\n }\n static getVisible(marker) {\n if (this.isAdvancedMarker(marker)) {\n /**\n * Always return true for Advanced Markers because the clusterer\n * uses getVisible as a way to count legacy markers not as an actual\n * indicator of visibility for some reason. Even when markers are hidden\n * Marker.getVisible returns `true` and this is used to set the marker count\n * on the cluster. See the behavior of Cluster.count\n */\n return true;\n }\n return marker.getVisible();\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Cluster {\n constructor({ markers, position }) {\n this.markers = markers;\n if (position) {\n if (position instanceof google.maps.LatLng) {\n this._position = position;\n }\n else {\n this._position = new google.maps.LatLng(position);\n }\n }\n }\n get bounds() {\n if (this.markers.length === 0 && !this._position) {\n return;\n }\n const bounds = new google.maps.LatLngBounds(this._position, this._position);\n for (const marker of this.markers) {\n bounds.extend(MarkerUtils.getPosition(marker));\n }\n return bounds;\n }\n get position() {\n return this._position || this.bounds.getCenter();\n }\n /**\n * Get the count of **visible** markers.\n */\n get count() {\n return this.markers.filter((m) => MarkerUtils.getVisible(m)).length;\n }\n /**\n * Add a marker to the cluster.\n */\n push(marker) {\n this.markers.push(marker);\n }\n /**\n * Cleanup references and remove marker from map.\n */\n delete() {\n if (this.marker) {\n MarkerUtils.setMap(this.marker, null);\n this.marker = undefined;\n }\n this.markers.length = 0;\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns the markers visible in a padded map viewport\n *\n * @param map\n * @param mapCanvasProjection\n * @param markers The list of marker to filter\n * @param viewportPaddingPixels The padding in pixel\n * @returns The list of markers in the padded viewport\n */\nconst filterMarkersToPaddedViewport = (map, mapCanvasProjection, markers, viewportPaddingPixels) => {\n const extendedMapBounds = extendBoundsToPaddedViewport(map.getBounds(), mapCanvasProjection, viewportPaddingPixels);\n return markers.filter((marker) => extendedMapBounds.contains(MarkerUtils.getPosition(marker)));\n};\n/**\n * Extends a bounds by a number of pixels in each direction\n */\nconst extendBoundsToPaddedViewport = (bounds, projection, numPixels) => {\n const { northEast, southWest } = latLngBoundsToPixelBounds(bounds, projection);\n const extendedPixelBounds = extendPixelBounds({ northEast, southWest }, numPixels);\n return pixelBoundsToLatLngBounds(extendedPixelBounds, projection);\n};\n/**\n * Returns the distance between 2 positions.\n *\n * @hidden\n */\nconst distanceBetweenPoints = (p1, p2) => {\n const R = 6371; // Radius of the Earth in km\n const dLat = ((p2.lat - p1.lat) * Math.PI) / 180;\n const dLon = ((p2.lng - p1.lng) * Math.PI) / 180;\n const sinDLat = Math.sin(dLat / 2);\n const sinDLon = Math.sin(dLon / 2);\n const a = sinDLat * sinDLat +\n Math.cos((p1.lat * Math.PI) / 180) *\n Math.cos((p2.lat * Math.PI) / 180) *\n sinDLon *\n sinDLon;\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n};\n/**\n * Converts a LatLng bound to pixels.\n *\n * @hidden\n */\nconst latLngBoundsToPixelBounds = (bounds, projection) => {\n return {\n northEast: projection.fromLatLngToDivPixel(bounds.getNorthEast()),\n southWest: projection.fromLatLngToDivPixel(bounds.getSouthWest()),\n };\n};\n/**\n * Extends a pixel bounds by numPixels in all directions.\n *\n * @hidden\n */\nconst extendPixelBounds = ({ northEast, southWest }, numPixels) => {\n northEast.x += numPixels;\n northEast.y -= numPixels;\n southWest.x -= numPixels;\n southWest.y += numPixels;\n return { northEast, southWest };\n};\n/**\n * @hidden\n */\nconst pixelBoundsToLatLngBounds = ({ northEast, southWest }, projection) => {\n const sw = projection.fromDivPixelToLatLng(southWest);\n const ne = projection.fromDivPixelToLatLng(northEast);\n return new google.maps.LatLngBounds(sw, ne);\n};\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @hidden\n */\nclass AbstractAlgorithm {\n constructor({ maxZoom = 16 }) {\n this.maxZoom = maxZoom;\n }\n /**\n * Helper function to bypass clustering based upon some map state such as\n * zoom, number of markers, etc.\n *\n * ```typescript\n * cluster({markers, map}: AlgorithmInput): Cluster[] {\n * if (shouldBypassClustering(map)) {\n * return this.noop({markers})\n * }\n * }\n * ```\n */\n noop({ markers, }) {\n return noop(markers);\n }\n}\n/**\n * Abstract viewport algorithm proves a class to filter markers by a padded\n * viewport. This is a common optimization.\n *\n * @hidden\n */\nclass AbstractViewportAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { viewportPadding = 60 } = _a, options = __rest(_a, [\"viewportPadding\"]);\n super(options);\n this.viewportPadding = 60;\n this.viewportPadding = viewportPadding;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed: false,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n}\n/**\n * @hidden\n */\nconst noop = (markers) => {\n const clusters = markers.map((marker) => new Cluster({\n position: MarkerUtils.getPosition(marker),\n markers: [marker],\n }));\n return clusters;\n};\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default Grid algorithm historically used in Google Maps marker\n * clustering.\n *\n * The Grid algorithm does not implement caching and markers may flash as the\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\n */\nclass GridAlgorithm extends AbstractViewportAlgorithm {\n constructor(_a) {\n var { maxDistance = 40000, gridSize = 40 } = _a, options = __rest(_a, [\"maxDistance\", \"gridSize\"]);\n super(options);\n this.clusters = [];\n this.state = { zoom: -1 };\n this.maxDistance = maxDistance;\n this.gridSize = gridSize;\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n const state = { zoom: map.getZoom() };\n let changed = false;\n if (this.state.zoom >= this.maxZoom && state.zoom >= this.maxZoom) ;\n else {\n changed = !equal(this.state, state);\n }\n this.state = state;\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n }),\n changed,\n };\n }\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(map, mapCanvasProjection, markers, this.viewportPadding),\n map,\n mapCanvasProjection,\n }),\n };\n }\n cluster({ markers, map, mapCanvasProjection, }) {\n this.clusters = [];\n markers.forEach((marker) => {\n this.addToClosestCluster(marker, map, mapCanvasProjection);\n });\n return this.clusters;\n }\n addToClosestCluster(marker, map, projection) {\n let maxDistance = this.maxDistance; // Some large number\n let cluster = null;\n for (let i = 0; i < this.clusters.length; i++) {\n const candidate = this.clusters[i];\n const distance = distanceBetweenPoints(candidate.bounds.getCenter().toJSON(), MarkerUtils.getPosition(marker).toJSON());\n if (distance < maxDistance) {\n maxDistance = distance;\n cluster = candidate;\n }\n }\n if (cluster &&\n extendBoundsToPaddedViewport(cluster.bounds, projection, this.gridSize).contains(MarkerUtils.getPosition(marker))) {\n cluster.push(marker);\n }\n else {\n const cluster = new Cluster({ markers: [marker] });\n this.clusters.push(cluster);\n }\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Noop algorithm does not generate any clusters or filter markers by the an extended viewport.\n */\nclass NoopAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var options = __rest(_a, []);\n super(options);\n }\n calculate({ markers, map, mapCanvasProjection, }) {\n return {\n clusters: this.cluster({ markers, map, mapCanvasProjection }),\n changed: false,\n };\n }\n cluster(input) {\n return this.noop(input);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nclass SuperClusterAlgorithm extends AbstractAlgorithm {\n constructor(_a) {\n var { maxZoom, radius = 60 } = _a, options = __rest(_a, [\"maxZoom\", \"radius\"]);\n super({ maxZoom });\n this.state = { zoom: -1 };\n this.superCluster = new SuperCluster(Object.assign({ maxZoom: this.maxZoom, radius }, options));\n }\n calculate(input) {\n let changed = false;\n const state = { zoom: input.map.getZoom() };\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n const points = this.markers.map((marker) => {\n const position = MarkerUtils.getPosition(marker);\n const coordinates = [position.lng(), position.lat()];\n return {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates,\n },\n properties: { marker },\n };\n });\n this.superCluster.load(points);\n }\n if (!changed) {\n if (this.state.zoom <= this.maxZoom || state.zoom <= this.maxZoom) {\n changed = !equal(this.state, state);\n }\n }\n this.state = state;\n if (changed) {\n this.clusters = this.cluster(input);\n }\n return { clusters: this.clusters, changed };\n }\n cluster({ map }) {\n return this.superCluster\n .getClusters([-180, -90, 180, 90], Math.round(map.getZoom()))\n .map((feature) => this.transformCluster(feature));\n }\n transformCluster({ geometry: { coordinates: [lng, lat], }, properties, }) {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: { lat, lng },\n });\n }\n const marker = properties.marker;\n return new Cluster({\n markers: [marker],\n position: MarkerUtils.getPosition(marker),\n });\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provides statistics on all clusters in the current render cycle for use in {@link Renderer.render}.\n */\nclass ClusterStats {\n constructor(markers, clusters) {\n this.markers = { sum: markers.length };\n const clusterMarkerCounts = clusters.map((a) => a.count);\n const clusterMarkerSum = clusterMarkerCounts.reduce((a, b) => a + b, 0);\n this.clusters = {\n count: clusters.length,\n markers: {\n mean: clusterMarkerSum / clusters.length,\n sum: clusterMarkerSum,\n min: Math.min(...clusterMarkerCounts),\n max: Math.max(...clusterMarkerCounts),\n },\n };\n }\n}\nclass DefaultRenderer {\n /**\n * The default render function for the library used by {@link MarkerClusterer}.\n *\n * Currently set to use the following:\n *\n * ```typescript\n * // change color if this cluster has more markers than the mean cluster\n * const color =\n * count > Math.max(10, stats.clusters.markers.mean)\n * ? \"#ff0000\"\n * : \"#0000ff\";\n *\n * // create svg url with fill color\n * const svg = window.btoa(`\n * \n * \n * \n * \n * \n * `);\n *\n * // create marker using svg icon\n * return new google.maps.Marker({\n * position,\n * icon: {\n * url: `data:image/svg+xml;base64,${svg}`,\n * scaledSize: new google.maps.Size(45, 45),\n * },\n * label: {\n * text: String(count),\n * color: \"rgba(255,255,255,0.9)\",\n * fontSize: \"12px\",\n * },\n * // adjust zIndex to be above other markers\n * zIndex: 1000 + count,\n * });\n * ```\n */\n render({ count, position }, stats, map) {\n // change color if this cluster has more markers than the mean cluster\n const color = count > Math.max(10, stats.clusters.markers.mean) ? \"#ff0000\" : \"#0000ff\";\n // create svg literal with fill color\n const svg = `\n\n\n\n${count}\n`;\n const title = `Cluster of ${count} markers`, \n // adjust zIndex to be above other markers\n zIndex = Number(google.maps.Marker.MAX_ZINDEX) + count;\n if (MarkerUtils.isAdvancedMarkerAvailable(map)) {\n // create cluster SVG element\n const div = document.createElement(\"div\");\n div.innerHTML = svg;\n const svgEl = div.firstElementChild;\n svgEl.setAttribute(\"transform\", \"translate(0 25)\");\n const clusterOptions = {\n map,\n position,\n zIndex,\n title,\n content: svgEl,\n };\n return new google.maps.marker.AdvancedMarkerElement(clusterOptions);\n }\n const clusterOptions = {\n position,\n zIndex,\n title,\n icon: {\n url: `data:image/svg+xml;base64,${btoa(svg)}`,\n anchor: new google.maps.Point(25, 25),\n },\n };\n return new google.maps.Marker(clusterOptions);\n }\n}\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Extends an object's prototype by another's.\n *\n * @param type1 The Type to be extended.\n * @param type2 The Type to extend with.\n * @ignore\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extend(type1, type2) {\n /* istanbul ignore next */\n // eslint-disable-next-line prefer-const\n for (let property in type2.prototype) {\n type1.prototype[property] = type2.prototype[property];\n }\n}\n/**\n * @ignore\n */\nclass OverlayViewSafe {\n constructor() {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n extend(OverlayViewSafe, google.maps.OverlayView);\n }\n}\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar MarkerClustererEvents;\n(function (MarkerClustererEvents) {\n MarkerClustererEvents[\"CLUSTERING_BEGIN\"] = \"clusteringbegin\";\n MarkerClustererEvents[\"CLUSTERING_END\"] = \"clusteringend\";\n MarkerClustererEvents[\"CLUSTER_CLICK\"] = \"click\";\n})(MarkerClustererEvents || (MarkerClustererEvents = {}));\nconst defaultOnClusterClickHandler = (_, cluster, map) => {\n map.fitBounds(cluster.bounds);\n};\n/**\n * MarkerClusterer creates and manages per-zoom-level clusters for large amounts\n * of markers. See {@link MarkerClustererOptions} for more details.\n *\n */\nclass MarkerClusterer extends OverlayViewSafe {\n constructor({ map, markers = [], algorithmOptions = {}, algorithm = new SuperClusterAlgorithm(algorithmOptions), renderer = new DefaultRenderer(), onClusterClick = defaultOnClusterClickHandler, }) {\n super();\n this.markers = [...markers];\n this.clusters = [];\n this.algorithm = algorithm;\n this.renderer = renderer;\n this.onClusterClick = onClusterClick;\n if (map) {\n this.setMap(map);\n }\n }\n addMarker(marker, noDraw) {\n if (this.markers.includes(marker)) {\n return;\n }\n this.markers.push(marker);\n if (!noDraw) {\n this.render();\n }\n }\n addMarkers(markers, noDraw) {\n markers.forEach((marker) => {\n this.addMarker(marker, true);\n });\n if (!noDraw) {\n this.render();\n }\n }\n removeMarker(marker, noDraw) {\n const index = this.markers.indexOf(marker);\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n MarkerUtils.setMap(marker, null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n if (!noDraw) {\n this.render();\n }\n return true;\n }\n removeMarkers(markers, noDraw) {\n let removed = false;\n markers.forEach((marker) => {\n removed = this.removeMarker(marker, true) || removed;\n });\n if (removed && !noDraw) {\n this.render();\n }\n return removed;\n }\n clearMarkers(noDraw) {\n this.markers.length = 0;\n if (!noDraw) {\n this.render();\n }\n }\n /**\n * Recalculates and draws all the marker clusters.\n */\n render() {\n const map = this.getMap();\n if (map instanceof google.maps.Map && map.getProjection()) {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_BEGIN, this);\n const { clusters, changed } = this.algorithm.calculate({\n markers: this.markers,\n map,\n mapCanvasProjection: this.getProjection(),\n });\n // Allow algorithms to return flag on whether the clusters/markers have changed.\n if (changed || changed == undefined) {\n // Accumulate the markers of the clusters composed of a single marker.\n // Those clusters directly use the marker.\n // Clusters with more than one markers use a group marker generated by a renderer.\n const singleMarker = new Set();\n for (const cluster of clusters) {\n if (cluster.markers.length == 1) {\n singleMarker.add(cluster.markers[0]);\n }\n }\n const groupMarkers = [];\n // Iterate the clusters that are currently rendered.\n for (const cluster of this.clusters) {\n if (cluster.marker == null) {\n continue;\n }\n if (cluster.markers.length == 1) {\n if (!singleMarker.has(cluster.marker)) {\n // The marker:\n // - was previously rendered because it is from a cluster with 1 marker,\n // - should no more be rendered as it is not in singleMarker.\n MarkerUtils.setMap(cluster.marker, null);\n }\n }\n else {\n // Delay the removal of old group markers to avoid flickering.\n groupMarkers.push(cluster.marker);\n }\n }\n this.clusters = clusters;\n this.renderClusters();\n // Delayed removal of the markers of the former groups.\n requestAnimationFrame(() => groupMarkers.forEach((marker) => MarkerUtils.setMap(marker, null)));\n }\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTERING_END, this);\n }\n }\n onAdd() {\n this.idleListener = this.getMap().addListener(\"idle\", this.render.bind(this));\n this.render();\n }\n onRemove() {\n google.maps.event.removeListener(this.idleListener);\n this.reset();\n }\n reset() {\n this.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n this.clusters.forEach((cluster) => cluster.delete());\n this.clusters = [];\n }\n renderClusters() {\n // Generate stats to pass to renderers.\n const stats = new ClusterStats(this.markers, this.clusters);\n const map = this.getMap();\n this.clusters.forEach((cluster) => {\n if (cluster.markers.length === 1) {\n cluster.marker = cluster.markers[0];\n }\n else {\n // Generate the marker to represent the group.\n cluster.marker = this.renderer.render(cluster, stats, map);\n // Make sure all individual markers are removed from the map.\n cluster.markers.forEach((marker) => MarkerUtils.setMap(marker, null));\n if (this.onClusterClick) {\n cluster.marker.addListener(\"click\", \n /* istanbul ignore next */\n (event) => {\n google.maps.event.trigger(this, MarkerClustererEvents.CLUSTER_CLICK, cluster);\n this.onClusterClick(event, cluster, map);\n });\n }\n }\n MarkerUtils.setMap(cluster.marker, map);\n });\n }\n}\n\nexport { AbstractAlgorithm, AbstractViewportAlgorithm, Cluster, ClusterStats, DefaultRenderer, GridAlgorithm, MarkerClusterer, MarkerClustererEvents, NoopAlgorithm, SuperClusterAlgorithm, defaultOnClusterClickHandler, distanceBetweenPoints, extendBoundsToPaddedViewport, extendPixelBounds, filterMarkersToPaddedViewport, noop, pixelBoundsToLatLngBounds };\n//# sourceMappingURL=index.esm.js.map\n","import { useState, useEffect, memo, type ReactElement } from 'react'\nimport { MarkerClusterer, type MarkerClustererOptions } from '@googlemaps/markerclusterer'\n\nimport { useGoogleMap } from '../../map-context'\n\nexport type MarkerClustererOptionsSubset = Omit\n\nexport interface GoogleMarkerClustererProps {\n /** Render prop that exposes marker clusterer to children components\n *\n * The callback function should return a list of Marker components.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: (markerClusterer: MarkerClusterer) => ReactElement,\n /** Subset of {@link MarkerClustererOptions} options\n *\n * ```\n * {\n * algorithm?: Algorithm;\n * renderer?: Renderer;\n * onClusterClick?: onClusterClickHandler;\n * }\n * ```\n */\n options: MarkerClustererOptionsSubset\n}\n\nexport function useGoogleMarkerClusterer(options: MarkerClustererOptionsSubset): MarkerClusterer | null {\n const map = useGoogleMap()\n\n const [markerClusterer, setMarkerClusterer] = useState(null)\n\n useEffect(() => {\n if (map && markerClusterer === null) {\n const markerCluster = new MarkerClusterer({ ...options, map })\n\n setMarkerClusterer(markerCluster)\n }\n }, [map])\n\n return markerClusterer\n}\n\n/** Wrapper around [@googlemaps/markerclusterer](https://github.com/googlemaps/js-markerclusterer)\n *\n * Accepts {@link MarkerClustererOptionsSubset} which is a subset of {@link MarkerClustererOptions}\n */\nfunction GoogleMarkerClusterer({ children, options }: GoogleMarkerClustererProps) {\n const markerClusterer = useGoogleMarkerClusterer(options)\n\n return markerClusterer !== null ? children(markerClusterer) : null\n}\n\nexport default memo(GoogleMarkerClusterer)\n","/* global google */\nimport {\n memo,\n useRef,\n Children,\n useState,\n useEffect,\n useContext,\n PureComponent,\n type ReactNode,\n type ReactPortal,\n type ContextType,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport invariant from 'invariant'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed',\n}\n\nconst updaterMap = {\n options(instance: google.maps.InfoWindow, options: google.maps.InfoWindowOptions): void {\n instance.setOptions(options)\n },\n position(\n instance: google.maps.InfoWindow,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n zIndex(instance: google.maps.InfoWindow, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ninterface InfoWindowState {\n infoWindow: google.maps.InfoWindow | null\n}\n\nexport interface InfoWindowProps {\n children?: ReactNode | undefined\n /** Can be any MVCObject that exposes a LatLng position property and optionally a Point anchorPoint property for calculating the pixelOffset. The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow. */\n anchor?: google.maps.MVCObject | undefined\n options?: google.maps.InfoWindowOptions | undefined\n /** The LatLng at which to display this InfoWindow. If the InfoWindow is opened with an anchor, the anchor's position will be used instead. */\n position?: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n /** All InfoWindows are displayed on the map in order of their zIndex, with higher values displaying in front of InfoWindows with lower values. By default, InfoWindows are displayed according to their latitude, with InfoWindows of lower latitudes appearing in front of InfoWindows at higher latitudes. InfoWindows are always displayed in front of markers. */\n zIndex?: number | undefined\n /** This event is fired when the close button was clicked. */\n onCloseClick?: (() => void) | undefined\n /** This event is fired when the
containing the InfoWindow's content is attached to the DOM. You may wish to monitor this event if you are building out your info window content dynamically. */\n onDomReady?: (() => void) | undefined\n /** This event is fired when the content property changes. */\n onContentChanged?: (() => void) | undefined\n /** This event is fired when the position property changes. */\n onPositionChanged?: (() => void) | undefined\n /** This event is fired when the InfoWindow's zIndex changes. */\n onZindexChanged?: (() => void) | undefined\n /** This callback is called when the infoWindow instance has loaded. It is called with the infoWindow instance. */\n onLoad?: ((infoWindow: google.maps.InfoWindow) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the infoWindow instance. */\n onUnmount?: ((infoWindow: google.maps.InfoWindow) => void) | undefined\n}\n\nfunction InfoWindowFunctional({\n children,\n anchor,\n options,\n position,\n zIndex,\n onCloseClick,\n onDomReady,\n onContentChanged,\n onPositionChanged,\n onZindexChanged,\n onLoad,\n onUnmount\n}: InfoWindowProps): ReactPortal | null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [closeclickListener, setCloseClickListener] = useState(null)\n const [domreadyclickListener, setDomReadyClickListener] = useState(null)\n const [contentchangedclickListener, setContentChangedClickListener] = useState(null)\n const [positionchangedclickListener, setPositionChangedClickListener] = useState(null)\n const [zindexchangedclickListener, setZindexChangedClickListener] = useState(null)\n\n const containerElementRef = useRef(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.close()\n\n if (anchor) {\n instance.open(map, anchor)\n } else if (instance.getPosition()) {\n instance.open(map)\n }\n }\n }, [map, instance, anchor])\n\n useEffect(() => {\n if (options && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (position && instance !== null) {\n instance.setPosition(position)\n }\n }, [position])\n\n useEffect(() => {\n if (typeof zIndex === 'number' && instance !== null) {\n instance.setZIndex(zIndex)\n }\n }, [zIndex])\n\n useEffect(() => {\n if (instance && onCloseClick) {\n if (closeclickListener !== null) {\n google.maps.event.removeListener(closeclickListener)\n }\n\n setCloseClickListener(\n google.maps.event.addListener(instance, 'closeclick', onCloseClick)\n )\n }\n }, [onCloseClick])\n\n useEffect(() => {\n if (instance && onDomReady) {\n if (domreadyclickListener !== null) {\n google.maps.event.removeListener(domreadyclickListener)\n }\n\n setDomReadyClickListener(\n google.maps.event.addListener(instance, 'domready', onDomReady)\n )\n }\n }, [onDomReady])\n\n useEffect(() => {\n if (instance && onContentChanged) {\n if (contentchangedclickListener !== null) {\n google.maps.event.removeListener(contentchangedclickListener)\n }\n\n setContentChangedClickListener(\n google.maps.event.addListener(instance, 'content_changed', onContentChanged)\n )\n }\n }, [onContentChanged])\n\n useEffect(() => {\n if (instance && onPositionChanged) {\n if (positionchangedclickListener !== null) {\n google.maps.event.removeListener(positionchangedclickListener)\n }\n\n setPositionChangedClickListener(\n google.maps.event.addListener(instance, 'position_changed', onPositionChanged)\n )\n }\n }, [onPositionChanged])\n\n useEffect(() => {\n if (instance && onZindexChanged) {\n if (zindexchangedclickListener !== null) {\n google.maps.event.removeListener(zindexchangedclickListener)\n }\n\n setZindexChangedClickListener(\n google.maps.event.addListener(instance, 'zindex_changed', onZindexChanged)\n )\n }\n }, [onZindexChanged])\n\n useEffect(() => {\n const infoWindow = new google.maps.InfoWindow({\n ...(options || {}),\n })\n\n setInstance(infoWindow)\n\n containerElementRef.current = document.createElement('div')\n\n if (onCloseClick) {\n setCloseClickListener(\n google.maps.event.addListener(infoWindow, 'closeclick', onCloseClick)\n )\n }\n\n if (onDomReady) {\n setDomReadyClickListener(\n google.maps.event.addListener(infoWindow, 'domready', onDomReady)\n )\n }\n\n if (onContentChanged) {\n setContentChangedClickListener(\n google.maps.event.addListener(infoWindow, 'content_changed', onContentChanged)\n )\n }\n\n if (onPositionChanged) {\n setPositionChangedClickListener(\n google.maps.event.addListener(infoWindow, 'position_changed', onPositionChanged)\n )\n }\n\n if (onZindexChanged) {\n setZindexChangedClickListener(\n google.maps.event.addListener(infoWindow, 'zindex_changed', onZindexChanged)\n )\n }\n\n infoWindow.setContent(containerElementRef.current)\n\n if (position) {\n infoWindow.setPosition(position)\n }\n\n if (zIndex) {\n infoWindow.setZIndex(zIndex)\n }\n\n if (anchor) {\n infoWindow.open(map, anchor)\n } else if (infoWindow.getPosition()) {\n infoWindow.open(map)\n } else {\n invariant(\n false,\n `You must provide either an anchor (typically render it inside a ) or a position props for .`\n )\n }\n\n if (onLoad) {\n onLoad(infoWindow)\n }\n\n return () => {\n if (closeclickListener) {\n google.maps.event.removeListener(closeclickListener)\n }\n\n if (contentchangedclickListener) {\n google.maps.event.removeListener(contentchangedclickListener)\n }\n\n if (domreadyclickListener) {\n google.maps.event.removeListener(domreadyclickListener)\n }\n\n if (positionchangedclickListener) {\n google.maps.event.removeListener(positionchangedclickListener)\n }\n\n if (zindexchangedclickListener) {\n google.maps.event.removeListener(zindexchangedclickListener)\n }\n\n if (onUnmount) {\n onUnmount(infoWindow)\n }\n\n infoWindow.close()\n }\n }, [])\n\n return containerElementRef.current ? (\n createPortal(Children.only(children), containerElementRef.current)\n ) : (\n null\n )\n}\n\nexport const InfoWindowF = memo(InfoWindowFunctional)\n\nexport class InfoWindow extends PureComponent {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: HTMLElement | null = null\n\n override state: InfoWindowState = {\n infoWindow: null,\n }\n\n open = (infoWindow: google.maps.InfoWindow, anchor?: google.maps.MVCObject | undefined): void => {\n if (anchor) {\n infoWindow.open(this.context, anchor)\n } else if (infoWindow.getPosition()) {\n infoWindow.open(this.context)\n } else {\n invariant(\n false,\n `You must provide either an anchor (typically render it inside a ) or a position props for .`\n )\n }\n }\n\n setInfoWindowCallback = (): void => {\n if (this.state.infoWindow !== null && this.containerElement !== null) {\n this.state.infoWindow.setContent(this.containerElement)\n\n this.open(this.state.infoWindow, this.props.anchor)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.infoWindow)\n }\n }\n }\n\n override componentDidMount(): void {\n const infoWindow = new google.maps.InfoWindow({\n ...(this.props.options || {}),\n })\n\n this.containerElement = document.createElement('div')\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: infoWindow,\n })\n\n this.setState(() => {\n return {\n infoWindow,\n }\n }, this.setInfoWindowCallback)\n }\n\n override componentDidUpdate(prevProps: InfoWindowProps): void {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.infoWindow,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents)\n\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.infoWindow)\n }\n\n this.state.infoWindow.close()\n }\n }\n\n override render(): ReactPortal | null {\n return this.containerElement ? (\n createPortal(Children.only(this.props.children), this.containerElement)\n ) : (\n null\n )\n }\n}\n\nexport default InfoWindow\n","import { type ContextType, PureComponent, useState, useContext, useEffect, memo } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n draggable(instance: google.maps.Polyline, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Polyline, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Polyline, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Polyline, options: google.maps.PolylineOptions): void {\n instance.setOptions(options)\n },\n path(\n instance: google.maps.Polyline,\n path:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n ): void {\n instance.setPath(path)\n },\n visible(instance: google.maps.Polyline, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface PolylineState {\n polyline: google.maps.Polyline | null\n}\n\nexport interface PolylineProps {\n options?: google.maps.PolylineOptions | undefined\n /** If set to true, the user can drag this shape over the map. The geodesic property defines the mode of dragging. */\n draggable?: boolean | undefined\n /** If set to true, the user can edit this shape by dragging the control points shown at the vertices and on each segment. */\n editable?: boolean | undefined\n /** Hides this poly if set to false. */\n visible?: boolean | undefined\n /** Sets the path. The ordered sequence of coordinates of the Polyline. This path may be specified using either a simple array of LatLngs, or an MVCArray of LatLngs. Note that if you pass a simple array, it will be converted to an MVCArray Inserting or removing LatLngs in the MVCArray will automatically update the polyline on the map. */\n path?:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n | undefined\n /** This event is fired when the DOM dblclick event is fired on the Polyline. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user stops dragging the polyline. */\n onDragEnd?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user starts dragging the polyline. */\n onDragStart?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousedown event is fired on the Polyline. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousemove event is fired on the Polyline. */\n onMouseMove?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on Polyline mouseout. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on Polyline mouseover. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mouseup event is fired on the Polyline. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the Polyline is right-clicked on. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM click event is fired on the Polyline. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the polyline. */\n onDrag?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This callback is called when the polyline instance has loaded. It is called with the polyline instance. */\n onLoad?: ((polyline: google.maps.Polyline) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the polyline instance. */\n onUnmount?: ((polyline: google.maps.Polyline) => void) | undefined\n}\n\nconst defaultOptions = {}\n\nfunction PolylineFunctional({\n options,\n draggable,\n editable,\n visible,\n path,\n onDblClick,\n onDragEnd,\n onDragStart,\n onMouseDown,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onRightClick,\n onClick,\n onDrag,\n onLoad,\n onUnmount,\n}: PolylineProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable)\n }\n }, [instance, draggable])\n\n useEffect(() => {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable)\n }\n }, [instance, editable])\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible)\n }\n }, [instance, visible])\n\n useEffect(() => {\n if (typeof path !== 'undefined' && instance !== null) {\n instance.setPath(path)\n }\n }, [instance, path])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(instance, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(instance, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(instance, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(instance, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n const polyline = new google.maps.Polyline({\n ...(options || defaultOptions),\n map,\n })\n\n if (path) {\n polyline.setPath(path)\n }\n\n if (typeof visible !== 'undefined') {\n polyline.setVisible(visible)\n }\n\n if (typeof editable !== 'undefined') {\n polyline.setEditable(editable)\n }\n\n if (typeof draggable !== 'undefined') {\n polyline.setDraggable(draggable)\n }\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(polyline, 'dblclick', onDblClick)\n )\n }\n\n if (onDragEnd) {\n setDragendListener(\n google.maps.event.addListener(polyline, 'dragend', onDragEnd)\n )\n }\n\n if (onDragStart) {\n setDragstartListener(\n google.maps.event.addListener(polyline, 'dragstart', onDragStart)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(polyline, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseMove) {\n setMousemoveListener(\n google.maps.event.addListener(polyline, 'mousemove', onMouseMove)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(polyline, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(polyline, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(polyline, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightclickListener(\n google.maps.event.addListener(polyline, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(polyline, 'click', onClick)\n )\n }\n\n if (onDrag) {\n setDragListener(\n google.maps.event.addListener(polyline, 'drag', onDrag)\n )\n }\n\n setInstance(polyline)\n\n if (onLoad) {\n onLoad(polyline)\n }\n\n return () => {\n\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (onUnmount) {\n onUnmount(polyline)\n }\n\n polyline.setMap(null)\n }\n }, [])\n\n return null\n}\n\nexport const PolylineF = memo(PolylineFunctional)\n\nexport class Polyline extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: PolylineState = {\n polyline: null,\n }\n\n setPolylineCallback = (): void => {\n if (this.state.polyline !== null && this.props.onLoad) {\n this.props.onLoad(this.state.polyline)\n }\n }\n\n override componentDidMount(): void {\n const polyline = new google.maps.Polyline({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: polyline,\n })\n\n this.setState(function setPolyline() {\n return {\n polyline,\n }\n }, this.setPolylineCallback)\n }\n\n override componentDidUpdate(prevProps: PolylineProps): void {\n if (this.state.polyline !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.polyline,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.polyline !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polyline)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.polyline.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default Polyline\n","/* global google */\nimport { type ContextType, PureComponent, useContext, useEffect, useState, memo } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n draggable(instance: google.maps.Polygon, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Polygon, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Polygon, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Polygon, options: google.maps.PolygonOptions): void {\n instance.setOptions(options)\n },\n path(\n instance: google.maps.Polygon,\n path:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n ): void {\n instance.setPath(path)\n },\n\n paths(\n instance: google.maps.Polygon,\n paths:\n | google.maps.MVCArray\n | google.maps.MVCArray>\n | google.maps.LatLng[]\n | google.maps.LatLng[][]\n | google.maps.LatLngLiteral[]\n | google.maps.LatLngLiteral[][]\n ): void {\n instance.setPaths(paths)\n },\n\n visible(instance: google.maps.Polygon, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface PolygonState {\n polygon: google.maps.Polygon | null\n}\n\nexport interface PolygonProps {\n options?: google.maps.PolygonOptions | undefined\n /** If set to true, the user can drag this shape over the map. The geodesic property defines the mode of dragging. */\n draggable?: boolean | undefined\n /** If set to true, the user can edit this shape by dragging the control points shown at the vertices and on each segment. */\n editable?: boolean | undefined\n /** Hides this poly if set to false. */\n visible?: boolean | undefined\n /** Sets the first path. See Paths for more details. */\n path?:\n | google.maps.MVCArray\n | google.maps.LatLng[]\n | google.maps.LatLngLiteral[]\n | undefined\n /** Sets the path for this polygon. The ordered sequence of coordinates that designates a closed loop. Unlike polylines, a polygon may consist of one or more paths. As a result, the paths property may specify one or more arrays of LatLng coordinates. Paths are closed automatically; do not repeat the first vertex of the path as the last vertex. Simple polygons may be defined using a single array of LatLngs. More complex polygons may specify an array of arrays. Any simple arrays are converted into MVCArrays. Inserting or removing LatLngs from the MVCArray will automatically update the polygon on the map. */\n paths?:\n | google.maps.MVCArray\n | google.maps.MVCArray>\n | google.maps.LatLng[]\n | google.maps.LatLng[][]\n | google.maps.LatLngLiteral[]\n | google.maps.LatLngLiteral[][]\n | undefined\n /** This event is fired when the DOM dblclick event is fired on the Polygon. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user stops dragging the polygon. */\n onDragEnd?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user starts dragging the polygon. */\n onDragStart?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousedown event is fired on the Polygon. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousemove event is fired on the Polygon. */\n onMouseMove?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on Polygon mouseout. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on Polygon mouseover. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mouseup event is fired on the Polygon. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the Polygon is right-clicked on. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM click event is fired on the Polygon. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the polygon. */\n onDrag?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This callback is called when the polygon instance has loaded. It is called with the polygon instance. */\n onLoad?: ((polygon: google.maps.Polygon) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the polygon instance. */\n onUnmount?: ((polygon: google.maps.Polygon) => void) | undefined\n}\n\nfunction PolygonFunctional({\n options,\n draggable,\n editable,\n visible,\n path,\n paths,\n onDblClick,\n onDragEnd,\n onDragStart,\n onMouseDown,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onRightClick,\n onClick,\n onDrag,\n onLoad,\n onUnmount,\n}: PolygonProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable)\n }\n }, [instance, draggable])\n\n useEffect(() => {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable)\n }\n }, [instance, editable])\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible)\n }\n }, [instance, visible])\n\n useEffect(() => {\n if (typeof path !== 'undefined' && instance !== null) {\n instance.setPath(path)\n }\n }, [instance, path])\n\n useEffect(() => {\n if (typeof paths !== 'undefined' && instance !== null) {\n instance.setPaths(paths)\n }\n }, [instance, paths])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(instance, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(instance, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(instance, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(instance, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n const polygon = new google.maps.Polygon({\n ...(options || {}),\n map,\n })\n\n if (path) {\n polygon.setPath(path)\n }\n\n if (paths) {\n polygon.setPaths(paths)\n }\n\n if (typeof visible !== 'undefined') {\n polygon.setVisible(visible)\n }\n\n if (typeof editable !== 'undefined') {\n polygon.setEditable(editable)\n }\n\n if (typeof draggable !== 'undefined') {\n polygon.setDraggable(draggable)\n }\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(polygon, 'dblclick', onDblClick)\n )\n }\n\n if (onDragEnd) {\n setDragendListener(\n google.maps.event.addListener(polygon, 'dragend', onDragEnd)\n )\n }\n\n if (onDragStart) {\n setDragstartListener(\n google.maps.event.addListener(polygon, 'dragstart', onDragStart)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(polygon, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseMove) {\n setMousemoveListener(\n google.maps.event.addListener(polygon, 'mousemove', onMouseMove)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(polygon, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(polygon, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(polygon, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightclickListener(\n google.maps.event.addListener(polygon, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(polygon, 'click', onClick)\n )\n }\n\n if (onDrag) {\n setDragListener(\n google.maps.event.addListener(polygon, 'drag', onDrag)\n )\n }\n\n setInstance(polygon)\n\n if (onLoad) {\n onLoad(polygon)\n }\n\n return () => {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (onUnmount) {\n onUnmount(polygon)\n }\n\n polygon.setMap(null)\n }\n }, [])\n\n return null\n}\n\nexport const PolygonF = memo(PolygonFunctional)\n\nexport class Polygon extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: PolygonState = {\n polygon: null,\n }\n\n setPolygonCallback = (): void => {\n if (this.state.polygon !== null && this.props.onLoad) {\n this.props.onLoad(this.state.polygon)\n }\n }\n\n override componentDidMount(): void {\n const polygon = new google.maps.Polygon({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: polygon,\n })\n\n this.setState(function setPolygon() {\n return {\n polygon,\n }\n }, this.setPolygonCallback)\n }\n\n override componentDidUpdate(prevProps: PolygonProps): void {\n if (this.state.polygon !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.polygon,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.polygon !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polygon)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.polygon && this.state.polygon.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default Polygon\n","import { memo, type ContextType, PureComponent, useContext, useEffect, useState } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onBoundsChanged: 'bounds_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.Rectangle,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n draggable(instance: google.maps.Rectangle, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Rectangle, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Rectangle, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Rectangle, options: google.maps.RectangleOptions): void {\n instance.setOptions(options)\n },\n visible(instance: google.maps.Rectangle, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface RectangleState {\n rectangle: google.maps.Rectangle | null\n}\n\nexport interface RectangleProps {\n options?: google.maps.RectangleOptions | undefined\n /** Sets the bounds of this rectangle. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined\n /** If set to true, the user can drag this rectangle over the map. */\n draggable?: boolean | undefined\n /** If set to true, the user can edit this rectangle by dragging the control points shown at the corners and on each edge. */\n editable?: boolean | undefined\n /** Hides this rectangle if set to false. */\n visible?: boolean | undefined\n /** @deprecated Indicates whether this Rectangle handles mouse events. Defaults to true. Does not exist on RectangleF component. In google-maps-api types it belongs to options! update options.clickable instead! */\n clickable?: boolean | undefined\n /** This event is fired when the DOM dblclick event is fired on the rectangle. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user stops dragging the rectangle. */\n onDragEnd?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user starts dragging the rectangle. */\n onDragStart?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousedown event is fired on the rectangle. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousemove event is fired on the rectangle. */\n onMouseMove?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on rectangle mouseout. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on rectangle mouseover. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mouseup event is fired on the rectangle. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the rectangle is right-clicked on. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM click event is fired on the rectangle. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the rectangle. */\n onDrag?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the rectangle's bounds are changed. */\n onBoundsChanged?: (() => void) | undefined\n /** This callback is called when the rectangle instance has loaded. It is called with the rectangle instance. */\n onLoad?: ((rectangle: google.maps.Rectangle) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the rectangle instance. */\n onUnmount?: ((rectangle: google.maps.Rectangle) => void) | undefined\n}\n\nfunction RectangleFunctional({\n options,\n bounds,\n draggable,\n editable,\n visible,\n onDblClick,\n onDragEnd,\n onDragStart,\n onMouseDown,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onRightClick,\n onClick,\n onDrag,\n onBoundsChanged,\n onLoad,\n onUnmount,\n}: RectangleProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightClickListener, setRightClickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n const [boundsChangedListener, setBoundsChangedListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable)\n }\n }, [instance, draggable])\n\n useEffect(() => {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable)\n }\n }, [instance, editable])\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible)\n }\n }, [instance, visible])\n\n useEffect(() => {\n if (typeof bounds !== 'undefined' && instance !== null) {\n instance.setBounds(bounds)\n }\n }, [instance, bounds])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(instance, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(instance, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(instance, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightClickListener !== null) {\n google.maps.event.removeListener(rightClickListener)\n }\n\n setRightClickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(instance, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n if (instance && onBoundsChanged) {\n if (boundsChangedListener !== null) {\n google.maps.event.removeListener(boundsChangedListener)\n }\n\n setBoundsChangedListener(\n google.maps.event.addListener(instance, 'bounds_changed', onBoundsChanged)\n )\n }\n }, [onBoundsChanged])\n\n useEffect(() => {\n const rectangle = new google.maps.Rectangle({\n ...(options || {}),\n map,\n })\n\n if (typeof visible !== 'undefined') {\n rectangle.setVisible(visible)\n }\n\n if (typeof editable !== 'undefined') {\n rectangle.setEditable(editable)\n }\n\n if (typeof draggable !== 'undefined') {\n rectangle.setDraggable(draggable)\n }\n\n if (typeof bounds !== 'undefined') {\n rectangle.setBounds(bounds)\n }\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(rectangle, 'dblclick', onDblClick)\n )\n }\n\n if (onDragEnd) {\n setDragendListener(\n google.maps.event.addListener(rectangle, 'dragend', onDragEnd)\n )\n }\n\n if (onDragStart) {\n setDragstartListener(\n google.maps.event.addListener(rectangle, 'dragstart', onDragStart)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(rectangle, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseMove) {\n setMousemoveListener(\n google.maps.event.addListener(rectangle, 'mousemove', onMouseMove)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(rectangle, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(rectangle, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(rectangle, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightClickListener(\n google.maps.event.addListener(rectangle, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(rectangle, 'click', onClick)\n )\n }\n\n if (onDrag) {\n setDragListener(\n google.maps.event.addListener(rectangle, 'drag', onDrag)\n )\n }\n\n if (onBoundsChanged) {\n setBoundsChangedListener(\n google.maps.event.addListener(rectangle, 'bounds_changed', onBoundsChanged)\n )\n }\n\n setInstance(rectangle)\n\n if (onLoad) {\n onLoad(rectangle)\n }\n\n return () => {\n\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightClickListener !== null) {\n google.maps.event.removeListener(rightClickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n if (boundsChangedListener !== null) {\n google.maps.event.removeListener(boundsChangedListener)\n }\n\n if (onUnmount) {\n onUnmount(rectangle)\n }\n\n rectangle.setMap(null)\n }\n }, [])\n\n return null\n}\n\nexport const RectangleF = memo(RectangleFunctional)\n\nexport class Rectangle extends PureComponent {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: RectangleState = {\n rectangle: null,\n }\n\n setRectangleCallback = (): void => {\n if (this.state.rectangle !== null && this.props.onLoad) {\n this.props.onLoad(this.state.rectangle)\n }\n }\n\n override componentDidMount(): void {\n const rectangle = new google.maps.Rectangle({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: rectangle,\n })\n\n this.setState(function setRectangle() {\n return {\n rectangle,\n }\n }, this.setRectangleCallback)\n }\n\n override componentDidUpdate(prevProps: RectangleProps): void {\n if (this.state.rectangle !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.rectangle,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.rectangle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.rectangle)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.rectangle.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default Rectangle\n","import { type ContextType, PureComponent, memo, useContext, useState, useEffect } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCenterChanged: 'center_changed',\n onRadiusChanged: 'radius_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n}\n\nconst updaterMap = {\n center(instance: google.maps.Circle, center: google.maps.LatLng): void {\n instance.setCenter(center)\n },\n draggable(instance: google.maps.Circle, draggable: boolean): void {\n instance.setDraggable(draggable)\n },\n editable(instance: google.maps.Circle, editable: boolean): void {\n instance.setEditable(editable)\n },\n map(instance: google.maps.Circle, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(instance: google.maps.Circle, options: google.maps.CircleOptions): void {\n instance.setOptions(options)\n },\n radius(instance: google.maps.Circle, radius: number): void {\n instance.setRadius(radius)\n },\n visible(instance: google.maps.Circle, visible: boolean): void {\n instance.setVisible(visible)\n },\n}\n\ninterface CircleState {\n circle: google.maps.Circle | null\n}\n\nexport interface CircleProps {\n options?: google.maps.CircleOptions | undefined\n\n /** sets the center of the circle */\n center?: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n\n // required\n /** Sets the radius of this circle (in meters) */\n radius?: number | undefined\n /** If set to true, the user can drag this circle over the map */\n draggable?: boolean | undefined\n /** If set to true, the user can edit this circle by dragging the control points shown at the center and around the circumference of the circle. */\n editable?: boolean | undefined\n /** Hides this circle if set to false. */\n visible?: boolean | undefined\n /** This event is fired when the DOM dblclick event is fired on the circle. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user stops dragging the circle. */\n onDragEnd?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the user starts dragging the circle. */\n onDragStart?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousedown event is fired on the circle. */\n onMouseDown?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mousemove event is fired on the circle. */\n onMouseMove?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on circle mouseout. */\n onMouseOut?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired on circle mouseover. */\n onMouseOver?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM mouseup event is fired on the circle. */\n onMouseUp?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the circle is right-clicked on. */\n onRightClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM click event is fired on the circle. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is repeatedly fired while the user drags the circle. */\n onDrag?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the circle's center is changed. */\n onCenterChanged?: (() => void) | undefined\n /** This event is fired when the circle's radius is changed. */\n onRadiusChanged?: (() => void) | undefined\n /** This callback is called when the circle instance has loaded. It is called with the circle instance. */\n onLoad?: ((circle: google.maps.Circle) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the circle instance. */\n onUnmount?: ((circle: google.maps.Circle) => void) | undefined\n}\n\nconst defaultOptions = {}\n\nfunction CircleFunctional({\n options,\n center,\n radius,\n draggable,\n editable,\n visible,\n onDblClick,\n onDragEnd,\n onDragStart,\n onMouseDown,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onRightClick,\n onClick,\n onDrag,\n onCenterChanged,\n onRadiusChanged,\n onLoad,\n onUnmount,\n}: CircleProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [dragendListener, setDragendListener] = useState(null)\n const [dragstartListener, setDragstartListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n const [dragListener, setDragListener] = useState(null)\n const [centerChangedListener, setCenterChangedListener] = useState(null)\n const [radiusChangedListener, setRadiusChangedListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (typeof options !== 'undefined' && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n if (typeof draggable !== 'undefined' && instance !== null) {\n instance.setDraggable(draggable)\n }\n }, [instance, draggable])\n\n useEffect(() => {\n if (typeof editable !== 'undefined' && instance !== null) {\n instance.setEditable(editable)\n }\n }, [instance, editable])\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && instance !== null) {\n instance.setVisible(visible)\n }\n }, [instance, visible])\n\n useEffect(() => {\n if (typeof radius === 'number' && instance !== null) {\n instance.setRadius(radius)\n }\n }, [instance, radius])\n\n useEffect(() => {\n if (typeof center !== 'undefined' && instance !== null) {\n instance.setCenter(center)\n }\n }, [instance, center])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onDragEnd) {\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n setDragendListener(\n google.maps.event.addListener(instance, 'dragend', onDragEnd)\n )\n }\n }, [onDragEnd])\n\n useEffect(() => {\n if (instance && onDragStart) {\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n setDragstartListener(\n google.maps.event.addListener(instance, 'dragstart', onDragStart)\n )\n }\n }, [onDragStart])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(instance, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onDrag) {\n if (dragListener !== null) {\n google.maps.event.removeListener(dragListener)\n }\n\n setDragListener(\n google.maps.event.addListener(instance, 'drag', onDrag)\n )\n }\n }, [onDrag])\n\n useEffect(() => {\n if (instance && onCenterChanged) {\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener)\n }\n\n setCenterChangedListener(\n google.maps.event.addListener(instance, 'center_changed', onCenterChanged)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onRadiusChanged) {\n if (radiusChangedListener !== null) {\n google.maps.event.removeListener(radiusChangedListener)\n }\n\n setRadiusChangedListener(\n google.maps.event.addListener(instance, 'radius_changed', onRadiusChanged)\n )\n }\n }, [onRadiusChanged])\n\n useEffect(() => {\n const circle = new google.maps.Circle({\n ...(options || defaultOptions),\n map,\n })\n\n if (typeof radius === 'number') {\n circle.setRadius(radius)\n }\n\n if (typeof center !== 'undefined') {\n circle.setCenter(center)\n }\n\n if (typeof radius === 'number') {\n circle.setRadius(radius)\n }\n\n if (typeof visible !== 'undefined') {\n circle.setVisible(visible)\n }\n\n if (typeof editable !== 'undefined') {\n circle.setEditable(editable)\n }\n\n if (typeof draggable !== 'undefined') {\n circle.setDraggable(draggable)\n }\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(circle, 'dblclick', onDblClick)\n )\n }\n\n if (onDragEnd) {\n setDragendListener(\n google.maps.event.addListener(circle, 'dragend', onDragEnd)\n )\n }\n\n if (onDragStart) {\n setDragstartListener(\n google.maps.event.addListener(circle, 'dragstart', onDragStart)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(circle, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseMove) {\n setMousemoveListener(\n google.maps.event.addListener(circle, 'mousemove', onMouseMove)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(circle, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(circle, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(circle, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightclickListener(\n google.maps.event.addListener(circle, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(circle, 'click', onClick)\n )\n }\n\n if (onDrag) {\n setDragListener(\n google.maps.event.addListener(circle, 'drag', onDrag)\n )\n }\n\n if (onCenterChanged) {\n setCenterChangedListener(\n google.maps.event.addListener(circle, 'center_changed', onCenterChanged)\n )\n }\n\n if (onRadiusChanged) {\n setRadiusChangedListener(\n google.maps.event.addListener(circle, 'radius_changed', onRadiusChanged)\n )\n }\n\n setInstance(circle)\n\n if (onLoad) {\n onLoad(circle)\n }\n\n return () => {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (dragendListener !== null) {\n google.maps.event.removeListener(dragendListener)\n }\n\n if (dragstartListener !== null) {\n google.maps.event.removeListener(dragstartListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (centerChangedListener !== null) {\n google.maps.event.removeListener(centerChangedListener)\n }\n\n if (radiusChangedListener !== null) {\n google.maps.event.removeListener(radiusChangedListener)\n }\n\n if (onUnmount) {\n onUnmount(circle)\n }\n\n circle.setMap(null)\n }\n }, [])\n\n return null\n}\n\nexport const CircleF = memo(CircleFunctional)\n\nexport class Circle extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: CircleState = {\n circle: null,\n }\n\n setCircleCallback = (): void => {\n if (this.state.circle !== null && this.props.onLoad) {\n this.props.onLoad(this.state.circle)\n }\n }\n\n override componentDidMount(): void {\n const circle = new google.maps.Circle({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: circle,\n })\n\n this.setState(function setCircle() {\n return {\n circle,\n }\n }, this.setCircleCallback)\n }\n\n override componentDidUpdate(prevProps: CircleProps): void {\n if (this.state.circle !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.circle,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.circle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.circle)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.circle?.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default Circle\n","import { type ContextType, PureComponent, useContext, useState, useEffect, memo } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onAddFeature: 'addfeature',\n onRemoveFeature: 'removefeature',\n onRemoveProperty: 'removeproperty',\n onSetGeometry: 'setgeometry',\n onSetProperty: 'setproperty',\n}\n\nconst updaterMap = {\n add(\n instance: google.maps.Data,\n feature: google.maps.Data.Feature | google.maps.Data.FeatureOptions\n ): void {\n instance.add(feature)\n },\n addgeojson(\n instance: google.maps.Data,\n geojson: object,\n options?: google.maps.Data.GeoJsonOptions | undefined\n ): void {\n instance.addGeoJson(geojson, options)\n },\n contains(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.contains(feature)\n },\n foreach(instance: google.maps.Data, callback: (feature: google.maps.Data.Feature) => void): void {\n instance.forEach(callback)\n },\n loadgeojson(\n instance: google.maps.Data,\n url: string,\n options: google.maps.Data.GeoJsonOptions,\n callback: (features: google.maps.Data.Feature[]) => void\n ): void {\n instance.loadGeoJson(url, options, callback)\n },\n overridestyle(\n instance: google.maps.Data,\n feature: google.maps.Data.Feature,\n style: google.maps.Data.StyleOptions\n ): void {\n instance.overrideStyle(feature, style)\n },\n remove(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.remove(feature)\n },\n revertstyle(instance: google.maps.Data, feature: google.maps.Data.Feature): void {\n instance.revertStyle(feature)\n },\n controlposition(instance: google.maps.Data, controlPosition: google.maps.ControlPosition): void {\n instance.setControlPosition(controlPosition)\n },\n controls(instance: google.maps.Data, controls: string[] | null): void {\n instance.setControls(controls)\n },\n drawingmode(instance: google.maps.Data, mode: string | null): void {\n instance.setDrawingMode(mode)\n },\n map(instance: google.maps.Data, map: google.maps.Map): void {\n instance.setMap(map)\n },\n style(\n instance: google.maps.Data,\n style: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions\n ): void {\n instance.setStyle(style)\n },\n togeojson(instance: google.maps.Data, callback: (feature: object) => void): void {\n instance.toGeoJson(callback)\n },\n}\n\ninterface DataState {\n data: google.maps.Data | null\n}\n\nexport interface DataProps {\n options?: google.maps.Data.DataOptions | undefined\n /** This event is fired for a click on the geometry. */\n onClick?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired for a double click on the geometry. */\n onDblClick?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired for a mousedown on the geometry. */\n onMouseDown?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired when the DOM mousemove event is fired on the rectangle. */\n onMouseMove?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired when the mouse leaves the area of the geometry. */\n onMouseOut?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired when the mouse enters the area of the geometry. */\n onMouseOver?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired for a mouseup on the geometry. */\n onMouseUp?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired for a rightclick on the geometry. */\n onRightClick?: ((e: google.maps.Data.MouseEvent) => void) | undefined\n /** This event is fired when a feature is added to the collection. */\n onAddFeature?: ((e: google.maps.Data.AddFeatureEvent) => void) | undefined\n /** This event is fired when a feature is removed from the collection. */\n onRemoveFeature?: ((e: google.maps.Data.RemoveFeatureEvent) => void) | undefined\n /** This event is fired when a feature's property is removed. */\n onRemoveProperty?: ((e: google.maps.Data.RemovePropertyEvent) => void) | undefined\n /** This event is fired when a feature's geometry is set. */\n onSetGeometry?: ((e: google.maps.Data.SetGeometryEvent) => void) | undefined\n /** This event is fired when a feature's property is set. */\n onSetProperty?: ((e: google.maps.Data.SetPropertyEvent) => void) | undefined\n /** This callback is called when the data instance has loaded. It is called with the data instance. */\n onLoad?: ((data: google.maps.Data) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the data instance. */\n onUnmount?: ((data: google.maps.Data) => void) | undefined\n}\n\nfunction DataFunctional({\n options,\n onClick,\n onDblClick,\n onMouseDown,\n onMouseMove,\n onMouseOut,\n onMouseOver,\n onMouseUp,\n onRightClick,\n onAddFeature,\n onRemoveFeature,\n onRemoveProperty,\n onSetGeometry,\n onSetProperty,\n onLoad,\n onUnmount,\n}: DataProps): null {\n const map = useContext(MapContext)\n\n const [instance, setInstance] = useState(null)\n\n const [dblclickListener, setDblclickListener] = useState(null)\n const [mousedownListener, setMousedownListener] = useState(null)\n const [mousemoveListener, setMousemoveListener] = useState(null)\n const [mouseoutListener, setMouseoutListener] = useState(null)\n const [mouseoverListener, setMouseoverListener] = useState(null)\n const [mouseupListener, setMouseupListener] = useState(null)\n const [rightclickListener, setRightclickListener] = useState(null)\n const [clickListener, setClickListener] = useState(null)\n\n const [addFeatureListener, setAddFeatureListener] = useState(null)\n const [removeFeatureListener, setRemoveFeatureListener] = useState(null)\n const [removePropertyListener, setRemovePropertyListener] = useState(null)\n const [setGeometryListener, setSetGeometryListener] = useState(null)\n const [setPropertyListener, setSetPropertyListener] = useState(null)\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (instance && onDblClick) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n setDblclickListener(\n google.maps.event.addListener(instance, 'dblclick', onDblClick)\n )\n }\n }, [onDblClick])\n\n useEffect(() => {\n if (instance && onMouseDown) {\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n setMousedownListener(\n google.maps.event.addListener(instance, 'mousedown', onMouseDown)\n )\n }\n }, [onMouseDown])\n\n useEffect(() => {\n if (instance && onMouseMove) {\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n setMousemoveListener(\n google.maps.event.addListener(instance, 'mousemove', onMouseMove)\n )\n }\n }, [onMouseMove])\n\n useEffect(() => {\n if (instance && onMouseOut) {\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n setMouseoutListener(\n google.maps.event.addListener(instance, 'mouseout', onMouseOut)\n )\n }\n }, [onMouseOut])\n\n useEffect(() => {\n if (instance && onMouseOver) {\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n setMouseoverListener(\n google.maps.event.addListener(instance, 'mouseover', onMouseOver)\n )\n }\n }, [onMouseOver])\n\n useEffect(() => {\n if (instance && onMouseUp) {\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n setMouseupListener(\n google.maps.event.addListener(instance, 'mouseup', onMouseUp)\n )\n }\n }, [onMouseUp])\n\n useEffect(() => {\n if (instance && onRightClick) {\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n setRightclickListener(\n google.maps.event.addListener(instance, 'rightclick', onRightClick)\n )\n }\n }, [onRightClick])\n\n useEffect(() => {\n if (instance && onClick) {\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n setClickListener(\n google.maps.event.addListener(instance, 'click', onClick)\n )\n }\n }, [onClick])\n\n useEffect(() => {\n if (instance && onAddFeature) {\n if (addFeatureListener !== null) {\n google.maps.event.removeListener(addFeatureListener)\n }\n\n setAddFeatureListener(\n google.maps.event.addListener(instance, 'addfeature', onAddFeature)\n )\n }\n }, [onAddFeature])\n\n useEffect(() => {\n if (instance && onRemoveFeature) {\n if (removeFeatureListener !== null) {\n google.maps.event.removeListener(removeFeatureListener)\n }\n\n setRemoveFeatureListener(\n google.maps.event.addListener(instance, 'removefeature', onRemoveFeature)\n )\n }\n }, [onRemoveFeature])\n\n useEffect(() => {\n if (instance && onRemoveProperty) {\n if (removePropertyListener !== null) {\n google.maps.event.removeListener(removePropertyListener)\n }\n\n setRemovePropertyListener(\n google.maps.event.addListener(instance, 'removeproperty', onRemoveProperty)\n )\n }\n }, [onRemoveProperty])\n\n useEffect(() => {\n if (instance && onSetGeometry) {\n if (setGeometryListener !== null) {\n google.maps.event.removeListener(setGeometryListener)\n }\n\n setSetGeometryListener(\n google.maps.event.addListener(instance, 'setgeometry', onSetGeometry)\n )\n }\n }, [onSetGeometry])\n\n useEffect(() => {\n if (instance && onSetProperty) {\n if (setPropertyListener !== null) {\n google.maps.event.removeListener(setPropertyListener)\n }\n\n setSetPropertyListener(\n google.maps.event.addListener(instance, 'setproperty', onSetProperty)\n )\n }\n }, [onSetProperty])\n\n useEffect(() => {\n if (map !== null) {\n const data = new google.maps.Data({\n ...(options || {}),\n map,\n })\n\n if (onDblClick) {\n setDblclickListener(\n google.maps.event.addListener(data, 'dblclick', onDblClick)\n )\n }\n\n if (onMouseDown) {\n setMousedownListener(\n google.maps.event.addListener(data, 'mousedown', onMouseDown)\n )\n }\n\n if (onMouseMove) {\n setMousemoveListener(\n google.maps.event.addListener(data, 'mousemove', onMouseMove)\n )\n }\n\n if (onMouseOut) {\n setMouseoutListener(\n google.maps.event.addListener(data, 'mouseout', onMouseOut)\n )\n }\n\n if (onMouseOver) {\n setMouseoverListener(\n google.maps.event.addListener(data, 'mouseover', onMouseOver)\n )\n }\n\n if (onMouseUp) {\n setMouseupListener(\n google.maps.event.addListener(data, 'mouseup', onMouseUp)\n )\n }\n\n if (onRightClick) {\n setRightclickListener(\n google.maps.event.addListener(data, 'rightclick', onRightClick)\n )\n }\n\n if (onClick) {\n setClickListener(\n google.maps.event.addListener(data, 'click', onClick)\n )\n }\n\n if (onAddFeature) {\n setAddFeatureListener(\n google.maps.event.addListener(data, 'addfeature', onAddFeature)\n )\n }\n\n if (onRemoveFeature) {\n setRemoveFeatureListener(\n google.maps.event.addListener(data, 'removefeature', onRemoveFeature)\n )\n }\n\n if (onRemoveProperty) {\n setRemovePropertyListener(\n google.maps.event.addListener(data, 'removeproperty', onRemoveProperty)\n )\n }\n\n if (onSetGeometry) {\n setSetGeometryListener(\n google.maps.event.addListener(data, 'setgeometry', onSetGeometry)\n )\n }\n\n if (onSetProperty) {\n setSetPropertyListener(\n google.maps.event.addListener(data, 'setproperty', onSetProperty)\n )\n }\n\n setInstance(data)\n\n if (onLoad) {\n onLoad(data)\n }\n }\n\n return () => {\n if (instance) {\n if (dblclickListener !== null) {\n google.maps.event.removeListener(dblclickListener)\n }\n\n if (mousedownListener !== null) {\n google.maps.event.removeListener(mousedownListener)\n }\n\n if (mousemoveListener !== null) {\n google.maps.event.removeListener(mousemoveListener)\n }\n\n if (mouseoutListener !== null) {\n google.maps.event.removeListener(mouseoutListener)\n }\n\n if (mouseoverListener !== null) {\n google.maps.event.removeListener(mouseoverListener)\n }\n\n if (mouseupListener !== null) {\n google.maps.event.removeListener(mouseupListener)\n }\n\n if (rightclickListener !== null) {\n google.maps.event.removeListener(rightclickListener)\n }\n\n if (clickListener !== null) {\n google.maps.event.removeListener(clickListener)\n }\n\n if (addFeatureListener !== null) {\n google.maps.event.removeListener(addFeatureListener)\n }\n\n if (removeFeatureListener !== null) {\n google.maps.event.removeListener(removeFeatureListener)\n }\n\n if (removePropertyListener !== null) {\n google.maps.event.removeListener(removePropertyListener)\n }\n\n if (setGeometryListener !== null) {\n google.maps.event.removeListener(setGeometryListener)\n }\n\n if (setPropertyListener !== null) {\n google.maps.event.removeListener(setPropertyListener)\n }\n\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const DataF = memo(DataFunctional)\n\nexport class Data extends PureComponent {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: DataState = {\n data: null,\n }\n\n setDataCallback = (): void => {\n if (this.state.data !== null && this.props.onLoad) {\n this.props.onLoad(this.state.data)\n }\n }\n\n override componentDidMount(): void {\n if (this.context !== null) {\n const data = new google.maps.Data({\n ...(this.props.options || {}),\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: data,\n })\n\n this.setState(() => {\n return {\n data,\n }\n }, this.setDataCallback)\n }\n }\n\n override componentDidUpdate(prevProps: DataProps): void {\n if (this.state.data !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.data,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.data !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.data)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.state.data) {\n this.state.data.setMap(null)\n }\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default Data\n","import { type ContextType, PureComponent } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onClick: 'click',\n onDefaultViewportChanged: 'defaultviewport_changed',\n onStatusChanged: 'status_changed',\n}\n\nconst updaterMap = {\n options(instance: google.maps.KmlLayer, options: google.maps.KmlLayerOptions): void {\n instance.setOptions(options)\n },\n url(instance: google.maps.KmlLayer, url: string): void {\n instance.setUrl(url)\n },\n zIndex(instance: google.maps.KmlLayer, zIndex: number): void {\n instance.setZIndex(zIndex)\n },\n}\n\ninterface KmlLayerState {\n kmlLayer: google.maps.KmlLayer | null\n}\n\nexport interface KmlLayerProps {\n options?: google.maps.KmlLayerOptions | undefined\n /** The URL of the KML document to display. */\n url?: string | undefined\n /** The z-index of the layer. */\n zIndex?: number | undefined\n /** This event is fired when a feature in the layer is clicked. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the KML layers default viewport has changed. */\n onDefaultViewportChanged?: (() => void) | undefined | undefined\n /** This event is fired when the KML layer has finished loading. At this point it is safe to read the status property to determine if the layer loaded successfully. */\n onStatusChanged?: (() => void) | undefined | undefined\n /** This callback is called when the kmlLayer instance has loaded. It is called with the kmlLayer instance. */\n onLoad?: ((kmlLayer: google.maps.KmlLayer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the kmlLayer instance. */\n onUnmount?: ((kmlLayer: google.maps.KmlLayer) => void) | undefined\n}\n\nexport class KmlLayer extends PureComponent {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: KmlLayerState = {\n kmlLayer: null,\n }\n\n setKmlLayerCallback = (): void => {\n if (this.state.kmlLayer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.kmlLayer)\n }\n }\n\n override componentDidMount(): void {\n const kmlLayer = new google.maps.KmlLayer({\n ...this.props.options,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: kmlLayer,\n })\n\n this.setState(function setLmlLayer() {\n return {\n kmlLayer,\n }\n }, this.setKmlLayerCallback)\n }\n\n override componentDidUpdate(prevProps: KmlLayerProps): void {\n if (this.state.kmlLayer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.kmlLayer,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.kmlLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.kmlLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.kmlLayer.setMap(null)\n }\n }\n\n override render():null {\n return null\n }\n}\n\nexport default KmlLayer\n","import type { PositionDrawProps } from \"../../types\"\n\nexport function getOffsetOverride(\n containerElement: HTMLElement,\n getPixelPositionOffset?:( (offsetWidth: number, offsetHeight: number) => { x: number; y: number }) | undefined\n): { x: number; y: number } {\n return typeof getPixelPositionOffset === 'function'\n ? getPixelPositionOffset(containerElement.offsetWidth, containerElement.offsetHeight)\n : {\n x: 0,\n y: 0,\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createLatLng(inst: any, Type: any): any { return new Type(inst.lat, inst.lng) }\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createLatLngBounds(inst: any, Type: any): any {\n return new Type(\n new google.maps.LatLng(inst.ne.lat, inst.ne.lng),\n new google.maps.LatLng(inst.sw.lat, inst.sw.lng)\n )\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction ensureOfType(\n inst: google.maps.LatLng | google.maps.LatLngLiteral | undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n factory: (inst: google.maps.LatLng | google.maps.LatLngLiteral | undefined, type: any) => any\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n return inst instanceof type ? inst : factory(inst, type)\n}\n\nfunction ensureOfTypeBounds(\n inst: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n factory: (inst: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral, type: any) => any\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n return inst instanceof type ? inst : factory(inst, type)\n}\n\nfunction getLayoutStylesByBounds(\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n bounds: google.maps.LatLngBounds\n): { left: string; top: string; width: string; height: string } | { left: string; top: string } {\n const ne = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getNorthEast())\n\n const sw = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getSouthWest())\n\n if (ne && sw) {\n return {\n left: `${sw.x + offset.x}px`,\n top: `${ne.y + offset.y}px`,\n width: `${ne.x - sw.x - offset.x}px`,\n height: `${sw.y - ne.y - offset.y}px`,\n }\n }\n\n return {\n left: '-9999px',\n top: '-9999px',\n }\n}\n\nfunction getLayoutStylesByPosition (\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n position: google.maps.LatLng\n): { left: string; top: string } {\n const point = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(position)\n\n if (point) {\n const { x, y } = point\n\n return {\n left: `${x + offset.x}px`,\n top: `${y + offset.y}px`,\n }\n }\n\n return {\n left: '-9999px',\n top: '-9999px',\n }\n}\n\nexport function getLayoutStyles (\n mapCanvasProjection: google.maps.MapCanvasProjection,\n offset: { x: number; y: number },\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined,\n position?: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n): PositionDrawProps {\n return bounds !== undefined\n ? getLayoutStylesByBounds(\n mapCanvasProjection,\n offset,\n ensureOfTypeBounds(bounds, google.maps.LatLngBounds, createLatLngBounds)\n )\n : getLayoutStylesByPosition(\n mapCanvasProjection,\n offset,\n ensureOfType(position, google.maps.LatLng, createLatLng)\n )\n}\n\nexport function arePositionsEqual (\n currentPosition: PositionDrawProps,\n previousPosition: PositionDrawProps\n): boolean {\n return currentPosition.left === previousPosition.left\n && currentPosition.top === previousPosition.top\n && currentPosition.width === previousPosition.height\n && currentPosition.height === previousPosition.height;\n}\n","import { getOffsetOverride, getLayoutStyles } from './dom-helper'\n\ntype fnPixelPositionOffset = (\n offsetWidth: number,\n offsetHeight: number\n) => { x: number; y: number }\nexport function createOverlay(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position?: google.maps.LatLng | google.maps.LatLngLiteral | undefined,\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined,\n getPixelPositionOffset?: fnPixelPositionOffset | undefined\n) {\n class Overlay extends google.maps.OverlayView {\n container: HTMLElement\n pane: keyof google.maps.MapPanes\n position: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined\n\n constructor(\n container: HTMLElement,\n pane: keyof google.maps.MapPanes,\n position?: google.maps.LatLng | google.maps.LatLngLiteral,\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ) {\n super()\n this.container = container\n this.pane = pane\n this.position = position\n this.bounds = bounds\n }\n\n override onAdd(): void {\n const pane = this.getPanes()?.[this.pane]\n pane?.appendChild(this.container)\n }\n\n override draw(): void {\n const projection = this.getProjection()\n const offset = {\n ...(this.container\n ? getOffsetOverride(this.container, getPixelPositionOffset)\n : {\n x: 0,\n y: 0,\n }),\n }\n\n const layoutStyles = getLayoutStyles(\n projection,\n offset,\n this.bounds,\n this.position\n )\n\n for (const [key, value] of Object.entries(layoutStyles)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.container.style[key] = value\n }\n\n }\n\n override onRemove(): void {\n if (this.container.parentNode !== null) {\n this.container.parentNode.removeChild(this.container)\n }\n }\n }\n\n return new Overlay(container, pane, position, bounds)\n}\n","import {\n memo,\n useMemo,\n Children,\n createRef,\n useEffect,\n useContext,\n PureComponent,\n type ReactNode,\n type RefObject,\n type ContextType,\n type ReactPortal,\n type CSSProperties,\n} from 'react'\nimport * as ReactDOM from 'react-dom'\nimport invariant from 'invariant'\n\nimport MapContext from '../../map-context'\n\nimport {\n getLayoutStyles,\n arePositionsEqual,\n getOffsetOverride,\n} from './dom-helper'\n\nimport { createOverlay } from './Overlay'\n\ninterface OverlayViewState {\n paneEl: Element | null\n containerStyle: CSSProperties\n}\n\nfunction convertToLatLngString(\n latLngLike?: google.maps.LatLng | google.maps.LatLngLiteral | null | undefined\n) {\n if (!latLngLike) {\n return ''\n }\n\n const latLng =\n latLngLike instanceof google.maps.LatLng\n ? latLngLike\n : new google.maps.LatLng(latLngLike.lat, latLngLike.lng)\n\n return latLng + ''\n}\n\nfunction convertToLatLngBoundsString(\n latLngBoundsLike?:\n | google.maps.LatLngBounds\n | google.maps.LatLngBoundsLiteral\n | null | undefined\n) {\n if (!latLngBoundsLike) {\n return ''\n }\n\n const latLngBounds =\n latLngBoundsLike instanceof google.maps.LatLngBounds\n ? latLngBoundsLike\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(latLngBoundsLike.south, latLngBoundsLike.east),\n new google.maps.LatLng(latLngBoundsLike.north, latLngBoundsLike.west)\n )\n\n return latLngBounds + ''\n}\n\nexport type PaneNames = keyof google.maps.MapPanes\nexport interface OverlayViewProps {\n children?: ReactNode | undefined\n // required\n mapPaneName: PaneNames\n position?: google.maps.LatLng | google.maps.LatLngLiteral | undefined\n getPixelPositionOffset?:\n | ((offsetWidth: number, offsetHeight: number) => { x: number; y: number })\n | undefined\n bounds?:\n | google.maps.LatLngBounds\n | google.maps.LatLngBoundsLiteral\n | undefined\n zIndex?: number | undefined\n onLoad?: ((overlayView: google.maps.OverlayView) => void) | undefined\n onUnmount?: ((overlayView: google.maps.OverlayView) => void) | undefined\n}\n\nexport const FLOAT_PANE: PaneNames = `floatPane`\nexport const MAP_PANE: PaneNames = `mapPane`\nexport const MARKER_LAYER: PaneNames = `markerLayer`\nexport const OVERLAY_LAYER: PaneNames = `overlayLayer`\nexport const OVERLAY_MOUSE_TARGET: PaneNames = `overlayMouseTarget`\n\nfunction OverlayViewFunctional({\n position,\n bounds,\n mapPaneName,\n zIndex,\n onLoad,\n onUnmount,\n getPixelPositionOffset,\n children,\n}: OverlayViewProps) {\n const map = useContext(MapContext)\n const container = useMemo(() => {\n const div = document.createElement('div')\n div.style.position = 'absolute'\n return div\n }, [])\n\n const overlay = useMemo(() => {\n return createOverlay(\n container,\n mapPaneName,\n position,\n bounds,\n getPixelPositionOffset\n )\n }, [container, mapPaneName, position, bounds])\n\n useEffect(() => {\n onLoad?.(overlay)\n overlay?.setMap(map)\n return () => {\n onUnmount?.(overlay)\n overlay?.setMap(null)\n }\n }, [map, overlay])\n\n // to move the container to the foreground and background\n useEffect(() => {\n container.style.zIndex = `${zIndex}`\n }, [zIndex, container])\n\n return ReactDOM.createPortal(children, container)\n}\n\nexport const OverlayViewF = memo(OverlayViewFunctional)\n\nexport class OverlayView extends PureComponent<\n OverlayViewProps,\n OverlayViewState\n> {\n static FLOAT_PANE: PaneNames = `floatPane`\n static MAP_PANE: PaneNames = `mapPane`\n static MARKER_LAYER: PaneNames = `markerLayer`\n static OVERLAY_LAYER: PaneNames = `overlayLayer`\n static OVERLAY_MOUSE_TARGET: PaneNames = `overlayMouseTarget`\n\n static override contextType = MapContext\n\n declare context: ContextType\n\n override state: OverlayViewState = {\n paneEl: null,\n containerStyle: {\n // set initial position\n position: 'absolute',\n },\n }\n\n overlayView: google.maps.OverlayView\n containerRef: RefObject\n\n updatePane = (): void => {\n const mapPaneName = this.props.mapPaneName\n\n // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes\n const mapPanes = this.overlayView.getPanes()\n invariant(\n !!mapPaneName,\n `OverlayView requires props.mapPaneName but got %s`,\n mapPaneName\n )\n\n if (mapPanes) {\n this.setState({\n paneEl: mapPanes[mapPaneName],\n })\n } else {\n this.setState({\n paneEl: null,\n })\n }\n }\n\n onAdd = (): void => {\n this.updatePane()\n this.props.onLoad?.(this.overlayView)\n }\n\n onPositionElement = (): void => {\n const mapCanvasProjection = this.overlayView.getProjection()\n\n const offset = {\n x: 0,\n y: 0,\n ...(this.containerRef.current\n ? getOffsetOverride(\n this.containerRef.current,\n this.props.getPixelPositionOffset\n )\n : {}),\n }\n\n const layoutStyles = getLayoutStyles(\n mapCanvasProjection,\n offset,\n this.props.bounds,\n this.props.position\n )\n\n const { left, top, width, height } = this.state.containerStyle\n\n if (!arePositionsEqual(layoutStyles, { left, top, width, height })) {\n this.setState({\n containerStyle: {\n top: layoutStyles.top || 0,\n left: layoutStyles.left || 0,\n width: layoutStyles.width || 0,\n height: layoutStyles.height || 0,\n position: 'absolute',\n },\n })\n }\n }\n\n draw = (): void => {\n this.onPositionElement()\n }\n\n onRemove = (): void => {\n this.setState(() => ({\n paneEl: null,\n }))\n\n this.props.onUnmount?.(this.overlayView)\n }\n\n constructor(props: OverlayViewProps) {\n super(props)\n\n this.containerRef = createRef()\n // You must implement three methods: onAdd(), draw(), and onRemove().\n const overlayView = new google.maps.OverlayView()\n overlayView.onAdd = this.onAdd\n overlayView.draw = this.draw\n overlayView.onRemove = this.onRemove\n this.overlayView = overlayView\n }\n\n override componentDidMount(): void {\n this.overlayView.setMap(this.context)\n }\n\n override componentDidUpdate(prevProps: OverlayViewProps): void {\n const prevPositionString = convertToLatLngString(prevProps.position)\n const positionString = convertToLatLngString(this.props.position)\n const prevBoundsString = convertToLatLngBoundsString(prevProps.bounds)\n const boundsString = convertToLatLngBoundsString(this.props.bounds)\n\n if (\n prevPositionString !== positionString ||\n prevBoundsString !== boundsString\n ) {\n this.overlayView.draw()\n }\n if (prevProps.mapPaneName !== this.props.mapPaneName) {\n this.updatePane()\n }\n }\n\n override componentWillUnmount(): void {\n this.overlayView.setMap(null)\n }\n\n override render(): ReactPortal | ReactNode {\n const paneEl = this.state.paneEl\n if (paneEl) {\n return ReactDOM.createPortal(\n
\n {Children.only(this.props.children)}\n
,\n paneEl\n )\n } else {\n return null\n }\n }\n}\n\nexport default OverlayView\n","export function noop(): void { return }\n","import { type ContextType, PureComponent, memo, useMemo, useEffect, useContext } from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\nimport { noop } from '../../utils/noop'\n\nconst eventMap = {\n onDblClick: 'dblclick',\n onClick: 'click',\n}\n\nconst updaterMap = {\n opacity(instance: google.maps.GroundOverlay, opacity: number): void {\n instance.setOpacity(opacity)\n },\n}\n\ninterface GroundOverlayState {\n groundOverlay: google.maps.GroundOverlay | null\n}\n\nexport interface GroundOverlayProps {\n options?: google.maps.GroundOverlayOptions | undefined\n /** The opacity of the overlay, expressed as a number between 0 and 1. Optional. Defaults to 1. */\n opacity?: number | undefined\n /** This event is fired when the DOM dblclick event is fired on the GroundOverlay. */\n onDblClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the DOM click event is fired on the GroundOverlay. */\n onClick?: ((e: google.maps.MapMouseEvent) => void) | undefined\n /** The url of the projected image */\n url: string\n /** The bounds that the image will be scaled to fit */\n bounds: google.maps.LatLngBoundsLiteral\n /** This callback is called when the groundOverlay instance has loaded. It is called with the groundOverlay instance. */\n onLoad?: ((groundOverlay: google.maps.GroundOverlay) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the groundOverlay instance. */\n onUnmount?: ((groundOverlay: google.maps.GroundOverlay) => void) | undefined\n visible?: boolean\n}\n\nfunction GroundOverlayFunctional({ url, bounds, options, visible }: GroundOverlayProps) {\n const map = useContext(MapContext)\n\n const imageBounds = new google.maps.LatLngBounds(\n new google.maps.LatLng(bounds.south, bounds.west),\n new google.maps.LatLng(bounds.north, bounds.east)\n );\n\n const groundOverlay = useMemo(() => {\n const overlay = new google.maps.GroundOverlay(url, imageBounds, {\n ...options\n });\n return overlay\n }, []);\n\n useEffect(() => {\n if (groundOverlay !== null) {\n groundOverlay.setMap(map);\n }\n }, [map])\n\n useEffect(() => {\n if (typeof url !== 'undefined' && groundOverlay !== null) {\n groundOverlay.set(\"url\", url);\n groundOverlay.setMap(map);\n }\n }, [groundOverlay, url]);\n\n useEffect(() => {\n if (typeof visible !== 'undefined' && groundOverlay !== null) {\n groundOverlay.setOpacity(visible ? 1 : 0);\n }\n }, [groundOverlay, visible]);\n\n useEffect(() => {\n const newBounds = new google.maps.LatLngBounds(\n new google.maps.LatLng(bounds.south, bounds.west),\n new google.maps.LatLng(bounds.north, bounds.east)\n );\n\n if (typeof bounds !== 'undefined' && groundOverlay !== null) {\n groundOverlay.set(\"bounds\", newBounds);\n groundOverlay.setMap(map);\n }\n }, [groundOverlay, bounds])\n\n return null;\n}\n\nexport const GroundOverlayF = memo(GroundOverlayFunctional);\n\nexport class GroundOverlay extends PureComponent {\n public static defaultProps = {\n onLoad: noop,\n }\n\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: GroundOverlayState = {\n groundOverlay: null,\n }\n\n setGroundOverlayCallback = (): void => {\n if (this.state.groundOverlay !== null && this.props.onLoad) {\n this.props.onLoad(this.state.groundOverlay)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!this.props.url || !!this.props.bounds,\n `For GroundOverlay, url and bounds are passed in to constructor and are immutable after instantiated. This is the behavior of Google Maps JavaScript API v3 ( See https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay) Hence, use the corresponding two props provided by \\`react-google-maps-api\\`, url and bounds. In some cases, you'll need the GroundOverlay component to reflect the changes of url and bounds. You can leverage the React's key property to remount the component. Typically, just \\`key={url}\\` would serve your need. See https://github.com/tomchentw/react-google-maps/issues/655`\n )\n\n const groundOverlay = new google.maps.GroundOverlay(this.props.url, this.props.bounds, {\n ...this.props.options,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: groundOverlay,\n })\n\n this.setState(function setGroundOverlay() {\n return {\n groundOverlay,\n }\n }, this.setGroundOverlayCallback)\n }\n\n override componentDidUpdate(prevProps: GroundOverlayProps): void {\n if (this.state.groundOverlay !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.groundOverlay,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.groundOverlay) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.groundOverlay)\n }\n\n this.state.groundOverlay.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default GroundOverlay\n","import invariant from 'invariant';\nimport { ContextType, memo, PureComponent, useContext, useEffect, useState } from 'react';\n\nimport MapContext from '../../map-context';\nimport { applyUpdatersToPropsAndRegisterEvents, unregisterEvents } from '../../utils/helper';\n\nconst eventMap = {}\n\nconst updaterMap = {\n data(\n instance: google.maps.visualization.HeatmapLayer,\n data:\n | google.maps.MVCArray<\n google.maps.LatLng | google.maps.visualization.WeightedLocation\n >\n | google.maps.LatLng[]\n | google.maps.visualization.WeightedLocation[]\n ): void {\n instance.setData(data)\n },\n map(\n instance: google.maps.visualization.HeatmapLayer,\n map: google.maps.Map\n ): void {\n instance.setMap(map)\n },\n options(\n instance: google.maps.visualization.HeatmapLayer,\n options: google.maps.visualization.HeatmapLayerOptions\n ): void {\n instance.setOptions(options)\n },\n}\n\ninterface HeatmapLayerState {\n heatmapLayer: google.maps.visualization.HeatmapLayer | null\n}\n\nexport interface HeatmapLayerProps {\n // required\n /** The data points to display. Required. */\n data:\n | google.maps.MVCArray<\n google.maps.LatLng | google.maps.visualization.WeightedLocation\n >\n | google.maps.LatLng[]\n | google.maps.visualization.WeightedLocation[]\n options?: google.maps.visualization.HeatmapLayerOptions | undefined\n /** This callback is called when the heatmapLayer instance has loaded. It is called with the heatmapLayer instance. */\n onLoad?:\n | ((heatmapLayer: google.maps.visualization.HeatmapLayer) => void)\n | undefined\n /** This callback is called when the component unmounts. It is called with the heatmapLayer instance. */\n onUnmount?:\n | ((heatmapLayer: google.maps.visualization.HeatmapLayer) => void)\n | undefined\n}\n\nfunction HeatmapLayerFunctional({\n data,\n onLoad,\n onUnmount,\n options,\n}: HeatmapLayerProps) {\n const map = useContext(MapContext)\n const [instance, setInstance] =\n useState(null)\n\n useEffect(() => {\n if (!google.maps.visualization) {\n invariant(\n !!google.maps.visualization,\n 'Did you include prop libraries={[\"visualization\"]} in useJsApiScript? %s',\n google.maps.visualization\n )\n }\n }, [])\n\n useEffect(() => {\n invariant(!!data, 'data property is required in HeatmapLayer %s', data)\n }, [data])\n\n // Order does matter\n useEffect(() => {\n if (instance !== null) {\n instance.setMap(map)\n }\n }, [map])\n\n useEffect(() => {\n if (options && instance !== null) {\n instance.setOptions(options)\n }\n }, [instance, options])\n\n useEffect(() => {\n const heatmapLayer = new google.maps.visualization.HeatmapLayer({\n ...(options || {}),\n data,\n map,\n })\n\n setInstance(heatmapLayer)\n\n if (onLoad) {\n onLoad(heatmapLayer)\n }\n\n return () => {\n if (instance !== null) {\n if (onUnmount) {\n onUnmount(instance)\n }\n\n instance.setMap(null)\n }\n }\n }, [])\n\n return null\n}\n\nexport const HeatmapLayerF = memo(HeatmapLayerFunctional)\n\nexport class HeatmapLayer extends PureComponent<\n HeatmapLayerProps,\n HeatmapLayerState\n> {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: HeatmapLayerState = {\n heatmapLayer: null,\n }\n\n setHeatmapLayerCallback = (): void => {\n if (this.state.heatmapLayer !== null && this.props.onLoad) {\n this.props.onLoad(this.state.heatmapLayer)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!google.maps.visualization,\n 'Did you include prop libraries={[\"visualization\"]} to ? %s',\n google.maps.visualization\n )\n\n invariant(\n !!this.props.data,\n 'data property is required in HeatmapLayer %s',\n this.props.data\n )\n\n const heatmapLayer = new google.maps.visualization.HeatmapLayer({\n ...(this.props.options || {}),\n data: this.props.data,\n map: this.context,\n })\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: heatmapLayer,\n })\n\n this.setState(function setHeatmapLayer() {\n return {\n heatmapLayer,\n }\n }, this.setHeatmapLayerCallback)\n }\n\n override componentDidUpdate(prevProps: HeatmapLayerProps): void {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.heatmapLayer,\n })\n }\n\n override componentWillUnmount(): void {\n if (this.state.heatmapLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.heatmapLayer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.heatmapLayer.setMap(null)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default HeatmapLayer\n","import { type ContextType, PureComponent } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onCloseClick: 'closeclick',\n onPanoChanged: 'pano_changed',\n onPositionChanged: 'position_changed',\n onPovChanged: 'pov_changed',\n onResize: 'resize',\n onStatusChanged: 'status_changed',\n onVisibleChanged: 'visible_changed',\n onZoomChanged: 'zoom_changed',\n}\n\nconst updaterMap = {\n register(\n instance: google.maps.StreetViewPanorama,\n provider: (input: string) => google.maps.StreetViewPanoramaData,\n options: google.maps.PanoProviderOptions\n ): void {\n instance.registerPanoProvider(provider, options)\n },\n links(instance: google.maps.StreetViewPanorama, links: google.maps.StreetViewLink[]): void {\n instance.setLinks(links)\n },\n motionTracking(instance: google.maps.StreetViewPanorama, motionTracking: boolean): void {\n instance.setMotionTracking(motionTracking)\n },\n options(\n instance: google.maps.StreetViewPanorama,\n options: google.maps.StreetViewPanoramaOptions\n ): void {\n instance.setOptions(options)\n },\n pano(instance: google.maps.StreetViewPanorama, pano: string): void {\n instance.setPano(pano)\n },\n position(\n instance: google.maps.StreetViewPanorama,\n position: google.maps.LatLng | google.maps.LatLngLiteral\n ): void {\n instance.setPosition(position)\n },\n pov(instance: google.maps.StreetViewPanorama, pov: google.maps.StreetViewPov): void {\n instance.setPov(pov)\n },\n visible(instance: google.maps.StreetViewPanorama, visible: boolean): void {\n instance.setVisible(visible)\n },\n zoom(instance: google.maps.StreetViewPanorama, zoom: number): void {\n instance.setZoom(zoom)\n },\n}\n\ninterface StreetViewPanoramaState {\n streetViewPanorama: google.maps.StreetViewPanorama | null\n}\n\nexport interface StreetViewPanoramaProps {\n options?: google.maps.StreetViewPanoramaOptions | undefined\n /** This event is fired when the close button is clicked. */\n onCloseclick?: ((event: google.maps.MapMouseEvent) => void) | undefined\n /** This event is fired when the panorama's pano id changes. The pano may change as the user navigates through the panorama or the position is manually set. Note that not all position changes trigger a pano_changed. */\n onPanoChanged?: (() => void) | undefined\n /** This event is fired when the panorama's position changes. The position changes as the user navigates through the panorama or the position is set manually. */\n onPositionChanged?: (() => void) | undefined\n /** This event is fired when the panorama's point-of-view changes. The point of view changes as the pitch, zoom, or heading changes. */\n onPovChanged?: (() => void) | undefined\n /** Developers should trigger this event on the panorama when its div changes size: google.maps.event.trigger(panorama, 'resize'). */\n onResize?: (() => void) | undefined\n /** This event is fired after every panorama lookup by id or location, via setPosition() or setPano(). */\n onStatusChanged?: (() => void) | undefined\n /** This event is fired when the panorama's visibility changes. The visibility is changed when the Pegman is dragged onto the map, the close button is clicked, or setVisible() is called. */\n onVisibleChanged?: (() => void) | undefined\n /** This event is fired when the panorama's zoom level changes. */\n onZoomChange?: (() => void) | undefined\n /** This callback is called when the streetViewPanorama instance has loaded. It is called with the streetViewPanorama instance. */\n onLoad?: ((streetViewPanorama: google.maps.StreetViewPanorama) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the streetViewPanorama instance. */\n onUnmount?: ((streetViewPanorama: google.maps.StreetViewPanorama) => void) | undefined\n}\n\nexport class StreetViewPanorama extends PureComponent<\n StreetViewPanoramaProps,\n StreetViewPanoramaState\n> {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: StreetViewPanoramaState = {\n streetViewPanorama: null,\n }\n\n setStreetViewPanoramaCallback = (): void => {\n if (this.state.streetViewPanorama !== null && this.props.onLoad) {\n this.props.onLoad(this.state.streetViewPanorama)\n }\n }\n\n override componentDidMount(): void {\n\n const streetViewPanorama = this.context?.getStreetView() ?? null\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: streetViewPanorama,\n })\n\n this.setState(() => {\n return {\n streetViewPanorama,\n }\n }, this.setStreetViewPanoramaCallback)\n }\n\n override componentDidUpdate(prevProps: StreetViewPanoramaProps): void {\n if (this.state.streetViewPanorama !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.streetViewPanorama,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.streetViewPanorama !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewPanorama)\n }\n\n unregisterEvents(this.registeredEvents)\n\n this.state.streetViewPanorama.setVisible(false)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default StreetViewPanorama\n","import { PureComponent } from 'react'\n\nimport MapContext from '../../map-context'\n\nexport interface StreetViewServiceProps {\n /** This callback is called when the streetViewService instance has loaded. It is called with the streetViewService instance. */\n onLoad?: ((streetViewService: google.maps.StreetViewService | null) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the streetViewService instance. */\n onUnmount?: ((streetViewService: google.maps.StreetViewService | null) => void) | undefined\n}\n\ninterface StreetViewServiceState {\n streetViewService: google.maps.StreetViewService | null\n}\n\nexport class StreetViewService extends PureComponent<\n StreetViewServiceProps,\n StreetViewServiceState\n> {\n static override contextType = MapContext\n\n declare context: React.ContextType\n\n override state = {\n streetViewService: null,\n }\n\n setStreetViewServiceCallback = (): void => {\n if (this.state.streetViewService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.streetViewService)\n }\n }\n\n override componentDidMount(): void {\n const streetViewService = new google.maps.StreetViewService()\n\n this.setState(function setStreetViewService() {\n return {\n streetViewService,\n }\n }, this.setStreetViewServiceCallback)\n }\n\n override componentWillUnmount(): void {\n if (this.state.streetViewService !== null && this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewService)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default StreetViewService\n","import { PureComponent } from 'react'\nimport invariant from 'invariant'\n\ninterface DirectionsServiceState {\n directionsService: google.maps.DirectionsService | null\n}\n\nexport interface DirectionsServiceProps {\n // required for default functionality\n options: google.maps.DirectionsRequest\n\n // required for default functionality\n callback: (\n // required\n /** The directions response retrieved from the directions server. You can render these using a DirectionsRenderer or parse this object and render it yourself. You must display the warnings and copyrights as noted in the Google Maps Platform Terms of Service. Note that though this result is \"JSON-like,\" it is not strictly JSON, as it indirectly includes LatLng objects */\n result: google.maps.DirectionsResult | null,\n // required\n /** The status returned by the DirectionsService on the completion of a call to route(). Specify these by value, or by using the constant's name. For example, 'OK' or google.maps.DirectionsStatus.OK */\n status: google.maps.DirectionsStatus\n ) => void\n /** This callback is called when the directionsService instance has loaded. It is called with the directionsService instance. */\n onLoad?: ((directionsService: google.maps.DirectionsService) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the directionsService instance. */\n onUnmount?: ((directionsService: google.maps.DirectionsService) => void) | undefined\n}\n\nexport class DirectionsService extends PureComponent<\n DirectionsServiceProps,\n DirectionsServiceState\n> {\n override state: DirectionsServiceState = {\n directionsService: null,\n }\n\n setDirectionsServiceCallback = (): void => {\n if (this.state.directionsService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.directionsService)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!this.props.options,\n 'DirectionsService expected options object as parameter, but got %s',\n this.props.options\n )\n\n const directionsService = new google.maps.DirectionsService()\n\n this.setState(function setDirectionsService() {\n return {\n directionsService,\n }\n }, this.setDirectionsServiceCallback)\n }\n\n override componentDidUpdate(): void {\n if (this.state.directionsService !== null) {\n this.state.directionsService.route(this.props.options, this.props.callback)\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.directionsService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsService)\n }\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default DirectionsService\n","import { type ContextType, PureComponent } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onDirectionsChanged: 'directions_changed',\n}\n\nconst updaterMap = {\n directions(\n instance: google.maps.DirectionsRenderer,\n directions: google.maps.DirectionsResult\n ): void {\n instance.setDirections(directions)\n },\n map(instance: google.maps.DirectionsRenderer, map: google.maps.Map): void {\n instance.setMap(map)\n },\n options(\n instance: google.maps.DirectionsRenderer,\n options: google.maps.DirectionsRendererOptions\n ): void {\n instance.setOptions(options)\n },\n panel(instance: google.maps.DirectionsRenderer, panel: HTMLElement): void {\n instance.setPanel(panel)\n },\n routeIndex(instance: google.maps.DirectionsRenderer, routeIndex: number): void {\n instance.setRouteIndex(routeIndex)\n },\n}\n\ninterface DirectionsRendererState {\n directionsRenderer: google.maps.DirectionsRenderer | null\n}\n\nexport interface DirectionsRendererProps {\n options?: google.maps.DirectionsRendererOptions | undefined\n /** The directions to display on the map and/or in a
panel, retrieved as a DirectionsResult object from DirectionsService. */\n directions?: google.maps.DirectionsResult | undefined\n /** The
in which to display the directions steps. */\n panel?: HTMLElement | undefined\n /** The index of the route within the DirectionsResult object. The default value is 0. */\n routeIndex?: number | undefined\n /** This event is fired when the rendered directions change, either when a new DirectionsResult is set or when the user finishes dragging a change to the directions path. */\n onDirectionsChanged?: (() => void) | undefined\n /** This callback is called when the directionsRenderer instance has loaded. It is called with the directionsRenderer instance. */\n onLoad?: ((directionsRenderer: google.maps.DirectionsRenderer) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the directionsRenderer instance. */\n onUnmount?: ((directionsRenderer: google.maps.DirectionsRenderer) => void) | undefined\n}\n\nexport class DirectionsRenderer extends PureComponent<\n DirectionsRendererProps,\n DirectionsRendererState\n> {\n static override contextType = MapContext\n\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n override state: DirectionsRendererState = {\n directionsRenderer: null,\n }\n\n setDirectionsRendererCallback = (): void => {\n if (this.state.directionsRenderer !== null) {\n this.state.directionsRenderer.setMap(this.context)\n\n if (this.props.onLoad) {\n this.props.onLoad(this.state.directionsRenderer)\n }\n }\n }\n\n override componentDidMount(): void {\n const directionsRenderer = new google.maps.DirectionsRenderer(this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: directionsRenderer,\n })\n\n this.setState(function setDirectionsRenderer() {\n return {\n directionsRenderer,\n }\n }, this.setDirectionsRendererCallback)\n }\n\n override componentDidUpdate(prevProps: DirectionsRendererProps): void {\n if (this.state.directionsRenderer !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.directionsRenderer,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.directionsRenderer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsRenderer)\n }\n\n unregisterEvents(this.registeredEvents)\n\n if (this.state.directionsRenderer) {\n this.state.directionsRenderer.setMap(null)\n }\n }\n }\n\n override render(): JSX.Element {\n return <>\n }\n}\n\nexport default DirectionsRenderer\n","import { PureComponent } from 'react'\n\nimport invariant from 'invariant'\n\ninterface DistanceMatrixServiceState {\n distanceMatrixService: google.maps.DistanceMatrixService | null\n}\n\nexport interface DistanceMatrixServiceProps {\n // required for default functionality\n options: google.maps.DistanceMatrixRequest\n\n // required for default functionality\n callback: (\n // required\n /** The response to a DistanceMatrixService request, consisting of the formatted origin and destination addresses, and a sequence of DistanceMatrixResponseRows, one for each corresponding origin address. */\n response: google.maps.DistanceMatrixResponse | null,\n // required\n /** The top-level status about the request in general returned by the DistanceMatrixService upon completion of a distance matrix request. Specify these by value, or by using the constant's name. For example, 'OK' or google.maps.DistanceMatrixStatus.OK. */\n status: google.maps.DistanceMatrixStatus\n ) => void\n /** This callback is called when the distanceMatrixService instance has loaded. It is called with the distanceMatrixService instance. */\n onLoad?: ((distanceMatrixService: google.maps.DistanceMatrixService) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the distanceMatrixService instance. */\n onUnmount?: ((distanceMatrixService: google.maps.DistanceMatrixService) => void) | undefined\n}\n\nexport class DistanceMatrixService extends PureComponent<\n DistanceMatrixServiceProps,\n DistanceMatrixServiceState\n> {\n override state: DistanceMatrixServiceState = {\n distanceMatrixService: null,\n }\n\n setDistanceMatrixServiceCallback = (): void => {\n if (this.state.distanceMatrixService !== null && this.props.onLoad) {\n this.props.onLoad(this.state.distanceMatrixService)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!this.props.options,\n 'DistanceMatrixService expected options object as parameter, but go %s',\n this.props.options\n )\n\n const distanceMatrixService = new google.maps.DistanceMatrixService()\n\n this.setState(function setDistanceMatrixService() {\n return {\n distanceMatrixService,\n }\n }, this.setDistanceMatrixServiceCallback)\n }\n\n override componentDidUpdate(): void {\n if (this.state.distanceMatrixService !== null) {\n this.state.distanceMatrixService.getDistanceMatrix(this.props.options, this.props.callback)\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.distanceMatrixService !== null && this.props.onUnmount) {\n this.props.onUnmount(this.state.distanceMatrixService)\n }\n }\n\n override render(): null {\n return null\n }\n}\n\nexport default DistanceMatrixService\n","import { Children, type ContextType, createRef, PureComponent, type ReactNode, type RefObject } from 'react'\n\nimport invariant from 'invariant'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nconst eventMap = {\n onPlacesChanged: 'places_changed',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.places.SearchBox,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n}\n\ninterface StandaloneSearchBoxState {\n searchBox: google.maps.places.SearchBox | null\n}\n\nexport interface StandaloneSearchBoxProps {\n children?: ReactNode | undefined\n /** The area towards which to bias query predictions. Predictions are biased towards, but not restricted to, queries targeting these bounds. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined\n options?: google.maps.places.SearchBoxOptions | undefined\n /** This event is fired when the user selects a query, getPlaces should be used to get new places. */\n onPlacesChanged?: (() => void) | undefined\n /** This callback is called when the searchBox instance has loaded. It is called with the searchBox instance. */\n onLoad?: ((searchBox: google.maps.places.SearchBox) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the searchBox instance. */\n onUnmount?: ((searchBox: google.maps.places.SearchBox) => void) | undefined\n}\n\nclass StandaloneSearchBox extends PureComponent<\n StandaloneSearchBoxProps,\n StandaloneSearchBoxState\n> {\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n\n containerElement: RefObject = createRef()\n\n override state: StandaloneSearchBoxState = {\n searchBox: null,\n }\n\n setSearchBoxCallback = (): void => {\n if (this.state.searchBox !== null && this.props.onLoad) {\n this.props.onLoad(this.state.searchBox)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!google.maps.places,\n 'You need to provide libraries={[\"places\"]} prop to component %s',\n google.maps.places\n )\n\n if (this.containerElement !== null && this.containerElement.current !== null) {\n const input = this.containerElement.current.querySelector('input')\n\n if (input !== null) {\n const searchBox = new google.maps.places.SearchBox(input, this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: searchBox,\n })\n\n this.setState(function setSearchBox() {\n return {\n searchBox,\n }\n }, this.setSearchBoxCallback)\n }\n }\n }\n\n override componentDidUpdate(prevProps: StandaloneSearchBoxProps): void {\n if (this.state.searchBox !== null) {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.searchBox,\n })\n }\n }\n\n override componentWillUnmount(): void {\n if (this.state.searchBox !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.searchBox)\n }\n\n unregisterEvents(this.registeredEvents)\n }\n }\n\n override render(): JSX.Element {\n return
{Children.only(this.props.children)}
\n }\n}\n\nexport default StandaloneSearchBox\n","import { Children, type ContextType, createRef, PureComponent, type ReactChild, type RefObject } from 'react'\n\nimport { unregisterEvents, applyUpdatersToPropsAndRegisterEvents } from '../../utils/helper'\n\nimport MapContext from '../../map-context'\n\nimport invariant from 'invariant'\n\nconst eventMap = {\n onPlaceChanged: 'place_changed',\n}\n\nconst updaterMap = {\n bounds(\n instance: google.maps.places.Autocomplete,\n bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral\n ): void {\n instance.setBounds(bounds)\n },\n restrictions(\n instance: google.maps.places.Autocomplete,\n restrictions: google.maps.places.ComponentRestrictions\n ): void {\n instance.setComponentRestrictions(restrictions)\n },\n fields(instance: google.maps.places.Autocomplete, fields: string[]): void {\n instance.setFields(fields)\n },\n options(\n instance: google.maps.places.Autocomplete,\n options: google.maps.places.AutocompleteOptions\n ): void {\n instance.setOptions(options)\n },\n types(instance: google.maps.places.Autocomplete, types: string[]): void {\n instance.setTypes(types)\n },\n}\n\ninterface AutocompleteState {\n autocomplete: google.maps.places.Autocomplete | null\n}\n\nexport interface AutocompleteProps {\n // required\n children: ReactChild\n /** The area in which to search for places. */\n bounds?: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral | undefined\n /** The component restrictions. Component restrictions are used to restrict predictions to only those within the parent component. For example, the country. */\n restrictions?: google.maps.places.ComponentRestrictions | undefined\n /** Fields to be included for the Place in the details response when the details are successfully retrieved. For a list of fields see PlaceResult. Nested fields can be specified with dot-paths (for example, \"geometry.location\"). */\n fields?: string[] | undefined\n options?: google.maps.places.AutocompleteOptions | undefined\n /** The types of predictions to be returned. For a list of supported types, see the developer's guide. If nothing is specified, all types are returned. In general only a single type is allowed. The exception is that you can safely mix the 'geocode' and 'establishment' types, but note that this will have the same effect as specifying no types. */\n types?: string[] | undefined\n /** This event is fired when a PlaceResult is made available for a Place the user has selected. If the user enters the name of a Place that was not suggested by the control and presses the Enter key, or if a Place Details request fails, the PlaceResult contains the user input in the name property, with no other properties defined. */\n onPlaceChanged?: (() => void) | undefined\n /** This callback is called when the autocomplete instance has loaded. It is called with the autocomplete instance. */\n onLoad?: ((autocomplete: google.maps.places.Autocomplete) => void) | undefined\n /** This callback is called when the component unmounts. It is called with the autocomplete instance. */\n onUnmount?: ((autocomplete: google.maps.places.Autocomplete) => void) | undefined\n className?: string | undefined\n}\n\nexport class Autocomplete extends PureComponent {\n static defaultProps = {\n className: ''\n }\n\n static override contextType = MapContext\n declare context: ContextType\n\n registeredEvents: google.maps.MapsEventListener[] = []\n containerElement: RefObject = createRef()\n\n override state: AutocompleteState = {\n autocomplete: null,\n }\n\n setAutocompleteCallback = (): void => {\n if (this.state.autocomplete !== null && this.props.onLoad) {\n this.props.onLoad(this.state.autocomplete)\n }\n }\n\n override componentDidMount(): void {\n invariant(\n !!google.maps.places,\n 'You need to provide libraries={[\"places\"]} prop to component %s',\n google.maps.places\n )\n\n // TODO: why current could be equal null?\n\n const input = this.containerElement.current?.querySelector('input')\n\n if (input) {\n const autocomplete = new google.maps.places.Autocomplete(input, this.props.options)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: autocomplete,\n })\n\n this.setState(() => {\n return {\n autocomplete,\n }\n }, this.setAutocompleteCallback)\n }\n }\n\n override componentDidUpdate(prevProps: AutocompleteProps): void {\n unregisterEvents(this.registeredEvents)\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap,\n eventMap,\n prevProps,\n nextProps: this.props,\n instance: this.state.autocomplete,\n })\n }\n\n override componentWillUnmount(): void {\n if (this.state.autocomplete !== null) {\n unregisterEvents(this.registeredEvents)\n }\n }\n\n override render(): JSX.Element {\n return
{Children.only(this.props.children)}
\n }\n}\n\nexport default Autocomplete\n","var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _toConsumableArray2=_interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));var _extends2=_interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));var _slicedToArray2=_interopRequireDefault(require(\"@babel/runtime/helpers/slicedToArray\"));var _objectWithoutProperties2=_interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));var _reactDom=_interopRequireDefault(require(\"react-dom\"));var _react=_interopRequireWildcard(require(\"react\"));var _reactNative=require(\"react-native\");var _excluded=[\"value\",\"minimumValue\",\"maximumValue\",\"step\",\"minimumTrackTintColor\",\"maximumTrackTintColor\",\"thumbTintColor\",\"thumbStyle\",\"style\",\"inverted\",\"disabled\",\"trackHeight\",\"thumbSize\",\"thumbImage\",\"onRNCSliderSlidingStart\",\"onRNCSliderSlidingComplete\",\"onRNCSliderValueChange\"];var _this=this,_jsxFileName=\"C:\\\\Dev\\\\Projects\\\\react-native-slider\\\\package\\\\src\\\\RNCSliderNativeComponent.web.tsx\";function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!==\"function\")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!==\"object\"&&typeof obj!==\"function\"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!==\"default\"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var valueToEvent=function valueToEvent(value){return{nativeEvent:{value:value}};};var RCTSliderWebComponent=_react.default.forwardRef(function(_ref,forwardedRef){var initialValue=_ref.value,_ref$minimumValue=_ref.minimumValue,minimumValue=_ref$minimumValue===void 0?0:_ref$minimumValue,_ref$maximumValue=_ref.maximumValue,maximumValue=_ref$maximumValue===void 0?0:_ref$maximumValue,_ref$step=_ref.step,step=_ref$step===void 0?1:_ref$step,_ref$minimumTrackTint=_ref.minimumTrackTintColor,minimumTrackTintColor=_ref$minimumTrackTint===void 0?'#009688':_ref$minimumTrackTint,_ref$maximumTrackTint=_ref.maximumTrackTintColor,maximumTrackTintColor=_ref$maximumTrackTint===void 0?'#939393':_ref$maximumTrackTint,_ref$thumbTintColor=_ref.thumbTintColor,thumbTintColor=_ref$thumbTintColor===void 0?'#009688':_ref$thumbTintColor,_ref$thumbStyle=_ref.thumbStyle,thumbStyle=_ref$thumbStyle===void 0?{}:_ref$thumbStyle,_ref$style=_ref.style,style=_ref$style===void 0?{}:_ref$style,_ref$inverted=_ref.inverted,inverted=_ref$inverted===void 0?false:_ref$inverted,_ref$disabled=_ref.disabled,disabled=_ref$disabled===void 0?false:_ref$disabled,_ref$trackHeight=_ref.trackHeight,trackHeight=_ref$trackHeight===void 0?4:_ref$trackHeight,_ref$thumbSize=_ref.thumbSize,thumbSize=_ref$thumbSize===void 0?20:_ref$thumbSize,thumbImage=_ref.thumbImage,_ref$onRNCSliderSlidi=_ref.onRNCSliderSlidingStart,onRNCSliderSlidingStart=_ref$onRNCSliderSlidi===void 0?function(_){}:_ref$onRNCSliderSlidi,_ref$onRNCSliderSlidi2=_ref.onRNCSliderSlidingComplete,onRNCSliderSlidingComplete=_ref$onRNCSliderSlidi2===void 0?function(_){}:_ref$onRNCSliderSlidi2,_ref$onRNCSliderValue=_ref.onRNCSliderValueChange,onRNCSliderValueChange=_ref$onRNCSliderValue===void 0?function(_){}:_ref$onRNCSliderValue,others=(0,_objectWithoutProperties2.default)(_ref,_excluded);var containerSize=_react.default.useRef({width:0,height:0});var containerPositionX=_react.default.useRef(0);var containerRef=forwardedRef||_react.default.createRef();var containerPositionInvalidated=_react.default.useRef(false);var _React$useState=_react.default.useState(initialValue||minimumValue),_React$useState2=(0,_slicedToArray2.default)(_React$useState,2),value=_React$useState2[0],setValue=_React$useState2[1];var lastInitialValue=_react.default.useRef();var animationValues=_react.default.useRef({val:new _reactNative.Animated.Value(value),min:new _reactNative.Animated.Value(minimumValue),max:new _reactNative.Animated.Value(maximumValue),diff:new _reactNative.Animated.Value(maximumValue-minimumValue||1)}).current;_react.default.useEffect(function(){animationValues.min.setValue(minimumValue);animationValues.max.setValue(maximumValue);animationValues.diff.setValue(maximumValue-minimumValue||1);},[animationValues,minimumValue,maximumValue]);var minPercent=_react.default.useRef(_reactNative.Animated.multiply(new _reactNative.Animated.Value(100),_reactNative.Animated.divide(_reactNative.Animated.subtract(animationValues.val,animationValues.min),animationValues.diff))).current;var maxPercent=_react.default.useRef(_reactNative.Animated.subtract(new _reactNative.Animated.Value(100),minPercent)).current;var onValueChange=(0,_react.useCallback)(function(value){onRNCSliderValueChange&&onRNCSliderValueChange(valueToEvent(value));},[onRNCSliderValueChange]);var onSlidingStart=(0,_react.useCallback)(function(value){onRNCSliderSlidingStart&&onRNCSliderSlidingStart(valueToEvent(value));},[onRNCSliderSlidingStart]);var onSlidingComplete=(0,_react.useCallback)(function(value){onRNCSliderSlidingComplete&&onRNCSliderSlidingComplete(valueToEvent(value));},[onRNCSliderSlidingComplete]);var _updateValue=(0,_react.useCallback)(function(newValue){var hardRounded=decimalPrecision.current<20?Number.parseFloat(newValue.toFixed(decimalPrecision.current)):newValue;var withinBounds=Math.max(minimumValue,Math.min(hardRounded,maximumValue));if(value!==withinBounds){setValue(withinBounds);onValueChange(withinBounds);return withinBounds;}return hardRounded;},[minimumValue,maximumValue,value,onValueChange]);_react.default.useLayoutEffect(function(){if(initialValue!==lastInitialValue.current){lastInitialValue.current=initialValue;var newValue=_updateValue(initialValue);animationValues.val.setValue(newValue);}},[initialValue,_updateValue,animationValues]);_react.default.useEffect(function(){var invalidateContainerPosition=function invalidateContainerPosition(){containerPositionInvalidated.current=true;};var onDocumentScroll=function onDocumentScroll(e){var isAlreadyInvalidated=!containerPositionInvalidated.current;if(isAlreadyInvalidated&&containerRef.current&&e.target.contains(containerRef.current)){invalidateContainerPosition();}};window.addEventListener('resize',invalidateContainerPosition);document.addEventListener('scroll',onDocumentScroll,{capture:true});return function(){window.removeEventListener('resize',invalidateContainerPosition);document.removeEventListener('scroll',onDocumentScroll,{capture:true});};},[containerRef]);var containerStyle=_reactNative.StyleSheet.compose({flexGrow:1,flexShrink:1,flexBasis:'auto',flexDirection:'row',alignItems:'center'},style);var trackStyle={height:trackHeight,borderRadius:trackHeight/2,userSelect:'none'};var minimumTrackStyle=Object.assign({},trackStyle,{backgroundColor:minimumTrackTintColor,flexGrow:minPercent});var maximumTrackStyle=Object.assign({},trackStyle,{backgroundColor:maximumTrackTintColor,flexGrow:maxPercent});var thumbViewStyle=_reactNative.StyleSheet.compose({width:thumbSize,height:thumbSize,backgroundColor:thumbTintColor,zIndex:1,borderRadius:thumbSize/2,overflow:'hidden'},thumbStyle);var decimalPrecision=_react.default.useRef(calculatePrecision(minimumValue,maximumValue,step));_react.default.useEffect(function(){decimalPrecision.current=calculatePrecision(minimumValue,maximumValue,step);},[maximumValue,minimumValue,step]);var updateContainerPositionX=function updateContainerPositionX(){var _ReactDOM$findDOMNode;var positionX=(_ReactDOM$findDOMNode=_reactDom.default.findDOMNode(containerRef.current).getBoundingClientRect())==null?void 0:_ReactDOM$findDOMNode.x;containerPositionX.current=positionX!=null?positionX:0;};var getValueFromNativeEvent=function getValueFromNativeEvent(pageX){var _containerSize$curren=containerSize.current.width,width=_containerSize$curren===void 0?1:_containerSize$curren;if(containerPositionInvalidated.current){containerPositionInvalidated.current=false;updateContainerPositionX();}var containerX=containerPositionX.current;if(pageXcontainerX+width){return inverted?minimumValue:maximumValue;}else{var x=pageX-containerX;var newValue=inverted?maximumValue-(maximumValue-minimumValue)*x/width:minimumValue+(maximumValue-minimumValue)*x/width;return step?Math.round(newValue/step)*step:newValue;}};var onTouchEnd=function onTouchEnd(_ref2){var nativeEvent=_ref2.nativeEvent;var newValue=_updateValue(getValueFromNativeEvent(nativeEvent.pageX));animationValues.val.setValue(newValue);onSlidingComplete(newValue);};var onMove=function onMove(_ref3){var nativeEvent=_ref3.nativeEvent;var newValue=getValueFromNativeEvent(nativeEvent.pageX);animationValues.val.setValue(newValue);_updateValue(newValue);};var accessibilityActions=function accessibilityActions(event){var tenth=(maximumValue-minimumValue)/10;switch(event.nativeEvent.actionName){case'increment':_updateValue(value+(step||tenth));break;case'decrement':_updateValue(value-(step||tenth));break;}};_react.default.useImperativeHandle(forwardedRef,function(){return{updateValue:function updateValue(val){_updateValue(val);}};},[_updateValue]);return _react.default.createElement(_reactNative.View,(0,_extends2.default)({ref:containerRef,onLayout:function onLayout(_ref4){var layout=_ref4.nativeEvent.layout;containerSize.current.height=layout.height;containerSize.current.width=layout.width;if(containerRef.current){updateContainerPositionX();}},accessibilityActions:[{name:'increment',label:'increment'},{name:'decrement',label:'decrement'}],onAccessibilityAction:accessibilityActions,accessible:true,accessibilityRole:'adjustable',style:containerStyle},others,{onStartShouldSetResponder:function onStartShouldSetResponder(){return!disabled;},onMoveShouldSetResponder:function onMoveShouldSetResponder(){return!disabled;},onResponderGrant:function onResponderGrant(){return onSlidingStart(value);},onResponderRelease:onTouchEnd,onResponderMove:onMove,__self:_this,__source:{fileName:_jsxFileName,lineNumber:318,columnNumber:7}}),_react.default.createElement(_reactNative.Animated.View,{pointerEvents:\"none\",style:minimumTrackStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:343,columnNumber:9}}),_react.default.createElement(_reactNative.View,{pointerEvents:\"none\",style:thumbViewStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:344,columnNumber:9}},thumbImage!==undefined?_react.default.createElement(_reactNative.Image,{source:thumbImage,style:{width:'100%',height:'100%'},__self:_this,__source:{fileName:_jsxFileName,lineNumber:346,columnNumber:13}}):null),_react.default.createElement(_reactNative.Animated.View,{pointerEvents:\"none\",style:maximumTrackStyle,__self:_this,__source:{fileName:_jsxFileName,lineNumber:352,columnNumber:9}}));});function calculatePrecision(minimumValue,maximumValue,step){if(!step){return Infinity;}else{var decimals=[minimumValue,maximumValue,step].map(function(value){return((value+'').split('.').pop()||'').length;});return Math.max.apply(Math,(0,_toConsumableArray2.default)(decimals));}}RCTSliderWebComponent.displayName='RTCSliderWebComponent';var _default=RCTSliderWebComponent;exports.default=_default;","var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _extends2=_interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));var _objectWithoutProperties2=_interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));var _react=_interopRequireDefault(require(\"react\"));var _reactNative=require(\"react-native\");var _index=_interopRequireDefault(require(\"./index\"));var _excluded=[\"onValueChange\",\"onSlidingStart\",\"onSlidingComplete\",\"onAccessibilityAction\"];var _this=this,_jsxFileName=\"C:\\\\Dev\\\\Projects\\\\react-native-slider\\\\package\\\\src\\\\Slider.tsx\";var LIMIT_MIN_VALUE=Number.MIN_SAFE_INTEGER;var LIMIT_MAX_VALUE=Number.MAX_SAFE_INTEGER;var SliderComponent=function SliderComponent(props,forwardedRef){var _props$accessibilityS;var style=_reactNative.StyleSheet.compose(props.style,styles.slider);var onValueChange=props.onValueChange,onSlidingStart=props.onSlidingStart,onSlidingComplete=props.onSlidingComplete,onAccessibilityAction=props.onAccessibilityAction,localProps=(0,_objectWithoutProperties2.default)(props,_excluded);var onValueChangeEvent=onValueChange?function(event){onValueChange(event.nativeEvent.value);}:null;var _disabled=typeof props.disabled==='boolean'?props.disabled:((_props$accessibilityS=props.accessibilityState)==null?void 0:_props$accessibilityS.disabled)===true;var _accessibilityState=typeof props.disabled==='boolean'?Object.assign({},props.accessibilityState,{disabled:props.disabled}):props.accessibilityState;var onSlidingStartEvent=onSlidingStart?function(event){onSlidingStart(event.nativeEvent.value);}:null;var onSlidingCompleteEvent=onSlidingComplete?function(event){onSlidingComplete(event.nativeEvent.value);}:null;var onAccessibilityActionEvent=onAccessibilityAction?function(event){onAccessibilityAction(event);}:null;var lowerLimit=!!localProps.lowerLimit||localProps.lowerLimit===0?localProps.lowerLimit:LIMIT_MIN_VALUE;var upperLimit=!!localProps.upperLimit||localProps.upperLimit===0?localProps.upperLimit:LIMIT_MAX_VALUE;return _react.default.createElement(_index.default,(0,_extends2.default)({},localProps,{lowerLimit:lowerLimit,upperLimit:upperLimit,accessibilityState:_accessibilityState,thumbImage:_reactNative.Platform.OS==='web'?props.thumbImage:props.thumbImage?_reactNative.Image.resolveAssetSource(props.thumbImage):undefined,ref:forwardedRef,style:style,onChange:onValueChangeEvent,onRNCSliderSlidingStart:onSlidingStartEvent,onRNCSliderSlidingComplete:onSlidingCompleteEvent,onRNCSliderValueChange:onValueChangeEvent,disabled:_disabled,onStartShouldSetResponder:function onStartShouldSetResponder(){return true;},onResponderTerminationRequest:function onResponderTerminationRequest(){return false;},onRNCSliderAccessibilityAction:onAccessibilityActionEvent,__self:_this,__source:{fileName:_jsxFileName,lineNumber:248,columnNumber:5}}));};var SliderWithRef=_react.default.forwardRef(SliderComponent);SliderWithRef.defaultProps={value:0,minimumValue:0,maximumValue:1,step:0,inverted:false,tapToSeek:false,lowerLimit:LIMIT_MIN_VALUE,upperLimit:LIMIT_MAX_VALUE};var styles=_reactNative.StyleSheet.create(_reactNative.Platform.OS==='ios'?{slider:{height:40}}:{slider:{}});var _default=SliderWithRef;exports.default=_default;","Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var RNCSlider=require('./RNCSliderNativeComponent').default;var _default=RNCSlider;exports.default=_default;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nexport type PackagerAsset = {\n +__packager_asset: boolean,\n +fileSystemLocation: string,\n +httpServerLocation: string,\n +width: ?number,\n +height: ?number,\n +scales: Array,\n +hash: string,\n +name: string,\n +type: string,\n ...\n};\n\nconst assets: Array = [];\n\nfunction registerAsset(asset: PackagerAsset): number {\n // `push` returns new array length, so the first asset will\n // get id 1 (not 0) to make the value truthy\n return assets.push(asset);\n}\n\nfunction getAssetByID(assetId: number): PackagerAsset {\n return assets[assetId - 1];\n}\n\nmodule.exports = {registerAsset, getAssetByID};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @noflow\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nfunction normalizeColor(color) {\n if (typeof color === 'number') {\n if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n return color;\n }\n return null;\n }\n\n if (typeof color !== 'string') {\n return null;\n }\n\n const matchers = getMatchers();\n let match;\n\n // Ordered based on occurrences on Facebook codebase\n if ((match = matchers.hex6.exec(color))) {\n return parseInt(match[1] + 'ff', 16) >>> 0;\n }\n\n const colorFromKeyword = normalizeKeyword(color);\n if (colorFromKeyword != null) {\n return colorFromKeyword;\n }\n\n if ((match = matchers.rgb.exec(color))) {\n return (\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) | // b\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.rgba.exec(color))) {\n // rgba(R G B / A) notation\n if (match[6] !== undefined) {\n return (\n ((parse255(match[6]) << 24) | // r\n (parse255(match[7]) << 16) | // g\n (parse255(match[8]) << 8) | // b\n parse1(match[9])) >>> // a\n 0\n );\n }\n\n // rgba(R, G, B, A) notation\n return (\n ((parse255(match[2]) << 24) | // r\n (parse255(match[3]) << 16) | // g\n (parse255(match[4]) << 8) | // b\n parse1(match[5])) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hex3.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n 'ff', // a\n 16,\n ) >>> 0\n );\n }\n\n // https://drafts.csswg.org/css-color-4/#hex-notation\n if ((match = matchers.hex8.exec(color))) {\n return parseInt(match[1], 16) >>> 0;\n }\n\n if ((match = matchers.hex4.exec(color))) {\n return (\n parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n match[4] +\n match[4], // a\n 16,\n ) >>> 0\n );\n }\n\n if ((match = matchers.hsl.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]), // l\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hsla.exec(color))) {\n // hsla(H S L / A) notation\n if (match[6] !== undefined) {\n return (\n (hslToRgb(\n parse360(match[6]), // h\n parsePercentage(match[7]), // s\n parsePercentage(match[8]), // l\n ) |\n parse1(match[9])) >>> // a\n 0\n );\n }\n\n // hsla(H, S, L, A) notation\n return (\n (hslToRgb(\n parse360(match[2]), // h\n parsePercentage(match[3]), // s\n parsePercentage(match[4]), // l\n ) |\n parse1(match[5])) >>> // a\n 0\n );\n }\n\n if ((match = matchers.hwb.exec(color))) {\n return (\n (hwbToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // w\n parsePercentage(match[3]), // b\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n return null;\n}\n\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\nfunction hslToRgb(h, s, l) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n\n return (\n (Math.round(r * 255) << 24) |\n (Math.round(g * 255) << 16) |\n (Math.round(b * 255) << 8)\n );\n}\n\nfunction hwbToRgb(h, w, b) {\n if (w + b >= 1) {\n const gray = Math.round((w * 255) / (w + b));\n\n return (gray << 24) | (gray << 16) | (gray << 8);\n }\n\n const red = hue2rgb(0, 1, h + 1 / 3) * (1 - w - b) + w;\n const green = hue2rgb(0, 1, h) * (1 - w - b) + w;\n const blue = hue2rgb(0, 1, h - 1 / 3) * (1 - w - b) + w;\n\n return (\n (Math.round(red * 255) << 24) |\n (Math.round(green * 255) << 16) |\n (Math.round(blue * 255) << 8)\n );\n}\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args) {\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,?\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nfunction callWithSlashSeparator(...args) {\n return (\n '\\\\(\\\\s*(' +\n args.slice(0, args.length - 1).join(')\\\\s*,?\\\\s*(') +\n ')\\\\s*/\\\\s*(' +\n args[args.length - 1] +\n ')\\\\s*\\\\)'\n );\n}\n\nfunction commaSeparatedCall(...args) {\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nlet cachedMatchers;\n\nfunction getMatchers() {\n if (cachedMatchers === undefined) {\n cachedMatchers = {\n rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n rgba: new RegExp(\n 'rgba(' +\n commaSeparatedCall(NUMBER, NUMBER, NUMBER, NUMBER) +\n '|' +\n callWithSlashSeparator(NUMBER, NUMBER, NUMBER, NUMBER) +\n ')',\n ),\n hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hsla: new RegExp(\n 'hsla(' +\n commaSeparatedCall(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n '|' +\n callWithSlashSeparator(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n ')',\n ),\n hwb: new RegExp('hwb' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#([0-9a-fA-F]{6})$/,\n hex8: /^#([0-9a-fA-F]{8})$/,\n };\n }\n return cachedMatchers;\n}\n\nfunction parse255(str) {\n const int = parseInt(str, 10);\n if (int < 0) {\n return 0;\n }\n if (int > 255) {\n return 255;\n }\n return int;\n}\n\nfunction parse360(str) {\n const int = parseFloat(str);\n return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str) {\n const num = parseFloat(str);\n if (num < 0) {\n return 0;\n }\n if (num > 1) {\n return 255;\n }\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n // parseFloat conveniently ignores the final %\n const int = parseFloat(str);\n if (int < 0) {\n return 0;\n }\n if (int > 100) {\n return 1;\n }\n return int / 100;\n}\n\nfunction normalizeKeyword(name) {\n // prettier-ignore\n switch (name) {\n case 'transparent': return 0x00000000;\n // http://www.w3.org/TR/css3-color/#svg-color\n case 'aliceblue': return 0xf0f8ffff;\n case 'antiquewhite': return 0xfaebd7ff;\n case 'aqua': return 0x00ffffff;\n case 'aquamarine': return 0x7fffd4ff;\n case 'azure': return 0xf0ffffff;\n case 'beige': return 0xf5f5dcff;\n case 'bisque': return 0xffe4c4ff;\n case 'black': return 0x000000ff;\n case 'blanchedalmond': return 0xffebcdff;\n case 'blue': return 0x0000ffff;\n case 'blueviolet': return 0x8a2be2ff;\n case 'brown': return 0xa52a2aff;\n case 'burlywood': return 0xdeb887ff;\n case 'burntsienna': return 0xea7e5dff;\n case 'cadetblue': return 0x5f9ea0ff;\n case 'chartreuse': return 0x7fff00ff;\n case 'chocolate': return 0xd2691eff;\n case 'coral': return 0xff7f50ff;\n case 'cornflowerblue': return 0x6495edff;\n case 'cornsilk': return 0xfff8dcff;\n case 'crimson': return 0xdc143cff;\n case 'cyan': return 0x00ffffff;\n case 'darkblue': return 0x00008bff;\n case 'darkcyan': return 0x008b8bff;\n case 'darkgoldenrod': return 0xb8860bff;\n case 'darkgray': return 0xa9a9a9ff;\n case 'darkgreen': return 0x006400ff;\n case 'darkgrey': return 0xa9a9a9ff;\n case 'darkkhaki': return 0xbdb76bff;\n case 'darkmagenta': return 0x8b008bff;\n case 'darkolivegreen': return 0x556b2fff;\n case 'darkorange': return 0xff8c00ff;\n case 'darkorchid': return 0x9932ccff;\n case 'darkred': return 0x8b0000ff;\n case 'darksalmon': return 0xe9967aff;\n case 'darkseagreen': return 0x8fbc8fff;\n case 'darkslateblue': return 0x483d8bff;\n case 'darkslategray': return 0x2f4f4fff;\n case 'darkslategrey': return 0x2f4f4fff;\n case 'darkturquoise': return 0x00ced1ff;\n case 'darkviolet': return 0x9400d3ff;\n case 'deeppink': return 0xff1493ff;\n case 'deepskyblue': return 0x00bfffff;\n case 'dimgray': return 0x696969ff;\n case 'dimgrey': return 0x696969ff;\n case 'dodgerblue': return 0x1e90ffff;\n case 'firebrick': return 0xb22222ff;\n case 'floralwhite': return 0xfffaf0ff;\n case 'forestgreen': return 0x228b22ff;\n case 'fuchsia': return 0xff00ffff;\n case 'gainsboro': return 0xdcdcdcff;\n case 'ghostwhite': return 0xf8f8ffff;\n case 'gold': return 0xffd700ff;\n case 'goldenrod': return 0xdaa520ff;\n case 'gray': return 0x808080ff;\n case 'green': return 0x008000ff;\n case 'greenyellow': return 0xadff2fff;\n case 'grey': return 0x808080ff;\n case 'honeydew': return 0xf0fff0ff;\n case 'hotpink': return 0xff69b4ff;\n case 'indianred': return 0xcd5c5cff;\n case 'indigo': return 0x4b0082ff;\n case 'ivory': return 0xfffff0ff;\n case 'khaki': return 0xf0e68cff;\n case 'lavender': return 0xe6e6faff;\n case 'lavenderblush': return 0xfff0f5ff;\n case 'lawngreen': return 0x7cfc00ff;\n case 'lemonchiffon': return 0xfffacdff;\n case 'lightblue': return 0xadd8e6ff;\n case 'lightcoral': return 0xf08080ff;\n case 'lightcyan': return 0xe0ffffff;\n case 'lightgoldenrodyellow': return 0xfafad2ff;\n case 'lightgray': return 0xd3d3d3ff;\n case 'lightgreen': return 0x90ee90ff;\n case 'lightgrey': return 0xd3d3d3ff;\n case 'lightpink': return 0xffb6c1ff;\n case 'lightsalmon': return 0xffa07aff;\n case 'lightseagreen': return 0x20b2aaff;\n case 'lightskyblue': return 0x87cefaff;\n case 'lightslategray': return 0x778899ff;\n case 'lightslategrey': return 0x778899ff;\n case 'lightsteelblue': return 0xb0c4deff;\n case 'lightyellow': return 0xffffe0ff;\n case 'lime': return 0x00ff00ff;\n case 'limegreen': return 0x32cd32ff;\n case 'linen': return 0xfaf0e6ff;\n case 'magenta': return 0xff00ffff;\n case 'maroon': return 0x800000ff;\n case 'mediumaquamarine': return 0x66cdaaff;\n case 'mediumblue': return 0x0000cdff;\n case 'mediumorchid': return 0xba55d3ff;\n case 'mediumpurple': return 0x9370dbff;\n case 'mediumseagreen': return 0x3cb371ff;\n case 'mediumslateblue': return 0x7b68eeff;\n case 'mediumspringgreen': return 0x00fa9aff;\n case 'mediumturquoise': return 0x48d1ccff;\n case 'mediumvioletred': return 0xc71585ff;\n case 'midnightblue': return 0x191970ff;\n case 'mintcream': return 0xf5fffaff;\n case 'mistyrose': return 0xffe4e1ff;\n case 'moccasin': return 0xffe4b5ff;\n case 'navajowhite': return 0xffdeadff;\n case 'navy': return 0x000080ff;\n case 'oldlace': return 0xfdf5e6ff;\n case 'olive': return 0x808000ff;\n case 'olivedrab': return 0x6b8e23ff;\n case 'orange': return 0xffa500ff;\n case 'orangered': return 0xff4500ff;\n case 'orchid': return 0xda70d6ff;\n case 'palegoldenrod': return 0xeee8aaff;\n case 'palegreen': return 0x98fb98ff;\n case 'paleturquoise': return 0xafeeeeff;\n case 'palevioletred': return 0xdb7093ff;\n case 'papayawhip': return 0xffefd5ff;\n case 'peachpuff': return 0xffdab9ff;\n case 'peru': return 0xcd853fff;\n case 'pink': return 0xffc0cbff;\n case 'plum': return 0xdda0ddff;\n case 'powderblue': return 0xb0e0e6ff;\n case 'purple': return 0x800080ff;\n case 'rebeccapurple': return 0x663399ff;\n case 'red': return 0xff0000ff;\n case 'rosybrown': return 0xbc8f8fff;\n case 'royalblue': return 0x4169e1ff;\n case 'saddlebrown': return 0x8b4513ff;\n case 'salmon': return 0xfa8072ff;\n case 'sandybrown': return 0xf4a460ff;\n case 'seagreen': return 0x2e8b57ff;\n case 'seashell': return 0xfff5eeff;\n case 'sienna': return 0xa0522dff;\n case 'silver': return 0xc0c0c0ff;\n case 'skyblue': return 0x87ceebff;\n case 'slateblue': return 0x6a5acdff;\n case 'slategray': return 0x708090ff;\n case 'slategrey': return 0x708090ff;\n case 'snow': return 0xfffafaff;\n case 'springgreen': return 0x00ff7fff;\n case 'steelblue': return 0x4682b4ff;\n case 'tan': return 0xd2b48cff;\n case 'teal': return 0x008080ff;\n case 'thistle': return 0xd8bfd8ff;\n case 'tomato': return 0xff6347ff;\n case 'turquoise': return 0x40e0d0ff;\n case 'violet': return 0xee82eeff;\n case 'wheat': return 0xf5deb3ff;\n case 'white': return 0xffffffff;\n case 'whitesmoke': return 0xf5f5f5ff;\n case 'yellow': return 0xffff00ff;\n case 'yellowgreen': return 0x9acd32ff;\n }\n return null;\n}\n\nmodule.exports = normalizeColor;\n","import {\n CommonActions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport checkDuplicateRouteNames from './checkDuplicateRouteNames';\nimport checkSerializable from './checkSerializable';\nimport { NOT_INITIALIZED_ERROR } from './createNavigationContainerRef';\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport findFocusedRoute from './findFocusedRoute';\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport type {\n NavigationContainerEventMap,\n NavigationContainerProps,\n NavigationContainerRef,\n} from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport useChildListeners from './useChildListeners';\nimport useEventEmitter from './useEventEmitter';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useOptionsGetters from './useOptionsGetters';\nimport { ScheduleUpdateContext } from './useScheduleUpdate';\nimport useSyncState from './useSyncState';\n\ntype State = NavigationState | PartialState | undefined;\n\nconst serializableWarnings: string[] = [];\nconst duplicateNameWarnings: string[] = [];\n\n/**\n * Remove `key` and `routeNames` from the state objects recursively to get partial state.\n *\n * @param state Initial state object.\n */\nconst getPartialState = (\n state: InitialState | undefined\n): PartialState | undefined => {\n if (state === undefined) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { key, routeNames, ...partialState } = state;\n\n return {\n ...partialState,\n stale: true,\n routes: state.routes.map((route) => {\n if (route.state === undefined) {\n return route as Route & {\n state?: PartialState;\n };\n }\n\n return { ...route, state: getPartialState(route.state) };\n }),\n };\n};\n\n/**\n * Container component which holds the navigation state.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nconst BaseNavigationContainer = React.forwardRef(\n function BaseNavigationContainer(\n {\n initialState,\n onStateChange,\n onUnhandledAction,\n independent,\n children,\n }: NavigationContainerProps,\n ref?: React.Ref>\n ) {\n const parent = React.useContext(NavigationStateContext);\n\n if (!parent.isDefault && !independent) {\n throw new Error(\n \"Looks like you have nested a 'NavigationContainer' inside another. Normally you need only one container at the root of the app, so this was probably an error. If this was intentional, pass 'independent={true}' explicitly. Note that this will make the child navigators disconnected from the parent and you won't be able to navigate between them.\"\n );\n }\n\n const [state, getState, setState, scheduleUpdate, flushUpdates] =\n useSyncState(() =>\n getPartialState(initialState == null ? undefined : initialState)\n );\n\n const isFirstMountRef = React.useRef(true);\n\n const navigatorKeyRef = React.useRef();\n\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const { listeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const dispatch = React.useCallback(\n (\n action:\n | NavigationAction\n | ((state: NavigationState) => NavigationAction)\n ) => {\n if (listeners.focus[0] == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) => navigation.dispatch(action));\n }\n },\n [listeners.focus]\n );\n\n const canGoBack = React.useCallback(() => {\n if (listeners.focus[0] == null) {\n return false;\n }\n\n const { result, handled } = listeners.focus[0]((navigation) =>\n navigation.canGoBack()\n );\n\n if (handled) {\n return result;\n } else {\n return false;\n }\n }, [listeners.focus]);\n\n const resetRoot = React.useCallback(\n (state?: PartialState | NavigationState) => {\n const target = state?.key ?? keyedListeners.getState.root?.().key;\n\n if (target == null) {\n console.error(NOT_INITIALIZED_ERROR);\n } else {\n listeners.focus[0]((navigation) =>\n navigation.dispatch({\n ...CommonActions.reset(state),\n target,\n })\n );\n }\n },\n [keyedListeners.getState, listeners.focus]\n );\n\n const getRootState = React.useCallback(() => {\n return keyedListeners.getState.root?.();\n }, [keyedListeners.getState]);\n\n const getCurrentRoute = React.useCallback(() => {\n const state = getRootState();\n\n if (state == null) {\n return undefined;\n }\n\n const route = findFocusedRoute(state);\n\n return route as Route | undefined;\n }, [getRootState]);\n\n const emitter = useEventEmitter();\n\n const { addOptionsGetter, getCurrentOptions } = useOptionsGetters({});\n\n const navigation: NavigationContainerRef = React.useMemo(\n () => ({\n ...Object.keys(CommonActions).reduce((acc, name) => {\n acc[name] = (...args: any[]) =>\n // @ts-expect-error: this is ok\n dispatch(CommonActions[name](...args));\n return acc;\n }, {}),\n ...emitter.create('root'),\n dispatch,\n resetRoot,\n isFocused: () => true,\n canGoBack,\n getParent: () => undefined,\n getState: () => stateRef.current,\n getRootState,\n getCurrentRoute,\n getCurrentOptions,\n isReady: () => listeners.focus[0] != null,\n }),\n [\n canGoBack,\n dispatch,\n emitter,\n getCurrentOptions,\n getCurrentRoute,\n getRootState,\n listeners.focus,\n resetRoot,\n ]\n );\n\n React.useImperativeHandle(ref, () => navigation, [navigation]);\n\n const onDispatchAction = React.useCallback(\n (action: NavigationAction, noop: boolean) => {\n emitter.emit({\n type: '__unsafe_action__',\n data: { action, noop, stack: stackRef.current },\n });\n },\n [emitter]\n );\n\n const lastEmittedOptionsRef = React.useRef();\n\n const onOptionsChange = React.useCallback(\n (options: object) => {\n if (lastEmittedOptionsRef.current === options) {\n return;\n }\n\n lastEmittedOptionsRef.current = options;\n\n emitter.emit({\n type: 'options',\n data: { options },\n });\n },\n [emitter]\n );\n\n const stackRef = React.useRef();\n\n const builderContext = React.useMemo(\n () => ({\n addListener,\n addKeyedListener,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n }),\n [addListener, addKeyedListener, onDispatchAction, onOptionsChange]\n );\n\n const scheduleContext = React.useMemo(\n () => ({ scheduleUpdate, flushUpdates }),\n [scheduleUpdate, flushUpdates]\n );\n\n const isInitialRef = React.useRef(true);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n state,\n getState,\n setState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const onStateChangeRef = React.useRef(onStateChange);\n const stateRef = React.useRef(state);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n onStateChangeRef.current = onStateChange;\n stateRef.current = state;\n });\n\n React.useEffect(() => {\n const hydratedState = getRootState();\n\n if (process.env.NODE_ENV !== 'production') {\n if (hydratedState !== undefined) {\n const serializableResult = checkSerializable(hydratedState);\n\n if (!serializableResult.serializable) {\n const { location, reason } = serializableResult;\n\n let path = '';\n let pointer: Record = hydratedState;\n let params = false;\n\n for (let i = 0; i < location.length; i++) {\n const curr = location[i];\n const prev = location[i - 1];\n\n pointer = pointer[curr];\n\n if (!params && curr === 'state') {\n continue;\n } else if (!params && curr === 'routes') {\n if (path) {\n path += ' > ';\n }\n } else if (\n !params &&\n typeof curr === 'number' &&\n prev === 'routes'\n ) {\n path += pointer?.name;\n } else if (!params) {\n path += ` > ${curr}`;\n params = true;\n } else {\n if (typeof curr === 'number' || /^[0-9]+$/.test(curr)) {\n path += `[${curr}]`;\n } else if (/^[a-z$_]+$/i.test(curr)) {\n path += `.${curr}`;\n } else {\n path += `[${JSON.stringify(curr)}]`;\n }\n }\n }\n\n const message = `Non-serializable values were found in the navigation state. Check:\\n\\n${path} (${reason})\\n\\nThis can break usage such as persisting and restoring state. This might happen if you passed non-serializable values such as function, class instances etc. in params. If you need to use components with callbacks in your options, you can use 'navigation.setOptions' instead. See https://reactnavigation.org/docs/troubleshooting#i-get-the-warning-non-serializable-values-were-found-in-the-navigation-state for more details.`;\n\n if (!serializableWarnings.includes(message)) {\n serializableWarnings.push(message);\n console.warn(message);\n }\n }\n\n const duplicateRouteNamesResult =\n checkDuplicateRouteNames(hydratedState);\n\n if (duplicateRouteNamesResult.length) {\n const message = `Found screens with the same name nested inside one another. Check:\\n${duplicateRouteNamesResult.map(\n (locations) => `\\n${locations.join(', ')}`\n )}\\n\\nThis can cause confusing behavior during navigation. Consider using unique names for each screen instead.`;\n\n if (!duplicateNameWarnings.includes(message)) {\n duplicateNameWarnings.push(message);\n console.warn(message);\n }\n }\n }\n }\n\n emitter.emit({ type: 'state', data: { state } });\n\n if (!isFirstMountRef.current && onStateChangeRef.current) {\n onStateChangeRef.current(hydratedState);\n }\n\n isFirstMountRef.current = false;\n }, [getRootState, emitter, state]);\n\n const defaultOnUnhandledAction = React.useCallback(\n (action: NavigationAction) => {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const payload: Record | undefined = action.payload;\n\n let message = `The action '${action.type}'${\n payload ? ` with payload ${JSON.stringify(action.payload)}` : ''\n } was not handled by any navigator.`;\n\n switch (action.type) {\n case 'NAVIGATE':\n case 'PUSH':\n case 'REPLACE':\n case 'JUMP_TO':\n if (payload?.name) {\n message += `\\n\\nDo you have a screen named '${payload.name}'?\\n\\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;\n } else {\n message += `\\n\\nYou need to pass the name of the screen to navigate to.\\n\\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;\n }\n\n break;\n case 'GO_BACK':\n case 'POP':\n case 'POP_TO_TOP':\n message += `\\n\\nIs there any screen to go back to?`;\n break;\n case 'OPEN_DRAWER':\n case 'CLOSE_DRAWER':\n case 'TOGGLE_DRAWER':\n message += `\\n\\nIs your screen inside a Drawer navigator?`;\n break;\n }\n\n message += `\\n\\nThis is a development-only warning and won't be shown in production.`;\n\n console.error(message);\n },\n []\n );\n\n let element = (\n \n \n \n \n \n {children}\n \n \n \n \n \n );\n\n if (independent) {\n // We need to clear any existing contexts for nested independent container to work correctly\n element = (\n \n \n {element}\n \n \n );\n }\n\n return element;\n }\n);\n\nexport default BaseNavigationContainer;\n","import * as React from 'react';\n\n/**\n * Context which holds the values for the current navigation tree.\n * Intended for use in SSR. This is not safe to use on the client.\n */\nconst CurrentRenderContext = React.createContext<\n { options?: object } | undefined\n>(undefined);\n\nexport default CurrentRenderContext;\n","import * as React from 'react';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst MULTIPLE_NAVIGATOR_ERROR = `Another navigator is already registered for this container. You likely have multiple navigators under a single \"NavigationContainer\" or \"Screen\". Make sure each navigator is under a separate \"Screen\" container. See https://reactnavigation.org/docs/nesting-navigators for a guide on nesting.`;\n\nexport const SingleNavigatorContext = React.createContext<\n | {\n register(key: string): void;\n unregister(key: string): void;\n }\n | undefined\n>(undefined);\n\n/**\n * Component which ensures that there's only one navigator nested under it.\n */\nexport default function EnsureSingleNavigator({ children }: Props) {\n const navigatorKeyRef = React.useRef();\n\n const value = React.useMemo(\n () => ({\n register(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (currentKey !== undefined && key !== currentKey) {\n throw new Error(MULTIPLE_NAVIGATOR_ERROR);\n }\n\n navigatorKeyRef.current = key;\n },\n unregister(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (key !== currentKey) {\n return;\n }\n\n navigatorKeyRef.current = undefined;\n },\n }),\n []\n );\n\n return (\n \n {children}\n \n );\n}\n","import type { ParamListBase } from '@react-navigation/routers';\n\nimport type { RouteGroupConfig } from './types';\n\n/**\n * Empty component used for grouping screen configs.\n */\nexport default function Group<\n ParamList extends ParamListBase,\n ScreenOptions extends {}\n>(_: RouteGroupConfig) {\n /* istanbul ignore next */\n return null;\n}\n","import type {\n NavigationAction,\n NavigationState,\n ParamListBase,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationHelpers } from './types';\n\nexport type ListenerMap = {\n action: ChildActionListener;\n focus: FocusedNavigationListener;\n};\n\nexport type KeyedListenerMap = {\n getState: GetStateListener;\n beforeRemove: ChildBeforeRemoveListener;\n};\n\nexport type AddListener = (\n type: T,\n listener: ListenerMap[T]\n) => void;\n\nexport type AddKeyedListener = (\n type: T,\n key: string,\n listener: KeyedListenerMap[T]\n) => void;\n\nexport type ChildActionListener = (\n action: NavigationAction,\n visitedNavigators?: Set\n) => boolean;\n\nexport type FocusedNavigationCallback = (\n navigation: NavigationHelpers\n) => T;\n\nexport type FocusedNavigationListener = (\n callback: FocusedNavigationCallback\n) => {\n handled: boolean;\n result: T;\n};\n\nexport type GetStateListener = () => NavigationState;\n\nexport type ChildBeforeRemoveListener = (action: NavigationAction) => boolean;\n\n/**\n * Context which holds the required helpers needed to build nested navigators.\n */\nconst NavigationBuilderContext = React.createContext<{\n onAction?: (\n action: NavigationAction,\n visitedNavigators?: Set\n ) => boolean;\n addListener?: AddListener;\n addKeyedListener?: AddKeyedListener;\n onRouteFocus?: (key: string) => void;\n onDispatchAction: (action: NavigationAction, noop: boolean) => void;\n onOptionsChange: (options: object) => void;\n stackRef?: React.MutableRefObject;\n}>({\n onDispatchAction: () => undefined,\n onOptionsChange: () => undefined,\n});\n\nexport default NavigationBuilderContext;\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationContainerRef } from './types';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationContainerRefContext = React.createContext<\n NavigationContainerRef | undefined\n>(undefined);\n\nexport default NavigationContainerRefContext;\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationProp } from './types';\n\n/**\n * Context which holds the navigation prop for a screen.\n */\nconst NavigationContext = React.createContext<\n NavigationProp | undefined\n>(undefined);\n\nexport default NavigationContext;\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationHelpers } from './types';\n\n/**\n * Context which holds the navigation helpers of the parent navigator.\n * Navigators should use this context in their view component.\n */\nconst NavigationHelpersContext = React.createContext<\n NavigationHelpers | undefined\n>(undefined);\n\nexport default NavigationHelpersContext;\n","import type { Route } from '@react-navigation/routers';\nimport * as React from 'react';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationRouteContext = React.createContext | undefined>(\n undefined\n);\n\nexport default NavigationRouteContext;\n","import type { NavigationState, PartialState } from '@react-navigation/routers';\nimport * as React from 'react';\n\nconst MISSING_CONTEXT_ERROR =\n \"Couldn't find a navigation context. Have you wrapped your app with 'NavigationContainer'? See https://reactnavigation.org/docs/getting-started for setup instructions.\";\n\nexport default React.createContext<{\n isDefault?: true;\n state?: NavigationState | PartialState;\n getKey: () => string | undefined;\n setKey: (key: string) => void;\n getState: () => NavigationState | PartialState | undefined;\n setState: (\n state: NavigationState | PartialState | undefined\n ) => void;\n getIsInitial: () => boolean;\n addOptionsGetter?: (\n key: string,\n getter: () => object | undefined | null\n ) => void;\n}>({\n isDefault: true,\n\n get getKey(): any {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get setKey(): any {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get getState(): any {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get setState(): any {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n get getIsInitial(): any {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n});\n","import * as React from 'react';\n\n/**\n * A type of an object that have a route key as an object key\n * and a value whether to prevent that route.\n */\nexport type PreventedRoutes = Record;\n\nconst PreventRemoveContext = React.createContext<\n | {\n preventedRoutes: PreventedRoutes;\n setPreventRemove: (\n id: string,\n routeKey: string,\n preventRemove: boolean\n ) => void;\n }\n | undefined\n>(undefined);\n\nexport default PreventRemoveContext;\n","import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\n\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport PreventRemoveContext, { PreventedRoutes } from './PreventRemoveContext';\n\ntype Props = {\n children: React.ReactNode;\n};\n\ntype PreventedRoutesMap = Map<\n string,\n {\n routeKey: string;\n preventRemove: boolean;\n }\n>;\n\n/**\n * Util function to transform map of prevented routes to a simpler object.\n */\nconst transformPreventedRoutes = (\n preventedRoutesMap: PreventedRoutesMap\n): PreventedRoutes => {\n const preventedRoutesToTransform = [...preventedRoutesMap.values()];\n\n const preventedRoutes = preventedRoutesToTransform.reduce(\n (acc, { routeKey, preventRemove }) => {\n acc[routeKey] = {\n preventRemove: acc[routeKey]?.preventRemove || preventRemove,\n };\n return acc;\n },\n {}\n );\n\n return preventedRoutes;\n};\n\n/**\n * Component used for managing which routes have to be prevented from removal in native-stack.\n */\nexport default function PreventRemoveProvider({ children }: Props) {\n const [parentId] = React.useState(() => nanoid());\n const [preventedRoutesMap, setPreventedRoutesMap] =\n React.useState(new Map());\n\n const navigation = React.useContext(NavigationHelpersContext);\n const route = React.useContext(NavigationRouteContext);\n\n const preventRemoveContextValue = React.useContext(PreventRemoveContext);\n // take `setPreventRemove` from parent context - if exist it means we're in a nested context\n const setParentPrevented = preventRemoveContextValue?.setPreventRemove;\n\n const setPreventRemove = useLatestCallback(\n (id: string, routeKey: string, preventRemove: boolean): void => {\n if (\n preventRemove &&\n (navigation == null ||\n navigation\n ?.getState()\n .routes.every((route) => route.key !== routeKey))\n ) {\n throw new Error(\n `Couldn't find a route with the key ${routeKey}. Is your component inside NavigationContent?`\n );\n }\n\n setPreventedRoutesMap((prevPrevented) => {\n // values haven't changed - do nothing\n if (\n routeKey === prevPrevented.get(id)?.routeKey &&\n preventRemove === prevPrevented.get(id)?.preventRemove\n ) {\n return prevPrevented;\n }\n\n const nextPrevented = new Map(prevPrevented);\n\n if (preventRemove) {\n nextPrevented.set(id, {\n routeKey,\n preventRemove,\n });\n } else {\n nextPrevented.delete(id);\n }\n\n return nextPrevented;\n });\n }\n );\n\n const isPrevented = [...preventedRoutesMap.values()].some(\n ({ preventRemove }) => preventRemove\n );\n\n React.useEffect(() => {\n if (route?.key !== undefined && setParentPrevented !== undefined) {\n // when route is defined (and setParentPrevented) it means we're in a nested stack\n // route.key then will be the route key of parent\n setParentPrevented(parentId, route.key, isPrevented);\n return () => {\n setParentPrevented(parentId, route.key, false);\n };\n }\n\n return;\n }, [parentId, isPrevented, route?.key, setParentPrevented]);\n\n const value = React.useMemo(\n () => ({\n setPreventRemove,\n preventedRoutes: transformPreventedRoutes(preventedRoutesMap),\n }),\n [setPreventRemove, preventedRoutesMap]\n );\n\n return (\n \n {children}\n \n );\n}\n","import type {\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport NavigationStateContext from './NavigationStateContext';\nimport StaticContainer from './StaticContainer';\nimport type { NavigationProp, RouteConfigComponent } from './types';\nimport useOptionsGetters from './useOptionsGetters';\n\ntype Props = {\n screen: RouteConfigComponent & { name: string };\n navigation: NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n State,\n ScreenOptions\n >;\n route: Route;\n routeState: NavigationState | PartialState | undefined;\n getState: () => State;\n setState: (state: State) => void;\n options: object;\n clearOptions: () => void;\n};\n\n/**\n * Component which takes care of rendering the screen for a route.\n * It provides all required contexts and applies optimizations when applicable.\n */\nexport default function SceneView<\n State extends NavigationState,\n ScreenOptions extends {}\n>({\n screen,\n route,\n navigation,\n routeState,\n getState,\n setState,\n options,\n clearOptions,\n}: Props) {\n const navigatorKeyRef = React.useRef();\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const { addOptionsGetter } = useOptionsGetters({\n key: route.key,\n options,\n navigation,\n });\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const getCurrentState = React.useCallback(() => {\n const state = getState();\n const currentRoute = state.routes.find((r) => r.key === route.key);\n\n return currentRoute ? currentRoute.state : undefined;\n }, [getState, route.key]);\n\n const setCurrentState = React.useCallback(\n (child: NavigationState | PartialState | undefined) => {\n const state = getState();\n\n setState({\n ...state,\n routes: state.routes.map((r) =>\n r.key === route.key ? { ...r, state: child } : r\n ),\n });\n },\n [getState, route.key, setState]\n );\n\n const isInitialRef = React.useRef(true);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n });\n\n // Clear options set by this screen when it is unmounted\n React.useEffect(() => {\n return clearOptions;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state: routeState,\n getState: getCurrentState,\n setState: setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n routeState,\n getCurrentState,\n setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const ScreenComponent = screen.getComponent\n ? screen.getComponent()\n : screen.component;\n\n return (\n \n \n \n {ScreenComponent !== undefined ? (\n \n ) : screen.children !== undefined ? (\n screen.children({ navigation, route })\n ) : null}\n \n \n \n );\n}\n","import type { NavigationState, ParamListBase } from '@react-navigation/routers';\n\nimport type { EventMapBase, RouteConfig } from './types';\n\n/**\n * Empty component used for specifying route configuration.\n */\nexport default function Screen<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>(_: RouteConfig) {\n /* istanbul ignore next */\n return null;\n}\n","import * as React from 'react';\n\n/**\n * Component which prevents updates for children if no props changed\n */\nfunction StaticContainer(props: any) {\n return props.children;\n}\n\nexport default React.memo(StaticContainer, (prevProps: any, nextProps: any) => {\n const prevPropKeys = Object.keys(prevProps);\n const nextPropKeys = Object.keys(nextProps);\n\n if (prevPropKeys.length !== nextPropKeys.length) {\n return false;\n }\n\n for (const key of prevPropKeys) {\n if (key === 'children') {\n continue;\n }\n\n if (prevProps[key] !== nextProps[key]) {\n return false;\n }\n }\n\n return true;\n});\n","import type { NavigationAction } from '@react-navigation/routers';\nimport * as React from 'react';\n\nconst UnhandledActionContext = React.createContext<\n ((action: NavigationAction) => void) | undefined\n>(undefined);\n\nexport default UnhandledActionContext;\n","import type { NavigationState, PartialState } from '@react-navigation/routers';\n\nexport default function checkDuplicateRouteNames(state: NavigationState) {\n const duplicates: string[][] = [];\n\n const getRouteNames = (\n location: string,\n state: NavigationState | PartialState\n ) => {\n state.routes.forEach((route: (typeof state.routes)[0]) => {\n const currentLocation = location\n ? `${location} > ${route.name}`\n : route.name;\n\n route.state?.routeNames?.forEach((routeName) => {\n if (routeName === route.name) {\n duplicates.push([\n currentLocation,\n `${currentLocation} > ${route.name}`,\n ]);\n }\n });\n\n if (route.state) {\n getRouteNames(currentLocation, route.state);\n }\n });\n };\n\n getRouteNames('', state);\n\n return duplicates;\n}\n","const checkSerializableWithoutCircularReference = (\n o: { [key: string]: any },\n seen: Set,\n location: (string | number)[]\n):\n | { serializable: true }\n | {\n serializable: false;\n location: (string | number)[];\n reason: string;\n } => {\n if (\n o === undefined ||\n o === null ||\n typeof o === 'boolean' ||\n typeof o === 'number' ||\n typeof o === 'string'\n ) {\n return { serializable: true };\n }\n\n if (\n Object.prototype.toString.call(o) !== '[object Object]' &&\n !Array.isArray(o)\n ) {\n return {\n serializable: false,\n location,\n reason: typeof o === 'function' ? 'Function' : String(o),\n };\n }\n\n if (seen.has(o)) {\n return {\n serializable: false,\n reason: 'Circular reference',\n location,\n };\n }\n\n seen.add(o);\n\n if (Array.isArray(o)) {\n for (let i = 0; i < o.length; i++) {\n const childResult = checkSerializableWithoutCircularReference(\n o[i],\n new Set(seen),\n [...location, i]\n );\n\n if (!childResult.serializable) {\n return childResult;\n }\n }\n } else {\n for (const key in o) {\n const childResult = checkSerializableWithoutCircularReference(\n o[key],\n new Set(seen),\n [...location, key]\n );\n\n if (!childResult.serializable) {\n return childResult;\n }\n }\n }\n\n return { serializable: true };\n};\n\nexport default function checkSerializable(o: { [key: string]: any }) {\n return checkSerializableWithoutCircularReference(o, new Set(), []);\n}\n","import { CommonActions } from '@react-navigation/routers';\n\nimport type {\n NavigationContainerEventMap,\n NavigationContainerRef,\n NavigationContainerRefWithCurrent,\n} from './types';\n\nexport const NOT_INITIALIZED_ERROR =\n \"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.\";\n\nexport default function createNavigationContainerRef<\n ParamList extends {} = ReactNavigation.RootParamList\n>(): NavigationContainerRefWithCurrent {\n const methods = [\n ...Object.keys(CommonActions),\n 'addListener',\n 'removeListener',\n 'resetRoot',\n 'dispatch',\n 'isFocused',\n 'canGoBack',\n 'getRootState',\n 'getState',\n 'getParent',\n 'getCurrentRoute',\n 'getCurrentOptions',\n ] as const;\n\n const listeners: Record void)[]> = {};\n\n const removeListener = (\n event: string,\n callback: (...args: any[]) => void\n ) => {\n if (listeners[event]) {\n listeners[event] = listeners[event].filter((cb) => cb !== callback);\n }\n };\n\n let current: NavigationContainerRef | null = null;\n\n const ref: NavigationContainerRefWithCurrent = {\n get current() {\n return current;\n },\n set current(value: NavigationContainerRef | null) {\n current = value;\n\n if (value != null) {\n Object.entries(listeners).forEach(([event, callbacks]) => {\n callbacks.forEach((callback) => {\n value.addListener(\n event as keyof NavigationContainerEventMap,\n callback\n );\n });\n });\n }\n },\n isReady: () => {\n if (current == null) {\n return false;\n }\n\n return current.isReady();\n },\n ...methods.reduce((acc, name) => {\n acc[name] = (...args: any[]) => {\n if (current == null) {\n switch (name) {\n case 'addListener': {\n const [event, callback] = args;\n\n listeners[event] = listeners[event] || [];\n listeners[event].push(callback);\n\n return () => removeListener(event, callback);\n }\n case 'removeListener': {\n const [event, callback] = args;\n\n removeListener(event, callback);\n break;\n }\n default:\n console.error(NOT_INITIALIZED_ERROR);\n }\n } else {\n // @ts-expect-error: this is ok\n return current[name](...args);\n }\n };\n return acc;\n }, {}),\n };\n\n return ref;\n}\n","import type { NavigationState, ParamListBase } from '@react-navigation/routers';\nimport type * as React from 'react';\n\nimport Group from './Group';\nimport Screen from './Screen';\nimport type { EventMapBase, TypedNavigator } from './types';\n\n/**\n * Higher order component to create a `Navigator` and `Screen` pair.\n * Custom navigators should wrap the navigator component in `createNavigator` before exporting.\n *\n * @param Navigator The navigtor component to wrap.\n * @returns Factory method to create a `Navigator` and `Screen` pair.\n */\nexport default function createNavigatorFactory<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n NavigatorComponent extends React.ComponentType\n>(Navigator: NavigatorComponent) {\n return function (): TypedNavigator<\n ParamList,\n State,\n ScreenOptions,\n EventMap,\n typeof Navigator\n > {\n if (arguments[0] !== undefined) {\n throw new Error(\n \"Creating a navigator doesn't take an argument. Maybe you are trying to use React Navigation 4 API? See https://reactnavigation.org/docs/hello-react-navigation for the latest API and guides.\"\n );\n }\n\n return {\n Navigator,\n Group,\n Screen,\n };\n };\n}\n","import type { InitialState } from '@react-navigation/routers';\n\nexport default function findFocusedRoute(state: InitialState) {\n let current: InitialState | undefined = state;\n\n while (current?.routes[current.index ?? 0].state != null) {\n current = current.routes[current.index ?? 0].state;\n }\n\n const route = current?.routes[current?.index ?? 0];\n\n return route;\n}\n","// Object.fromEntries is not available in older iOS versions\nexport default function fromEntries(\n entries: (readonly [K, V])[]\n) {\n return entries.reduce((acc, [k, v]) => {\n if (acc.hasOwnProperty(k)) {\n throw new Error(`A value for key '${k}' already exists in the object.`);\n }\n\n acc[k] = v;\n return acc;\n }, {} as Record);\n}\n","import type {\n CommonActions,\n NavigationState,\n ParamListBase,\n PartialRoute,\n PartialState,\n Route,\n} from '@react-navigation/routers';\n\nimport type { NavigatorScreenParams, PathConfig, PathConfigMap } from './types';\n\ntype ConfigItem = {\n initialRouteName?: string;\n screens?: Record;\n};\n\ntype Options = {\n initialRouteName?: string;\n screens: PathConfigMap;\n};\n\ntype NavigateAction = {\n type: 'NAVIGATE';\n payload: {\n name: string;\n params?: NavigatorScreenParams;\n path?: string;\n };\n};\n\nexport default function getActionFromState(\n state: PartialState,\n options?: Options\n): NavigateAction | CommonActions.Action | undefined {\n // Create a normalized configs object which will be easier to use\n const normalizedConfig = options\n ? createNormalizedConfigItem(options as PathConfig | string)\n : {};\n\n const routes =\n state.index != null ? state.routes.slice(0, state.index + 1) : state.routes;\n\n if (routes.length === 0) {\n return undefined;\n }\n\n if (\n !(\n (routes.length === 1 && routes[0].key === undefined) ||\n (routes.length === 2 &&\n routes[0].key === undefined &&\n routes[0].name === normalizedConfig?.initialRouteName &&\n routes[1].key === undefined)\n )\n ) {\n return {\n type: 'RESET',\n payload: state,\n };\n }\n\n const route = state.routes[state.index ?? state.routes.length - 1];\n\n let current: PartialState | undefined = route?.state;\n let config: ConfigItem | undefined = normalizedConfig?.screens?.[route?.name];\n let params = { ...route.params } as NavigatorScreenParams<\n ParamListBase,\n NavigationState\n >;\n\n let payload = route\n ? { name: route.name, path: route.path, params }\n : undefined;\n\n while (current) {\n if (current.routes.length === 0) {\n return undefined;\n }\n\n const routes =\n current.index != null\n ? current.routes.slice(0, current.index + 1)\n : current.routes;\n\n const route: Route | PartialRoute> =\n routes[routes.length - 1];\n\n // Explicitly set to override existing value when merging params\n Object.assign(params, {\n initial: undefined,\n screen: undefined,\n params: undefined,\n state: undefined,\n });\n\n if (routes.length === 1 && routes[0].key === undefined) {\n params.initial = true;\n params.screen = route.name;\n } else if (\n routes.length === 2 &&\n routes[0].key === undefined &&\n routes[0].name === config?.initialRouteName &&\n routes[1].key === undefined\n ) {\n params.initial = false;\n params.screen = route.name;\n } else {\n params.state = current;\n break;\n }\n\n if (route.state) {\n params.params = { ...route.params };\n params = params.params as NavigatorScreenParams<\n ParamListBase,\n NavigationState\n >;\n } else {\n params.path = route.path;\n params.params = route.params;\n }\n\n current = route.state;\n config = config?.screens?.[route.name];\n }\n\n if (!payload) {\n return;\n }\n\n // Try to construct payload for a `NAVIGATE` action from the state\n // This lets us preserve the navigation state and not lose it\n return {\n type: 'NAVIGATE',\n payload,\n };\n}\n\nconst createNormalizedConfigItem = (config: PathConfig | string) =>\n typeof config === 'object' && config != null\n ? {\n initialRouteName: config.initialRouteName,\n screens:\n config.screens != null\n ? createNormalizedConfigs(config.screens)\n : undefined,\n }\n : {};\n\nconst createNormalizedConfigs = (options: PathConfigMap) =>\n Object.entries(options).reduce>((acc, [k, v]) => {\n acc[k] = createNormalizedConfigItem(v);\n return acc;\n }, {});\n","import type { Route } from '@react-navigation/routers';\n\nimport { CHILD_STATE } from './useRouteCache';\n\nexport default function getFocusedRouteNameFromRoute(\n route: Partial>\n): string | undefined {\n // @ts-expect-error: this isn't in type definitions coz we want this private\n const state = route[CHILD_STATE] ?? route.state;\n const params = route.params as { screen?: unknown } | undefined;\n\n const routeName = state\n ? // Get the currently active route name in the nested navigator\n state.routes[\n // If we have a partial state without index, for tab/drawer, first screen will be focused one, and last for stack\n // The type property will only exist for rehydrated state and not for state from deep link\n state.index ??\n (typeof state.type === 'string' && state.type !== 'stack'\n ? 0\n : state.routes.length - 1)\n ].name\n : // If state doesn't exist, we need to default to `screen` param if available\n typeof params?.screen === 'string'\n ? params.screen\n : undefined;\n\n return routeName;\n}\n","import type {\n NavigationState,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as queryString from 'query-string';\n\nimport fromEntries from './fromEntries';\nimport type { PathConfig, PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options = {\n initialRouteName?: string;\n screens: PathConfigMap;\n};\n\ntype State = NavigationState | Omit, 'stale'>;\n\ntype StringifyConfig = Record string>;\n\ntype ConfigItem = {\n pattern?: string;\n stringify?: StringifyConfig;\n screens?: Record;\n};\n\nconst getActiveRoute = (state: State): { name: string; params?: object } => {\n const route =\n typeof state.index === 'number'\n ? state.routes[state.index]\n : state.routes[state.routes.length - 1];\n\n if (route.state) {\n return getActiveRoute(route.state);\n }\n\n return route;\n};\n\n/**\n * Utility to serialize a navigation state object to a path string.\n *\n * @example\n * ```js\n * getPathFromState(\n * {\n * routes: [\n * {\n * name: 'Chat',\n * params: { author: 'Jane', id: 42 },\n * },\n * ],\n * },\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * stringify: { author: author => author.toLowerCase() }\n * }\n * }\n * }\n * )\n * ```\n *\n * @param state Navigation state to serialize.\n * @param options Extra options to fine-tune how to serialize the path.\n * @returns Path representing the state, e.g. /foo/bar?count=42.\n */\nexport default function getPathFromState(\n state: State,\n options?: Options\n): string {\n if (state == null) {\n throw Error(\n \"Got 'undefined' for the navigation state. You must pass a valid state object.\"\n );\n }\n\n if (options) {\n validatePathConfig(options);\n }\n\n // Create a normalized configs object which will be easier to use\n const configs: Record = options?.screens\n ? createNormalizedConfigs(options?.screens)\n : {};\n\n let path = '/';\n let current: State | undefined = state;\n\n const allParams: Record = {};\n\n while (current) {\n let index = typeof current.index === 'number' ? current.index : 0;\n let route = current.routes[index] as Route & {\n state?: State;\n };\n\n let pattern: string | undefined;\n\n let focusedParams: Record | undefined;\n let focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n\n // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined\n let nestedRouteNames = [];\n\n let hasNext = true;\n\n while (route.name in currentOptions && hasNext) {\n pattern = currentOptions[route.name].pattern;\n\n nestedRouteNames.push(route.name);\n\n if (route.params) {\n const stringify = currentOptions[route.name]?.stringify;\n\n const currentParams = fromEntries(\n Object.entries(route.params).map(([key, value]) => [\n key,\n stringify?.[key] ? stringify[key](value) : String(value),\n ])\n );\n\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n\n if (focusedRoute === route) {\n // If this is the focused route, keep the params for later use\n // We save it here since it's been stringified already\n focusedParams = { ...currentParams };\n\n pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n // eslint-disable-next-line no-loop-func\n .forEach((p) => {\n const name = getParamName(p);\n\n // Remove the params present in the pattern since we'll only use the rest for query string\n if (focusedParams) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[name];\n }\n });\n }\n }\n\n // If there is no `screens` property or no nested state, we return pattern\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index =\n typeof route.state.index === 'number'\n ? route.state.index\n : route.state.routes.length - 1;\n\n const nextRoute = route.state.routes[index];\n const nestedConfig = currentOptions[route.name].screens;\n\n // if there is config for next route name, we go deeper\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute as Route & { state?: State };\n currentOptions = nestedConfig;\n } else {\n // If not, there is no sense in going deeper in config\n hasNext = false;\n }\n }\n }\n\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n\n if (currentOptions[route.name] !== undefined) {\n path += pattern\n .split('/')\n .map((p) => {\n const name = getParamName(p);\n\n // We don't know what to show for wildcard patterns\n // Showing the route name seems ok, though whatever we show here will be incorrect\n // Since the page doesn't actually exist\n if (p === '*') {\n return route.name;\n }\n\n // If the path has a pattern for a param, put the param in the path\n if (p.startsWith(':')) {\n const value = allParams[name];\n\n if (value === undefined && p.endsWith('?')) {\n // Optional params without value assigned in route.params should be ignored\n return '';\n }\n\n return encodeURIComponent(value);\n }\n\n return encodeURIComponent(p);\n })\n .join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (let param in focusedParams) {\n if (focusedParams[param] === 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[param];\n }\n }\n\n const query = queryString.stringify(focusedParams, { sort: false });\n\n if (query) {\n path += `?${query}`;\n }\n }\n\n current = route.state;\n }\n\n // Remove multiple as well as trailing slashes\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n\n return path;\n}\n\nconst getParamName = (pattern: string) =>\n pattern.replace(/^:/, '').replace(/\\?$/, '');\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst createConfigItem = (\n config: PathConfig | string,\n parentPattern?: string\n): ConfigItem => {\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n\n return { pattern };\n }\n\n // If an object is specified as the value (e.g. Foo: { ... }),\n // It can have `path` property and `screens` prop which has nested configs\n let pattern: string | undefined;\n\n if (config.exact && config.path === undefined) {\n throw new Error(\n \"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\"\n );\n }\n\n pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n const screens = config.screens\n ? createNormalizedConfigs(config.screens, pattern)\n : undefined;\n\n return {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern: pattern?.split('/').filter(Boolean).join('/'),\n stringify: config.stringify,\n screens,\n };\n};\n\nconst createNormalizedConfigs = (\n options: PathConfigMap,\n pattern?: string\n): Record =>\n fromEntries(\n Object.entries(options).map(([name, c]) => {\n const result = createConfigItem(c, pattern);\n\n return [name, result];\n })\n );\n","import type {\n InitialState,\n NavigationState,\n PartialState,\n} from '@react-navigation/routers';\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\n\nimport findFocusedRoute from './findFocusedRoute';\nimport type { PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options = {\n initialRouteName?: string;\n screens: PathConfigMap;\n};\n\ntype ParseConfig = Record any>;\n\ntype RouteConfig = {\n screen: string;\n regex?: RegExp;\n path: string;\n pattern: string;\n routeNames: string[];\n parse?: ParseConfig;\n};\n\ntype InitialRouteConfig = {\n initialRouteName: string;\n parentScreens: string[];\n};\n\ntype ResultState = PartialState & {\n state?: ResultState;\n};\n\ntype ParsedRoute = {\n name: string;\n path?: string;\n params?: Record | undefined;\n};\n\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath(\n path: string,\n options?: Options\n): ResultState | undefined {\n if (options) {\n validatePathConfig(options);\n }\n\n let initialRoutes: InitialRouteConfig[] = [];\n\n if (options?.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: [],\n });\n }\n\n const screens = options?.screens;\n\n let remaining = path\n .replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n const name = decodeURIComponent(segment);\n return { name };\n });\n\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = ([] as RouteConfig[])\n .concat(\n ...Object.keys(screens).map((key) =>\n createNormalizedConfigs(\n key,\n screens as PathConfigMap,\n [],\n initialRoutes,\n []\n )\n )\n )\n .sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce>((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects =\n a.length > b.length\n ? b.every((it, i) => a[i] === it)\n : a.every((it, i) => b[i] === it);\n\n if (!intersects) {\n throw new Error(\n `Found conflicting screens with the same pattern. The pattern '${\n config.pattern\n }' resolves to both '${a.join(' > ')}' and '${b.join(\n ' > '\n )}'. Patterns must be unique and cannot resolve to more than one screen.`\n );\n }\n }\n\n return Object.assign(acc, {\n [config.pattern]: config,\n });\n }, {});\n\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(\n (config) =>\n config.path === '' &&\n config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n (name) => !configs.find((c) => c.screen === name)?.path\n )\n );\n\n if (match) {\n return createNestedStateObject(\n path,\n match.routeNames.map((name) => ({ name })),\n initialRoutes,\n configs\n );\n }\n\n return undefined;\n }\n\n let result: PartialState | undefined;\n let current: PartialState | undefined;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const { routes, remainingPath } = matchAgainstConfigs(\n remaining,\n configs.map((c) => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,\n }))\n );\n\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n\n if (current == null || result == null) {\n return undefined;\n }\n\n return result;\n}\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {\n let routes: ParsedRoute[] | undefined;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n const matchedParams = config.pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce>(\n (acc, p, i) =>\n Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match![(i + 1) * 2].replace(/\\//, ''),\n }),\n {}\n );\n\n routes = config.routeNames.map((name) => {\n const config = configs.find((c) => c.screen === name);\n const params = config?.path\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce>((acc, p) => {\n const value = matchedParams[p];\n\n if (value) {\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = config.parse?.[key] ? config.parse[key](value) : value;\n }\n\n return acc;\n }, {});\n\n if (params && Object.keys(params).length) {\n return { name, params };\n }\n\n return { name };\n });\n\n remainingPath = remainingPath.replace(match[1], '');\n\n break;\n }\n }\n\n return { routes, remainingPath };\n};\n\nconst createNormalizedConfigs = (\n screen: string,\n routeConfig: PathConfigMap,\n routeNames: string[] = [],\n initials: InitialRouteConfig[],\n parentScreens: string[],\n parentPattern?: string\n): RouteConfig[] => {\n const configs: RouteConfig[] = [];\n\n routeNames.push(screen);\n\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n\n if (typeof config === 'string') {\n // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n\n configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern: string | undefined;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\n if (config.exact && config.path === undefined) {\n throw new Error(\n \"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\"\n );\n }\n\n pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n configs.push(\n createConfigItem(\n screen,\n routeNames,\n pattern!,\n config.path,\n config.parse\n )\n );\n }\n\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens,\n });\n }\n\n Object.keys(config.screens).forEach((nestedConfig) => {\n const result = createNormalizedConfigs(\n nestedConfig,\n config.screens as PathConfigMap,\n routeNames,\n initials,\n [...parentScreens],\n pattern ?? parentPattern\n );\n\n configs.push(...result);\n });\n }\n }\n\n routeNames.pop();\n\n return configs;\n};\n\nconst createConfigItem = (\n screen: string,\n routeNames: string[],\n pattern: string,\n path: string,\n parse?: ParseConfig\n): RouteConfig => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n\n const regex = pattern\n ? new RegExp(\n `^(${pattern\n .split('/')\n .map((it) => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n })\n .join('')})`\n )\n : undefined;\n\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse,\n };\n};\n\nconst findParseConfigForRoute = (\n routeName: string,\n flatConfig: RouteConfig[]\n): ParseConfig | undefined => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (\n routeName: string,\n parentScreens: string[],\n initialRoutes: InitialRouteConfig[]\n): string | undefined => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName\n ? config.initialRouteName\n : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (\n initialRoute: string | undefined,\n route: ParsedRoute,\n isEmpty: boolean\n): InitialState => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, route],\n };\n } else {\n return {\n routes: [route],\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, { ...route, state: { routes: [] } }],\n };\n } else {\n return {\n routes: [{ ...route, state: { routes: [] } }],\n };\n }\n }\n};\n\nconst createNestedStateObject = (\n path: string,\n routes: ParsedRoute[],\n initialRoutes: InitialRouteConfig[],\n flatConfig?: RouteConfig[]\n) => {\n let state: InitialState;\n let route = routes.shift() as ParsedRoute;\n const parentScreens: string[] = [];\n\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n parentScreens.push(route.name);\n\n state = createStateObject(initialRoute, route, routes.length === 0);\n\n if (routes.length > 0) {\n let nestedState = state;\n\n while ((route = routes.shift() as ParsedRoute)) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n const nestedStateIndex =\n nestedState.index || nestedState.routes.length - 1;\n\n nestedState.routes[nestedStateIndex].state = createStateObject(\n initialRoute,\n route,\n routes.length === 0\n );\n\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex]\n .state as InitialState;\n }\n\n parentScreens.push(route.name);\n }\n }\n\n route = findFocusedRoute(state) as ParsedRoute;\n route.path = path;\n\n const params = parseQueryParams(\n path,\n flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined\n );\n\n if (params) {\n route.params = { ...route.params, ...params };\n }\n\n return state;\n};\n\nconst parseQueryParams = (\n path: string,\n parseConfig?: Record any>\n) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n\n if (parseConfig) {\n Object.keys(params).forEach((name) => {\n if (\n Object.hasOwnProperty.call(parseConfig, name) &&\n typeof params[name] === 'string'\n ) {\n params[name] = parseConfig[name](params[name] as string);\n }\n });\n }\n\n return Object.keys(params).length ? params : undefined;\n};\n","export { default as BaseNavigationContainer } from './BaseNavigationContainer';\nexport { default as createNavigationContainerRef } from './createNavigationContainerRef';\nexport { default as createNavigatorFactory } from './createNavigatorFactory';\nexport { default as CurrentRenderContext } from './CurrentRenderContext';\nexport { default as findFocusedRoute } from './findFocusedRoute';\nexport { default as getActionFromState } from './getActionFromState';\nexport { default as getFocusedRouteNameFromRoute } from './getFocusedRouteNameFromRoute';\nexport { default as getPathFromState } from './getPathFromState';\nexport { default as getStateFromPath } from './getStateFromPath';\nexport { default as NavigationContainerRefContext } from './NavigationContainerRefContext';\nexport { default as NavigationContext } from './NavigationContext';\nexport { default as NavigationHelpersContext } from './NavigationHelpersContext';\nexport { default as NavigationRouteContext } from './NavigationRouteContext';\nexport { default as PreventRemoveContext } from './PreventRemoveContext';\nexport { default as PreventRemoveProvider } from './PreventRemoveProvider';\nexport * from './types';\nexport { default as useFocusEffect } from './useFocusEffect';\nexport { default as useIsFocused } from './useIsFocused';\nexport { default as useNavigation } from './useNavigation';\nexport { default as useNavigationBuilder } from './useNavigationBuilder';\nexport { default as useNavigationContainerRef } from './useNavigationContainerRef';\nexport { default as useNavigationState } from './useNavigationState';\nexport { default as UNSTABLE_usePreventRemove } from './usePreventRemove';\nexport { default as usePreventRemoveContext } from './usePreventRemoveContext';\nexport { default as useRoute } from './useRoute';\nexport { default as validatePathConfig } from './validatePathConfig';\nexport * from '@react-navigation/routers';\n","/**\n * Compare two arrays with primitive values as the content.\n * We need to make sure that both values and order match.\n */\nexport default function isArrayEqual(a: any[], b: any[]) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n return a.every((it, index) => it === b[index]);\n}\n","/**\n * Compare two records with primitive values as the content.\n */\nexport default function isRecordEqual(\n a: Record,\n b: Record\n) {\n if (a === b) {\n return true;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n return aKeys.every((key) => a[key] === b[key]);\n}\n","import type {\n DefaultRouterOptions,\n InitialState,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport type * as React from 'react';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace ReactNavigation {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface RootParamList {}\n }\n}\n\ntype Keyof = Extract;\n\nexport type DefaultNavigatorOptions<\n ParamList extends ParamListBase,\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = DefaultRouterOptions> & {\n /**\n * Optional ID for the navigator. Can be used with `navigation.getParent(id)` to refer to a parent.\n */\n id?: string;\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n /**\n * Event listeners for all the screens in the navigator.\n */\n screenListeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n /**\n * Default options for all screens under this navigator.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenOptions);\n};\n\nexport type EventMapBase = Record<\n string,\n { data?: any; canPreventDefault?: boolean }\n>;\n\nexport type EventMapCore = {\n focus: { data: undefined };\n blur: { data: undefined };\n state: { data: { state: State } };\n beforeRemove: { data: { action: NavigationAction }; canPreventDefault: true };\n};\n\nexport type EventArg<\n EventName extends string,\n CanPreventDefault extends boolean | undefined = false,\n Data = undefined\n> = {\n /**\n * Type of the event (e.g. `focus`, `blur`)\n */\n readonly type: EventName;\n readonly target?: string;\n} & (CanPreventDefault extends true\n ? {\n /**\n * Whether `event.preventDefault()` was called on this event object.\n */\n readonly defaultPrevented: boolean;\n /**\n * Prevent the default action which happens on this event.\n */\n preventDefault(): void;\n }\n : {}) &\n (undefined extends Data\n ? { readonly data?: Readonly }\n : { readonly data: Readonly });\n\nexport type EventListenerCallback<\n EventMap extends EventMapBase,\n EventName extends keyof EventMap\n> = (\n e: EventArg<\n Extract,\n EventMap[EventName]['canPreventDefault'],\n EventMap[EventName]['data']\n >\n) => void;\n\nexport type EventConsumer = {\n /**\n * Subscribe to events from the parent navigator.\n *\n * @param type Type of the event (e.g. `focus`, `blur`)\n * @param callback Callback listener which is executed upon receiving the event.\n */\n addListener>(\n type: EventName,\n callback: EventListenerCallback\n ): () => void;\n removeListener>(\n type: EventName,\n callback: EventListenerCallback\n ): void;\n};\n\nexport type EventEmitter = {\n /**\n * Emit an event to child screens.\n *\n * @param options.type Type of the event (e.g. `focus`, `blur`)\n * @param [options.data] Optional information regarding the event.\n * @param [options.target] Key of the target route which should receive the event.\n * If not specified, all routes receive the event.\n */\n emit>(\n options: {\n type: EventName;\n target?: string;\n } & (EventMap[EventName]['canPreventDefault'] extends true\n ? { canPreventDefault: true }\n : {}) &\n (undefined extends EventMap[EventName]['data']\n ? { data?: EventMap[EventName]['data'] }\n : { data: EventMap[EventName]['data'] })\n ): EventArg<\n EventName,\n EventMap[EventName]['canPreventDefault'],\n EventMap[EventName]['data']\n >;\n};\n\nexport class PrivateValueStore {\n /**\n * UGLY HACK! DO NOT USE THE TYPE!!!\n *\n * TypeScript requires a type to be used to be able to infer it.\n * The type should exist as its own without any operations such as union.\n * So we need to figure out a way to store this type in a property.\n * The problem with a normal property is that it shows up in intelliSense.\n * Adding private keyword works, but the annotation is stripped away in declaration.\n * Turns out if we use an empty string, it doesn't show up in intelliSense.\n */\n protected ''?: T;\n}\n\ntype NavigationHelpersCommon<\n ParamList extends ParamListBase,\n State extends NavigationState = NavigationState\n> = {\n /**\n * Dispatch an action or an update function to the router.\n * The update function will receive the current state,\n *\n * @param action Action object or update function.\n */\n dispatch(\n action: NavigationAction | ((state: State) => NavigationAction)\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @param name Name of the route to navigate to.\n * @param [params] Params object for the route.\n */\n navigate(\n ...args: // this first condition allows us to iterate over a union type\n // This is to avoid getting a union of all the params from `ParamList[RouteName]`,\n // which will get our types all mixed up if a union RouteName is passed in.\n RouteName extends unknown\n ? // This condition checks if the params are optional,\n // which means it's either undefined or a union with undefined\n undefined extends ParamList[RouteName]\n ?\n | [screen: RouteName] // if the params are optional, we don't have to provide it\n | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n : never\n ): void;\n\n /**\n * Navigate to a route in current navigation tree.\n *\n * @param route Object with `key` or `name` for the route to navigate to, and a `params` object.\n */\n navigate(\n options: RouteName extends unknown\n ?\n | { key: string; params?: ParamList[RouteName]; merge?: boolean }\n | {\n name: RouteName;\n key?: string;\n params: ParamList[RouteName];\n merge?: boolean;\n }\n : never\n ): void;\n\n /**\n * Reset the navigation state to the provided state.\n *\n * @param state Navigation state object.\n */\n reset(state: PartialState | State): void;\n\n /**\n * Go back to the previous route in history.\n */\n goBack(): void;\n\n /**\n * Check if the screen is focused. The method returns `true` if focused, `false` otherwise.\n * Note that this method doesn't re-render screen when the focus changes. So don't use it in `render`.\n * To get notified of focus changes, use `addListener('focus', cb)` and `addListener('blur', cb)`.\n * To conditionally render content based on focus state, use the `useIsFocused` hook.\n */\n isFocused(): boolean;\n\n /**\n * Check if dispatching back action will be handled by navigation.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n canGoBack(): boolean;\n\n /**\n * Returns the name of the navigator specified in the `name` prop.\n * If no name is specified, returns `undefined`.\n */\n getId(): string | undefined;\n\n /**\n * Returns the navigation helpers from a parent navigator based on the ID.\n * If an ID is provided, the navigation helper from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation helper from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: string): T;\n\n /**\n * Returns the navigator's state.\n * Note that this method doesn't re-render screen when the result changes. So don't use it in `render`.\n */\n getState(): State;\n} & PrivateValueStore<[ParamList, unknown, unknown]>;\n\nexport type NavigationHelpers<\n ParamList extends ParamListBase,\n EventMap extends EventMapBase = {}\n> = NavigationHelpersCommon &\n EventEmitter & {\n /**\n * Update the param object for the route.\n * The new params will be shallow merged with the old one.\n *\n * @param params Params object for the current route.\n */\n setParams(\n params: Partial\n ): void;\n };\n\nexport type NavigationContainerProps = {\n /**\n * Initial navigation state for the child navigators.\n */\n initialState?: InitialState;\n /**\n * Callback which is called with the latest navigation state when it changes.\n */\n onStateChange?: (state: NavigationState | undefined) => void;\n /**\n * Callback which is called when an action is not handled.\n */\n onUnhandledAction?: (action: NavigationAction) => void;\n /**\n * Whether this navigation container should be independent of parent containers.\n * If this is not set to `true`, this container cannot be nested inside another container.\n * Setting it to `true` disconnects any children navigators from parent container.\n */\n independent?: boolean;\n /**\n * Children elements to render.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationProp<\n ParamList extends {},\n RouteName extends keyof ParamList = Keyof,\n NavigatorID extends string | undefined = undefined,\n State extends NavigationState = NavigationState,\n ScreenOptions extends {} = {},\n EventMap extends EventMapBase = {}\n> = Omit, 'getParent'> & {\n /**\n * Returns the navigation prop from a parent navigator based on the ID.\n * If an ID is provided, the navigation prop from the parent navigator with matching ID (including current) will be returned.\n * If no ID is provided, the navigation prop from the immediate parent navigator will be returned.\n *\n * @param id Optional ID of a parent navigator.\n */\n getParent | undefined>(id?: NavigatorID): T;\n\n /**\n * Update the param object for the route.\n * The new params will be shallow merged with the old one.\n *\n * @param params Params object for the current route.\n */\n setParams(\n params: ParamList[RouteName] extends undefined\n ? undefined\n : Partial\n ): void;\n\n /**\n * Update the options for the route.\n * The options object will be shallow merged with default options object.\n *\n * @param options Options object for the route.\n */\n setOptions(options: Partial): void;\n} & EventConsumer> &\n PrivateValueStore<[ParamList, RouteName, EventMap]>;\n\nexport type RouteProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = Keyof\n> = Route, ParamList[RouteName]>;\n\nexport type CompositeNavigationProp<\n A extends NavigationProp,\n B extends NavigationHelpersCommon\n> = Omit> &\n NavigationProp<\n /**\n * Param list from both navigation objects needs to be combined\n * For example, we should be able to navigate to screens in both A and B\n */\n (A extends NavigationHelpersCommon ? T : never) &\n (B extends NavigationHelpersCommon ? U : never),\n /**\n * The route name should refer to the route name specified in the first type\n * Ideally it should work for any of them, but it's not possible to infer that way\n */\n A extends NavigationProp ? R : string,\n /**\n * ID from both navigation objects needs to be combined for `getParent`\n */\n | (A extends NavigationProp ? I : never)\n | (B extends NavigationProp ? J : never),\n /**\n * The type of state should refer to the state specified in the first type\n */\n A extends NavigationProp ? S : NavigationState,\n /**\n * Screen options from both navigation objects needs to be combined\n * This allows typechecking `setOptions`\n */\n (A extends NavigationProp ? O : {}) &\n (B extends NavigationProp ? P : {}),\n /**\n * Event consumer config should refer to the config specified in the first type\n * This allows typechecking `addListener`/`removeListener`\n */\n A extends NavigationProp ? E : {}\n >;\n\nexport type CompositeScreenProps<\n A extends {\n navigation: NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n any,\n any,\n any\n >;\n route: RouteProp;\n },\n B extends {\n navigation: NavigationHelpersCommon;\n }\n> = {\n navigation: CompositeNavigationProp;\n route: A['route'];\n};\n\nexport type Descriptor<\n ScreenOptions extends {},\n Navigation extends NavigationProp,\n Route extends RouteProp\n> = {\n /**\n * Render the component associated with this route.\n */\n render(): JSX.Element;\n\n /**\n * Options for the route.\n */\n options: ScreenOptions;\n\n /**\n * Route object for the screen\n */\n route: Route;\n\n /**\n * Navigation object for the screen\n */\n navigation: Navigation;\n};\n\nexport type ScreenListeners<\n State extends NavigationState,\n EventMap extends EventMapBase\n> = Partial<{\n [EventName in keyof (EventMap & EventMapCore)]: EventListenerCallback<\n EventMap,\n EventName\n >;\n}>;\n\ntype ScreenComponentType<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> =\n | React.ComponentType<{\n route: RouteProp;\n navigation: any;\n }>\n | React.ComponentType<{}>;\n\nexport type RouteConfigComponent<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> =\n | {\n /**\n * React component to render for this screen.\n */\n component: ScreenComponentType;\n getComponent?: never;\n children?: never;\n }\n | {\n /**\n * Lazily get a React component to render for this screen.\n */\n getComponent: () => ScreenComponentType;\n component?: never;\n children?: never;\n }\n | {\n /**\n * Render callback to render content of this screen.\n */\n children: (props: {\n route: RouteProp;\n navigation: any;\n }) => React.ReactNode;\n component?: never;\n getComponent?: never;\n };\n\nexport type RouteConfig<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList,\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = {\n /**\n * Optional key for this screen. This doesn't need to be unique.\n * If the key changes, existing screens with this name will be removed or reset.\n * Useful when we have some common screens and have conditional rendering.\n */\n navigationKey?: string;\n\n /**\n * Route name of this screen.\n */\n name: RouteName;\n\n /**\n * Navigator options for this screen.\n */\n options?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenOptions);\n\n /**\n * Event listeners for this screen.\n */\n listeners?:\n | ScreenListeners\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenListeners);\n\n /**\n * Function to return an unique ID for this screen.\n * Receives an object with the route params.\n * For a given screen name, there will always be only one screen corresponding to an ID.\n * If `undefined` is returned, it acts same as no `getId` being specified.\n */\n getId?: ({ params }: { params: ParamList[RouteName] }) => string | undefined;\n\n /**\n * Initial params object for the route.\n */\n initialParams?: Partial;\n} & RouteConfigComponent;\n\nexport type RouteGroupConfig<\n ParamList extends ParamListBase,\n ScreenOptions extends {}\n> = {\n /**\n * Optional key for the screens in this group.\n * If the key changes, all existing screens in this group will be removed or reset.\n */\n navigationKey?: string;\n\n /**\n * Navigator options for this screen.\n */\n screenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenOptions);\n /**\n * Children React Elements to extract the route configuration from.\n * Only `Screen`, `Group` and `React.Fragment` are supported as children.\n */\n children: React.ReactNode;\n};\n\nexport type NavigationContainerEventMap = {\n /**\n * Event which fires when the navigation state changes.\n */\n state: {\n data: {\n /**\n * The updated state object after the state change.\n */\n state: NavigationState | PartialState | undefined;\n };\n };\n /**\n * Event which fires when current options changes.\n */\n options: { data: { options: object } };\n /**\n * Event which fires when an action is dispatched.\n * Only intended for debugging purposes, don't use it for app logic.\n * This event will be emitted before state changes have been applied.\n */\n __unsafe_action__: {\n data: {\n /**\n * The action object which was dispatched.\n */\n action: NavigationAction;\n /**\n * Whether the action was a no-op, i.e. resulted any state changes.\n */\n noop: boolean;\n /**\n * Stack trace of the action, this will only be available during development.\n */\n stack: string | undefined;\n };\n };\n};\n\nexport type NavigationContainerRef =\n NavigationHelpers &\n EventConsumer & {\n /**\n * Reset the navigation state of the root navigator to the provided state.\n *\n * @param state Navigation state object.\n */\n resetRoot(state?: PartialState | NavigationState): void;\n /**\n * Get the rehydrated navigation state of the navigation tree.\n */\n getRootState(): NavigationState;\n /**\n * Get the currently focused navigation route.\n */\n getCurrentRoute(): Route | undefined;\n /**\n * Get the currently focused route's options.\n */\n getCurrentOptions(): object | undefined;\n /**\n * Whether the navigation container is ready to handle actions.\n */\n isReady(): boolean;\n };\n\nexport type NavigationContainerRefWithCurrent =\n NavigationContainerRef & {\n current: NavigationContainerRef | null;\n };\n\nexport type TypedNavigator<\n ParamList extends ParamListBase,\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase,\n Navigator extends React.ComponentType\n> = {\n /**\n * Navigator component which manages the child screens.\n */\n Navigator: React.ComponentType<\n Omit<\n React.ComponentProps,\n keyof DefaultNavigatorOptions\n > &\n DefaultNavigatorOptions\n >;\n /**\n * Component used for grouping multiple route configuration.\n */\n Group: React.ComponentType>;\n /**\n * Component used for specifying route configuration.\n */\n Screen: (\n _: RouteConfig\n ) => null;\n};\n\nexport type NavigatorScreenParams<\n ParamList,\n State extends NavigationState = NavigationState\n> =\n | {\n screen?: never;\n params?: never;\n initial?: never;\n path?: string;\n state: PartialState | State | undefined;\n }\n | {\n [RouteName in keyof ParamList]: undefined extends ParamList[RouteName]\n ? {\n screen: RouteName;\n params?: ParamList[RouteName];\n initial?: boolean;\n path?: string;\n state?: never;\n }\n : {\n screen: RouteName;\n params: ParamList[RouteName];\n initial?: boolean;\n path?: string;\n state?: never;\n };\n }[keyof ParamList];\n\nexport type PathConfig = {\n path?: string;\n exact?: boolean;\n parse?: Record any>;\n stringify?: Record string>;\n screens?: PathConfigMap;\n initialRouteName?: keyof ParamList;\n};\n\nexport type PathConfigMap = {\n [RouteName in keyof ParamList]?: NonNullable<\n ParamList[RouteName]\n > extends NavigatorScreenParams\n ? string | PathConfig\n : string | Omit, 'screens' | 'initialRouteName'>;\n};\n","import * as React from 'react';\n\nimport type { ListenerMap } from './NavigationBuilderContext';\n\n/**\n * Hook which lets child navigators add action listeners.\n */\nexport default function useChildListeners() {\n const { current: listeners } = React.useRef<{\n [K in keyof ListenerMap]: ListenerMap[K][];\n }>({\n action: [],\n focus: [],\n });\n\n const addListener = React.useCallback(\n (type: T, listener: ListenerMap[T]) => {\n listeners[type].push(listener);\n\n let removed = false;\n return () => {\n const index = listeners[type].indexOf(listener);\n\n if (!removed && index > -1) {\n removed = true;\n listeners[type].splice(index, 1);\n }\n };\n },\n [listeners]\n );\n\n return {\n listeners,\n addListener,\n };\n}\n","import * as React from 'react';\n\ntype Render = (children: React.ReactNode) => JSX.Element;\n\ntype Props = {\n render: Render;\n children: React.ReactNode;\n};\n\nconst NavigationContent = ({ render, children }: Props) => {\n return render(children);\n};\n\nexport default function useComponent(render: Render) {\n const renderRef = React.useRef(render);\n\n // Normally refs shouldn't be mutated in render\n // But we return a component which will be rendered\n // So it's just for immediate consumption\n renderRef.current = render;\n\n React.useEffect(() => {\n renderRef.current = null;\n });\n\n return React.useRef(({ children }: { children: React.ReactNode }) => {\n const render = renderRef.current;\n\n if (render === null) {\n throw new Error(\n 'The returned component must be rendered in the same render phase as the hook.'\n );\n }\n\n return {children};\n }).current;\n}\n","import type { NavigationState, ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport CurrentRenderContext from './CurrentRenderContext';\nimport type {\n Descriptor,\n NavigationHelpers,\n NavigationProp,\n RouteProp,\n} from './types';\n\ntype Options = {\n state: NavigationState;\n navigation: NavigationHelpers;\n descriptors: Record<\n string,\n Descriptor, RouteProp>\n >;\n};\n\n/**\n * Write the current options, so that server renderer can get current values\n * Mutating values like this is not safe in async mode, but it doesn't apply to SSR\n */\nexport default function useCurrentRender({\n state,\n navigation,\n descriptors,\n}: Options) {\n const current = React.useContext(CurrentRenderContext);\n\n if (current && navigation.isFocused()) {\n current.options = descriptors[state.routes[state.index].key].options;\n }\n}\n","import type {\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n AddKeyedListener,\n AddListener,\n} from './NavigationBuilderContext';\nimport NavigationContext from './NavigationContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport SceneView from './SceneView';\nimport type {\n Descriptor,\n EventMapBase,\n NavigationHelpers,\n NavigationProp,\n RouteConfig,\n RouteProp,\n} from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\nimport useNavigationCache from './useNavigationCache';\nimport useRouteCache from './useRouteCache';\n\nexport type ScreenConfigWithParent<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = {\n keys: (string | undefined)[];\n options: (ScreenOptionsOrCallback | undefined)[] | undefined;\n props: RouteConfig;\n};\n\ntype ScreenOptionsOrCallback =\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n }) => ScreenOptions);\n\ntype Options<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n> = {\n state: State;\n screens: Record<\n string,\n ScreenConfigWithParent\n >;\n navigation: NavigationHelpers;\n screenOptions?: ScreenOptionsOrCallback;\n defaultScreenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n options: ScreenOptions;\n }) => ScreenOptions);\n onAction: (action: NavigationAction) => boolean;\n getState: () => State;\n setState: (state: State) => void;\n addListener: AddListener;\n addKeyedListener: AddKeyedListener;\n onRouteFocus: (key: string) => void;\n router: Router;\n emitter: NavigationEventEmitter;\n};\n\n/**\n * Hook to create descriptor objects for the child routes.\n *\n * A descriptor object provides 3 things:\n * - Helper method to render a screen\n * - Options specified by the screen for the navigator\n * - Navigation object intended for the route\n */\nexport default function useDescriptors<\n State extends NavigationState,\n ActionHelpers extends Record void>,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>({\n state,\n screens,\n navigation,\n screenOptions,\n defaultScreenOptions,\n onAction,\n getState,\n setState,\n addListener,\n addKeyedListener,\n onRouteFocus,\n router,\n emitter,\n}: Options) {\n const [options, setOptions] = React.useState>({});\n const { onDispatchAction, onOptionsChange, stackRef } = React.useContext(\n NavigationBuilderContext\n );\n\n const context = React.useMemo(\n () => ({\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n }),\n [\n navigation,\n onAction,\n addListener,\n addKeyedListener,\n onRouteFocus,\n onDispatchAction,\n onOptionsChange,\n stackRef,\n ]\n );\n\n const navigations = useNavigationCache({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter,\n });\n\n const routes = useRouteCache(state.routes);\n\n return routes.reduce<\n Record<\n string,\n Descriptor<\n ScreenOptions,\n NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n State,\n ScreenOptions,\n EventMap\n > &\n ActionHelpers,\n RouteProp\n >\n >\n >((acc, route, i) => {\n const config = screens[route.name];\n const screen = config.props;\n const navigation = navigations[route.key];\n\n const optionsList = [\n // The default `screenOptions` passed to the navigator\n screenOptions,\n // The `screenOptions` props passed to `Group` elements\n ...((config.options\n ? config.options.filter(Boolean)\n : []) as ScreenOptionsOrCallback[]),\n // The `options` prop passed to `Screen` elements,\n screen.options,\n // The options set via `navigation.setOptions`\n options[route.key],\n ];\n\n const customOptions = optionsList.reduce(\n (acc, curr) =>\n Object.assign(\n acc,\n // @ts-expect-error: we check for function but TS still complains\n typeof curr !== 'function' ? curr : curr({ route, navigation })\n ),\n {} as ScreenOptions\n );\n\n const mergedOptions = {\n ...(typeof defaultScreenOptions === 'function'\n ? // @ts-expect-error: ts gives incorrect error here\n defaultScreenOptions({\n route,\n navigation,\n options: customOptions,\n })\n : defaultScreenOptions),\n ...customOptions,\n };\n\n const clearOptions = () =>\n setOptions((o) => {\n if (route.key in o) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [route.key]: _, ...rest } = o;\n return rest;\n }\n\n return o;\n });\n\n acc[route.key] = {\n route,\n // @ts-expect-error: it's missing action helpers, fix later\n navigation,\n render() {\n return (\n \n \n \n \n \n \n \n );\n },\n options: mergedOptions as ScreenOptions,\n };\n\n return acc;\n }, {});\n}\n","import * as React from 'react';\n\nimport type { EventArg, EventConsumer, EventEmitter } from './types';\n\nexport type NavigationEventEmitter> =\n EventEmitter & {\n create: (target: string) => EventConsumer;\n };\n\ntype Listeners = ((e: any) => void)[];\n\n/**\n * Hook to manage the event system used by the navigator to notify screens of various events.\n */\nexport default function useEventEmitter>(\n listen?: (e: any) => void\n): NavigationEventEmitter {\n const listenRef = React.useRef(listen);\n\n React.useEffect(() => {\n listenRef.current = listen;\n });\n\n const listeners = React.useRef>>(\n Object.create(null)\n );\n\n const create = React.useCallback((target: string) => {\n const removeListener = (type: string, callback: (data: any) => void) => {\n const callbacks = listeners.current[type]\n ? listeners.current[type][target]\n : undefined;\n\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback);\n\n if (index > -1) {\n callbacks.splice(index, 1);\n }\n };\n\n const addListener = (type: string, callback: (data: any) => void) => {\n listeners.current[type] = listeners.current[type] || {};\n listeners.current[type][target] = listeners.current[type][target] || [];\n listeners.current[type][target].push(callback);\n\n let removed = false;\n return () => {\n // Prevent removing other listeners when unsubscribing same listener multiple times\n if (!removed) {\n removed = true;\n removeListener(type, callback);\n }\n };\n };\n\n return {\n addListener,\n removeListener,\n };\n }, []);\n\n const emit = React.useCallback(\n ({\n type,\n data,\n target,\n canPreventDefault,\n }: {\n type: string;\n data?: any;\n target?: string;\n canPreventDefault?: boolean;\n }) => {\n const items = listeners.current[type] || {};\n\n // Copy the current list of callbacks in case they are mutated during execution\n const callbacks =\n target !== undefined\n ? items[target]?.slice()\n : ([] as Listeners)\n .concat(...Object.keys(items).map((t) => items[t]))\n .filter((cb, i, self) => self.lastIndexOf(cb) === i);\n\n const event: EventArg = {\n get type() {\n return type;\n },\n };\n\n if (target !== undefined) {\n Object.defineProperty(event, 'target', {\n enumerable: true,\n get() {\n return target;\n },\n });\n }\n\n if (data !== undefined) {\n Object.defineProperty(event, 'data', {\n enumerable: true,\n get() {\n return data;\n },\n });\n }\n\n if (canPreventDefault) {\n let defaultPrevented = false;\n\n Object.defineProperties(event, {\n defaultPrevented: {\n enumerable: true,\n get() {\n return defaultPrevented;\n },\n },\n preventDefault: {\n enumerable: true,\n value() {\n defaultPrevented = true;\n },\n },\n });\n }\n\n listenRef.current?.(event);\n\n callbacks?.forEach((cb) => cb(event));\n\n return event as any;\n },\n []\n );\n\n return React.useMemo(() => ({ create, emit }), [create, emit]);\n}\n","import * as React from 'react';\n\nimport useNavigation from './useNavigation';\n\ntype EffectCallback = () => undefined | void | (() => void);\n\n/**\n * Hook to run an effect in a focused screen, similar to `React.useEffect`.\n * This can be used to perform side-effects such as fetching data or subscribing to events.\n * The passed callback should be wrapped in `React.useCallback` to avoid running the effect too often.\n *\n * @param callback Memoized callback containing the effect, should optionally return a cleanup function.\n */\nexport default function useFocusEffect(effect: EffectCallback) {\n const navigation = useNavigation();\n\n if (arguments[1] !== undefined) {\n const message =\n \"You passed a second argument to 'useFocusEffect', but it only accepts one argument. \" +\n \"If you want to pass a dependency array, you can use 'React.useCallback':\\n\\n\" +\n 'useFocusEffect(\\n' +\n ' React.useCallback(() => {\\n' +\n ' // Your code here\\n' +\n ' }, [depA, depB])\\n' +\n ');\\n\\n' +\n 'See usage guide: https://reactnavigation.org/docs/use-focus-effect';\n\n console.error(message);\n }\n\n React.useEffect(() => {\n let isFocused = false;\n let cleanup: undefined | void | (() => void);\n\n const callback = () => {\n const destroy = effect();\n\n if (destroy === undefined || typeof destroy === 'function') {\n return destroy;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n let message =\n 'An effect function must not return anything besides a function, which is used for clean-up.';\n\n if (destroy === null) {\n message +=\n \" You returned 'null'. If your effect does not require clean-up, return 'undefined' (or nothing).\";\n } else if (typeof (destroy as any).then === 'function') {\n message +=\n \"\\n\\nIt looks like you wrote 'useFocusEffect(async () => ...)' or returned a Promise. \" +\n 'Instead, write the async function inside your effect ' +\n 'and call it immediately:\\n\\n' +\n 'useFocusEffect(\\n' +\n ' React.useCallback(() => {\\n' +\n ' async function fetchData() {\\n' +\n ' // You can await here\\n' +\n ' const response = await MyAPI.getData(someId);\\n' +\n ' // ...\\n' +\n ' }\\n\\n' +\n ' fetchData();\\n' +\n ' }, [someId])\\n' +\n ');\\n\\n' +\n 'See usage guide: https://reactnavigation.org/docs/use-focus-effect';\n } else {\n message += ` You returned '${JSON.stringify(destroy)}'.`;\n }\n\n console.error(message);\n }\n };\n\n // We need to run the effect on intial render/dep changes if the screen is focused\n if (navigation.isFocused()) {\n cleanup = callback();\n isFocused = true;\n }\n\n const unsubscribeFocus = navigation.addListener('focus', () => {\n // If callback was already called for focus, avoid calling it again\n // The focus event may also fire on intial render, so we guard against runing the effect twice\n if (isFocused) {\n return;\n }\n\n if (cleanup !== undefined) {\n cleanup();\n }\n\n cleanup = callback();\n isFocused = true;\n });\n\n const unsubscribeBlur = navigation.addListener('blur', () => {\n if (cleanup !== undefined) {\n cleanup();\n }\n\n cleanup = undefined;\n isFocused = false;\n });\n\n return () => {\n if (cleanup !== undefined) {\n cleanup();\n }\n\n unsubscribeFocus();\n unsubscribeBlur();\n };\n }, [effect, navigation]);\n}\n","import type { NavigationState } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationContext from './NavigationContext';\nimport type { EventMapCore } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\ntype Options = {\n state: State;\n emitter: NavigationEventEmitter>;\n};\n\n/**\n * Hook to take care of emitting `focus` and `blur` events.\n */\nexport default function useFocusEvents({\n state,\n emitter,\n}: Options) {\n const navigation = React.useContext(NavigationContext);\n const lastFocusedKeyRef = React.useRef();\n\n const currentFocusedKey = state.routes[state.index].key;\n\n // When the parent screen changes its focus state, we also need to change child's focus\n // Coz the child screen can't be focused if the parent screen is out of focus\n React.useEffect(\n () =>\n navigation?.addListener('focus', () => {\n lastFocusedKeyRef.current = currentFocusedKey;\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }),\n [currentFocusedKey, emitter, navigation]\n );\n\n React.useEffect(\n () =>\n navigation?.addListener('blur', () => {\n lastFocusedKeyRef.current = undefined;\n emitter.emit({ type: 'blur', target: currentFocusedKey });\n }),\n [currentFocusedKey, emitter, navigation]\n );\n\n React.useEffect(() => {\n const lastFocusedKey = lastFocusedKeyRef.current;\n\n lastFocusedKeyRef.current = currentFocusedKey;\n\n // We wouldn't have `lastFocusedKey` on initial mount\n // Fire focus event for the current route on mount if there's no parent navigator\n if (lastFocusedKey === undefined && !navigation) {\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }\n\n // We should only emit events when the focused key changed and navigator is focused\n // When navigator is not focused, screens inside shouldn't receive focused status either\n if (\n lastFocusedKey === currentFocusedKey ||\n !(navigation ? navigation.isFocused() : true)\n ) {\n return;\n }\n\n if (lastFocusedKey === undefined) {\n // Only fire events after initial mount\n return;\n }\n\n emitter.emit({ type: 'blur', target: lastFocusedKey });\n emitter.emit({ type: 'focus', target: currentFocusedKey });\n }, [currentFocusedKey, emitter, navigation]);\n}\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n FocusedNavigationCallback,\n FocusedNavigationListener,\n} from './NavigationBuilderContext';\nimport type { NavigationHelpers } from './types';\n\ntype Options = {\n navigation: NavigationHelpers;\n focusedListeners: FocusedNavigationListener[];\n};\n\n/**\n * Hook for passing focus callback to children\n */\nexport default function useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners,\n}: Options) {\n const { addListener } = React.useContext(NavigationBuilderContext);\n\n const listener = React.useCallback(\n (callback: FocusedNavigationCallback) => {\n if (navigation.isFocused()) {\n for (const listener of focusedListeners) {\n const { handled, result } = listener(callback);\n\n if (handled) {\n return { handled, result };\n }\n }\n\n return { handled: true, result: callback(navigation) };\n } else {\n return { handled: false, result: null };\n }\n },\n [focusedListeners, navigation]\n );\n\n React.useEffect(\n () => addListener?.('focus', listener),\n [addListener, listener]\n );\n}\n","import * as React from 'react';\nimport { useState } from 'react';\n\nimport useNavigation from './useNavigation';\n\n/**\n * Hook to get the current focus state of the screen. Returns a `true` if screen is focused, otherwise `false`.\n * This can be used if a component needs to render something based on the focus state.\n */\nexport default function useIsFocused(): boolean {\n const navigation = useNavigation();\n const [isFocused, setIsFocused] = useState(navigation.isFocused);\n\n const valueToReturn = navigation.isFocused();\n\n if (isFocused !== valueToReturn) {\n // If the value has changed since the last render, we need to update it.\n // This could happen if we missed an update from the event listeners during re-render.\n // React will process this update immediately, so the old subscription value won't be committed.\n // It is still nice to avoid returning a mismatched value though, so let's override the return value.\n // This is the same logic as in https://github.com/facebook/react/tree/master/packages/use-subscription\n setIsFocused(valueToReturn);\n }\n\n React.useEffect(() => {\n const unsubscribeFocus = navigation.addListener('focus', () =>\n setIsFocused(true)\n );\n\n const unsubscribeBlur = navigation.addListener('blur', () =>\n setIsFocused(false)\n );\n\n return () => {\n unsubscribeFocus();\n unsubscribeBlur();\n };\n }, [navigation]);\n\n React.useDebugValue(valueToReturn);\n\n return valueToReturn;\n}\n","import * as React from 'react';\n\nimport type { KeyedListenerMap } from './NavigationBuilderContext';\n\n/**\n * Hook which lets child navigators add getters to be called for obtaining rehydrated state.\n */\nexport default function useKeyedChildListeners() {\n const { current: keyedListeners } = React.useRef<{\n [K in keyof KeyedListenerMap]: Record<\n string,\n KeyedListenerMap[K] | undefined\n >;\n }>(\n Object.assign(Object.create(null), {\n getState: {},\n beforeRemove: {},\n })\n );\n\n const addKeyedListener = React.useCallback(\n (\n type: T,\n key: string,\n listener: KeyedListenerMap[T]\n ) => {\n // @ts-expect-error: according to ref stated above you can use `key` to index type\n keyedListeners[type][key] = listener;\n\n return () => {\n // @ts-expect-error: according to ref stated above you can use `key` to index type\n keyedListeners[type][key] = undefined;\n };\n },\n [keyedListeners]\n );\n\n return {\n keyedListeners,\n addKeyedListener,\n };\n}\n","import * as React from 'react';\n\nimport NavigationContainerRefContext from './NavigationContainerRefContext';\nimport NavigationContext from './NavigationContext';\nimport type { NavigationProp } from './types';\n\n/**\n * Hook to access the navigation prop of the parent screen anywhere.\n *\n * @returns Navigation prop of the parent screen.\n */\nexport default function useNavigation<\n T = NavigationProp\n>(): T {\n const root = React.useContext(NavigationContainerRefContext);\n const navigation = React.useContext(NavigationContext);\n\n if (navigation === undefined && root === undefined) {\n throw new Error(\n \"Couldn't find a navigation object. Is your component inside NavigationContainer?\"\n );\n }\n\n // FIXME: Figure out a better way to do this\n return (navigation ?? root) as unknown as T;\n}\n","import {\n CommonActions,\n DefaultRouterOptions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n RouterConfigOptions,\n RouterFactory,\n} from '@react-navigation/routers';\nimport * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\nimport Group from './Group';\nimport isArrayEqual from './isArrayEqual';\nimport isRecordEqual from './isRecordEqual';\nimport NavigationHelpersContext from './NavigationHelpersContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport PreventRemoveProvider from './PreventRemoveProvider';\nimport Screen from './Screen';\nimport {\n DefaultNavigatorOptions,\n EventMapBase,\n EventMapCore,\n NavigatorScreenParams,\n PrivateValueStore,\n RouteConfig,\n RouteProp,\n} from './types';\nimport useChildListeners from './useChildListeners';\nimport useComponent from './useComponent';\nimport useCurrentRender from './useCurrentRender';\nimport useDescriptors, { ScreenConfigWithParent } from './useDescriptors';\nimport useEventEmitter from './useEventEmitter';\nimport useFocusedListenersChildrenAdapter from './useFocusedListenersChildrenAdapter';\nimport useFocusEvents from './useFocusEvents';\nimport useKeyedChildListeners from './useKeyedChildListeners';\nimport useNavigationHelpers from './useNavigationHelpers';\nimport useOnAction from './useOnAction';\nimport useOnGetState from './useOnGetState';\nimport useOnRouteFocus from './useOnRouteFocus';\nimport useRegisterNavigator from './useRegisterNavigator';\nimport useScheduleUpdate from './useScheduleUpdate';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype NavigationBuilderOptions = {\n /**\n * Default options specified by the navigator.\n * It receives the custom options in the arguments if a function is specified.\n */\n defaultScreenOptions?:\n | ScreenOptions\n | ((props: {\n route: RouteProp;\n navigation: any;\n options: ScreenOptions;\n }) => ScreenOptions);\n};\n\ntype NavigatorRoute = {\n key: string;\n params?: NavigatorScreenParams;\n};\n\nconst isValidKey = (key: unknown) =>\n key === undefined || (typeof key === 'string' && key !== '');\n\n/**\n * Extract route config object from React children elements.\n *\n * @param children React Elements to extract the config from.\n */\nconst getRouteConfigsFromChildren = <\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends EventMapBase\n>(\n children: React.ReactNode,\n groupKey?: string,\n groupOptions?: ScreenConfigWithParent<\n State,\n ScreenOptions,\n EventMap\n >['options']\n) => {\n const configs = React.Children.toArray(children).reduce<\n ScreenConfigWithParent[]\n >((acc, child) => {\n if (React.isValidElement(child)) {\n if (child.type === Screen) {\n // We can only extract the config from `Screen` elements\n // If something else was rendered, it's probably a bug\n\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the screen '${\n child.props.name\n }'. It must be a non-empty string or 'undefined'.`\n );\n }\n\n acc.push({\n keys: [groupKey, child.props.navigationKey],\n options: groupOptions,\n props: child.props as RouteConfig<\n ParamListBase,\n string,\n State,\n ScreenOptions,\n EventMap\n >,\n });\n return acc;\n }\n\n if (child.type === React.Fragment || child.type === Group) {\n if (!isValidKey(child.props.navigationKey)) {\n throw new Error(\n `Got an invalid 'navigationKey' prop (${JSON.stringify(\n child.props.navigationKey\n )}) for the group. It must be a non-empty string or 'undefined'.`\n );\n }\n\n // When we encounter a fragment or group, we need to dive into its children to extract the configs\n // This is handy to conditionally define a group of screens\n acc.push(\n ...getRouteConfigsFromChildren(\n child.props.children,\n child.props.navigationKey,\n child.type !== Group\n ? groupOptions\n : groupOptions != null\n ? [...groupOptions, child.props.screenOptions]\n : [child.props.screenOptions]\n )\n );\n return acc;\n }\n }\n\n throw new Error(\n `A navigator can only contain 'Screen', 'Group' or 'React.Fragment' as its direct children (found ${\n React.isValidElement(child)\n ? `'${\n typeof child.type === 'string' ? child.type : child.type?.name\n }'${\n child.props != null &&\n typeof child.props === 'object' &&\n 'name' in child.props &&\n child.props?.name\n ? ` for the screen '${child.props.name}'`\n : ''\n }`\n : typeof child === 'object'\n ? JSON.stringify(child)\n : `'${String(child)}'`\n }). To render this component in the navigator, pass it in the 'component' prop to 'Screen'.`\n );\n }, []);\n\n if (process.env.NODE_ENV !== 'production') {\n configs.forEach((config) => {\n const { name, children, component, getComponent } = config.props;\n\n if (typeof name !== 'string' || !name) {\n throw new Error(\n `Got an invalid name (${JSON.stringify(\n name\n )}) for the screen. It must be a non-empty string.`\n );\n }\n\n if (\n children != null ||\n component !== undefined ||\n getComponent !== undefined\n ) {\n if (children != null && component !== undefined) {\n throw new Error(\n `Got both 'component' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && getComponent !== undefined) {\n throw new Error(\n `Got both 'getComponent' and 'children' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (component !== undefined && getComponent !== undefined) {\n throw new Error(\n `Got both 'component' and 'getComponent' props for the screen '${name}'. You must pass only one of them.`\n );\n }\n\n if (children != null && typeof children !== 'function') {\n throw new Error(\n `Got an invalid value for 'children' prop for the screen '${name}'. It must be a function returning a React Element.`\n );\n }\n\n if (component !== undefined && !isValidElementType(component)) {\n throw new Error(\n `Got an invalid value for 'component' prop for the screen '${name}'. It must be a valid React Component.`\n );\n }\n\n if (getComponent !== undefined && typeof getComponent !== 'function') {\n throw new Error(\n `Got an invalid value for 'getComponent' prop for the screen '${name}'. It must be a function returning a React Component.`\n );\n }\n\n if (typeof component === 'function') {\n if (component.name === 'component') {\n // Inline anonymous functions passed in the `component` prop will have the name of the prop\n // It's relatively safe to assume that it's not a component since it should also have PascalCase name\n // We won't catch all scenarios here, but this should catch a good chunk of incorrect use.\n console.warn(\n `Looks like you're passing an inline function for 'component' prop for the screen '${name}' (e.g. component={() => }). Passing an inline function will cause the component state to be lost on re-render and cause perf issues since it's re-created every render. You can pass the function as children to 'Screen' instead to achieve the desired behaviour.`\n );\n } else if (/^[a-z]/.test(component.name)) {\n console.warn(\n `Got a component with the name '${component.name}' for the screen '${name}'. React Components must start with an uppercase letter. If you're passing a regular function and not a component, pass it as children to 'Screen' instead. Otherwise capitalize your component's name.`\n );\n }\n }\n } else {\n throw new Error(\n `Couldn't find a 'component', 'getComponent' or 'children' prop for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`\n );\n }\n });\n }\n\n return configs;\n};\n\n/**\n * Hook for building navigators.\n *\n * @param createRouter Factory method which returns router object.\n * @param options Options object containing `children` and additional options for the router.\n * @returns An object containing `state`, `navigation`, `descriptors` objects.\n */\nexport default function useNavigationBuilder<\n State extends NavigationState,\n RouterOptions extends DefaultRouterOptions,\n ActionHelpers extends Record void>,\n ScreenOptions extends {},\n EventMap extends Record\n>(\n createRouter: RouterFactory,\n options: DefaultNavigatorOptions<\n ParamListBase,\n State,\n ScreenOptions,\n EventMap\n > &\n NavigationBuilderOptions &\n RouterOptions\n) {\n const navigatorKey = useRegisterNavigator();\n\n const route = React.useContext(NavigationRouteContext) as\n | NavigatorRoute\n | undefined;\n\n const { children, screenListeners, ...rest } = options;\n const { current: router } = React.useRef>(\n createRouter({\n ...(rest as unknown as RouterOptions),\n ...(route?.params &&\n route.params.state == null &&\n route.params.initial !== false &&\n typeof route.params.screen === 'string'\n ? { initialRouteName: route.params.screen }\n : null),\n })\n );\n\n const routeConfigs = getRouteConfigsFromChildren<\n State,\n ScreenOptions,\n EventMap\n >(children);\n\n const screens = routeConfigs.reduce<\n Record>\n >((acc, config) => {\n if (config.props.name in acc) {\n throw new Error(\n `A navigator cannot contain multiple 'Screen' components with the same name (found duplicate screen named '${config.props.name}')`\n );\n }\n\n acc[config.props.name] = config;\n return acc;\n }, {});\n\n const routeNames = routeConfigs.map((config) => config.props.name);\n const routeKeyList = routeNames.reduce>(\n (acc, curr) => {\n acc[curr] = screens[curr].keys.map((key) => key ?? '').join(':');\n return acc;\n },\n {}\n );\n const routeParamList = routeNames.reduce>(\n (acc, curr) => {\n const { initialParams } = screens[curr].props;\n acc[curr] = initialParams;\n return acc;\n },\n {}\n );\n const routeGetIdList = routeNames.reduce<\n RouterConfigOptions['routeGetIdList']\n >(\n (acc, curr) =>\n Object.assign(acc, {\n [curr]: screens[curr].props.getId,\n }),\n {}\n );\n\n if (!routeNames.length) {\n throw new Error(\n \"Couldn't find any screens for the navigator. Have you defined any screens as its children?\"\n );\n }\n\n const isStateValid = React.useCallback(\n (state: NavigationState | PartialState) =>\n state.type === undefined || state.type === router.type,\n [router.type]\n );\n\n const isStateInitialized = React.useCallback(\n (state: NavigationState | PartialState | undefined) =>\n state !== undefined && state.stale === false && isStateValid(state),\n [isStateValid]\n );\n\n const {\n state: currentState,\n getState: getCurrentState,\n setState: setCurrentState,\n setKey,\n getKey,\n getIsInitial,\n } = React.useContext(NavigationStateContext);\n\n const stateCleanedUp = React.useRef(false);\n\n const cleanUpState = React.useCallback(() => {\n setCurrentState(undefined);\n stateCleanedUp.current = true;\n }, [setCurrentState]);\n\n const setState = React.useCallback(\n (state: NavigationState | PartialState | undefined) => {\n if (stateCleanedUp.current) {\n // State might have been already cleaned up due to unmount\n // We do not want to expose API allowing to override this\n // This would lead to old data preservation on main navigator unmount\n return;\n }\n setCurrentState(state);\n },\n [setCurrentState]\n );\n\n const [initializedState, isFirstStateInitialization] = React.useMemo(() => {\n const initialRouteParamList = routeNames.reduce<\n Record\n >((acc, curr) => {\n const { initialParams } = screens[curr].props;\n const initialParamsFromParams =\n route?.params?.state == null &&\n route?.params?.initial !== false &&\n route?.params?.screen === curr\n ? route.params.params\n : undefined;\n\n acc[curr] =\n initialParams !== undefined || initialParamsFromParams !== undefined\n ? {\n ...initialParams,\n ...initialParamsFromParams,\n }\n : undefined;\n\n return acc;\n }, {});\n\n // If the current state isn't initialized on first render, we initialize it\n // We also need to re-initialize it if the state passed from parent was changed (maybe due to reset)\n // Otherwise assume that the state was provided as initial state\n // So we need to rehydrate it to make it usable\n if (\n (currentState === undefined || !isStateValid(currentState)) &&\n route?.params?.state == null\n ) {\n return [\n router.getInitialState({\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }),\n true,\n ];\n } else {\n return [\n router.getRehydratedState(\n route?.params?.state ?? (currentState as PartialState),\n {\n routeNames,\n routeParamList: initialRouteParamList,\n routeGetIdList,\n }\n ),\n false,\n ];\n }\n // We explicitly don't include routeNames, route.params etc. in the dep list\n // below. We want to avoid forcing a new state to be calculated in those cases\n // Instead, we handle changes to these in the nextState code below. Note\n // that some changes to routeConfigs are explicitly ignored, such as changes\n // to initialParams\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentState, router, isStateValid]);\n\n const previousRouteKeyListRef = React.useRef(routeKeyList);\n\n React.useEffect(() => {\n previousRouteKeyListRef.current = routeKeyList;\n });\n\n const previousRouteKeyList = previousRouteKeyListRef.current;\n\n let state =\n // If the state isn't initialized, or stale, use the state we initialized instead\n // The state won't update until there's a change needed in the state we have initalized locally\n // So it'll be `undefined` or stale until the first navigation event happens\n isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedState as State);\n\n let nextState: State = state;\n\n if (\n !isArrayEqual(state.routeNames, routeNames) ||\n !isRecordEqual(routeKeyList, previousRouteKeyList)\n ) {\n // When the list of route names change, the router should handle it to remove invalid routes\n nextState = router.getStateForRouteNamesChange(state, {\n routeNames,\n routeParamList,\n routeGetIdList,\n routeKeyChanges: Object.keys(routeKeyList).filter(\n (name) =>\n previousRouteKeyList.hasOwnProperty(name) &&\n routeKeyList[name] !== previousRouteKeyList[name]\n ),\n });\n }\n\n const previousNestedParamsRef = React.useRef(route?.params);\n\n React.useEffect(() => {\n previousNestedParamsRef.current = route?.params;\n }, [route?.params]);\n\n if (route?.params) {\n const previousParams = previousNestedParamsRef.current;\n\n let action: CommonActions.Action | undefined;\n\n if (\n typeof route.params.state === 'object' &&\n route.params.state != null &&\n route.params !== previousParams\n ) {\n // If the route was updated with new state, we should reset to it\n action = CommonActions.reset(route.params.state);\n } else if (\n typeof route.params.screen === 'string' &&\n ((route.params.initial === false && isFirstStateInitialization) ||\n route.params !== previousParams)\n ) {\n // If the route was updated with new screen name and/or params, we should navigate there\n action = CommonActions.navigate({\n name: route.params.screen,\n params: route.params.params,\n path: route.params.path,\n });\n }\n\n // The update should be limited to current navigator only, so we call the router manually\n const updatedState = action\n ? router.getStateForAction(nextState, action, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : null;\n\n nextState =\n updatedState !== null\n ? router.getRehydratedState(updatedState, {\n routeNames,\n routeParamList,\n routeGetIdList,\n })\n : nextState;\n }\n\n const shouldUpdate = state !== nextState;\n\n useScheduleUpdate(() => {\n if (shouldUpdate) {\n // If the state needs to be updated, we'll schedule an update\n setState(nextState);\n }\n });\n\n // The up-to-date state will come in next render, but we don't need to wait for it\n // We can't use the outdated state since the screens have changed, which will cause error due to mismatched config\n // So we override the state object we return to use the latest state as soon as possible\n state = nextState;\n\n React.useEffect(() => {\n setKey(navigatorKey);\n\n if (!getIsInitial()) {\n // If it's not initial render, we need to update the state\n // This will make sure that our container gets notifier of state changes due to new mounts\n // This is necessary for proper screen tracking, URL updates etc.\n setState(nextState);\n }\n\n return () => {\n // We need to clean up state for this navigator on unmount\n // We do it in a timeout because we need to detect if another navigator mounted in the meantime\n // For example, if another navigator has started rendering, we should skip cleanup\n // Otherwise, our cleanup step will cleanup state for the other navigator and re-initialize it\n setTimeout(() => {\n if (getCurrentState() !== undefined && getKey() === navigatorKey) {\n cleanUpState();\n }\n }, 0);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // We initialize this ref here to avoid a new getState getting initialized\n // whenever initializedState changes. We want getState to have access to the\n // latest initializedState, but don't need it to change when that happens\n const initializedStateRef = React.useRef();\n initializedStateRef.current = initializedState;\n\n const getState = React.useCallback((): State => {\n const currentState = getCurrentState();\n\n return isStateInitialized(currentState)\n ? (currentState as State)\n : (initializedStateRef.current as State);\n }, [getCurrentState, isStateInitialized]);\n\n const emitter = useEventEmitter>((e) => {\n let routeNames = [];\n\n let route: Route | undefined;\n\n if (e.target) {\n route = state.routes.find((route) => route.key === e.target);\n\n if (route?.name) {\n routeNames.push(route.name);\n }\n } else {\n route = state.routes[state.index];\n routeNames.push(\n ...Object.keys(screens).filter((name) => route?.name === name)\n );\n }\n\n if (route == null) {\n return;\n }\n\n const navigation = descriptors[route.key].navigation;\n\n const listeners = ([] as (((e: any) => void) | undefined)[])\n .concat(\n // Get an array of listeners for all screens + common listeners on navigator\n ...[\n screenListeners,\n ...routeNames.map((name) => {\n const { listeners } = screens[name].props;\n return listeners;\n }),\n ].map((listeners) => {\n const map =\n typeof listeners === 'function'\n ? listeners({ route: route as any, navigation })\n : listeners;\n\n return map\n ? Object.keys(map)\n .filter((type) => type === e.type)\n .map((type) => map?.[type])\n : undefined;\n })\n )\n // We don't want same listener to be called multiple times for same event\n // So we remove any duplicate functions from the array\n .filter((cb, i, self) => cb && self.lastIndexOf(cb) === i);\n\n listeners.forEach((listener) => listener?.(e));\n });\n\n useFocusEvents({ state, emitter });\n\n React.useEffect(() => {\n emitter.emit({ type: 'state', data: { state } });\n }, [emitter, state]);\n\n const { listeners: childListeners, addListener } = useChildListeners();\n\n const { keyedListeners, addKeyedListener } = useKeyedChildListeners();\n\n const onAction = useOnAction({\n router,\n getState,\n setState,\n key: route?.key,\n actionListeners: childListeners.action,\n beforeRemoveListeners: keyedListeners.beforeRemove,\n routerConfigOptions: {\n routeNames,\n routeParamList,\n routeGetIdList,\n },\n emitter,\n });\n\n const onRouteFocus = useOnRouteFocus({\n router,\n key: route?.key,\n getState,\n setState,\n });\n\n const navigation = useNavigationHelpers<\n State,\n ActionHelpers,\n NavigationAction,\n EventMap\n >({\n id: options.id,\n onAction,\n getState,\n emitter,\n router,\n });\n\n useFocusedListenersChildrenAdapter({\n navigation,\n focusedListeners: childListeners.focus,\n });\n\n useOnGetState({\n getState,\n getStateListeners: keyedListeners.getState,\n });\n\n const descriptors = useDescriptors<\n State,\n ActionHelpers,\n ScreenOptions,\n EventMap\n >({\n state,\n screens,\n navigation,\n screenOptions: options.screenOptions,\n defaultScreenOptions: options.defaultScreenOptions,\n onAction,\n getState,\n setState,\n onRouteFocus,\n addListener,\n addKeyedListener,\n router,\n // @ts-expect-error: this should have both core and custom events, but too much work right now\n emitter,\n });\n\n useCurrentRender({\n state,\n navigation,\n descriptors,\n });\n\n const NavigationContent = useComponent((children: React.ReactNode) => (\n \n {children}\n \n ));\n\n return {\n state,\n navigation,\n descriptors,\n NavigationContent,\n };\n}\n","import {\n CommonActions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport type { NavigationHelpers, NavigationProp } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\ntype Options<\n State extends NavigationState,\n EventMap extends Record\n> = {\n state: State;\n getState: () => State;\n navigation: NavigationHelpers &\n Partial>;\n setOptions: (\n cb: (options: Record) => Record\n ) => void;\n router: Router;\n emitter: NavigationEventEmitter;\n};\n\ntype NavigationCache<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends Record\n> = Record<\n string,\n NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n State,\n ScreenOptions,\n EventMap\n >\n>;\n\n/**\n * Hook to cache navigation objects for each screen in the navigator.\n * It's important to cache them to make sure navigation objects don't change between renders.\n * This lets us apply optimizations like `React.memo` to minimize re-rendering screens.\n */\nexport default function useNavigationCache<\n State extends NavigationState,\n ScreenOptions extends {},\n EventMap extends Record\n>({\n state,\n getState,\n navigation,\n setOptions,\n router,\n emitter,\n}: Options) {\n const { stackRef } = React.useContext(NavigationBuilderContext);\n\n // Cache object which holds navigation objects for each screen\n // We use `React.useMemo` instead of `React.useRef` coz we want to invalidate it when deps change\n // In reality, these deps will rarely change, if ever\n const cache = React.useMemo(\n () => ({ current: {} as NavigationCache }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [getState, navigation, setOptions, router, emitter]\n );\n\n const actions = {\n ...router.actionCreators,\n ...CommonActions,\n };\n\n cache.current = state.routes.reduce<\n NavigationCache\n >((acc, route) => {\n const previous = cache.current[route.key];\n\n type Thunk =\n | NavigationAction\n | ((state: State) => NavigationAction | null | undefined);\n\n if (previous) {\n // If a cached navigation object already exists, reuse it\n acc[route.key] = previous;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { emit, ...rest } = navigation;\n\n const dispatch = (thunk: Thunk) => {\n const action = typeof thunk === 'function' ? thunk(getState()) : thunk;\n\n if (action != null) {\n navigation.dispatch({ source: route.key, ...action });\n }\n };\n\n const withStack = (callback: () => void) => {\n let isStackSet = false;\n\n try {\n if (\n process.env.NODE_ENV !== 'production' &&\n stackRef &&\n !stackRef.current\n ) {\n // Capture the stack trace for devtools\n stackRef.current = new Error().stack;\n isStackSet = true;\n }\n\n callback();\n } finally {\n if (isStackSet && stackRef) {\n stackRef.current = undefined;\n }\n }\n };\n\n const helpers = Object.keys(actions).reduce void>>(\n (acc, name) => {\n acc[name] = (...args: any) =>\n withStack(() =>\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n dispatch(actions[name](...args))\n );\n\n return acc;\n },\n {}\n );\n\n acc[route.key] = {\n ...rest,\n ...helpers,\n // FIXME: too much work to fix the types for now\n ...(emitter.create(route.key) as any),\n dispatch: (thunk: Thunk) => withStack(() => dispatch(thunk)),\n getParent: (id?: string) => {\n if (id !== undefined && id === rest.getId()) {\n // If the passed id is the same as the current navigation id,\n // we return the cached navigation object for the relevant route\n return acc[route.key];\n }\n\n return rest.getParent(id);\n },\n setOptions: (options: object) =>\n setOptions((o) => ({\n ...o,\n [route.key]: { ...o[route.key], ...options },\n })),\n isFocused: () => {\n const state = getState();\n\n if (state.routes[state.index].key !== route.key) {\n return false;\n }\n\n // If the current screen is focused, we also need to check if parent navigator is focused\n // This makes sure that we return the focus state in the whole tree, not just this navigator\n return navigation ? navigation.isFocused() : true;\n },\n };\n }\n\n return acc;\n }, {});\n\n return cache.current;\n}\n","import * as React from 'react';\n\nimport createNavigationContainerRef from './createNavigationContainerRef';\nimport type { NavigationContainerRefWithCurrent } from './types';\n\nexport default function useNavigationContainerRef<\n ParamList extends {} = ReactNavigation.RootParamList\n>(): NavigationContainerRefWithCurrent {\n const navigation =\n React.useRef | null>(null);\n\n if (navigation.current == null) {\n navigation.current = createNavigationContainerRef();\n }\n\n return navigation.current;\n}\n","import {\n CommonActions,\n NavigationAction,\n NavigationState,\n ParamListBase,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationContext from './NavigationContext';\nimport { NavigationHelpers, PrivateValueStore } from './types';\nimport UnhandledActionContext from './UnhandledActionContext';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\n// This is to make TypeScript compiler happy\n// eslint-disable-next-line babel/no-unused-expressions\nPrivateValueStore;\n\ntype Options = {\n id: string | undefined;\n onAction: (action: NavigationAction) => boolean;\n getState: () => State;\n emitter: NavigationEventEmitter;\n router: Router;\n};\n\n/**\n * Navigation object with helper methods to be used by a navigator.\n * This object includes methods for common actions as well as methods the parent screen's navigation object.\n */\nexport default function useNavigationHelpers<\n State extends NavigationState,\n ActionHelpers extends Record void>,\n Action extends NavigationAction,\n EventMap extends Record\n>({\n id: navigatorId,\n onAction,\n getState,\n emitter,\n router,\n}: Options) {\n const onUnhandledAction = React.useContext(UnhandledActionContext);\n const parentNavigationHelpers = React.useContext(NavigationContext);\n\n return React.useMemo(() => {\n const dispatch = (op: Action | ((state: State) => Action)) => {\n const action = typeof op === 'function' ? op(getState()) : op;\n\n const handled = onAction(action);\n\n if (!handled) {\n onUnhandledAction?.(action);\n }\n };\n\n const actions = {\n ...router.actionCreators,\n ...CommonActions,\n };\n\n const helpers = Object.keys(actions).reduce((acc, name) => {\n // @ts-expect-error: name is a valid key, but TypeScript is dumb\n acc[name] = (...args: any) => dispatch(actions[name](...args));\n return acc;\n }, {} as ActionHelpers);\n\n const navigationHelpers = {\n ...parentNavigationHelpers,\n ...helpers,\n dispatch,\n emit: emitter.emit,\n isFocused: parentNavigationHelpers\n ? parentNavigationHelpers.isFocused\n : () => true,\n canGoBack: () => {\n const state = getState();\n\n return (\n router.getStateForAction(state, CommonActions.goBack() as Action, {\n routeNames: state.routeNames,\n routeParamList: {},\n routeGetIdList: {},\n }) !== null ||\n parentNavigationHelpers?.canGoBack() ||\n false\n );\n },\n getId: () => navigatorId,\n getParent: (id?: string) => {\n if (id !== undefined) {\n let current = navigationHelpers;\n\n while (current && id !== current.getId()) {\n current = current.getParent();\n }\n\n return current;\n }\n\n return parentNavigationHelpers;\n },\n getState,\n } as NavigationHelpers & ActionHelpers;\n\n return navigationHelpers;\n }, [\n navigatorId,\n emitter.emit,\n getState,\n onAction,\n onUnhandledAction,\n parentNavigationHelpers,\n router,\n ]);\n}\n","import type { NavigationState, ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationProp } from './types';\nimport useNavigation from './useNavigation';\n\ntype Selector = (\n state: NavigationState\n) => T;\n\n/**\n * Hook to get a value from the current navigation state using a selector.\n *\n * @param selector Selector function to get a value from the state.\n */\nexport default function useNavigationState(\n selector: Selector\n): T {\n const navigation = useNavigation>();\n\n // We don't care about the state value, we run the selector again at the end\n // The state is only to make sure that there's a re-render when we have a new value\n const [, setResult] = React.useState(() => selector(navigation.getState()));\n\n // We store the selector in a ref to avoid re-subscribing listeners every render\n const selectorRef = React.useRef(selector);\n\n React.useEffect(() => {\n selectorRef.current = selector;\n });\n\n React.useEffect(() => {\n const unsubscribe = navigation.addListener('state', (e) => {\n setResult(selectorRef.current(e.data.state));\n });\n\n return unsubscribe;\n }, [navigation]);\n\n return selector(navigation.getState());\n}\n","import type {\n NavigationAction,\n NavigationState,\n PartialState,\n Router,\n RouterConfigOptions,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n ChildActionListener,\n ChildBeforeRemoveListener,\n} from './NavigationBuilderContext';\nimport type { EventMapCore } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\nimport useOnPreventRemove, { shouldPreventRemove } from './useOnPreventRemove';\n\ntype Options = {\n router: Router;\n key?: string;\n getState: () => NavigationState;\n setState: (state: NavigationState | PartialState) => void;\n actionListeners: ChildActionListener[];\n beforeRemoveListeners: Record;\n routerConfigOptions: RouterConfigOptions;\n emitter: NavigationEventEmitter>;\n};\n\n/**\n * Hook to handle actions for a navigator, including state updates and bubbling.\n *\n * Bubbling an action is achieved in 2 ways:\n * 1. To bubble action to parent, we expose the action handler in context and then access the parent context\n * 2. To bubble action to child, child adds event listeners subscribing to actions from parent\n *\n * When the action handler handles as action, it returns `true`, otherwise `false`.\n */\nexport default function useOnAction({\n router,\n getState,\n setState,\n key,\n actionListeners,\n beforeRemoveListeners,\n routerConfigOptions,\n emitter,\n}: Options) {\n const {\n onAction: onActionParent,\n onRouteFocus: onRouteFocusParent,\n addListener: addListenerParent,\n onDispatchAction,\n } = React.useContext(NavigationBuilderContext);\n\n const routerConfigOptionsRef =\n React.useRef(routerConfigOptions);\n\n React.useEffect(() => {\n routerConfigOptionsRef.current = routerConfigOptions;\n });\n\n const onAction = React.useCallback(\n (\n action: NavigationAction,\n visitedNavigators: Set = new Set()\n ) => {\n const state = getState();\n\n // Since actions can bubble both up and down, they could come to the same navigator again\n // We keep track of navigators which have already tried to handle the action and return if it's already visited\n if (visitedNavigators.has(state.key)) {\n return false;\n }\n\n visitedNavigators.add(state.key);\n\n if (typeof action.target !== 'string' || action.target === state.key) {\n let result = router.getStateForAction(\n state,\n action,\n routerConfigOptionsRef.current\n );\n\n // If a target is specified and set to current navigator, the action shouldn't bubble\n // So instead of `null`, we use the state object for such cases to signal that action was handled\n result =\n result === null && action.target === state.key ? state : result;\n\n if (result !== null) {\n onDispatchAction(action, state === result);\n\n if (state !== result) {\n const isPrevented = shouldPreventRemove(\n emitter,\n beforeRemoveListeners,\n state.routes,\n result.routes,\n action\n );\n\n if (isPrevented) {\n return true;\n }\n\n setState(result);\n }\n\n if (onRouteFocusParent !== undefined) {\n // Some actions such as `NAVIGATE` also want to bring the navigated route to focus in the whole tree\n // This means we need to focus all of the parent navigators of this navigator as well\n const shouldFocus = router.shouldActionChangeFocus(action);\n\n if (shouldFocus && key !== undefined) {\n onRouteFocusParent(key);\n }\n }\n\n return true;\n }\n }\n\n if (onActionParent !== undefined) {\n // Bubble action to the parent if the current navigator didn't handle it\n if (onActionParent(action, visitedNavigators)) {\n return true;\n }\n }\n\n // If the action wasn't handled by current navigator or a parent navigator, let children handle it\n for (let i = actionListeners.length - 1; i >= 0; i--) {\n const listener = actionListeners[i];\n\n if (listener(action, visitedNavigators)) {\n return true;\n }\n }\n\n return false;\n },\n [\n actionListeners,\n beforeRemoveListeners,\n emitter,\n getState,\n key,\n onActionParent,\n onDispatchAction,\n onRouteFocusParent,\n router,\n setState,\n ]\n );\n\n useOnPreventRemove({\n getState,\n emitter,\n beforeRemoveListeners,\n });\n\n React.useEffect(\n () => addListenerParent?.('action', onAction),\n [addListenerParent, onAction]\n );\n\n return onAction;\n}\n","import type { NavigationState } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport isArrayEqual from './isArrayEqual';\nimport NavigationBuilderContext, {\n GetStateListener,\n} from './NavigationBuilderContext';\nimport NavigationRouteContext from './NavigationRouteContext';\n\ntype Options = {\n getState: () => NavigationState;\n getStateListeners: Record;\n};\n\nexport default function useOnGetState({\n getState,\n getStateListeners,\n}: Options) {\n const { addKeyedListener } = React.useContext(NavigationBuilderContext);\n const route = React.useContext(NavigationRouteContext);\n const key = route ? route.key : 'root';\n\n const getRehydratedState = React.useCallback(() => {\n const state = getState();\n\n // Avoid returning new route objects if we don't need to\n const routes = state.routes.map((route) => {\n const childState = getStateListeners[route.key]?.();\n\n if (route.state === childState) {\n return route;\n }\n\n return { ...route, state: childState };\n });\n\n if (isArrayEqual(state.routes, routes)) {\n return state;\n }\n\n return { ...state, routes };\n }, [getState, getStateListeners]);\n\n React.useEffect(() => {\n return addKeyedListener?.('getState', key, getRehydratedState);\n }, [addKeyedListener, getRehydratedState, key]);\n}\n","import type {\n NavigationAction,\n NavigationState,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext, {\n ChildBeforeRemoveListener,\n} from './NavigationBuilderContext';\nimport NavigationRouteContext from './NavigationRouteContext';\nimport type { EventMapCore } from './types';\nimport type { NavigationEventEmitter } from './useEventEmitter';\n\ntype Options = {\n getState: () => NavigationState;\n emitter: NavigationEventEmitter>;\n beforeRemoveListeners: Record;\n};\n\nconst VISITED_ROUTE_KEYS = Symbol('VISITED_ROUTE_KEYS');\n\nexport const shouldPreventRemove = (\n emitter: NavigationEventEmitter>,\n beforeRemoveListeners: Record,\n currentRoutes: { key: string }[],\n nextRoutes: { key?: string | undefined }[],\n action: NavigationAction\n) => {\n const nextRouteKeys = nextRoutes.map((route) => route.key);\n\n // Call these in reverse order so last screens handle the event first\n const removedRoutes = currentRoutes\n .filter((route) => !nextRouteKeys.includes(route.key))\n .reverse();\n\n const visitedRouteKeys: Set =\n // @ts-expect-error: add this property to mark that we've already emitted this action\n action[VISITED_ROUTE_KEYS] ?? new Set();\n\n const beforeRemoveAction = {\n ...action,\n [VISITED_ROUTE_KEYS]: visitedRouteKeys,\n };\n\n for (const route of removedRoutes) {\n if (visitedRouteKeys.has(route.key)) {\n // Skip if we've already emitted this action for this screen\n continue;\n }\n\n // First, we need to check if any child screens want to prevent it\n const isPrevented = beforeRemoveListeners[route.key]?.(beforeRemoveAction);\n\n if (isPrevented) {\n return true;\n }\n\n visitedRouteKeys.add(route.key);\n\n const event = emitter.emit({\n type: 'beforeRemove',\n target: route.key,\n data: { action: beforeRemoveAction },\n canPreventDefault: true,\n });\n\n if (event.defaultPrevented) {\n return true;\n }\n }\n\n return false;\n};\n\nexport default function useOnPreventRemove({\n getState,\n emitter,\n beforeRemoveListeners,\n}: Options) {\n const { addKeyedListener } = React.useContext(NavigationBuilderContext);\n const route = React.useContext(NavigationRouteContext);\n const routeKey = route?.key;\n\n React.useEffect(() => {\n if (routeKey) {\n return addKeyedListener?.('beforeRemove', routeKey, (action) => {\n const state = getState();\n\n return shouldPreventRemove(\n emitter,\n beforeRemoveListeners,\n state.routes,\n [],\n action\n );\n });\n }\n }, [addKeyedListener, beforeRemoveListeners, emitter, getState, routeKey]);\n}\n","import type {\n NavigationAction,\n NavigationState,\n Router,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext from './NavigationBuilderContext';\n\ntype Options = {\n router: Router;\n getState: () => NavigationState;\n setState: (state: NavigationState) => void;\n key?: string;\n};\n\n/**\n * Hook to handle focus actions for a route.\n * Focus action needs to be treated specially, coz when a nested route is focused,\n * the parent navigators also needs to be focused.\n */\nexport default function useOnRouteFocus({\n router,\n getState,\n key: sourceRouteKey,\n setState,\n}: Options) {\n const { onRouteFocus: onRouteFocusParent } = React.useContext(\n NavigationBuilderContext\n );\n\n return React.useCallback(\n (key: string) => {\n const state = getState();\n const result = router.getStateForRouteFocus(state, key);\n\n if (result !== state) {\n setState(result);\n }\n\n if (onRouteFocusParent !== undefined && sourceRouteKey !== undefined) {\n onRouteFocusParent(sourceRouteKey);\n }\n },\n [getState, onRouteFocusParent, router, setState, sourceRouteKey]\n );\n}\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationBuilderContext from './NavigationBuilderContext';\nimport NavigationStateContext from './NavigationStateContext';\nimport type { NavigationProp } from './types';\n\ntype Options = {\n key?: string;\n navigation?: NavigationProp;\n options?: object | undefined;\n};\n\nexport default function useOptionsGetters({\n key,\n options,\n navigation,\n}: Options) {\n const optionsRef = React.useRef(options);\n const optionsGettersFromChildRef = React.useRef<\n Record object | undefined | null>\n >({});\n\n const { onOptionsChange } = React.useContext(NavigationBuilderContext);\n const { addOptionsGetter: parentAddOptionsGetter } = React.useContext(\n NavigationStateContext\n );\n\n const optionsChangeListener = React.useCallback(() => {\n const isFocused = navigation?.isFocused() ?? true;\n const hasChildren = Object.keys(optionsGettersFromChildRef.current).length;\n\n if (isFocused && !hasChildren) {\n onOptionsChange(optionsRef.current ?? {});\n }\n }, [navigation, onOptionsChange]);\n\n React.useEffect(() => {\n optionsRef.current = options;\n optionsChangeListener();\n\n return navigation?.addListener('focus', optionsChangeListener);\n }, [navigation, options, optionsChangeListener]);\n\n const getOptionsFromListener = React.useCallback(() => {\n for (let key in optionsGettersFromChildRef.current) {\n if (optionsGettersFromChildRef.current.hasOwnProperty(key)) {\n const result = optionsGettersFromChildRef.current[key]?.();\n\n // null means unfocused route\n if (result !== null) {\n return result;\n }\n }\n }\n\n return null;\n }, []);\n\n const getCurrentOptions = React.useCallback(() => {\n const isFocused = navigation?.isFocused() ?? true;\n\n if (!isFocused) {\n return null;\n }\n\n const optionsFromListener = getOptionsFromListener();\n\n if (optionsFromListener !== null) {\n return optionsFromListener;\n }\n\n return optionsRef.current;\n }, [navigation, getOptionsFromListener]);\n\n React.useEffect(() => {\n return parentAddOptionsGetter?.(key!, getCurrentOptions);\n }, [getCurrentOptions, parentAddOptionsGetter, key]);\n\n const addOptionsGetter = React.useCallback(\n (key: string, getter: () => object | undefined | null) => {\n optionsGettersFromChildRef.current[key] = getter;\n optionsChangeListener();\n\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete optionsGettersFromChildRef.current[key];\n optionsChangeListener();\n };\n },\n [optionsChangeListener]\n );\n\n return {\n addOptionsGetter,\n getCurrentOptions,\n };\n}\n","import type { NavigationAction } from '@react-navigation/routers';\nimport { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\n\nimport type { EventListenerCallback, EventMapCore } from './types';\nimport useNavigation from './useNavigation';\nimport usePreventRemoveContext from './usePreventRemoveContext';\nimport useRoute from './useRoute';\n\n/**\n * Hook to prevent screen from being removed. Can be used to prevent users from leaving the screen.\n *\n * @param preventRemove Boolean indicating whether to prevent screen from being removed.\n * @param callback Function which is executed when screen was prevented from being removed.\n */\nexport default function usePreventRemove(\n preventRemove: boolean,\n callback: (options: { data: { action: NavigationAction } }) => void\n) {\n const [id] = React.useState(() => nanoid());\n\n const navigation = useNavigation();\n const { key: routeKey } = useRoute();\n\n const { setPreventRemove } = usePreventRemoveContext();\n\n React.useEffect(() => {\n setPreventRemove(id, routeKey, preventRemove);\n return () => {\n setPreventRemove(id, routeKey, false);\n };\n }, [setPreventRemove, id, routeKey, preventRemove]);\n\n const beforeRemoveListener = useLatestCallback<\n EventListenerCallback, 'beforeRemove'>\n >((e) => {\n if (!preventRemove) {\n return;\n }\n\n e.preventDefault();\n\n callback({ data: e.data });\n });\n\n React.useEffect(\n () => navigation?.addListener('beforeRemove', beforeRemoveListener),\n [navigation, beforeRemoveListener]\n );\n}\n","import * as React from 'react';\n\nimport PreventRemoveContext from './PreventRemoveContext';\n\nexport default function usePreventRemoveContext() {\n const value = React.useContext(PreventRemoveContext);\n\n if (value == null) {\n throw new Error(\n \"Couldn't find the prevent remove context. Is your component inside NavigationContent?\"\n );\n }\n\n return value;\n}\n","import { nanoid } from 'nanoid/non-secure';\nimport * as React from 'react';\n\nimport { SingleNavigatorContext } from './EnsureSingleNavigator';\n\n/**\n * Register a navigator in the parent context (either a navigation container or a screen).\n * This is used to prevent multiple navigators under a single container or screen.\n */\nexport default function useRegisterNavigator() {\n const [key] = React.useState(() => nanoid());\n const container = React.useContext(SingleNavigatorContext);\n\n if (container === undefined) {\n throw new Error(\n \"Couldn't register the navigator. Have you wrapped your app with 'NavigationContainer'?\\n\\nThis can also happen if there are multiple copies of '@react-navigation' packages installed.\"\n );\n }\n\n React.useEffect(() => {\n const { register, unregister } = container;\n\n register(key);\n\n return () => unregister(key);\n }, [container, key]);\n\n return key;\n}\n","import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport NavigationRouteContext from './NavigationRouteContext';\nimport type { RouteProp } from './types';\n\n/**\n * Hook to access the route prop of the parent screen anywhere.\n *\n * @returns Route prop of the parent screen.\n */\nexport default function useRoute>(): T {\n const route = React.useContext(NavigationRouteContext);\n\n if (route === undefined) {\n throw new Error(\n \"Couldn't find a route object. Is your component inside a screen in a navigator?\"\n );\n }\n\n return route as T;\n}\n","import type {\n NavigationState,\n ParamListBase,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { RouteProp } from './types';\n\ntype RouteCache = Map, RouteProp>;\n\n/**\n * Utilites such as `getFocusedRouteNameFromRoute` need to access state.\n * So we need a way to suppress the warning for those use cases.\n * This is fine since they are internal utilities and this is not public API.\n */\nexport const CHILD_STATE = Symbol('CHILD_STATE');\n\n/**\n * Hook to cache route props for each screen in the navigator.\n * This lets add warnings and modifications to the route object but keep references between renders.\n */\nexport default function useRouteCache(\n routes: State['routes']\n) {\n // Cache object which holds route objects for each screen\n const cache = React.useMemo(() => ({ current: new Map() as RouteCache }), []);\n\n if (process.env.NODE_ENV === 'production') {\n // We don't want the overhead of creating extra maps every render in prod\n return routes;\n }\n\n cache.current = routes.reduce((acc, route) => {\n const previous = cache.current.get(route);\n\n if (previous) {\n // If a cached route object already exists, reuse it\n acc.set(route, previous);\n } else {\n const { state, ...proxy } = route;\n\n Object.defineProperty(proxy, CHILD_STATE, {\n enumerable: false,\n value: state,\n });\n\n acc.set(route, proxy);\n }\n\n return acc;\n }, new Map() as RouteCache);\n\n return Array.from(cache.current.values());\n}\n","import * as React from 'react';\n\nconst MISSING_CONTEXT_ERROR = \"Couldn't find a schedule context.\";\n\nexport const ScheduleUpdateContext = React.createContext<{\n scheduleUpdate: (callback: () => void) => void;\n flushUpdates: () => void;\n}>({\n scheduleUpdate() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n flushUpdates() {\n throw new Error(MISSING_CONTEXT_ERROR);\n },\n});\n\n/**\n * When screen config changes, we want to update the navigator in the same update phase.\n * However, navigation state is in the root component and React won't let us update it from a child.\n * This is a workaround for that, the scheduled update is stored in the ref without actually calling setState.\n * It lets all subsequent updates access the latest state so it stays correct.\n * Then we call setState during after the component updates.\n */\nexport default function useScheduleUpdate(callback: () => void) {\n const { scheduleUpdate, flushUpdates } = React.useContext(\n ScheduleUpdateContext\n );\n\n scheduleUpdate(callback);\n\n React.useEffect(flushUpdates);\n}\n","import * as React from 'react';\n\nconst UNINTIALIZED_STATE = {};\n\n/**\n * This is definitely not compatible with concurrent mode, but we don't have a solution for sync state yet.\n */\nexport default function useSyncState(initialState?: (() => T) | T) {\n const stateRef = React.useRef(UNINTIALIZED_STATE as any);\n const isSchedulingRef = React.useRef(false);\n const isMountedRef = React.useRef(true);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n if (stateRef.current === UNINTIALIZED_STATE) {\n stateRef.current =\n // @ts-expect-error: initialState is a function, but TypeScript doesn't think so\n typeof initialState === 'function' ? initialState() : initialState;\n }\n\n const [trackingState, setTrackingState] = React.useState(stateRef.current);\n\n const getState = React.useCallback(() => stateRef.current, []);\n\n const setState = React.useCallback((state: T) => {\n if (state === stateRef.current || !isMountedRef.current) {\n return;\n }\n\n stateRef.current = state;\n\n if (!isSchedulingRef.current) {\n setTrackingState(state);\n }\n }, []);\n\n const scheduleUpdate = React.useCallback((callback: () => void) => {\n isSchedulingRef.current = true;\n\n try {\n callback();\n } finally {\n isSchedulingRef.current = false;\n }\n }, []);\n\n const flushUpdates = React.useCallback(() => {\n if (!isMountedRef.current) {\n return;\n }\n\n // Make sure that the tracking state is up-to-date.\n // We call it unconditionally, but React should skip the update if state is unchanged.\n setTrackingState(stateRef.current);\n }, []);\n\n // If we're rendering and the tracking state is out of date, update it immediately\n // This will make sure that our updates are applied as early as possible.\n if (trackingState !== stateRef.current) {\n setTrackingState(stateRef.current);\n }\n\n const state = stateRef.current;\n\n React.useDebugValue(state);\n\n return [state, getState, setState, scheduleUpdate, flushUpdates] as const;\n}\n","const formatToList = (items: string[]) =>\n items.map((key) => `- ${key}`).join('\\n');\n\nexport default function validatePathConfig(config: any, root = true) {\n const validKeys = ['initialRouteName', 'screens'];\n\n if (!root) {\n validKeys.push('path', 'exact', 'stringify', 'parse');\n }\n\n const invalidKeys = Object.keys(config).filter(\n (key) => !validKeys.includes(key)\n );\n\n if (invalidKeys.length) {\n throw new Error(\n `Found invalid properties in the configuration:\\n${formatToList(\n invalidKeys\n )}\\n\\nDid you forget to specify them under a 'screens' property?\\n\\nYou can only specify the following properties:\\n${formatToList(\n validKeys\n )}\\n\\nSee https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.`\n );\n }\n\n if (config.screens) {\n Object.entries(config.screens).forEach(([_, value]) => {\n if (typeof value !== 'string') {\n validatePathConfig(value, false);\n }\n });\n }\n}\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { View, ViewProps } from 'react-native';\n\ntype Props = ViewProps & {\n children: React.ReactNode;\n};\n\nexport default function Background({ style, ...rest }: Props) {\n const { colors } = useTheme();\n\n return (\n \n );\n}\n","import * as React from 'react';\nimport { Animated, Platform, StyleSheet, View, ViewStyle } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport type { HeaderOptions, Layout } from '../types';\nimport getDefaultHeaderHeight from './getDefaultHeaderHeight';\nimport HeaderBackground from './HeaderBackground';\nimport HeaderShownContext from './HeaderShownContext';\nimport HeaderTitle from './HeaderTitle';\n\ntype Props = HeaderOptions & {\n /**\n * Whether the header is in a modal\n */\n modal?: boolean;\n /**\n * Layout of the screen.\n */\n layout?: Layout;\n /**\n * Title text for the header.\n */\n title: string;\n};\n\nconst warnIfHeaderStylesDefined = (styles: Record) => {\n Object.keys(styles).forEach((styleProp) => {\n const value = styles[styleProp];\n\n if (styleProp === 'position' && value === 'absolute') {\n console.warn(\n \"position: 'absolute' is not supported on headerStyle. If you would like to render content under the header, use the 'headerTransparent' option.\"\n );\n } else if (value !== undefined) {\n console.warn(\n `${styleProp} was given a value of ${value}, this has no effect on headerStyle.`\n );\n }\n });\n};\n\nexport default function Header(props: Props) {\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n\n const {\n layout = frame,\n modal = false,\n title,\n headerTitle: customTitle,\n headerTitleAlign = Platform.select({\n ios: 'center',\n default: 'left',\n }),\n headerLeft,\n headerLeftLabelVisible,\n headerTransparent,\n headerTintColor,\n headerBackground,\n headerRight,\n headerTitleAllowFontScaling: titleAllowFontScaling,\n headerTitleStyle: titleStyle,\n headerLeftContainerStyle: leftContainerStyle,\n headerRightContainerStyle: rightContainerStyle,\n headerTitleContainerStyle: titleContainerStyle,\n headerBackgroundContainerStyle: backgroundContainerStyle,\n headerStyle: customHeaderStyle,\n headerShadowVisible,\n headerPressColor,\n headerPressOpacity,\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n } = props;\n\n const defaultHeight = getDefaultHeaderHeight(\n layout,\n modal,\n headerStatusBarHeight\n );\n\n const {\n height = defaultHeight,\n minHeight,\n maxHeight,\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: web support for shadow\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform,\n ...unsafeStyles\n } = StyleSheet.flatten(customHeaderStyle || {}) as ViewStyle;\n\n if (process.env.NODE_ENV !== 'production') {\n warnIfHeaderStylesDefined(unsafeStyles);\n }\n\n const safeStyles: ViewStyle = {\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: boxShadow is only for Web\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform,\n };\n\n // Setting a property to undefined triggers default style\n // So we need to filter them out\n // Users can use `null` instead\n for (const styleProp in safeStyles) {\n // @ts-expect-error: typescript wrongly complains that styleProp cannot be used to index safeStyles\n if (safeStyles[styleProp] === undefined) {\n // @ts-expect-error\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete safeStyles[styleProp];\n }\n }\n\n const backgroundStyle = [\n safeStyles,\n headerShadowVisible === false && {\n elevation: 0,\n shadowOpacity: 0,\n borderBottomWidth: 0,\n },\n ];\n\n const leftButton = headerLeft\n ? headerLeft({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity,\n labelVisible: headerLeftLabelVisible,\n })\n : null;\n\n const rightButton = headerRight\n ? headerRight({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity,\n })\n : null;\n\n const headerTitle =\n typeof customTitle !== 'function'\n ? (props: React.ComponentProps) => (\n \n )\n : customTitle;\n\n return (\n \n \n {headerBackground ? (\n headerBackground({ style: backgroundStyle })\n ) : headerTransparent ? null : (\n \n )}\n \n \n \n \n \n {leftButton}\n \n \n {headerTitle({\n children: title,\n allowFontScaling: titleAllowFontScaling,\n tintColor: headerTintColor,\n style: titleStyle,\n })}\n \n \n {rightButton}\n \n \n \n \n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n title: {\n marginHorizontal: 16,\n justifyContent: 'center',\n },\n left: {\n justifyContent: 'center',\n alignItems: 'flex-start',\n },\n right: {\n justifyContent: 'center',\n alignItems: 'flex-end',\n },\n expand: {\n flexGrow: 1,\n flexBasis: 0,\n },\n});\n","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n I18nManager,\n Image,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport default function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible,\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n}: HeaderBackButtonProps) {\n const { colors } = useTheme();\n\n const [initialLabelWidth, setInitialLabelWidth] = React.useState<\n undefined | number\n >(undefined);\n\n const tintColor =\n customTintColor !== undefined\n ? customTintColor\n : Platform.select({\n ios: colors.primary,\n default: colors.text,\n });\n\n const handleLabelLayout = (e: LayoutChangeEvent) => {\n onLabelLayout?.(e);\n\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n\n const shouldTruncateLabel = () => {\n return (\n !label ||\n (initialLabelWidth &&\n titleLayout &&\n screenLayout &&\n (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26)\n );\n };\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor });\n } else {\n return (\n \n );\n }\n };\n\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n\n const labelElement = (\n \n \n {leftLabelText}\n \n \n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n \n \n \n \n }\n >\n {labelElement}\n \n );\n };\n\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n\n return (\n \n \n {renderBackImage()}\n {renderLabel()}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n disabled: {\n opacity: 0.5,\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n }),\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginRight: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n});\n","import getNamedContext from '../getNamedContext';\n\nconst HeaderBackContext = getNamedContext<{ title: string } | undefined>(\n 'HeaderBackContext',\n undefined\n);\n\nexport default HeaderBackContext;\n","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n StyleSheet,\n ViewProps,\n ViewStyle,\n} from 'react-native';\n\ntype Props = Omit & {\n style?: Animated.WithAnimatedValue>;\n children?: React.ReactNode;\n};\n\nexport default function HeaderBackground({ style, ...rest }: Props) {\n const { colors } = useTheme();\n\n return (\n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n ...Platform.select({\n android: {\n elevation: 4,\n },\n ios: {\n shadowOpacity: 0.85,\n shadowRadius: 0,\n shadowOffset: {\n width: 0,\n height: StyleSheet.hairlineWidth,\n },\n },\n default: {\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n }),\n },\n});\n","import getNamedContext from '../getNamedContext';\n\nconst HeaderHeightContext = getNamedContext(\n 'HeaderHeightContext',\n undefined\n);\n\nexport default HeaderHeightContext;\n","import getNamedContext from '../getNamedContext';\n\nconst HeaderShownContext = getNamedContext('HeaderShownContext', false);\n\nexport default HeaderShownContext;\n","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n StyleSheet,\n TextProps,\n TextStyle,\n} from 'react-native';\n\ntype Props = Omit & {\n tintColor?: string;\n style?: Animated.WithAnimatedValue>;\n};\n\nexport default function HeaderTitle({ tintColor, style, ...rest }: Props) {\n const { colors } = useTheme();\n\n return (\n \n );\n}\n\nconst styles = StyleSheet.create({\n title: Platform.select({\n ios: {\n fontSize: 17,\n fontWeight: '600',\n },\n android: {\n fontSize: 20,\n fontFamily: 'sans-serif-medium',\n fontWeight: 'normal',\n },\n default: {\n fontSize: 18,\n fontWeight: '500',\n },\n }),\n});\n","import { Platform } from 'react-native';\n\nimport type { Layout } from '../types';\n\nexport default function getDefaultHeaderHeight(\n layout: Layout,\n modalPresentation: boolean,\n statusBarHeight: number\n): number {\n let headerHeight;\n\n const isLandscape = layout.width > layout.height;\n\n if (Platform.OS === 'ios') {\n if (Platform.isPad || Platform.isTV) {\n if (modalPresentation) {\n headerHeight = 56;\n } else {\n headerHeight = 50;\n }\n } else {\n if (isLandscape) {\n headerHeight = 32;\n } else {\n if (modalPresentation) {\n headerHeight = 56;\n } else {\n headerHeight = 44;\n }\n }\n }\n } else if (Platform.OS === 'android') {\n headerHeight = 56;\n } else {\n headerHeight = 64;\n }\n\n return headerHeight + statusBarHeight;\n}\n","import type { HeaderOptions } from '../types';\n\nexport default function getHeaderTitle(\n options: { title?: string; headerTitle?: HeaderOptions['headerTitle'] },\n fallback: string\n): string {\n return typeof options.headerTitle === 'string'\n ? options.headerTitle\n : options.title !== undefined\n ? options.title\n : fallback;\n}\n","import * as React from 'react';\n\nimport HeaderHeightContext from './HeaderHeightContext';\n\nexport default function useHeaderHeight() {\n const height = React.useContext(HeaderHeightContext);\n\n if (height === undefined) {\n throw new Error(\n \"Couldn't find the header height. Are you inside a screen in a navigator with a header?\"\n );\n }\n\n return height;\n}\n","/**\n * Use a stub for MaskedView on all Platforms that don't support it.\n */\nimport type * as React from 'react';\n\ntype Props = {\n maskElement: React.ReactElement;\n children: React.ReactElement;\n};\n\nexport default function MaskedView({ children }: Props) {\n return children;\n}\n","import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n Easing,\n GestureResponderEvent,\n Platform,\n Pressable,\n PressableProps,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nexport type Props = Omit & {\n pressColor?: string;\n pressOpacity?: number;\n style?: Animated.WithAnimatedValue>;\n children: React.ReactNode;\n};\n\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n\nconst ANDROID_VERSION_LOLLIPOP = 21;\nconst ANDROID_SUPPORTS_RIPPLE =\n Platform.OS === 'android' && Platform.Version >= ANDROID_VERSION_LOLLIPOP;\n\n/**\n * PlatformPressable provides an abstraction on top of Pressable to handle platform differences.\n */\nexport default function PlatformPressable({\n onPressIn,\n onPressOut,\n android_ripple,\n pressColor,\n pressOpacity = 0.3,\n style,\n ...rest\n}: Props) {\n const { dark } = useTheme();\n const [opacity] = React.useState(() => new Animated.Value(1));\n\n const animateTo = (toValue: number, duration: number) => {\n if (ANDROID_SUPPORTS_RIPPLE) {\n return;\n }\n\n Animated.timing(opacity, {\n toValue,\n duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: true,\n }).start();\n };\n\n const handlePressIn = (e: GestureResponderEvent) => {\n animateTo(pressOpacity, 0);\n onPressIn?.(e);\n };\n\n const handlePressOut = (e: GestureResponderEvent) => {\n animateTo(1, 200);\n onPressOut?.(e);\n };\n\n return (\n \n );\n}\n","import * as React from 'react';\nimport {\n Dimensions,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\nimport {\n initialWindowMetrics,\n SafeAreaInsetsContext,\n SafeAreaProvider,\n} from 'react-native-safe-area-context';\n\ntype Props = {\n children: React.ReactNode;\n style?: StyleProp;\n};\n\nconst { width = 0, height = 0 } = Dimensions.get('window');\n\n// To support SSR on web, we need to have empty insets for initial values\n// Otherwise there can be mismatch between SSR and client output\n// We also need to specify empty values to support tests environments\nconst initialMetrics =\n Platform.OS === 'web' || initialWindowMetrics == null\n ? {\n frame: { x: 0, y: 0, width, height },\n insets: { top: 0, left: 0, right: 0, bottom: 0 },\n }\n : initialWindowMetrics;\n\nexport default function SafeAreaProviderCompat({ children, style }: Props) {\n return (\n \n {(insets) => {\n if (insets) {\n // If we already have insets, don't wrap the stack in another safe area provider\n // This avoids an issue with updates at the cost of potentially incorrect values\n // https://github.com/react-navigation/react-navigation/issues/174\n return {children};\n }\n\n return (\n \n {children}\n \n );\n }}\n \n );\n}\n\nSafeAreaProviderCompat.initialMetrics = initialMetrics;\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n","import {\n NavigationContext,\n NavigationProp,\n NavigationRouteContext,\n ParamListBase,\n RouteProp,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport Background from './Background';\nimport getDefaultHeaderHeight from './Header/getDefaultHeaderHeight';\nimport HeaderHeightContext from './Header/HeaderHeightContext';\nimport HeaderShownContext from './Header/HeaderShownContext';\n\ntype Props = {\n focused: boolean;\n modal?: boolean;\n navigation: NavigationProp;\n route: RouteProp;\n header: React.ReactNode;\n headerShown?: boolean;\n headerStatusBarHeight?: number;\n headerTransparent?: boolean;\n style?: StyleProp;\n children: React.ReactNode;\n};\n\nexport default function Screen(props: Props) {\n const dimensions = useSafeAreaFrame();\n const insets = useSafeAreaInsets();\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const {\n focused,\n modal = false,\n header,\n headerShown = true,\n headerTransparent,\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n navigation,\n route,\n children,\n style,\n } = props;\n\n const [headerHeight, setHeaderHeight] = React.useState(() =>\n getDefaultHeaderHeight(dimensions, modal, headerStatusBarHeight)\n );\n\n return (\n \n \n \n \n {children}\n \n \n \n {headerShown ? (\n \n \n {\n const { height } = e.nativeEvent.layout;\n\n setHeaderHeight(height);\n }}\n style={headerTransparent ? styles.absolute : null}\n >\n {header}\n \n \n \n ) : null}\n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n flexDirection: 'column-reverse',\n },\n // This is necessary to avoid applying 'column-reverse' to screen content\n content: {\n flex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n});\n","import * as React from 'react';\n\nconst contexts = '__react_navigation__elements_contexts';\n\ndeclare global {\n var __react_navigation__elements_contexts: Map>;\n}\n\n// We use a global variable to keep our contexts so that we can reuse same contexts across packages\nglobal[contexts] = global[contexts] ?? new Map>();\n\nexport default function getNamedContext(\n name: string,\n initialValue: T\n): React.Context {\n let context = global[contexts].get(name);\n\n if (context) {\n return context;\n }\n\n context = React.createContext(initialValue);\n context.displayName = name;\n\n global[contexts].set(name, context);\n\n return context;\n}\n","import {\n createNavigatorFactory,\n DefaultNavigatorOptions,\n ParamListBase,\n TabActionHelpers,\n TabNavigationState,\n TabRouter,\n TabRouterOptions,\n useNavigationBuilder,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport warnOnce from 'warn-once';\n\nimport type {\n MaterialTopTabNavigationConfig,\n MaterialTopTabNavigationEventMap,\n MaterialTopTabNavigationOptions,\n} from '../types';\nimport MaterialTopTabView from '../views/MaterialTopTabView';\n\ntype Props = DefaultNavigatorOptions<\n ParamListBase,\n TabNavigationState,\n MaterialTopTabNavigationOptions,\n MaterialTopTabNavigationEventMap\n> &\n TabRouterOptions &\n MaterialTopTabNavigationConfig;\n\nfunction MaterialTopTabNavigator({\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n ...restWithDeprecated\n}: Props) {\n const {\n // @ts-expect-error: swipeEnabled is deprecated\n swipeEnabled,\n // @ts-expect-error: lazy is deprecated\n lazy,\n // @ts-expect-error: lazyPlaceholder is deprecated\n lazyPlaceholder,\n // @ts-expect-error: lazyPreloadDistance is deprecated\n lazyPreloadDistance,\n // @ts-expect-error: tabBarOptions is deprecated\n tabBarOptions,\n ...rest\n } = restWithDeprecated;\n\n let defaultScreenOptions: MaterialTopTabNavigationOptions = {};\n\n if (tabBarOptions) {\n Object.assign(defaultScreenOptions, {\n tabBarActiveTintColor: tabBarOptions.activeTintColor,\n tabBarInactiveTintColor: tabBarOptions.inactiveTintColor,\n tabBarPressColor: tabBarOptions.pressColor,\n tabBarPressOpacity: tabBarOptions.pressOpacity,\n tabBarShowLabel: tabBarOptions.showLabel,\n tabBarShowIcon: tabBarOptions.showIcon,\n tabBarAllowFontScaling: tabBarOptions.allowFontScaling,\n tabBarBounces: tabBarOptions.bounces,\n tabBarScrollEnabled: tabBarOptions.scrollEnabled,\n tabBarIconStyle: tabBarOptions.iconStyle,\n tabBarLabelStyle: tabBarOptions.labelStyle,\n tabBarItemStyle: tabBarOptions.tabStyle,\n tabBarBadge: tabBarOptions.renderBadge,\n tabBarIndicator: tabBarOptions.renderIndicator,\n tabBarIndicatorStyle: tabBarOptions.indicatorStyle,\n tabBarIndicatorContainerStyle: tabBarOptions.indicatorContainerStyle,\n tabBarContentContainerStyle: tabBarOptions.contentContainerStyle,\n tabBarStyle: tabBarOptions.style,\n });\n\n (\n Object.keys(\n defaultScreenOptions\n ) as (keyof MaterialTopTabNavigationOptions)[]\n ).forEach((key) => {\n if (defaultScreenOptions[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete defaultScreenOptions[key];\n }\n });\n\n warnOnce(\n tabBarOptions,\n `Material Top Tab Navigator: 'tabBarOptions' is deprecated. Migrate the options to 'screenOptions' instead.\\n\\nPlace the following in 'screenOptions' in your code to keep current behavior:\\n\\n${JSON.stringify(\n defaultScreenOptions,\n null,\n 2\n )}\\n\\nSee https://reactnavigation.org/docs/material-top-tab-navigator#options for more details.`\n );\n }\n\n const deprecatedProps = {\n swipeEnabled,\n lazy,\n lazyPlaceholder,\n lazyPreloadDistance,\n } as const;\n\n Object.entries(deprecatedProps).forEach(([propName, propValue]) => {\n if (propValue !== undefined) {\n // @ts-expect-error: Object.entries doesn't return strict types\n defaultScreenOptions[propName] = propValue;\n\n warnOnce(\n true,\n `Material Top Tab Navigator: '${propName}' in props is deprecated. Move it to 'screenOptions' instead.\\n\\nSee https://reactnavigation.org/docs/material-top-tab-navigator#${propName.toLowerCase()} for more details.`\n );\n }\n });\n\n const { state, descriptors, navigation, NavigationContent } =\n useNavigationBuilder<\n TabNavigationState,\n TabRouterOptions,\n TabActionHelpers,\n MaterialTopTabNavigationOptions,\n MaterialTopTabNavigationEventMap\n >(TabRouter, {\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n defaultScreenOptions,\n });\n\n return (\n \n \n \n );\n}\n\nexport default createNavigatorFactory<\n TabNavigationState,\n MaterialTopTabNavigationOptions,\n MaterialTopTabNavigationEventMap,\n typeof MaterialTopTabNavigator\n>(MaterialTopTabNavigator);\n","import {\n ParamListBase,\n Route,\n TabNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport Color from 'color';\nimport * as React from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\nimport { TabBar, TabBarIndicator } from 'react-native-tab-view';\n\nimport type { MaterialTopTabBarProps } from '../types';\n\nexport default function TabBarTop({\n state,\n navigation,\n descriptors,\n ...rest\n}: MaterialTopTabBarProps) {\n const { colors } = useTheme();\n\n const focusedOptions = descriptors[state.routes[state.index].key].options;\n\n const activeColor = focusedOptions.tabBarActiveTintColor ?? colors.text;\n const inactiveColor =\n focusedOptions.tabBarInactiveTintColor ??\n Color(activeColor).alpha(0.5).rgb().string();\n\n return (\n \n descriptors[route.key].options.tabBarAccessibilityLabel\n }\n getTestID={({ route }) => descriptors[route.key].options.tabBarTestID}\n onTabPress={({ route, preventDefault }) => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (event.defaultPrevented) {\n preventDefault();\n }\n }}\n onTabLongPress={({ route }) =>\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n })\n }\n renderIcon={({ route, focused, color }) => {\n const { options } = descriptors[route.key];\n\n if (options.tabBarShowIcon === false) {\n return null;\n }\n\n if (options.tabBarIcon !== undefined) {\n const icon = options.tabBarIcon({ focused, color });\n\n return (\n {icon}\n );\n }\n\n return null;\n }}\n renderLabel={({ route, focused, color }) => {\n const { options } = descriptors[route.key];\n\n if (options.tabBarShowLabel === false) {\n return null;\n }\n\n const label =\n options.tabBarLabel !== undefined\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : (route as Route).name;\n\n if (typeof label === 'string') {\n return (\n \n {label}\n \n );\n }\n\n const children =\n typeof options.tabBarLabel === 'string'\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : route.name;\n\n return label({ focused, color, children });\n }}\n renderBadge={({ route }) => {\n const { tabBarBadge } = descriptors[route.key].options;\n\n return tabBarBadge?.() ?? null;\n }}\n renderIndicator={({ navigationState: state, ...rest }) => {\n return focusedOptions.tabBarIndicator ? (\n focusedOptions.tabBarIndicator({\n state: state as TabNavigationState,\n ...rest,\n })\n ) : (\n \n );\n }}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n icon: {\n height: 24,\n width: 24,\n },\n label: {\n textAlign: 'center',\n textTransform: 'uppercase',\n fontSize: 13,\n margin: 4,\n backgroundColor: 'transparent',\n },\n});\n","import {\n CommonActions,\n ParamListBase,\n Route,\n TabNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { SceneRendererProps, TabView } from 'react-native-tab-view';\n\nimport type {\n MaterialTopTabBarProps,\n MaterialTopTabDescriptorMap,\n MaterialTopTabNavigationConfig,\n MaterialTopTabNavigationHelpers,\n} from '../types';\nimport MaterialTopTabBar from './MaterialTopTabBar';\n\ntype Props = MaterialTopTabNavigationConfig & {\n state: TabNavigationState;\n navigation: MaterialTopTabNavigationHelpers;\n descriptors: MaterialTopTabDescriptorMap;\n};\n\nexport default function MaterialTopTabView({\n tabBar = (props: MaterialTopTabBarProps) => ,\n state,\n navigation,\n descriptors,\n sceneContainerStyle,\n ...rest\n}: Props) {\n const { colors } = useTheme();\n\n const renderTabBar = (props: SceneRendererProps) => {\n return tabBar({\n ...props,\n state: state,\n navigation: navigation,\n descriptors: descriptors,\n });\n };\n\n const focusedOptions = descriptors[state.routes[state.index].key].options;\n\n return (\n >\n {...rest}\n onIndexChange={(index) =>\n navigation.dispatch({\n ...CommonActions.navigate({\n name: state.routes[index].name,\n merge: true,\n }),\n target: state.key,\n })\n }\n renderScene={({ route }) => descriptors[route.key].render()}\n navigationState={state}\n renderTabBar={renderTabBar}\n renderLazyPlaceholder={({ route }) =>\n descriptors[route.key].options.lazyPlaceholder?.() ?? null\n }\n lazy={({ route }) => descriptors[route.key].options.lazy === true}\n lazyPreloadDistance={focusedOptions.lazyPreloadDistance}\n swipeEnabled={focusedOptions.swipeEnabled}\n animationEnabled={focusedOptions.animationEnabled}\n onSwipeStart={() => navigation.emit({ type: 'swipeStart' })}\n onSwipeEnd={() => navigation.emit({ type: 'swipeEnd' })}\n sceneContainerStyle={[\n { backgroundColor: colors.background },\n sceneContainerStyle,\n ]}\n />\n );\n}\n","import {\n createNavigatorFactory,\n EventArg,\n ParamListBase,\n StackActionHelpers,\n StackActions,\n StackNavigationState,\n StackRouter,\n StackRouterOptions,\n useNavigationBuilder,\n} from '@react-navigation/native';\nimport * as React from 'react';\n\nimport type {\n NativeStackNavigationEventMap,\n NativeStackNavigationOptions,\n NativeStackNavigatorProps,\n} from '../types';\nimport NativeStackView from '../views/NativeStackView';\n\nfunction NativeStackNavigator({\n id,\n initialRouteName,\n children,\n screenListeners,\n screenOptions,\n ...rest\n}: NativeStackNavigatorProps) {\n const { state, descriptors, navigation, NavigationContent } =\n useNavigationBuilder<\n StackNavigationState,\n StackRouterOptions,\n StackActionHelpers,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap\n >(StackRouter, {\n id,\n initialRouteName,\n children,\n screenListeners,\n screenOptions,\n });\n\n React.useEffect(\n () =>\n // @ts-expect-error: there may not be a tab navigator in parent\n navigation?.addListener?.('tabPress', (e: any) => {\n const isFocused = navigation.isFocused();\n\n // Run the operation in the next frame so we're sure all listeners have been run\n // This is necessary to know if preventDefault() has been called\n requestAnimationFrame(() => {\n if (\n state.index > 0 &&\n isFocused &&\n !(e as EventArg<'tabPress', true>).defaultPrevented\n ) {\n // When user taps on already focused tab and we're inside the tab,\n // reset the stack to replicate native behaviour\n navigation.dispatch({\n ...StackActions.popToTop(),\n target: state.key,\n });\n }\n });\n }),\n [navigation, state.index, state.key]\n );\n\n return (\n \n \n \n );\n}\n\nexport default createNavigatorFactory<\n StackNavigationState,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap,\n typeof NativeStackNavigator\n>(NativeStackNavigator);\n","import {\n getHeaderTitle,\n Header,\n HeaderBackButton,\n HeaderBackContext,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n StackNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\n\nimport type {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n} from '../types';\n\ntype Props = {\n state: StackNavigationState;\n // This is used for the native implementation of the stack.\n // eslint-disable-next-line react/no-unused-prop-types\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nconst TRANSPARENT_PRESENTATIONS = [\n 'transparentModal',\n 'containedTransparentModal',\n];\n\nexport default function NativeStackView({ state, descriptors }: Props) {\n const parentHeaderBack = React.useContext(HeaderBackContext);\n\n return (\n \n \n {state.routes.map((route, i) => {\n const isFocused = state.index === i;\n const previousKey = state.routes[i - 1]?.key;\n const nextKey = state.routes[i + 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n const { options, navigation, render } = descriptors[route.key];\n\n const headerBack = previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : parentHeaderBack;\n\n const canGoBack = headerBack !== undefined;\n\n const {\n header,\n headerShown,\n headerTintColor,\n headerBackImageSource,\n headerLeft,\n headerRight,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerStyle,\n headerShadowVisible,\n headerTransparent,\n headerBackground,\n headerBackTitle,\n presentation,\n contentStyle,\n } = options;\n\n const nextPresentation = nextDescriptor?.options.presentation;\n\n return (\n \n headerLeft({\n tintColor,\n canGoBack,\n label: headerBackTitle,\n })\n : headerLeft === undefined && canGoBack\n ? ({ tintColor }) => (\n (\n \n )\n : undefined\n }\n onPress={navigation.goBack}\n canGoBack={canGoBack}\n />\n )\n : headerLeft\n }\n headerRight={\n typeof headerRight === 'function'\n ? ({ tintColor }) =>\n headerRight({ tintColor, canGoBack })\n : headerRight\n }\n headerTitle={\n typeof headerTitle === 'function'\n ? ({ children, tintColor }) =>\n headerTitle({ children, tintColor })\n : headerTitle\n }\n headerTitleAlign={headerTitleAlign}\n headerTitleStyle={headerTitleStyle}\n headerTransparent={headerTransparent}\n headerShadowVisible={headerShadowVisible}\n headerBackground={headerBackground}\n headerStyle={headerStyle}\n />\n )\n }\n style={[\n StyleSheet.absoluteFill,\n {\n display:\n isFocused ||\n (nextPresentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(nextPresentation))\n ? 'flex'\n : 'none',\n },\n presentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(presentation)\n ? { backgroundColor: 'transparent' }\n : null,\n ]}\n >\n \n \n {render()}\n \n \n \n );\n })}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n contentContainer: {\n flex: 1,\n },\n backImage: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n },\n});\n","import type { ParamListBase } from '@react-navigation/core';\nimport * as React from 'react';\n\nimport type { LinkingOptions } from './types';\n\nconst LinkingContext = React.createContext<{\n options: LinkingOptions | undefined;\n}>({ options: undefined });\n\nLinkingContext.displayName = 'LinkingContext';\n\nexport default LinkingContext;\n","import {\n BaseNavigationContainer,\n getActionFromState,\n getPathFromState,\n getStateFromPath,\n NavigationContainerProps,\n NavigationContainerRef,\n ParamListBase,\n validatePathConfig,\n} from '@react-navigation/core';\nimport * as React from 'react';\n\nimport LinkingContext from './LinkingContext';\nimport DefaultTheme from './theming/DefaultTheme';\nimport ThemeProvider from './theming/ThemeProvider';\nimport type { DocumentTitleOptions, LinkingOptions, Theme } from './types';\nimport useBackButton from './useBackButton';\nimport useDocumentTitle from './useDocumentTitle';\nimport useLinking from './useLinking';\nimport useThenable from './useThenable';\n\ndeclare global {\n var REACT_NAVIGATION_DEVTOOLS: WeakMap<\n NavigationContainerRef,\n { readonly linking: LinkingOptions }\n >;\n}\n\nglobal.REACT_NAVIGATION_DEVTOOLS = new WeakMap();\n\ntype Props = NavigationContainerProps & {\n theme?: Theme;\n linking?: LinkingOptions;\n fallback?: React.ReactNode;\n documentTitle?: DocumentTitleOptions;\n onReady?: () => void;\n};\n\n/**\n * Container component which holds the navigation state designed for React Native apps.\n * This should be rendered at the root wrapping the whole app.\n *\n * @param props.initialState Initial state object for the navigation tree. When deep link handling is enabled, this will override deep links when specified. Make sure that you don't specify an `initialState` when there's a deep link (`Linking.getInitialURL()`).\n * @param props.onReady Callback which is called after the navigation tree mounts.\n * @param props.onStateChange Callback which is called with the latest navigation state when it changes.\n * @param props.theme Theme object for the navigators.\n * @param props.linking Options for deep linking. Deep link handling is enabled when this prop is provided, unless `linking.enabled` is `false`.\n * @param props.fallback Fallback component to render until we have finished getting initial state when linking is enabled. Defaults to `null`.\n * @param props.documentTitle Options to configure the document title on Web. Updating document title is handled by default unless `documentTitle.enabled` is `false`.\n * @param props.children Child elements to render the content.\n * @param props.ref Ref object which refers to the navigation object containing helper methods.\n */\nfunction NavigationContainerInner(\n {\n theme = DefaultTheme,\n linking,\n fallback = null,\n documentTitle,\n onReady,\n ...rest\n }: Props,\n ref?: React.Ref | null>\n) {\n const isLinkingEnabled = linking ? linking.enabled !== false : false;\n\n if (linking?.config) {\n validatePathConfig(linking.config);\n }\n\n const refContainer =\n React.useRef>(null);\n\n useBackButton(refContainer);\n useDocumentTitle(refContainer, documentTitle);\n\n const { getInitialState } = useLinking(refContainer, {\n independent: rest.independent,\n enabled: isLinkingEnabled,\n prefixes: [],\n ...linking,\n });\n\n // Add additional linking related info to the ref\n // This will be used by the devtools\n React.useEffect(() => {\n if (refContainer.current) {\n REACT_NAVIGATION_DEVTOOLS.set(refContainer.current, {\n get linking() {\n return {\n ...linking,\n enabled: isLinkingEnabled,\n prefixes: linking?.prefixes ?? [],\n getStateFromPath: linking?.getStateFromPath ?? getStateFromPath,\n getPathFromState: linking?.getPathFromState ?? getPathFromState,\n getActionFromState:\n linking?.getActionFromState ?? getActionFromState,\n };\n },\n });\n }\n });\n\n const [isResolved, initialState] = useThenable(getInitialState);\n\n React.useImperativeHandle(ref, () => refContainer.current);\n\n const linkingContext = React.useMemo(() => ({ options: linking }), [linking]);\n\n const isReady = rest.initialState != null || !isLinkingEnabled || isResolved;\n\n const onReadyRef = React.useRef(onReady);\n\n React.useEffect(() => {\n onReadyRef.current = onReady;\n });\n\n React.useEffect(() => {\n if (isReady) {\n onReadyRef.current?.();\n }\n }, [isReady]);\n\n if (!isReady) {\n // This is temporary until we have Suspense for data-fetching\n // Then the fallback will be handled by a parent `Suspense` component\n return fallback as React.ReactElement;\n }\n\n return (\n \n \n \n \n \n );\n}\n\nconst NavigationContainer = React.forwardRef(NavigationContainerInner) as <\n RootParamList extends {} = ReactNavigation.RootParamList\n>(\n props: Props & {\n ref?: React.Ref>;\n }\n) => React.ReactElement;\n\nexport default NavigationContainer;\n","import * as React from 'react';\n\nexport type ServerContextType = {\n location?: {\n pathname: string;\n search: string;\n };\n};\n\nconst ServerContext = React.createContext(\n undefined\n);\n\nexport default ServerContext;\n","import type { NavigationState } from '@react-navigation/core';\nimport { nanoid } from 'nanoid/non-secure';\n\ntype HistoryRecord = {\n // Unique identifier for this record to match it with window.history.state\n id: string;\n // Navigation state object for the history entry\n state: NavigationState;\n // Path of the history entry\n path: string;\n};\n\nexport default function createMemoryHistory() {\n let index = 0;\n let items: HistoryRecord[] = [];\n\n // Pending callbacks for `history.go(n)`\n // We might modify the callback stored if it was interrupted, so we have a ref to identify it\n const pending: { ref: unknown; cb: (interrupted?: boolean) => void }[] = [];\n\n const interrupt = () => {\n // If another history operation was performed we need to interrupt existing ones\n // This makes sure that calls such as `history.replace` after `history.go` don't happen\n // Since otherwise it won't be correct if something else has changed\n pending.forEach((it) => {\n const cb = it.cb;\n it.cb = () => cb(true);\n });\n };\n\n const history = {\n get index(): number {\n // We store an id in the state instead of an index\n // Index could get out of sync with in-memory values if page reloads\n const id = window.history.state?.id;\n\n if (id) {\n const index = items.findIndex((item) => item.id === id);\n\n return index > -1 ? index : 0;\n }\n\n return 0;\n },\n\n get(index: number) {\n return items[index];\n },\n\n backIndex({ path }: { path: string }) {\n // We need to find the index from the element before current to get closest path to go back to\n for (let i = index - 1; i >= 0; i--) {\n const item = items[i];\n\n if (item.path === path) {\n return i;\n }\n }\n\n return -1;\n },\n\n push({ path, state }: { path: string; state: NavigationState }) {\n interrupt();\n\n const id = nanoid();\n\n // When a new entry is pushed, all the existing entries after index will be inaccessible\n // So we remove any existing entries after the current index to clean them up\n items = items.slice(0, index + 1);\n\n items.push({ path, state, id });\n index = items.length - 1;\n\n // We pass empty string for title because it's ignored in all browsers except safari\n // We don't store state object in history.state because:\n // - browsers have limits on how big it can be, and we don't control the size\n // - while not recommended, there could be non-serializable data in state\n window.history.pushState({ id }, '', path);\n },\n\n replace({ path, state }: { path: string; state: NavigationState }) {\n interrupt();\n\n const id = window.history.state?.id ?? nanoid();\n\n // Need to keep the hash part of the path if there was no previous history entry\n // or the previous history entry had the same path\n let pathWithHash = path;\n\n if (!items.length || items.findIndex((item) => item.id === id) < 0) {\n // There are two scenarios for creating an array with only one history record:\n // - When loaded id not found in the items array, this function by default will replace\n // the first item. We need to keep only the new updated object, otherwise it will break\n // the page when navigating forward in history.\n // - This is the first time any state modifications are done\n // So we need to push the entry as there's nothing to replace\n pathWithHash = pathWithHash + location.hash;\n items = [{ path: pathWithHash, state, id }];\n index = 0;\n } else {\n if (items[index].path === path) {\n pathWithHash = pathWithHash + location.hash;\n }\n items[index] = { path, state, id };\n }\n\n window.history.replaceState({ id }, '', pathWithHash);\n },\n\n // `history.go(n)` is asynchronous, there are couple of things to keep in mind:\n // - it won't do anything if we can't go `n` steps, the `popstate` event won't fire.\n // - each `history.go(n)` call will trigger a separate `popstate` event with correct location.\n // - the `popstate` event fires before the next frame after calling `history.go(n)`.\n // This method differs from `history.go(n)` in the sense that it'll go back as many steps it can.\n go(n: number) {\n interrupt();\n\n // To guard against unexpected navigation out of the app we will assume that browser history is only as deep as the length of our memory\n // history. If we don't have an item to navigate to then update our index and navigate as far as we can without taking the user out of the app.\n const nextIndex = index + n;\n const lastItemIndex = items.length - 1;\n if (n < 0 && !items[nextIndex]) {\n // Attempted to navigate beyond the first index. Negating the current index will align the browser history with the first item.\n n = -index;\n index = 0;\n } else if (n > 0 && nextIndex > lastItemIndex) {\n // Attempted to navigate past the last index. Calculate how many indices away from the last index and go there.\n n = lastItemIndex - index;\n index = lastItemIndex;\n } else {\n index = nextIndex;\n }\n\n if (n === 0) {\n return;\n }\n\n // When we call `history.go`, `popstate` will fire when there's history to go back to\n // So we need to somehow handle following cases:\n // - There's history to go back, `history.go` is called, and `popstate` fires\n // - `history.go` is called multiple times, we need to resolve on respective `popstate`\n // - No history to go back, but `history.go` was called, browser has no API to detect it\n return new Promise((resolve, reject) => {\n const done = (interrupted?: boolean) => {\n clearTimeout(timer);\n\n if (interrupted) {\n reject(new Error('History was changed during navigation.'));\n return;\n }\n\n // There seems to be a bug in Chrome regarding updating the title\n // If we set a title just before calling `history.go`, the title gets lost\n // However the value of `document.title` is still what we set it to\n // It's just not displayed in the tab bar\n // To update the tab bar, we need to reset the title to something else first (e.g. '')\n // And set the title to what it was before so it gets applied\n // It won't work without setting it to empty string coz otherwise title isn't changing\n // Which means that the browser won't do anything after setting the title\n const { title } = window.document;\n\n window.document.title = '';\n window.document.title = title;\n\n resolve();\n };\n\n pending.push({ ref: done, cb: done });\n\n // If navigation didn't happen within 100ms, assume that it won't happen\n // This may not be accurate, but hopefully it won't take so much time\n // In Chrome, navigation seems to happen instantly in next microtask\n // But on Firefox, it seems to take much longer, around 50ms from our testing\n // We're using a hacky timeout since there doesn't seem to be way to know for sure\n const timer = setTimeout(() => {\n const index = pending.findIndex((it) => it.ref === done);\n\n if (index > -1) {\n pending[index].cb();\n pending.splice(index, 1);\n }\n }, 100);\n\n const onPopState = () => {\n const id = window.history.state?.id;\n const currentIndex = items.findIndex((item) => item.id === id);\n\n // Fix createMemoryHistory.index variable's value\n // as it may go out of sync when navigating in the browser.\n index = Math.max(currentIndex, 0);\n\n const last = pending.pop();\n\n window.removeEventListener('popstate', onPopState);\n last?.cb();\n };\n\n window.addEventListener('popstate', onPopState);\n window.history.go(n);\n });\n },\n\n // The `popstate` event is triggered when history changes, except `pushState` and `replaceState`\n // If we call `history.go(n)` ourselves, we don't want it to trigger the listener\n // Here we normalize it so that only external changes (e.g. user pressing back/forward) trigger the listener\n listen(listener: () => void) {\n const onPopState = () => {\n if (pending.length) {\n // This was triggered by `history.go(n)`, we shouldn't call the listener\n return;\n }\n\n listener();\n };\n\n window.addEventListener('popstate', onPopState);\n\n return () => window.removeEventListener('popstate', onPopState);\n },\n };\n\n return history;\n}\n","import type { Theme } from '../types';\n\nconst DefaultTheme: Theme = {\n dark: false,\n colors: {\n primary: 'rgb(0, 122, 255)',\n background: 'rgb(242, 242, 242)',\n card: 'rgb(255, 255, 255)',\n text: 'rgb(28, 28, 30)',\n border: 'rgb(216, 216, 216)',\n notification: 'rgb(255, 59, 48)',\n },\n};\n\nexport default DefaultTheme;\n","import * as React from 'react';\n\nimport type { Theme } from '../types';\nimport DefaultTheme from './DefaultTheme';\n\nconst ThemeContext = React.createContext(DefaultTheme);\n\nThemeContext.displayName = 'ThemeContext';\n\nexport default ThemeContext;\n","import * as React from 'react';\n\nimport type { Theme } from '../types';\nimport ThemeContext from './ThemeContext';\n\ntype Props = {\n value: Theme;\n children: React.ReactNode;\n};\n\nexport default function ThemeProvider({ value, children }: Props) {\n return (\n {children}\n );\n}\n","import * as React from 'react';\n\nimport ThemeContext from './ThemeContext';\n\nexport default function useTheme() {\n const theme = React.useContext(ThemeContext);\n\n return theme;\n}\n","import type {\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { BackHandler } from 'react-native';\n\nexport default function useBackButton(\n ref: React.RefObject>\n) {\n React.useEffect(() => {\n const subscription = BackHandler.addEventListener(\n 'hardwareBackPress',\n () => {\n const navigation = ref.current;\n\n if (navigation == null) {\n return false;\n }\n\n if (navigation.canGoBack()) {\n navigation.goBack();\n\n return true;\n }\n\n return false;\n }\n );\n\n return () => subscription.remove();\n }, [ref]);\n}\n","import type {\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\n\nimport type { DocumentTitleOptions } from './types';\n\n/**\n * Set the document title for the active screen\n */\nexport default function useDocumentTitle(\n ref: React.RefObject>,\n {\n enabled = true,\n formatter = (options, route) => options?.title ?? route?.name,\n }: DocumentTitleOptions = {}\n) {\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const navigation = ref.current;\n\n if (navigation) {\n const title = formatter(\n navigation.getCurrentOptions(),\n navigation.getCurrentRoute()\n );\n\n document.title = title;\n }\n\n return navigation?.addListener('options', (e) => {\n const title = formatter(e.data.options, navigation?.getCurrentRoute());\n\n document.title = title;\n });\n });\n}\n","import {\n findFocusedRoute,\n getActionFromState as getActionFromStateDefault,\n getPathFromState as getPathFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n NavigationState,\n ParamListBase,\n} from '@react-navigation/core';\nimport isEqual from 'fast-deep-equal';\nimport * as React from 'react';\n\nimport createMemoryHistory from './createMemoryHistory';\nimport ServerContext from './ServerContext';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType;\n\n/**\n * Find the matching navigation state that changed between 2 navigation states\n * e.g.: a -> b -> c -> d and a -> b -> c -> e -> f, if history in b changed, b is the matching state\n */\nconst findMatchingState = (\n a: T | undefined,\n b: T | undefined\n): [T | undefined, T | undefined] => {\n if (a === undefined || b === undefined || a.key !== b.key) {\n return [undefined, undefined];\n }\n\n // Tab and drawer will have `history` property, but stack will have history in `routes`\n const aHistoryLength = a.history ? a.history.length : a.routes.length;\n const bHistoryLength = b.history ? b.history.length : b.routes.length;\n\n const aRoute = a.routes[a.index];\n const bRoute = b.routes[b.index];\n\n const aChildState = aRoute.state as T | undefined;\n const bChildState = bRoute.state as T | undefined;\n\n // Stop here if this is the state object that changed:\n // - history length is different\n // - focused routes are different\n // - one of them doesn't have child state\n // - child state keys are different\n if (\n aHistoryLength !== bHistoryLength ||\n aRoute.key !== bRoute.key ||\n aChildState === undefined ||\n bChildState === undefined ||\n aChildState.key !== bChildState.key\n ) {\n return [a, b];\n }\n\n return findMatchingState(aChildState, bChildState);\n};\n\n/**\n * Run async function in series as it's called.\n */\nconst series = (cb: () => Promise) => {\n // Whether we're currently handling a callback\n let handling = false;\n let queue: (() => Promise)[] = [];\n\n const callback = async () => {\n try {\n if (handling) {\n // If we're currently handling a previous event, wait before handling this one\n // Add the callback to the beginning of the queue\n queue.unshift(callback);\n return;\n }\n\n handling = true;\n\n await cb();\n } finally {\n handling = false;\n\n if (queue.length) {\n // If we have queued items, handle the last one\n const last = queue.pop();\n\n last?.();\n }\n }\n };\n\n return callback;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\ntype Options = LinkingOptions & {\n independent?: boolean;\n};\n\nexport default function useLinking(\n ref: React.RefObject>,\n {\n independent,\n enabled = true,\n config,\n getStateFromPath = getStateFromPathDefault,\n getPathFromState = getPathFromStateDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n const [history] = React.useState(createMemoryHistory);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const configRef = React.useRef(config);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getPathFromStateRef = React.useRef(getPathFromState);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n configRef.current = config;\n getStateFromPathRef.current = getStateFromPath;\n getPathFromStateRef.current = getPathFromState;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const server = React.useContext(ServerContext);\n\n const getInitialState = React.useCallback(() => {\n let value: ResultState | undefined;\n\n if (enabledRef.current) {\n const location =\n server?.location ??\n (typeof window !== 'undefined' ? window.location : undefined);\n\n const path = location ? location.pathname + location.search : undefined;\n\n if (path) {\n value = getStateFromPathRef.current(path, configRef.current);\n }\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(value) : value);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const previousIndexRef = React.useRef(undefined);\n const previousStateRef = React.useRef(undefined);\n const pendingPopStatePathRef = React.useRef(undefined);\n\n React.useEffect(() => {\n previousIndexRef.current = history.index;\n\n return history.listen(() => {\n const navigation = ref.current;\n\n if (!navigation || !enabled) {\n return;\n }\n\n const path = location.pathname + location.search;\n const index = history.index;\n\n const previousIndex = previousIndexRef.current ?? 0;\n\n previousIndexRef.current = index;\n pendingPopStatePathRef.current = path;\n\n // When browser back/forward is clicked, we first need to check if state object for this index exists\n // If it does we'll reset to that state object\n // Otherwise, we'll handle it like a regular deep link\n const record = history.get(index);\n\n if (record?.path === path && record?.state) {\n navigation.resetRoot(record.state);\n return;\n }\n\n const state = getStateFromPathRef.current(path, configRef.current);\n\n // We should only dispatch an action when going forward\n // Otherwise the action will likely add items to history, which would mess things up\n if (state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n if (index > previousIndex) {\n const action = getActionFromStateRef.current(\n state,\n configRef.current\n );\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${path}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n navigation.resetRoot(state);\n }\n } else {\n // if current path didn't return any state, we should revert to initial state\n navigation.resetRoot(state);\n }\n });\n }, [enabled, history, ref]);\n\n React.useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const getPathForRoute = (\n route: ReturnType,\n state: NavigationState\n ): string => {\n // If the `route` object contains a `path`, use that path as long as `route.name` and `params` still match\n // This makes sure that we preserve the original URL for wildcard routes\n if (route?.path) {\n const stateForPath = getStateFromPathRef.current(\n route.path,\n configRef.current\n );\n\n if (stateForPath) {\n const focusedRoute = findFocusedRoute(stateForPath);\n\n if (\n focusedRoute &&\n focusedRoute.name === route.name &&\n isEqual(focusedRoute.params, route.params)\n ) {\n return route.path;\n }\n }\n }\n\n return getPathFromStateRef.current(state, configRef.current);\n };\n\n if (ref.current) {\n // We need to record the current metadata on the first render if they aren't set\n // This will allow the initial state to be in the history entry\n const state = ref.current.getRootState();\n\n if (state) {\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n\n if (previousStateRef.current === undefined) {\n previousStateRef.current = state;\n }\n\n history.replace({ path, state });\n }\n }\n\n const onStateChange = async () => {\n const navigation = ref.current;\n\n if (!navigation || !enabled) {\n return;\n }\n\n const previousState = previousStateRef.current;\n const state = navigation.getRootState();\n\n // root state may not available, for example when root navigators switch inside the container\n if (!state) {\n return;\n }\n\n const pendingPath = pendingPopStatePathRef.current;\n const route = findFocusedRoute(state);\n const path = getPathForRoute(route, state);\n\n previousStateRef.current = state;\n pendingPopStatePathRef.current = undefined;\n\n // To detect the kind of state change, we need to:\n // - Find the common focused navigation state in previous and current state\n // - If only the route keys changed, compare history/routes.length to check if we go back/forward/replace\n // - If no common focused navigation state found, it's a replace\n const [previousFocusedState, focusedState] = findMatchingState(\n previousState,\n state\n );\n\n if (\n previousFocusedState &&\n focusedState &&\n // We should only handle push/pop if path changed from what was in last `popstate`\n // Otherwise it's likely a change triggered by `popstate`\n path !== pendingPath\n ) {\n const historyDelta =\n (focusedState.history\n ? focusedState.history.length\n : focusedState.routes.length) -\n (previousFocusedState.history\n ? previousFocusedState.history.length\n : previousFocusedState.routes.length);\n\n if (historyDelta > 0) {\n // If history length is increased, we should pushState\n // Note that path might not actually change here, for example, drawer open should pushState\n history.push({ path, state });\n } else if (historyDelta < 0) {\n // If history length is decreased, i.e. entries were removed, we want to go back\n\n const nextIndex = history.backIndex({ path });\n const currentIndex = history.index;\n\n try {\n if (nextIndex !== -1 && nextIndex < currentIndex) {\n // An existing entry for this path exists and it's less than current index, go back to that\n await history.go(nextIndex - currentIndex);\n } else {\n // We couldn't find an existing entry to go back to, so we'll go back by the delta\n // This won't be correct if multiple routes were pushed in one go before\n // Usually this shouldn't happen and this is a fallback for that\n await history.go(historyDelta);\n }\n\n // Store the updated state as well as fix the path if incorrect\n history.replace({ path, state });\n } catch (e) {\n // The navigation was interrupted\n }\n } else {\n // If history length is unchanged, we want to replaceState\n history.replace({ path, state });\n }\n } else {\n // If no common navigation state was found, assume it's a replace\n // This would happen if the user did a reset/conditionally changed navigators\n history.replace({ path, state });\n }\n };\n\n // We debounce onStateChange coz we don't want multiple state changes to be handled at one time\n // This could happen since `history.go(n)` is asynchronous\n // If `pushState` or `replaceState` were called before `history.go(n)` completes, it'll mess stuff up\n return ref.current?.addListener('state', series(onStateChange));\n }, [enabled, history, ref]);\n\n return {\n getInitialState,\n };\n}\n","import * as React from 'react';\n\nexport default function useThenable(create: () => PromiseLike) {\n const [promise] = React.useState(create);\n\n let initialState: [boolean, T | undefined] = [false, undefined];\n\n // Check if our thenable is synchronous\n promise.then((result) => {\n initialState = [true, result];\n });\n\n const [state, setState] = React.useState(initialState);\n const [resolved] = state;\n\n React.useEffect(() => {\n let cancelled = false;\n\n const resolve = async () => {\n let result;\n\n try {\n result = await promise;\n } finally {\n if (!cancelled) {\n setState([true, result]);\n }\n }\n };\n\n if (!resolved) {\n resolve();\n }\n\n return () => {\n cancelled = true;\n };\n }, [promise, resolved]);\n\n return state;\n}\n","import { nanoid } from 'nanoid/non-secure';\n\nimport type {\n CommonNavigationAction,\n NavigationState,\n PartialState,\n} from './types';\n\n/**\n * Base router object that can be used when writing custom routers.\n * This provides few helper methods to handle common actions such as `RESET`.\n */\nconst BaseRouter = {\n getStateForAction(\n state: State,\n action: CommonNavigationAction\n ): State | PartialState | null {\n switch (action.type) {\n case 'SET_PARAMS': {\n const index = action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((r, i) =>\n i === index\n ? { ...r, params: { ...r.params, ...action.payload.params } }\n : r\n ),\n };\n }\n\n case 'RESET': {\n const nextState = action.payload as State | PartialState;\n\n if (\n nextState.routes.length === 0 ||\n nextState.routes.some(\n (route: { name: string }) => !state.routeNames.includes(route.name)\n )\n ) {\n return null;\n }\n\n if (nextState.stale === false) {\n if (\n state.routeNames.length !== nextState.routeNames.length ||\n nextState.routeNames.some(\n (name) => !state.routeNames.includes(name)\n )\n ) {\n return null;\n }\n\n return {\n ...nextState,\n routes: nextState.routes.map((route) =>\n route.key ? route : { ...route, key: `${route.name}-${nanoid()}` }\n ),\n };\n }\n\n return nextState;\n }\n\n default:\n return null;\n }\n },\n\n shouldActionChangeFocus(action: CommonNavigationAction) {\n return action.type === 'NAVIGATE';\n },\n};\n\nexport default BaseRouter;\n","import type { NavigationState, PartialState, Route } from './types';\n\ntype ResetState =\n | PartialState\n | NavigationState\n | (Omit & {\n routes: Omit, 'key'>[];\n });\n\nexport type Action =\n | {\n type: 'GO_BACK';\n source?: string;\n target?: string;\n }\n | {\n type: 'NAVIGATE';\n payload:\n | {\n key: string;\n name?: undefined;\n params?: object;\n path?: string;\n merge?: boolean;\n }\n | {\n name: string;\n key?: string;\n params?: object;\n path?: string;\n merge?: boolean;\n };\n source?: string;\n target?: string;\n }\n | {\n type: 'RESET';\n payload: ResetState | undefined;\n source?: string;\n target?: string;\n }\n | {\n type: 'SET_PARAMS';\n payload: { params?: object };\n source?: string;\n target?: string;\n };\n\nexport function goBack(): Action {\n return { type: 'GO_BACK' };\n}\n\nexport function navigate(\n options:\n | { key: string; params?: object; path?: string; merge?: boolean }\n | {\n name: string;\n key?: string;\n params?: object;\n path?: string;\n merge?: boolean;\n }\n): Action;\n// eslint-disable-next-line no-redeclare\nexport function navigate(name: string, params?: object): Action;\n// eslint-disable-next-line no-redeclare\nexport function navigate(...args: any): Action {\n if (typeof args[0] === 'string') {\n return { type: 'NAVIGATE', payload: { name: args[0], params: args[1] } };\n } else {\n const payload = args[0] || {};\n\n if (!payload.hasOwnProperty('key') && !payload.hasOwnProperty('name')) {\n throw new Error(\n 'You need to specify name or key when calling navigate with an object as the argument. See https://reactnavigation.org/docs/navigation-actions#navigate for usage.'\n );\n }\n\n return { type: 'NAVIGATE', payload };\n }\n}\n\nexport function reset(state: ResetState | undefined): Action {\n return { type: 'RESET', payload: state };\n}\n\nexport function setParams(params: object): Action {\n return { type: 'SET_PARAMS', payload: { params } };\n}\n","import { nanoid } from 'nanoid/non-secure';\n\nimport TabRouter, {\n TabActionHelpers,\n TabActions,\n TabActionType,\n TabNavigationState,\n TabRouterOptions,\n} from './TabRouter';\nimport type {\n CommonNavigationAction,\n ParamListBase,\n PartialState,\n Router,\n} from './types';\nexport type DrawerStatus = 'open' | 'closed';\n\nexport type DrawerActionType =\n | TabActionType\n | {\n type: 'OPEN_DRAWER' | 'CLOSE_DRAWER' | 'TOGGLE_DRAWER';\n source?: string;\n target?: string;\n };\n\nexport type DrawerRouterOptions = TabRouterOptions & {\n defaultStatus?: DrawerStatus;\n};\n\nexport type DrawerNavigationState = Omit<\n TabNavigationState,\n 'type' | 'history'\n> & {\n /**\n * Type of the router, in this case, it's drawer.\n */\n type: 'drawer';\n /**\n * Default status of the drawer.\n */\n default: DrawerStatus;\n /**\n * List of previously visited route keys and drawer open status.\n */\n history: (\n | { type: 'route'; key: string }\n | { type: 'drawer'; status: DrawerStatus }\n )[];\n};\n\nexport type DrawerActionHelpers =\n TabActionHelpers & {\n /**\n * Open the drawer sidebar.\n */\n openDrawer(): void;\n\n /**\n * Close the drawer sidebar.\n */\n closeDrawer(): void;\n\n /**\n * Open the drawer sidebar if closed, or close if opened.\n */\n toggleDrawer(): void;\n };\n\nexport const DrawerActions = {\n ...TabActions,\n openDrawer(): DrawerActionType {\n return { type: 'OPEN_DRAWER' };\n },\n closeDrawer(): DrawerActionType {\n return { type: 'CLOSE_DRAWER' };\n },\n toggleDrawer(): DrawerActionType {\n return { type: 'TOGGLE_DRAWER' };\n },\n};\n\nexport default function DrawerRouter({\n defaultStatus = 'closed',\n ...rest\n}: DrawerRouterOptions): Router<\n DrawerNavigationState,\n DrawerActionType | CommonNavigationAction\n> {\n const router = TabRouter(rest) as unknown as Router<\n DrawerNavigationState,\n TabActionType | CommonNavigationAction\n >;\n\n const isDrawerInHistory = (\n state:\n | DrawerNavigationState\n | PartialState>\n ) => Boolean(state.history?.some((it) => it.type === 'drawer'));\n\n const addDrawerToHistory = (\n state: DrawerNavigationState\n ): DrawerNavigationState => {\n if (isDrawerInHistory(state)) {\n return state;\n }\n\n return {\n ...state,\n history: [\n ...state.history,\n {\n type: 'drawer',\n status: defaultStatus === 'open' ? 'closed' : 'open',\n },\n ],\n };\n };\n\n const removeDrawerFromHistory = (\n state: DrawerNavigationState\n ): DrawerNavigationState => {\n if (!isDrawerInHistory(state)) {\n return state;\n }\n\n return {\n ...state,\n history: state.history.filter((it) => it.type !== 'drawer'),\n };\n };\n\n const openDrawer = (\n state: DrawerNavigationState\n ): DrawerNavigationState => {\n if (defaultStatus === 'open') {\n return removeDrawerFromHistory(state);\n }\n\n return addDrawerToHistory(state);\n };\n\n const closeDrawer = (\n state: DrawerNavigationState\n ): DrawerNavigationState => {\n if (defaultStatus === 'open') {\n return addDrawerToHistory(state);\n }\n\n return removeDrawerFromHistory(state);\n };\n\n return {\n ...router,\n\n type: 'drawer',\n\n getInitialState({ routeNames, routeParamList, routeGetIdList }) {\n const state = router.getInitialState({\n routeNames,\n routeParamList,\n routeGetIdList,\n });\n\n return {\n ...state,\n default: defaultStatus,\n stale: false,\n type: 'drawer',\n key: `drawer-${nanoid()}`,\n };\n },\n\n getRehydratedState(\n partialState,\n { routeNames, routeParamList, routeGetIdList }\n ) {\n if (partialState.stale === false) {\n return partialState;\n }\n\n let state = router.getRehydratedState(partialState, {\n routeNames,\n routeParamList,\n routeGetIdList,\n });\n\n if (isDrawerInHistory(partialState)) {\n // Re-sync the drawer entry in history to correct it if it was wrong\n state = removeDrawerFromHistory(state);\n state = addDrawerToHistory(state);\n }\n\n return {\n ...state,\n default: defaultStatus,\n type: 'drawer',\n key: `drawer-${nanoid()}`,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const result = router.getStateForRouteFocus(state, key);\n\n return closeDrawer(result);\n },\n\n getStateForAction(state, action, options) {\n switch (action.type) {\n case 'OPEN_DRAWER':\n return openDrawer(state);\n\n case 'CLOSE_DRAWER':\n return closeDrawer(state);\n\n case 'TOGGLE_DRAWER':\n if (isDrawerInHistory(state)) {\n return removeDrawerFromHistory(state);\n }\n\n return addDrawerToHistory(state);\n\n case 'JUMP_TO':\n case 'NAVIGATE': {\n const result = router.getStateForAction(state, action, options);\n\n if (result != null && result.index !== state.index) {\n return closeDrawer(result as DrawerNavigationState);\n }\n\n return result;\n }\n\n case 'GO_BACK':\n if (isDrawerInHistory(state)) {\n return removeDrawerFromHistory(state);\n }\n\n return router.getStateForAction(state, action, options);\n\n default:\n return router.getStateForAction(state, action, options);\n }\n },\n\n actionCreators: DrawerActions,\n };\n}\n","import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n Route,\n Router,\n} from './types';\n\nexport type StackActionType =\n | {\n type: 'REPLACE';\n payload: { name: string; key?: string | undefined; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'PUSH';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP';\n payload: { count: number };\n source?: string;\n target?: string;\n }\n | {\n type: 'POP_TO_TOP';\n source?: string;\n target?: string;\n };\n\nexport type StackRouterOptions = DefaultRouterOptions;\n\nexport type StackNavigationState =\n NavigationState & {\n /**\n * Type of the router, in this case, it's stack.\n */\n type: 'stack';\n };\n\nexport type StackActionHelpers = {\n /**\n * Replace the current route with a new one.\n *\n * @param name Route name of the new route.\n * @param [params] Params object for the new route.\n */\n replace(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Push a new screen onto the stack.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n push(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n\n /**\n * Pop a screen from the stack.\n */\n pop(count?: number): void;\n\n /**\n * Pop to the first route in the stack, dismissing all other screens.\n */\n popToTop(): void;\n};\n\nexport const StackActions = {\n replace(name: string, params?: object): StackActionType {\n return { type: 'REPLACE', payload: { name, params } };\n },\n push(name: string, params?: object): StackActionType {\n return { type: 'PUSH', payload: { name, params } };\n },\n pop(count: number = 1): StackActionType {\n return { type: 'POP', payload: { count } };\n },\n popToTop(): StackActionType {\n return { type: 'POP_TO_TOP' };\n },\n};\n\nexport default function StackRouter(options: StackRouterOptions) {\n const router: Router<\n StackNavigationState,\n CommonNavigationAction | StackActionType\n > = {\n ...BaseRouter,\n\n type: 'stack',\n\n getInitialState({ routeNames, routeParamList }) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: 0,\n routeNames,\n routes: [\n {\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n },\n ],\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = state.routes\n .filter((route) => routeNames.includes(route.name))\n .map(\n (route) =>\n ({\n ...route,\n key: route.key || `${route.name}-${nanoid()}`,\n params:\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n }\n : route.params,\n } as Route)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n stale: false,\n type: 'stack',\n key: `stack-${nanoid()}`,\n index: routes.length - 1,\n routeNames,\n routes,\n };\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = state.routes.filter(\n (route) =>\n routeNames.includes(route.name) &&\n !routeKeyChanges.includes(route.name)\n );\n\n if (routes.length === 0) {\n const initialRouteName =\n options.initialRouteName !== undefined &&\n routeNames.includes(options.initialRouteName)\n ? options.initialRouteName\n : routeNames[0];\n\n routes.push({\n key: `${initialRouteName}-${nanoid()}`,\n name: initialRouteName,\n params: routeParamList[initialRouteName],\n });\n }\n\n return {\n ...state,\n routeNames,\n routes,\n index: Math.min(state.index, routes.length - 1),\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return {\n ...state,\n index,\n routes: state.routes.slice(0, index + 1),\n };\n },\n\n getStateForAction(state, action, options) {\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'REPLACE': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index === -1) {\n return null;\n }\n\n const { name, key, params } = action.payload;\n\n if (!state.routeNames.includes(name)) {\n return null;\n }\n\n return {\n ...state,\n routes: state.routes.map((route, i) =>\n i === index\n ? {\n key: key !== undefined ? key : `${name}-${nanoid()}`,\n name,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...params,\n }\n : params,\n }\n : route\n ),\n };\n }\n\n case 'PUSH':\n if (state.routeNames.includes(action.payload.name)) {\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n const route = id\n ? state.routes.find(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n )\n : undefined;\n\n let routes: Route[];\n\n if (route) {\n routes = state.routes.filter((r) => r.key !== route.key);\n routes.push({\n ...route,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n });\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n }\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n\n case 'POP': {\n const index =\n action.target === state.key && action.source\n ? state.routes.findIndex((r) => r.key === action.source)\n : state.index;\n\n if (index > 0) {\n const count = Math.max(index - action.payload.count + 1, 1);\n const routes = state.routes\n .slice(0, count)\n .concat(state.routes.slice(index + 1));\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n }\n\n return null;\n }\n\n case 'POP_TO_TOP':\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: state.routes.length - 1 },\n },\n options\n );\n\n case 'NAVIGATE':\n if (\n action.payload.name !== undefined &&\n !state.routeNames.includes(action.payload.name)\n ) {\n return null;\n }\n\n if (action.payload.key || action.payload.name) {\n // If the route already exists, navigate to that\n let index = -1;\n\n const getId =\n // `getId` and `key` can't be used together\n action.payload.key === undefined &&\n action.payload.name !== undefined\n ? options.routeGetIdList[action.payload.name]\n : undefined;\n const id = getId?.({ params: action.payload.params });\n\n if (id) {\n index = state.routes.findIndex(\n (route) =>\n route.name === action.payload.name &&\n id === getId?.({ params: route.params })\n );\n } else if (\n (state.routes[state.index].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[state.index].key === action.payload.key\n ) {\n index = state.index;\n } else {\n for (let i = state.routes.length - 1; i >= 0; i--) {\n if (\n (state.routes[i].name === action.payload.name &&\n action.payload.key === undefined) ||\n state.routes[i].key === action.payload.key\n ) {\n index = i;\n break;\n }\n }\n }\n\n if (\n index === -1 &&\n action.payload.key &&\n action.payload.name === undefined\n ) {\n return null;\n }\n\n if (index === -1 && action.payload.name !== undefined) {\n const routes = [\n ...state.routes,\n {\n key:\n action.payload.key ?? `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.payload.path,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n },\n ];\n\n return {\n ...state,\n routes,\n index: routes.length - 1,\n };\n }\n\n const route = state.routes[index];\n\n let params;\n\n if (action.payload.merge) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n return {\n ...state,\n index,\n routes: [\n ...state.routes.slice(0, index),\n params !== route.params ||\n (action.payload.path && action.payload.path !== route.path)\n ? {\n ...route,\n path: action.payload.path ?? route.path,\n params,\n }\n : state.routes[index],\n ],\n };\n }\n\n return null;\n\n case 'GO_BACK':\n if (state.index > 0) {\n return router.getStateForAction(\n state,\n {\n type: 'POP',\n payload: { count: 1 },\n target: action.target,\n source: action.source,\n },\n options\n );\n }\n\n return null;\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n actionCreators: StackActions,\n };\n\n return router;\n}\n","import { nanoid } from 'nanoid/non-secure';\n\nimport BaseRouter from './BaseRouter';\nimport type {\n CommonNavigationAction,\n DefaultRouterOptions,\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n Router,\n} from './types';\n\nexport type TabActionType = {\n type: 'JUMP_TO';\n payload: { name: string; params?: object };\n source?: string;\n target?: string;\n};\n\nexport type BackBehavior =\n | 'initialRoute'\n | 'firstRoute'\n | 'history'\n | 'order'\n | 'none';\n\nexport type TabRouterOptions = DefaultRouterOptions & {\n backBehavior?: BackBehavior;\n};\n\nexport type TabNavigationState = Omit<\n NavigationState,\n 'history'\n> & {\n /**\n * Type of the router, in this case, it's tab.\n */\n type: 'tab';\n /**\n * List of previously visited route keys.\n */\n history: { type: 'route'; key: string }[];\n};\n\nexport type TabActionHelpers = {\n /**\n * Jump to an existing tab.\n *\n * @param name Name of the route for the tab.\n * @param [params] Params object for the route.\n */\n jumpTo>(\n ...args: undefined extends ParamList[RouteName]\n ? [screen: RouteName] | [screen: RouteName, params: ParamList[RouteName]]\n : [screen: RouteName, params: ParamList[RouteName]]\n ): void;\n};\n\nconst TYPE_ROUTE = 'route' as const;\n\nexport const TabActions = {\n jumpTo(name: string, params?: object): TabActionType {\n return { type: 'JUMP_TO', payload: { name, params } };\n },\n};\n\nconst getRouteHistory = (\n routes: Route[],\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n const history = [{ type: TYPE_ROUTE, key: routes[index].key }];\n let initialRouteIndex;\n\n switch (backBehavior) {\n case 'order':\n for (let i = index; i > 0; i--) {\n history.unshift({ type: TYPE_ROUTE, key: routes[i - 1].key });\n }\n break;\n case 'firstRoute':\n if (index !== 0) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[0].key,\n });\n }\n break;\n case 'initialRoute':\n initialRouteIndex = routes.findIndex(\n (route) => route.name === initialRouteName\n );\n initialRouteIndex = initialRouteIndex === -1 ? 0 : initialRouteIndex;\n\n if (index !== initialRouteIndex) {\n history.unshift({\n type: TYPE_ROUTE,\n key: routes[initialRouteIndex].key,\n });\n }\n break;\n case 'history':\n // The history will fill up on navigation\n break;\n }\n\n return history;\n};\n\nconst changeIndex = (\n state: TabNavigationState,\n index: number,\n backBehavior: BackBehavior,\n initialRouteName: string | undefined\n) => {\n let history;\n\n if (backBehavior === 'history') {\n const currentKey = state.routes[index].key;\n\n history = state.history\n .filter((it) => (it.type === 'route' ? it.key !== currentKey : false))\n .concat({ type: TYPE_ROUTE, key: currentKey });\n } else {\n history = getRouteHistory(\n state.routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n index,\n history,\n };\n};\n\nexport default function TabRouter({\n initialRouteName,\n backBehavior = 'firstRoute',\n}: TabRouterOptions) {\n const router: Router<\n TabNavigationState,\n TabActionType | CommonNavigationAction\n > = {\n ...BaseRouter,\n\n type: 'tab',\n\n getInitialState({ routeNames, routeParamList }) {\n const index =\n initialRouteName !== undefined && routeNames.includes(initialRouteName)\n ? routeNames.indexOf(initialRouteName)\n : 0;\n\n const routes = routeNames.map((name) => ({\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }));\n\n const history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n\n return {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n };\n },\n\n getRehydratedState(partialState, { routeNames, routeParamList }) {\n let state = partialState;\n\n if (state.stale === false) {\n return state;\n }\n\n const routes = routeNames.map((name) => {\n const route = (\n state as PartialState>\n ).routes.find((r) => r.name === name);\n\n return {\n ...route,\n name,\n key:\n route && route.name === name && route.key\n ? route.key\n : `${name}-${nanoid()}`,\n params:\n routeParamList[name] !== undefined\n ? {\n ...routeParamList[name],\n ...(route ? route.params : undefined),\n }\n : route\n ? route.params\n : undefined,\n } as Route;\n });\n\n const index = Math.min(\n Math.max(routeNames.indexOf(state.routes[state?.index ?? 0]?.name), 0),\n routes.length - 1\n );\n\n const history =\n state.history?.filter((it) => routes.find((r) => r.key === it.key)) ??\n [];\n\n return changeIndex(\n {\n stale: false,\n type: 'tab',\n key: `tab-${nanoid()}`,\n index,\n routeNames,\n history,\n routes,\n },\n index,\n backBehavior,\n initialRouteName\n );\n },\n\n getStateForRouteNamesChange(\n state,\n { routeNames, routeParamList, routeKeyChanges }\n ) {\n const routes = routeNames.map(\n (name) =>\n state.routes.find(\n (r) => r.name === name && !routeKeyChanges.includes(r.name)\n ) || {\n name,\n key: `${name}-${nanoid()}`,\n params: routeParamList[name],\n }\n );\n\n const index = Math.max(\n 0,\n routeNames.indexOf(state.routes[state.index].name)\n );\n\n let history = state.history.filter(\n // Type will always be 'route' for tabs, but could be different in a router extending this (e.g. drawer)\n (it) => it.type !== 'route' || routes.find((r) => r.key === it.key)\n );\n\n if (!history.length) {\n history = getRouteHistory(\n routes,\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n return {\n ...state,\n history,\n routeNames,\n routes,\n index,\n };\n },\n\n getStateForRouteFocus(state, key) {\n const index = state.routes.findIndex((r) => r.key === key);\n\n if (index === -1 || index === state.index) {\n return state;\n }\n\n return changeIndex(state, index, backBehavior, initialRouteName);\n },\n\n getStateForAction(state, action, { routeParamList, routeGetIdList }) {\n switch (action.type) {\n case 'JUMP_TO':\n case 'NAVIGATE': {\n let index = -1;\n\n if (action.type === 'NAVIGATE' && action.payload.key) {\n index = state.routes.findIndex(\n (route) => route.key === action.payload.key\n );\n } else {\n index = state.routes.findIndex(\n (route) => route.name === action.payload.name\n );\n }\n\n if (index === -1) {\n return null;\n }\n\n return changeIndex(\n {\n ...state,\n routes: state.routes.map((route, i) => {\n if (i !== index) {\n return route;\n }\n\n const getId = routeGetIdList[route.name];\n\n const currentId = getId?.({ params: route.params });\n const nextId = getId?.({ params: action.payload.params });\n\n const key =\n currentId === nextId\n ? route.key\n : `${route.name}-${nanoid()}`;\n\n let params;\n\n if (\n action.type === 'NAVIGATE' &&\n action.payload.merge &&\n currentId === nextId\n ) {\n params =\n action.payload.params !== undefined ||\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[route.name] !== undefined\n ? {\n ...routeParamList[route.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n const path =\n action.type === 'NAVIGATE' && action.payload.path != null\n ? action.payload.path\n : route.path;\n\n return params !== route.params || path !== route.path\n ? { ...route, key, path, params }\n : route;\n }),\n },\n index,\n backBehavior,\n initialRouteName\n );\n }\n\n case 'GO_BACK': {\n if (state.history.length === 1) {\n return null;\n }\n\n const previousKey = state.history[state.history.length - 2].key;\n const index = state.routes.findIndex(\n (route) => route.key === previousKey\n );\n\n if (index === -1) {\n return null;\n }\n\n return {\n ...state,\n history: state.history.slice(0, -1),\n index,\n };\n }\n\n default:\n return BaseRouter.getStateForAction(state, action);\n }\n },\n\n shouldActionChangeFocus(action) {\n return action.type === 'NAVIGATE';\n },\n\n actionCreators: TabActions,\n };\n\n return router;\n}\n","import * as CommonActions from './CommonActions';\n\nexport { CommonActions };\n\nexport { default as BaseRouter } from './BaseRouter';\nexport type {\n DrawerActionHelpers,\n DrawerActionType,\n DrawerNavigationState,\n DrawerRouterOptions,\n DrawerStatus,\n} from './DrawerRouter';\nexport { DrawerActions, default as DrawerRouter } from './DrawerRouter';\nexport type {\n StackActionHelpers,\n StackActionType,\n StackNavigationState,\n StackRouterOptions,\n} from './StackRouter';\nexport { StackActions, default as StackRouter } from './StackRouter';\nexport type {\n TabActionHelpers,\n TabActionType,\n TabNavigationState,\n TabRouterOptions,\n} from './TabRouter';\nexport { TabActions, default as TabRouter } from './TabRouter';\nexport * from './types';\n","import { UnavailabilityError } from 'expo-modules-core';\n\nimport ExpoApplication from './ExpoApplication';\n\n// @needsAudit\n/**\n * The human-readable version of the native application that may be displayed in the app store.\n * This is the `Info.plist` value for `CFBundleShortVersionString` on iOS and the version name set\n * by `version` in `app.json` on Android at the time the native app was built.\n * On web, this value is `null`.\n * @example `\"2.11.0\"`\n */\nexport const nativeApplicationVersion: string | null = ExpoApplication\n ? ExpoApplication.nativeApplicationVersion || null\n : null;\n\n// @needsAudit\n/**\n * The internal build version of the native application that the app store may use to distinguish\n * between different binaries. This is the `Info.plist` value for `CFBundleVersion` on iOS (set with\n * `ios.buildNumber` value in `app.json` in a standalone app) and the version code set by\n * `android.versionCode` in `app.json` on Android at the time the native app was built. On web, this\n * value is `null`. The return type on Android and iOS is `string`.\n * @example iOS: `\"2.11.0\"`, Android: `\"114\"`\n */\nexport const nativeBuildVersion: string | null = ExpoApplication\n ? ExpoApplication.nativeBuildVersion || null\n : null;\n\n// @needsAudit\n/**\n * The human-readable name of the application that is displayed with the app's icon on the device's\n * home screen or desktop. On Android and iOS, this value is a `string` unless the name could not be\n * retrieved, in which case this value will be `null`. On web this value is `null`.\n * @example `\"Expo\"`, `\"Yelp\"`, `\"Instagram\"`\n */\nexport const applicationName: string | null = ExpoApplication\n ? ExpoApplication.applicationName || null\n : null;\n\n// @needsAudit\n/**\n * The ID of the application. On Android, this is the application ID. On iOS, this is the bundle ID.\n * On web, this is `null`.\n * @example `\"com.cocoacasts.scribbles\"`, `\"com.apple.Pages\"`\n */\nexport const applicationId: string | null = ExpoApplication\n ? ExpoApplication.applicationId || null\n : null;\n\n// @needsAudit\n/**\n * The value of [`Settings.Secure.ANDROID_ID`](https://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID).\n * This is a hexadecimal `string` unique to each combination of app-signing key, user, and device.\n * The value may change if a factory reset is performed on the device or if an APK signing key changes.\n * For more information about how the platform handles `ANDROID_ID` in Android 8.0 (API level 26)\n * and higher, see [Android 8.0 Behavior Changes](https://developer.android.com/about/versions/oreo/android-8.0-changes.html#privacy-all).\n * On iOS and web, this value is `null`.\n * > In versions of the platform lower than Android 8.0 (API level 26), this value remains constant\n * > for the lifetime of the user's device. See the [ANDROID_ID](https://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID)\n * > official docs for more information.\n * @example `\"dd96dec43fb81c97\"`\n * @platform android\n */\nexport const androidId: string | null = ExpoApplication ? ExpoApplication.androidId || null : null;\n\n// @needsAudit\n/**\n * Gets the referrer URL of the installed app with the [`Install Referrer API`](https://developer.android.com/google/play/installreferrer)\n * from the Google Play Store. In practice, the referrer URL may not be a complete, absolute URL.\n * @return A `Promise` that fulfills with a `string` of the referrer URL of the installed app.\n *\n * @example\n * ```ts\n * await Application.getInstallReferrerAsync();\n * // \"utm_source=google-play&utm_medium=organic\"\n * ```\n * @platform android\n */\nexport async function getInstallReferrerAsync(): Promise {\n if (!ExpoApplication.getInstallReferrerAsync) {\n throw new UnavailabilityError('expo-application', 'getInstallReferrerAsync');\n }\n return await ExpoApplication.getInstallReferrerAsync();\n}\n\n// @needsAudit\n/**\n * Gets the iOS \"identifier for vendor\" ([IDFV](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor))\n * value, a string ID that uniquely identifies a device to the app’s vendor. This method may\n * sometimes return `nil`, in which case wait and call the method again later. This might happen\n * when the device has been restarted before the user has unlocked the device.\n *\n * The OS will change the vendor identifier if all apps from the current app's vendor have been\n * uninstalled.\n *\n * @return A `Promise` that fulfills with a `string` specifying the app's vendor ID. Apps from the\n * same vendor will return the same ID. See Apple's documentation for more information about the\n * vendor ID's semantics.\n *\n * @example\n * ```ts\n * await Application.getIosIdForVendorAsync();\n * // \"68753A44-4D6F-1226-9C60-0050E4C00067\"\n * ```\n * @platform ios\n */\nexport async function getIosIdForVendorAsync(): Promise {\n if (!ExpoApplication.getIosIdForVendorAsync) {\n throw new UnavailabilityError('expo-application', 'getIosIdForVendorAsync');\n }\n return (await ExpoApplication.getIosIdForVendorAsync()) ?? null;\n}\n\n// @docsMissing\nexport enum ApplicationReleaseType {\n UNKNOWN = 0,\n SIMULATOR = 1,\n ENTERPRISE = 2,\n DEVELOPMENT = 3,\n AD_HOC = 4,\n APP_STORE = 5,\n}\n\n// @needsAudit\n/**\n * Gets the iOS application release type.\n * @return Returns a promise which fulfills with an [`ApplicationReleaseType`](#applicationreleasetype).\n * @platform ios\n */\nexport async function getIosApplicationReleaseTypeAsync(): Promise {\n if (!ExpoApplication.getApplicationReleaseTypeAsync) {\n throw new UnavailabilityError('expo-application', 'getApplicationReleaseTypeAsync');\n }\n return await ExpoApplication.getApplicationReleaseTypeAsync();\n}\n\n// @docsMissing\nexport type PushNotificationServiceEnvironment = 'development' | 'production' | null;\n\n// @needsAudit\n/**\n * Gets the current [Apple Push Notification (APN)](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment?language=objc)\n * service environment.\n * @return Returns a promise fulfilled with the string, either `'development'` or `'production'`,\n * based on the current APN environment, or `null` on the simulator as it does not support registering with APNs.\n * @platform ios\n */\nexport async function getIosPushNotificationServiceEnvironmentAsync(): Promise {\n if (!ExpoApplication.getPushNotificationServiceEnvironmentAsync) {\n throw new UnavailabilityError('expo-application', 'getPushNotificationServiceEnvironmentAsync');\n }\n return await ExpoApplication.getPushNotificationServiceEnvironmentAsync();\n}\n\n// @needsAudit\n/**\n * Gets the time the app was installed onto the device, not counting subsequent updates. If the app\n * is uninstalled and reinstalled, this method returns the time the app was reinstalled.\n * - On iOS, this method uses the [`NSFileCreationDate`](https://developer.apple.com/documentation/foundation/nsfilecreationdate?language=objc)\n * of the app's document root directory.\n * - On Android, this method uses [`PackageInfo.firstInstallTime`](https://developer.android.com/reference/android/content/pm/PackageInfo.html#firstInstallTime).\n * - On web, this method returns `null`.\n *\n * @return Returns a `Promise` that fulfills with a `Date` object that specifies the time the app\n * was installed on the device.\n *\n * @example\n * ```ts\n * await Application.getInstallationTimeAsync();\n * // 2019-07-18T18:08:26.121Z\n * ```\n */\nexport async function getInstallationTimeAsync(): Promise {\n if (!ExpoApplication.getInstallationTimeAsync) {\n throw new UnavailabilityError('expo-application', 'getInstallationTimeAsync');\n }\n const installationTime = await ExpoApplication.getInstallationTimeAsync();\n return new Date(installationTime);\n}\n\n// @needsAudit\n/**\n * Gets the last time the app was updated from the Google Play Store.\n * @return Returns a `Promise` that fulfills with a `Date` object that specifies the last time\n * the app was updated via the Google Play Store).\n *\n * @example\n * ```ts\n * await Application.getLastUpdateTimeAsync();\n * // 2019-07-18T21:20:16.887Z\n * ```\n * @platform android\n */\nexport async function getLastUpdateTimeAsync(): Promise {\n if (!ExpoApplication.getLastUpdateTimeAsync) {\n throw new UnavailabilityError('expo-application', 'getLastUpdateTimeAsync');\n }\n const lastUpdateTime = await ExpoApplication.getLastUpdateTimeAsync();\n return new Date(lastUpdateTime);\n}\n","export default {\n get name(): string {\n return 'ExpoApplication';\n },\n get applicationName(): null {\n return null;\n },\n get bundleId(): null {\n return null;\n },\n get nativeApplicationVersion(): null {\n return null;\n },\n get nativeBuildVersion(): null {\n return null;\n },\n get androidId(): null {\n return null;\n },\n async getInstallationTimeAsync(): Promise {\n return null;\n },\n};\n","import { Platform } from 'expo-modules-core';\nimport { getAssetByID } from 'react-native/Libraries/Image/AssetRegistry';\n\nimport { AssetMetadata, selectAssetSource } from './AssetSources';\nimport * as AssetUris from './AssetUris';\nimport * as ImageAssets from './ImageAssets';\nimport { getLocalAssetUri } from './LocalAssets';\nimport { downloadAsync, IS_ENV_WITH_UPDATES_ENABLED } from './PlatformUtils';\nimport resolveAssetSource from './resolveAssetSource';\n\n// @docsMissing\nexport type AssetDescriptor = {\n name: string;\n type: string;\n hash?: string | null;\n uri: string;\n width?: number | null;\n height?: number | null;\n};\n\ntype DownloadPromiseCallbacks = {\n resolve: () => void;\n reject: (error: Error) => void;\n};\n\nexport { AssetMetadata };\n\n// @needsAudit\n/**\n * The `Asset` class represents an asset in your app. It gives metadata about the asset (such as its\n * name and type) and provides facilities to load the asset data.\n */\nexport class Asset {\n /**\n * @private\n */\n static byHash = {};\n /**\n * @private\n */\n static byUri = {};\n\n /**\n * The name of the asset file without the extension. Also without the part from `@` onward in the\n * filename (used to specify scale factor for images).\n */\n name: string;\n /**\n * The extension of the asset filename.\n */\n type: string;\n /**\n * The MD5 hash of the asset's data.\n */\n hash: string | null = null;\n /**\n * A URI that points to the asset's data on the remote server. When running the published version\n * of your app, this refers to the location on Expo's asset server where Expo has stored your\n * asset. When running the app from Expo CLI during development, this URI points to Expo CLI's\n * server running on your computer and the asset is served directly from your computer. If you\n * are not using Classic Updates (legacy), this field should be ignored as we ensure your assets\n * are on device before before running your application logic.\n */\n uri: string;\n /**\n * If the asset has been downloaded (by calling [`downloadAsync()`](#downloadasync)), the\n * `file://` URI pointing to the local file on the device that contains the asset data.\n */\n localUri: string | null = null;\n /**\n * If the asset is an image, the width of the image data divided by the scale factor. The scale\n * factor is the number after `@` in the filename, or `1` if not present.\n */\n width: number | null = null;\n /**\n * If the asset is an image, the height of the image data divided by the scale factor. The scale factor is the number after `@` in the filename, or `1` if not present.\n */\n height: number | null = null;\n // @docsMissing\n downloading: boolean = false;\n // @docsMissing\n downloaded: boolean = false;\n\n /**\n * @private\n */\n _downloadCallbacks: DownloadPromiseCallbacks[] = [];\n\n constructor({ name, type, hash = null, uri, width, height }: AssetDescriptor) {\n this.name = name;\n this.type = type;\n this.hash = hash;\n this.uri = uri;\n\n if (typeof width === 'number') {\n this.width = width;\n }\n if (typeof height === 'number') {\n this.height = height;\n }\n\n if (hash) {\n this.localUri = getLocalAssetUri(hash, type);\n if (this.localUri) {\n this.downloaded = true;\n }\n }\n\n if (Platform.OS === 'web') {\n if (!name) {\n this.name = AssetUris.getFilename(uri);\n }\n if (!type) {\n this.type = AssetUris.getFileExtension(uri);\n }\n }\n }\n\n // @needsAudit\n /**\n * A helper that wraps `Asset.fromModule(module).downloadAsync` for convenience.\n * @param moduleId An array of `require('path/to/file')` or external network URLs. Can also be\n * just one module or URL without an Array.\n * @return Returns a Promise that fulfills with an array of `Asset`s when the asset(s) has been\n * saved to disk.\n * @example\n * ```ts\n * const [{ localUri }] = await Asset.loadAsync(require('./assets/snack-icon.png'));\n * ```\n */\n static loadAsync(moduleId: number | number[] | string | string[]): Promise {\n const moduleIds = Array.isArray(moduleId) ? moduleId : [moduleId];\n return Promise.all(moduleIds.map((moduleId) => Asset.fromModule(moduleId).downloadAsync()));\n }\n\n // @needsAudit\n /**\n * Returns the [`Asset`](#asset) instance representing an asset given its module or URL.\n * @param virtualAssetModule The value of `require('path/to/file')` for the asset or external\n * network URL\n * @return The [`Asset`](#asset) instance for the asset.\n */\n static fromModule(virtualAssetModule: number | string): Asset {\n if (typeof virtualAssetModule === 'string') {\n return Asset.fromURI(virtualAssetModule);\n }\n\n const meta = getAssetByID(virtualAssetModule);\n if (!meta) {\n throw new Error(`Module \"${virtualAssetModule}\" is missing from the asset registry`);\n }\n\n // Outside of the managed env we need the moduleId to initialize the asset\n // because resolveAssetSource depends on it\n if (!IS_ENV_WITH_UPDATES_ENABLED) {\n const { uri } = resolveAssetSource(virtualAssetModule);\n const asset = new Asset({\n name: meta.name,\n type: meta.type,\n hash: meta.hash,\n uri,\n width: meta.width,\n height: meta.height,\n });\n\n // TODO: FileSystem should probably support 'downloading' from drawable\n // resources But for now it doesn't (it only supports raw resources) and\n // React Native's Image works fine with drawable resource names for\n // images.\n if (Platform.OS === 'android' && !uri.includes(':') && (meta.width || meta.height)) {\n asset.localUri = asset.uri;\n asset.downloaded = true;\n }\n\n Asset.byHash[meta.hash] = asset;\n return asset;\n }\n\n return Asset.fromMetadata(meta);\n }\n\n // @docsMissing\n static fromMetadata(meta: AssetMetadata): Asset {\n // The hash of the whole asset, not to be confused with the hash of a specific file returned\n // from `selectAssetSource`\n const metaHash = meta.hash;\n if (Asset.byHash[metaHash]) {\n return Asset.byHash[metaHash];\n }\n\n const { uri, hash } = selectAssetSource(meta);\n const asset = new Asset({\n name: meta.name,\n type: meta.type,\n hash,\n uri,\n width: meta.width,\n height: meta.height,\n });\n Asset.byHash[metaHash] = asset;\n return asset;\n }\n\n // @docsMissing\n static fromURI(uri: string): Asset {\n if (Asset.byUri[uri]) {\n return Asset.byUri[uri];\n }\n\n // Possibly a Base64-encoded URI\n let type = '';\n if (uri.indexOf(';base64') > -1) {\n type = uri.split(';')[0].split('/')[1];\n } else {\n const extension = AssetUris.getFileExtension(uri);\n type = extension.startsWith('.') ? extension.substring(1) : extension;\n }\n\n const asset = new Asset({\n name: '',\n type,\n hash: null,\n uri,\n });\n\n Asset.byUri[uri] = asset;\n\n return asset;\n }\n\n // @needsAudit\n /**\n * Downloads the asset data to a local file in the device's cache directory. Once the returned\n * promise is fulfilled without error, the [`localUri`](#assetlocaluri) field of this asset points\n * to a local file containing the asset data. The asset is only downloaded if an up-to-date local\n * file for the asset isn't already present due to an earlier download. The downloaded `Asset`\n * will be returned when the promise is resolved.\n * @return Returns a Promise which fulfills with an `Asset` instance.\n */\n async downloadAsync(): Promise {\n if (this.downloaded) {\n return this;\n }\n if (this.downloading) {\n await new Promise((resolve, reject) => {\n this._downloadCallbacks.push({ resolve, reject });\n });\n return this;\n }\n this.downloading = true;\n\n try {\n if (Platform.OS === 'web') {\n if (ImageAssets.isImageType(this.type)) {\n const { width, height, name } = await ImageAssets.getImageInfoAsync(this.uri);\n this.width = width;\n this.height = height;\n this.name = name;\n } else {\n this.name = AssetUris.getFilename(this.uri);\n }\n }\n this.localUri = await downloadAsync(this.uri, this.hash, this.type, this.name);\n\n this.downloaded = true;\n this._downloadCallbacks.forEach(({ resolve }) => resolve());\n } catch (e) {\n this._downloadCallbacks.forEach(({ reject }) => reject(e));\n throw e;\n } finally {\n this.downloading = false;\n this._downloadCallbacks = [];\n }\n return this;\n }\n}\n","import { Platform } from 'expo-modules-core';\nimport { PixelRatio } from 'react-native';\nimport { PackagerAsset } from 'react-native/Libraries/Image/AssetRegistry';\n\nexport type ResolvedAssetSource = {\n __packager_asset: boolean;\n width?: number;\n height?: number;\n uri: string;\n scale: number;\n};\n\n// Returns the Metro dev server-specific asset location.\nfunction getScaledAssetPath(asset): string {\n const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());\n const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n const type = !asset.type ? '' : `.${asset.type}`;\n if (__DEV__) {\n return asset.httpServerLocation + '/' + asset.name + scaleSuffix + type;\n } else {\n return asset.httpServerLocation.replace(/\\.\\.\\//g, '_') + '/' + asset.name + scaleSuffix + type;\n }\n}\n\nexport default class AssetSourceResolver {\n serverUrl: string;\n // where the jsbundle is being run from\n // NOTE(EvanBacon): Never defined on web.\n jsbundleUrl?: string | null;\n // the asset to resolve\n asset: PackagerAsset;\n\n constructor(\n serverUrl: string | undefined | null,\n jsbundleUrl: string | undefined | null,\n asset: PackagerAsset\n ) {\n this.serverUrl = serverUrl || 'https://expo.dev';\n this.jsbundleUrl = null;\n this.asset = asset;\n }\n\n // Always true for web runtimes\n isLoadedFromServer(): boolean {\n return true;\n }\n\n // Always false for web runtimes\n isLoadedFromFileSystem(): boolean {\n return false;\n }\n\n defaultAsset(): ResolvedAssetSource {\n return this.assetServerURL();\n }\n\n /**\n * @returns absolute remote URL for the hosted asset.\n */\n assetServerURL(): ResolvedAssetSource {\n const fromUrl = new URL(getScaledAssetPath(this.asset), this.serverUrl);\n fromUrl.searchParams.set('platform', Platform.OS);\n fromUrl.searchParams.set('hash', this.asset.hash);\n return this.fromSource(\n // Relative on web\n fromUrl.toString().replace(fromUrl.origin, '')\n );\n }\n\n fromSource(source: string): ResolvedAssetSource {\n return {\n __packager_asset: true,\n width: this.asset.width ?? undefined,\n height: this.asset.height ?? undefined,\n uri: source,\n scale: AssetSourceResolver.pickScale(this.asset.scales, PixelRatio.get()),\n };\n }\n\n static pickScale(scales: number[], deviceScale: number): number {\n for (let i = 0; i < scales.length; i++) {\n if (scales[i] >= deviceScale) {\n return scales[i];\n }\n }\n return scales[scales.length - 1] || 1;\n }\n}\n","import { Platform } from 'expo-modules-core';\nimport path from 'path-browserify';\nimport { PixelRatio } from 'react-native';\nimport { PackagerAsset } from 'react-native/Libraries/Image/AssetRegistry';\nimport URL from 'url-parse';\n\nimport AssetSourceResolver from './AssetSourceResolver';\nimport { getManifest, getManifest2, manifestBaseUrl } from './PlatformUtils';\n\n// @docsMissing\nexport type AssetMetadata = Pick<\n PackagerAsset,\n 'httpServerLocation' | 'name' | 'hash' | 'type' | 'scales' | 'width' | 'height'\n> & {\n uri?: string;\n fileHashes?: string[];\n fileUris?: string[];\n};\n\nexport type AssetSource = {\n uri: string;\n hash: string;\n};\n\n// Fast lookup check if asset map has any overrides in the manifest\nconst assetMapOverride = getManifest().assetMapOverride;\n\n/**\n * Selects the best file for the given asset (ex: choosing the best scale for images) and returns\n * a { uri, hash } pair for the specific asset file.\n *\n * If the asset isn't an image with multiple scales, the first file is selected.\n */\nexport function selectAssetSource(meta: AssetMetadata): AssetSource {\n // Override with the asset map in manifest if available\n if (assetMapOverride && assetMapOverride.hasOwnProperty(meta.hash)) {\n meta = { ...meta, ...assetMapOverride[meta.hash] };\n }\n\n // This logic is based on that of AssetSourceResolver, with additional support for file hashes and\n // explicitly provided URIs\n const scale = AssetSourceResolver.pickScale(meta.scales, PixelRatio.get());\n const index = meta.scales.findIndex((s) => s === scale);\n const hash = meta.fileHashes ? meta.fileHashes[index] || meta.fileHashes[0] : meta.hash;\n\n // Allow asset processors to directly provide the URL to load\n const uri = meta.fileUris ? meta.fileUris[index] || meta.fileUris[0] : meta.uri;\n if (uri) {\n return { uri: resolveUri(uri), hash };\n }\n\n // Check if the assetUrl was overridden in the manifest\n const assetUrlOverride = getManifest().assetUrlOverride;\n if (assetUrlOverride) {\n const uri = path.join(assetUrlOverride, hash);\n return { uri: resolveUri(uri), hash };\n }\n\n const fileScale = scale === 1 ? '' : `@${scale}x`;\n const fileExtension = meta.type ? `.${encodeURIComponent(meta.type)}` : '';\n const suffix = `/${encodeURIComponent(\n meta.name\n )}${fileScale}${fileExtension}?platform=${encodeURIComponent(\n Platform.OS\n )}&hash=${encodeURIComponent(meta.hash)}`;\n\n // For assets with a specified absolute URL, we use the existing origin instead of prepending the\n // development server or production CDN URL origin\n if (/^https?:\\/\\//.test(meta.httpServerLocation)) {\n const uri = meta.httpServerLocation + suffix;\n return { uri, hash };\n }\n\n // For assets during development using manifest2, we use the development server's URL origin\n const manifest2 = getManifest2();\n\n if (manifest2?.extra?.expoGo?.developer) {\n const baseUrl = new URL(`http://${manifest2.extra.expoGo.debuggerHost}`);\n baseUrl.set('pathname', meta.httpServerLocation + suffix);\n\n return {\n uri: baseUrl.href,\n hash,\n };\n }\n\n // For assets during development, we use the development server's URL origin\n if (getManifest().developer) {\n const baseUrl = new URL(getManifest().bundleUrl);\n baseUrl.set('pathname', meta.httpServerLocation + suffix);\n return { uri: baseUrl.href, hash };\n }\n\n // Production CDN URIs are based on each asset file hash\n return {\n uri: `https://classic-assets.eascdn.net/~assets/${encodeURIComponent(hash)}`,\n hash,\n };\n}\n\n/**\n * Resolves the given URI to an absolute URI. If the given URI is already an absolute URI, it is\n * simply returned. Otherwise, if it is a relative URI, it is resolved relative to the manifest's\n * base URI.\n */\nexport function resolveUri(uri: string): string {\n if (!manifestBaseUrl) {\n return uri;\n }\n\n const { protocol } = new URL(uri);\n if (protocol !== '') {\n return uri;\n }\n\n const baseUrl = new URL(manifestBaseUrl);\n const resolvedPath = uri.startsWith('/') ? uri : path.join(baseUrl.pathname, uri);\n baseUrl.set('pathname', resolvedPath);\n return baseUrl.href;\n}\n","import URL from 'url-parse';\n\nexport function getFilename(url: string): string {\n const { pathname } = new URL(url, {});\n return pathname.substring(pathname.lastIndexOf('/') + 1);\n}\n\nexport function getFileExtension(url: string): string {\n const filename = getFilename(url);\n const dotIndex = filename.lastIndexOf('.');\n // Ignore leading dots for hidden files\n return dotIndex > 0 ? filename.substring(dotIndex) : '';\n}\n\n/**\n * Returns the base URL from a manifest's URL. For example, given a manifest hosted at\n * https://example.com/app/manifest.json, the base URL would be https://example.com/app/. Query\n * parameters and fragments also are removed.\n *\n * For an Expo-hosted project with a manifest hosted at https://exp.host/@user/project/index.exp, the\n * base URL would be https://exp.host/@user/project.\n *\n * We also normalize the \"exp\" protocol to \"http\" to handle internal URLs with the Expo schemes used\n * to tell the OS to open the URLs in the the Expo client.\n */\nexport function getManifestBaseUrl(manifestUrl: string): string {\n const urlObject = new URL(manifestUrl, {});\n\n // Change the scheme to http(s) if it is exp(s)\n if (urlObject.protocol === 'exp:') {\n urlObject.set('protocol', 'http:');\n } else if (urlObject.protocol === 'exps:') {\n urlObject.set('protocol', 'https:');\n }\n\n // Trim filename, query parameters, and fragment, if any\n const directory = urlObject.pathname.substring(0, urlObject.pathname.lastIndexOf('/') + 1);\n urlObject.set('pathname', directory);\n urlObject.set('query', '');\n urlObject.set('hash', '');\n\n return urlObject.href;\n}\n","/* eslint-env browser */\nimport { Platform } from 'expo-modules-core';\n\nimport { getFilename } from './AssetUris';\n\ntype ImageInfo = {\n name: string;\n width: number;\n height: number;\n};\n\nexport function isImageType(type: string): boolean {\n return /^(jpeg|jpg|gif|png|bmp|webp|heic)$/i.test(type);\n}\n\nexport function getImageInfoAsync(url: string): Promise {\n if (!Platform.isDOMAvailable) {\n return Promise.resolve({ name: getFilename(url), width: 0, height: 0 });\n }\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onerror = reject;\n img.onload = () => {\n resolve({\n name: getFilename(url),\n width: img.naturalWidth,\n height: img.naturalHeight,\n });\n };\n img.src = url;\n });\n}\n","export function getLocalAssetUri(hash: string, type: string | null): string | null {\n // noop on web\n return null;\n}\n","export const IS_MANAGED_ENV = false;\nexport const IS_ENV_WITH_UPDATES_ENABLED = false;\nexport const IS_ENV_WITHOUT_UPDATES_ENABLED = false;\n\n// Compute manifest base URL if available\nexport const manifestBaseUrl = null;\n\nexport async function downloadAsync(uri, hash, type, name): Promise {\n return uri;\n}\n\nexport function getManifest() {\n return {};\n}\n\nexport function getManifest2() {\n return {};\n}\n","import { getAssetByID } from 'react-native/Libraries/Image/AssetRegistry';\n\nimport AssetSourceResolver, { ResolvedAssetSource } from './AssetSourceResolver';\n\nlet _customSourceTransformer;\n\nexport function setCustomSourceTransformer(\n transformer: (resolver: AssetSourceResolver) => ResolvedAssetSource\n): void {\n _customSourceTransformer = transformer;\n}\n\n/**\n * `source` is either a number (opaque type returned by require('./foo.png'))\n * or an `ImageSource` like { uri: '' }\n */\nexport default function resolveAssetSource(source: any): ResolvedAssetSource | undefined {\n if (typeof source === 'object') {\n return source;\n }\n\n const asset = getAssetByID(source);\n if (!asset) {\n return undefined;\n }\n\n const resolver = new AssetSourceResolver(\n // Doesn't matter since this is removed on web\n 'https://expo.dev',\n null,\n asset\n );\n if (_customSourceTransformer) {\n return _customSourceTransformer(resolver);\n }\n return resolver.defaultAsset();\n}\n\nObject.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', {\n get() {\n return setCustomSourceTransformer;\n },\n});\n\nexport const { pickScale } = AssetSourceResolver;\n","import { Asset } from 'expo-asset';\nimport { Platform } from 'expo-modules-core';\n\nimport {\n AVPlaybackSource,\n AVPlaybackNativeSource,\n AVPlaybackStatus,\n AVPlaybackStatusToSet,\n PitchCorrectionQuality,\n AVPlaybackTolerance,\n} from './AV.types';\n\n// TODO add:\n// disableFocusOnAndroid\n// audio routes (at least did become noisy on android)\n// pan\n// pitch\n// API to explicitly request audio focus / session\n// API to select stream type on Android\n// subtitles API\n\n/**\n * @hidden\n */\nexport const _DEFAULT_PROGRESS_UPDATE_INTERVAL_MILLIS: number = 500;\n\n// @needsAudit\n/**\n * The default initial `AVPlaybackStatusToSet` of all `Audio.Sound` objects and `Video` components is as follows:\n *\n * ```javascript\n * {\n * progressUpdateIntervalMillis: 500,\n * positionMillis: 0,\n * shouldPlay: false,\n * rate: 1.0,\n * shouldCorrectPitch: false,\n * volume: 1.0,\n * isMuted: false,\n * isLooping: false,\n * }\n * ```\n *\n * This default initial status can be overwritten by setting the optional `initialStatus` in `loadAsync()` or `Audio.Sound.createAsync()`.\n */\nexport const _DEFAULT_INITIAL_PLAYBACK_STATUS: AVPlaybackStatusToSet = {\n positionMillis: 0,\n progressUpdateIntervalMillis: _DEFAULT_PROGRESS_UPDATE_INTERVAL_MILLIS,\n shouldPlay: false,\n rate: 1.0,\n shouldCorrectPitch: false,\n volume: 1.0,\n audioPan: 0,\n isMuted: false,\n isLooping: false,\n};\n\n// @needsAudit\n/**\n * @hidden\n */\nexport function getNativeSourceFromSource(\n source?: AVPlaybackSource | null\n): AVPlaybackNativeSource | null {\n let uri: string | null = null;\n let overridingExtension: string | null = null;\n let headers: AVPlaybackNativeSource['headers'];\n\n if (typeof source === 'string' && Platform.OS === 'web') {\n return {\n uri: source,\n overridingExtension,\n headers,\n };\n }\n\n const asset: Asset | null = _getAssetFromPlaybackSource(source);\n if (asset != null) {\n uri = asset.localUri || asset.uri;\n } else if (\n source != null &&\n typeof source !== 'number' &&\n 'uri' in source &&\n typeof source.uri === 'string'\n ) {\n uri = source.uri;\n }\n\n if (uri == null) {\n return null;\n }\n\n if (\n source != null &&\n typeof source !== 'number' &&\n 'overrideFileExtensionAndroid' in source &&\n typeof source.overrideFileExtensionAndroid === 'string'\n ) {\n overridingExtension = source.overrideFileExtensionAndroid;\n }\n\n if (\n source != null &&\n typeof source !== 'number' &&\n 'headers' in source &&\n typeof source.headers === 'object'\n ) {\n headers = source.headers;\n }\n return { uri, overridingExtension, headers };\n}\n\nfunction _getAssetFromPlaybackSource(source?: AVPlaybackSource | null): Asset | null {\n if (source == null) {\n return null;\n }\n\n let asset: Asset | null = null;\n if (typeof source === 'number') {\n asset = Asset.fromModule(source);\n } else if (source instanceof Asset) {\n asset = source;\n }\n return asset;\n}\n\n// @needsAudit\n/**\n * @hidden\n */\nexport function assertStatusValuesInBounds(status: AVPlaybackStatusToSet): void {\n if (typeof status.rate === 'number' && (status.rate < 0 || status.rate > 32)) {\n throw new RangeError('Rate value must be between 0.0 and 32.0');\n }\n if (typeof status.volume === 'number' && (status.volume < 0 || status.volume > 1)) {\n throw new RangeError('Volume value must be between 0.0 and 1.0');\n }\n if (typeof status.audioPan === 'number' && (status.audioPan < -1 || status.audioPan > 1)) {\n throw new RangeError('Pan value must be between -1.0 and 1.0');\n }\n}\n\n// @needsAudit\n/**\n * @hidden\n */\nexport async function getNativeSourceAndFullInitialStatusForLoadAsync(\n source: AVPlaybackSource | null,\n initialStatus: AVPlaybackStatusToSet | null,\n downloadFirst: boolean\n): Promise<{\n nativeSource: AVPlaybackNativeSource;\n fullInitialStatus: AVPlaybackStatusToSet;\n}> {\n // Get the full initial status\n const fullInitialStatus: AVPlaybackStatusToSet =\n initialStatus == null\n ? _DEFAULT_INITIAL_PLAYBACK_STATUS\n : {\n ..._DEFAULT_INITIAL_PLAYBACK_STATUS,\n ...initialStatus,\n };\n assertStatusValuesInBounds(fullInitialStatus);\n\n if (typeof source === 'string' && Platform.OS === 'web') {\n return {\n nativeSource: {\n uri: source,\n overridingExtension: null,\n },\n fullInitialStatus,\n };\n }\n\n // Download first if necessary.\n const asset = _getAssetFromPlaybackSource(source);\n if (downloadFirst && asset) {\n // TODO we can download remote uri too once @nikki93 has integrated this into Asset\n await asset.downloadAsync();\n }\n\n // Get the native source\n const nativeSource: AVPlaybackNativeSource | null = getNativeSourceFromSource(source);\n\n if (nativeSource === null) {\n throw new Error(`Cannot load an AV asset from a null playback source`);\n }\n\n // If asset has been downloaded use the localUri\n if (asset && asset.localUri) {\n nativeSource.uri = asset.localUri;\n }\n\n return { nativeSource, fullInitialStatus };\n}\n\n// @needsAudit\n/**\n * @hidden\n */\nexport function getUnloadedStatus(error: string | null = null): AVPlaybackStatus {\n return {\n isLoaded: false,\n ...(error ? { error } : null),\n };\n}\n\n// @needsAudit\nexport interface AV {\n /**\n * Sets a new `AVPlaybackStatusToSet` on the `playbackObject`. This method can only be called if the media has been loaded.\n * @param status The new `AVPlaybackStatusToSet` of the `playbackObject`, whose values will override the current playback status.\n * @return A `Promise` that is fulfilled with the `AVPlaybackStatus` of the `playbackObject` once the new status has been set successfully,\n * or rejects if setting the new status failed. See below for details on `AVPlaybackStatus`.\n */\n setStatusAsync(status: AVPlaybackStatusToSet): Promise;\n\n /**\n * Gets the `AVPlaybackStatus` of the `playbackObject`.\n * @return A `Promise` that is fulfilled with the `AVPlaybackStatus` of the `playbackObject`.\n */\n getStatusAsync(): Promise;\n}\n\n// @needsAudit\n/**\n * On the `playbackObject` reference, the following API is provided.\n */\nexport interface Playback extends AV {\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ shouldPlay: true })`.\n *\n * Playback may not start immediately after calling this function for reasons such as buffering. Make sure to update your UI based\n * on the `isPlaying` and `isBuffering` properties of the `AVPlaybackStatus`.\n */\n playAsync(): Promise;\n\n /**\n * Loads the media from `source` into memory and prepares it for playing. This must be called before calling `setStatusAsync()`\n * or any of the convenience set status methods. This method can only be called if the `playbackObject` is in an unloaded state.\n * @param source The source of the media.\n * @param initialStatus The initial intended `AVPlaybackStatusToSet` of the `playbackObject`, whose values will override the default initial playback status.\n * This value defaults to `{}` if no parameter is passed. For more information see the details on `AVPlaybackStatusToSet` type\n * and the default initial playback status.\n * @param downloadAsync If set to `true`, the system will attempt to download the resource to the device before loading.\n * This value defaults to `true`. Note that at the moment, this will only work for `source`s of the form `require('path/to/file')` or `Asset` objects.\n * @return A `Promise` that is fulfilled with the `AVPlaybackStatus` of the `playbackObject` once it is loaded, or rejects if loading failed.\n * The `Promise` will also reject if the `playbackObject` was already loaded. See below for details on `AVPlaybackStatus`.\n */\n loadAsync(\n source: AVPlaybackSource,\n initialStatus?: AVPlaybackStatusToSet,\n downloadAsync?: boolean\n ): Promise;\n\n /**\n * Unloads the media from memory. `loadAsync()` must be called again in order to be able to play the media.\n * > This cleanup function will be automatically called in the `Video` component's `componentWillUnmount`.\n * @return A `Promise` that is fulfilled with the `AVPlaybackStatus` of the `playbackObject` once it is unloaded, or rejects if unloading failed.\n */\n unloadAsync(): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ shouldPlay: true, positionMillis, seekMillisToleranceAfter: tolerances.seekMillisToleranceAfter, seekMillisToleranceBefore: tolerances.seekMillisToleranceBefore })`.\n *\n * Playback may not start immediately after calling this function for reasons such as buffering. Make sure to update your UI based\n * on the `isPlaying` and `isBuffering` properties of the `AVPlaybackStatus`.\n * @param positionMillis The desired position of playback in milliseconds.\n * @param tolerances The tolerances are used only on iOS ([more details](#what-is-seek-tolerance-and-why-would)).\n */\n playFromPositionAsync(\n positionMillis: number,\n tolerances?: AVPlaybackTolerance\n ): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ shouldPlay: false })`.\n */\n pauseAsync(): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ shouldPlay: false, positionMillis: 0 })`.\n */\n stopAsync(): Promise;\n\n /**\n * Replays the playback item. When using `playFromPositionAsync(0)` the item is seeked to the position at `0 ms`.\n * On iOS this method uses internal implementation of the player and is able to play the item from the beginning immediately.\n * @param status The new `AVPlaybackStatusToSet` of the `playbackObject`, whose values will override the current playback status.\n * `positionMillis` and `shouldPlay` properties will be overridden with respectively `0` and `true`.\n * @return A `Promise` that is fulfilled with the `AVPlaybackStatus` of the `playbackObject` once the new status has been set successfully,\n * or rejects if setting the new status failed.\n */\n replayAsync(status: AVPlaybackStatusToSet): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ positionMillis })`.\n * @param positionMillis The desired position of playback in milliseconds.\n * @param tolerances The tolerances are used only on iOS ([more details](#what-is-seek-tolerance-and-why-would)).\n */\n setPositionAsync(\n positionMillis: number,\n tolerances?: AVPlaybackTolerance\n ): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ rate, shouldCorrectPitch, pitchCorrectionQuality })`.\n * @param rate The desired playback rate of the media. This value must be between `0.0` and `32.0`. Only available on Android API version 23 and later and iOS.\n * @param shouldCorrectPitch A boolean describing if we should correct the pitch for a changed rate. If set to `true`, the pitch of the audio will be corrected\n * (so a rate different than `1.0` will timestretch the audio).\n * @param pitchCorrectionQuality iOS time pitch algorithm setting, defaults to `Audio.PitchCorrectionQuality.Low`.\n */\n setRateAsync(\n rate: number,\n shouldCorrectPitch: boolean,\n pitchCorrectionQuality?: PitchCorrectionQuality\n ): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ volume, audioPan })`.\n * Note: `audioPan` is currently only supported on Android using `androidImplementation: 'MediaPlayer'`\n * @param volume A number between `0.0` (silence) and `1.0` (maximum volume).\n * @param audioPan A number between `-1.0` (full left) and `1.0` (full right).\n */\n setVolumeAsync(volume: number, audioPan?: number): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ isMuted })`.\n * @param isMuted A boolean describing if the audio of this media should be muted.\n */\n setIsMutedAsync(isMuted: boolean): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ isLooping })`.\n * @param isLooping A boolean describing if the media should play once (`false`) or loop indefinitely (`true`).\n */\n setIsLoopingAsync(isLooping: boolean): Promise;\n\n /**\n * This is equivalent to `playbackObject.setStatusAsync({ progressUpdateIntervalMillis })`.\n * @param progressUpdateIntervalMillis The new minimum interval in milliseconds between calls of `onPlaybackStatusUpdate`.\n * See `setOnPlaybackStatusUpdate()` for details.\n */\n setProgressUpdateIntervalAsync(progressUpdateIntervalMillis: number): Promise;\n}\n\n/**\n * @hidden\n * A mixin that defines common playback methods for A/V classes, so they implement the `Playback`\n * interface.\n */\nexport const PlaybackMixin = {\n async playAsync(): Promise {\n return (this as any as Playback).setStatusAsync({ shouldPlay: true });\n },\n\n async playFromPositionAsync(\n positionMillis: number,\n tolerances: AVPlaybackTolerance = {}\n ): Promise {\n return (this as any as Playback).setStatusAsync({\n positionMillis,\n shouldPlay: true,\n seekMillisToleranceAfter: tolerances.toleranceMillisAfter,\n seekMillisToleranceBefore: tolerances.toleranceMillisBefore,\n });\n },\n\n async pauseAsync(): Promise {\n return (this as any as Playback).setStatusAsync({ shouldPlay: false });\n },\n\n async stopAsync(): Promise {\n return (this as any as Playback).setStatusAsync({ positionMillis: 0, shouldPlay: false });\n },\n\n async setPositionAsync(\n positionMillis: number,\n tolerances: AVPlaybackTolerance = {}\n ): Promise {\n return (this as any as Playback).setStatusAsync({\n positionMillis,\n seekMillisToleranceAfter: tolerances.toleranceMillisAfter,\n seekMillisToleranceBefore: tolerances.toleranceMillisBefore,\n });\n },\n\n async setRateAsync(\n rate: number,\n shouldCorrectPitch: boolean = false,\n pitchCorrectionQuality: PitchCorrectionQuality = PitchCorrectionQuality.Low\n ): Promise {\n return (this as any as Playback).setStatusAsync({\n rate,\n shouldCorrectPitch,\n pitchCorrectionQuality,\n });\n },\n\n async setVolumeAsync(volume: number, audioPan?: number): Promise {\n return (this as any as Playback).setStatusAsync({ volume, audioPan });\n },\n\n async setIsMutedAsync(isMuted: boolean): Promise {\n return (this as any as Playback).setStatusAsync({ isMuted });\n },\n\n async setIsLoopingAsync(isLooping: boolean): Promise {\n return (this as any as Playback).setStatusAsync({ isLooping });\n },\n\n async setProgressUpdateIntervalAsync(\n progressUpdateIntervalMillis: number\n ): Promise {\n return (this as any as Playback).setStatusAsync({ progressUpdateIntervalMillis });\n },\n};\n\nexport * from './AV.types';\n","import { Asset } from 'expo-asset';\n\nimport ExponentAV from './ExponentAV';\n\n// @needsAudit\n/**\n * Check [official Apple documentation](https://developer.apple.com/documentation/avfoundation/avaudiotimepitchalgorithmlowqualityzerolatency) for more information.\n */\nexport enum PitchCorrectionQuality {\n /**\n * Equivalent to `AVAudioTimePitchAlgorithmLowQualityZeroLatency`.\n */\n Low = ExponentAV && ExponentAV.Qualities && ExponentAV.Qualities.Low,\n /**\n * Equivalent to `AVAudioTimePitchAlgorithmTimeDomain`.\n */\n Medium = ExponentAV && ExponentAV.Qualities && ExponentAV.Qualities.Medium,\n /**\n * Equivalent to `AVAudioTimePitchAlgorithmSpectral`.\n */\n High = ExponentAV && ExponentAV.Qualities && ExponentAV.Qualities.High,\n}\n\n// @needsAudit\n/**\n * The following forms of source are supported:\n * - A dictionary of the form `AVPlaybackSourceObject`.\n * The `overrideFileExtensionAndroid` property may come in handy if the player receives an URL like `example.com/play` which redirects to `example.com/player.m3u8`.\n * Setting this property to `m3u8` would allow the Android player to properly infer the content type of the media and use proper media file reader.\n * - `require('path/to/file')` for a media file asset in the source code directory.\n * - An [`Asset`](./asset) object for a media file asset.\n *\n * The [iOS developer documentation](https://developer.apple.com/library/ios/documentation/Miscellaneous/Conceptual/iPhoneOSTechOverview/MediaLayer/MediaLayer.html)\n * lists the audio and video formats supported on iOS.\n *\n * There are two sets of audio and video formats supported on Android: [formats supported by ExoPlayer](https://google.github.io/ExoPlayer/supported-formats.html)\n * and [formats supported by Android's MediaPlayer](https://developer.android.com/guide/appendix/media-formats.html#formats-table).\n * Expo uses ExoPlayer implementation by default. To use `MediaPlayer`, add `androidImplementation: 'MediaPlayer'` to the initial status of the AV object.\n */\nexport type AVPlaybackSource = number | AVPlaybackSourceObject | Asset;\n\n// @needsAudit\n/**\n * One of the possible forms of the `AVPlaybackSource`.\n */\nexport type AVPlaybackSourceObject = {\n /**\n * A network URL pointing to a media file.\n */\n uri: string;\n /**\n * An optional string overriding extension inferred from the URL.\n * @platform android\n */\n overrideFileExtensionAndroid?: string;\n /**\n * An optional headers object passed in a network request.\n */\n headers?: Record;\n};\n\n/**\n * @hidden\n */\nexport type AVPlaybackNativeSource = {\n uri: string;\n overridingExtension?: string | null;\n headers?: Record;\n};\n\n// @needsAudit\n/**\n * Object passed to the `onMetadataUpdate` function.\n */\nexport type AVMetadata = {\n /**\n * A string with the title of the sound object.\n */\n title?: string;\n};\n\n// @needsAudit\n/**\n * This is the structure returned from all playback API calls and describes the state of the `playbackObject` at that point in time.\n * It can take a form of `AVPlaybackStatusSuccess` or `AVPlaybackStatusError` based on the `playbackObject` load status.\n */\nexport type AVPlaybackStatus = AVPlaybackStatusError | AVPlaybackStatusSuccess;\n\n// @needsAudit\nexport type AVPlaybackStatusError = {\n /**\n * A boolean set to `false`.\n */\n isLoaded: false;\n /**\n * Underlying implementation to use (when set to `MediaPlayer` it uses [Android's MediaPlayer](https://developer.android.com/reference/android/media/MediaPlayer.html),\n * uses [ExoPlayer](https://google.github.io/ExoPlayer/) otherwise). You may need to use this property if you're trying to play an item unsupported by ExoPlayer\n * ([formats supported by ExoPlayer](https://google.github.io/ExoPlayer/supported-formats.html), [formats supported by Android's MediaPlayer](https://developer.android.com/guide/appendix/media-formats.html#formats-table)).\n *\n * Note that setting this property takes effect only when the AV object is just being created (toggling its value later will do nothing).\n *\n * @platform android\n */\n androidImplementation?: string;\n /**\n * A string only present if the `playbackObject` just encountered a fatal error and forced unload.\n * Populated exactly once when an error forces the object to unload.\n */\n error?: string;\n};\n\n// @needsAudit\nexport type AVPlaybackStatusSuccess = {\n /**\n * A boolean set to `true`.\n */\n isLoaded: true;\n /**\n * Underlying implementation to use (when set to `MediaPlayer` it uses [Android's MediaPlayer](https://developer.android.com/reference/android/media/MediaPlayer.html),\n * uses [ExoPlayer](https://google.github.io/ExoPlayer/) otherwise). You may need to use this property if you're trying to play an item unsupported by ExoPlayer\n * ([formats supported by ExoPlayer](https://google.github.io/ExoPlayer/supported-formats.html), [formats supported by Android's MediaPlayer](https://developer.android.com/guide/appendix/media-formats.html#formats-table)).\n *\n * Note that setting this property takes effect only when the AV object is just being created (toggling its value later will do nothing).\n *\n * @platform android\n */\n androidImplementation?: string;\n /**\n * The location of the media source.\n */\n uri: string;\n /**\n * The minimum interval in milliseconds between calls of `onPlaybackStatusUpdate`. See `setOnPlaybackStatusUpdate()` for details.\n */\n progressUpdateIntervalMillis: number;\n /**\n * The duration of the media in milliseconds. This is only present if the media has a duration.\n * > Note that in some cases, a media file's duration is readable on Android, but not on iOS.\n */\n durationMillis?: number;\n /**\n * The current position of playback in milliseconds.\n */\n positionMillis: number;\n /**\n * The position until which the media has been buffered into memory. Like `durationMillis`, this is only present in some cases.\n */\n playableDurationMillis?: number;\n // @docsMissing\n seekMillisToleranceBefore?: number;\n // @docsMissing\n seekMillisToleranceAfter?: number;\n /**\n * A boolean describing if the media is supposed to play.\n */\n shouldPlay: boolean;\n /**\n * A boolean describing if the media is currently playing.\n */\n isPlaying: boolean;\n /**\n * A boolean describing if the media is currently buffering.\n */\n isBuffering: boolean;\n /**\n * The current rate of the media.\n */\n rate: number;\n /**\n * A boolean describing if we are correcting the pitch for a changed rate.\n */\n shouldCorrectPitch: boolean;\n /**\n * iOS time pitch algorithm setting. See `setRateAsync` for details.\n */\n pitchCorrectionQuality?: PitchCorrectionQuality;\n /**\n * The current volume of the audio for this media.\n */\n volume: number;\n /**\n * A boolean describing if the audio of this media is currently muted.\n */\n isMuted: boolean;\n /**\n * The current audio panning value of the audio for this media.\n */\n audioPan: number;\n /**\n * A boolean describing if the media is currently looping.\n */\n isLooping: boolean;\n /**\n * A boolean describing if the media just played to completion at the time that this status was received.\n * When the media plays to completion, the function passed in `setOnPlaybackStatusUpdate()` is called exactly once\n * with `didJustFinish` set to `true`. `didJustFinish` is never `true` in any other case.\n */\n didJustFinish: boolean;\n};\n\n// @needsAudit\n/**\n * This is the structure passed to `setStatusAsync()` to modify the state of the `playbackObject`.\n */\nexport type AVPlaybackStatusToSet = {\n /**\n * Underlying implementation to use (when set to `MediaPlayer` it uses [Android's MediaPlayer](https://developer.android.com/reference/android/media/MediaPlayer.html),\n * uses [ExoPlayer](https://google.github.io/ExoPlayer/) otherwise). You may need to use this property if you're trying to play an item unsupported by ExoPlayer\n * ([formats supported by ExoPlayer](https://google.github.io/ExoPlayer/supported-formats.html), [formats supported by Android's MediaPlayer](https://developer.android.com/guide/appendix/media-formats.html#formats-table)).\n *\n * Note that setting this property takes effect only when the AV object is just being created (toggling its value later will do nothing).\n *\n * @platform android\n */\n androidImplementation?: string;\n /**\n * The minimum interval in milliseconds between calls of `onPlaybackStatusUpdate`. See `setOnPlaybackStatusUpdate()` for details.\n */\n progressUpdateIntervalMillis?: number;\n /**\n * The current position of playback in milliseconds.\n */\n positionMillis?: number;\n // @docsMissing\n seekMillisToleranceBefore?: number;\n // @docsMissing\n seekMillisToleranceAfter?: number;\n /**\n * A boolean describing if the media is supposed to play.\n */\n shouldPlay?: boolean;\n /**\n * The current rate of the media.\n * @platform android API 23+\n * @platform ios\n */\n rate?: number;\n /**\n * A boolean describing if we are correcting the pitch for a changed rate.\n */\n shouldCorrectPitch?: boolean;\n /**\n * The current volume of the audio for this media.\n * > Note that this only affect the audio of this `playbackObject` and do NOT affect the system volume.\n */\n volume?: number;\n /**\n * A boolean describing if the audio of this media is currently muted.\n * > Note that this only affect the audio of this `playbackObject` and do NOT affect the system volume.\n */\n isMuted?: boolean;\n /**\n * The current audio panning value of the audio for this media.\n * > Note that this only affect the audio of this `playbackObject` and do NOT affect the system volume.\n * > Also note that this is only available when the video was loaded using `androidImplementation: 'MediaPlayer'`\n * @platform android\n */\n audioPan?: number;\n /**\n * A boolean describing if the media is currently looping.\n */\n isLooping?: boolean;\n /**\n * iOS time pitch algorithm setting. See `setRateAsync` for details.\n */\n pitchCorrectionQuality?: PitchCorrectionQuality;\n};\n\n// @docsMissing\nexport type AVPlaybackTolerance = { toleranceMillisBefore?: number; toleranceMillisAfter?: number };\n","import ExponentAV from '../ExponentAV';\n\nlet _enabled = true;\n\nexport function isAudioEnabled(): boolean {\n return _enabled;\n}\n\nexport function throwIfAudioIsDisabled(): void {\n if (!_enabled) {\n throw new Error('Cannot complete operation because audio is not enabled.');\n }\n}\n\n// @needsAudit\n/**\n * Audio is enabled by default, but if you want to write your own Audio API in a bare workflow app, you might want to disable the Audio API.\n * @param value `true` enables Audio, and `false` disables it.\n * @return A `Promise` that will reject if audio playback could not be enabled for the device.\n */\nexport async function setIsEnabledAsync(value: boolean): Promise {\n _enabled = value;\n await ExponentAV.setAudioIsEnabled(value);\n // TODO : We immediately pause all players when disabled, but we do not resume all shouldPlay\n // players when enabled. Perhaps for completeness we should allow this; the design of the\n // enabling API is for people to enable / disable this audio library, but I think that it should\n // intuitively also double as a global pause/resume.\n}\n","import type { RecordingOptions } from './Recording.types';\n\n// @docsMissing\nexport enum AndroidOutputFormat {\n DEFAULT = 0,\n THREE_GPP = 1,\n MPEG_4 = 2,\n AMR_NB = 3,\n AMR_WB = 4,\n AAC_ADIF = 5,\n AAC_ADTS = 6,\n RTP_AVP = 7,\n MPEG2TS = 8,\n WEBM = 9,\n}\n\n// @docsMissing\nexport enum AndroidAudioEncoder {\n DEFAULT = 0,\n AMR_NB = 1,\n AMR_WB = 2,\n AAC = 3,\n HE_AAC = 4,\n AAC_ELD = 5,\n}\n\n// @docsMissing\n/**\n * > **Note** Not all of the iOS formats included in this list of constants are currently supported by iOS,\n * > in spite of appearing in the Apple source code. For an accurate list of formats supported by iOS, see\n * > [Core Audio Codecs](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html)\n * > and [iPhone Audio File Formats](https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html).\n */\nexport enum IOSOutputFormat {\n LINEARPCM = 'lpcm',\n AC3 = 'ac-3',\n '60958AC3' = 'cac3',\n APPLEIMA4 = 'ima4',\n MPEG4AAC = 'aac ',\n MPEG4CELP = 'celp',\n MPEG4HVXC = 'hvxc',\n MPEG4TWINVQ = 'twvq',\n MACE3 = 'MAC3',\n MACE6 = 'MAC6',\n ULAW = 'ulaw',\n ALAW = 'alaw',\n QDESIGN = 'QDMC',\n QDESIGN2 = 'QDM2',\n QUALCOMM = 'Qclp',\n MPEGLAYER1 = '.mp1',\n MPEGLAYER2 = '.mp2',\n MPEGLAYER3 = '.mp3',\n APPLELOSSLESS = 'alac',\n MPEG4AAC_HE = 'aach',\n MPEG4AAC_LD = 'aacl',\n MPEG4AAC_ELD = 'aace',\n MPEG4AAC_ELD_SBR = 'aacf',\n MPEG4AAC_ELD_V2 = 'aacg',\n MPEG4AAC_HE_V2 = 'aacp',\n MPEG4AAC_SPATIAL = 'aacs',\n AMR = 'samr',\n AMR_WB = 'sawb',\n AUDIBLE = 'AUDB',\n ILBC = 'ilbc',\n DVIINTELIMA = 0x6d730011,\n MICROSOFTGSM = 0x6d730031,\n AES3 = 'aes3',\n ENHANCEDAC3 = 'ec-3',\n}\n\n// @docsMissing\nexport enum IOSAudioQuality {\n MIN = 0,\n LOW = 0x20,\n MEDIUM = 0x40,\n HIGH = 0x60,\n MAX = 0x7f,\n}\n\n// @docsMissing\nexport enum IOSBitRateStrategy {\n CONSTANT = 0,\n LONG_TERM_AVERAGE = 1,\n VARIABLE_CONSTRAINED = 2,\n VARIABLE = 3,\n}\n\n// TODO : maybe make presets for music and speech, or lossy / lossless.\n\nconst HIGH_QUALITY: RecordingOptions = {\n isMeteringEnabled: true,\n android: {\n extension: '.m4a',\n outputFormat: AndroidOutputFormat.MPEG_4,\n audioEncoder: AndroidAudioEncoder.AAC,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n },\n ios: {\n extension: '.m4a',\n outputFormat: IOSOutputFormat.MPEG4AAC,\n audioQuality: IOSAudioQuality.MAX,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n linearPCMBitDepth: 16,\n linearPCMIsBigEndian: false,\n linearPCMIsFloat: false,\n },\n web: {\n mimeType: 'audio/webm',\n bitsPerSecond: 128000,\n },\n};\n\nconst LOW_QUALITY: RecordingOptions = {\n isMeteringEnabled: true,\n android: {\n extension: '.3gp',\n outputFormat: AndroidOutputFormat.THREE_GPP,\n audioEncoder: AndroidAudioEncoder.AMR_NB,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n },\n ios: {\n extension: '.caf',\n audioQuality: IOSAudioQuality.MIN,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n linearPCMBitDepth: 16,\n linearPCMIsBigEndian: false,\n linearPCMIsFloat: false,\n },\n web: {\n mimeType: 'audio/webm',\n bitsPerSecond: 128000,\n },\n};\n\n/**\n * Constant which contains definitions of the two preset examples of `RecordingOptions`, as implemented in the Audio SDK.\n *\n * # `HIGH_QUALITY`\n * ```ts\n * RecordingOptionsPresets.HIGH_QUALITY = {\n * isMeteringEnabled: true,\n * android: {\n * extension: '.m4a',\n * outputFormat: AndroidOutputFormat.MPEG_4,\n * audioEncoder: AndroidAudioEncoder.AAC,\n * sampleRate: 44100,\n * numberOfChannels: 2,\n * bitRate: 128000,\n * },\n * ios: {\n * extension: '.m4a',\n * outputFormat: IOSOutputFormat.MPEG4AAC,\n * audioQuality: IOSAudioQuality.MAX,\n * sampleRate: 44100,\n * numberOfChannels: 2,\n * bitRate: 128000,\n * linearPCMBitDepth: 16,\n * linearPCMIsBigEndian: false,\n * linearPCMIsFloat: false,\n * },\n * web: {\n * mimeType: 'audio/webm',\n * bitsPerSecond: 128000,\n * },\n * };\n * ```\n *\n * # `LOW_QUALITY`\n * ```ts\n * RecordingOptionsPresets.LOW_QUALITY = {\n * isMeteringEnabled: true,\n * android: {\n * extension: '.3gp',\n * outputFormat: AndroidOutputFormat.THREE_GPP,\n * audioEncoder: AndroidAudioEncoder.AMR_NB,\n * sampleRate: 44100,\n * numberOfChannels: 2,\n * bitRate: 128000,\n * },\n * ios: {\n * extension: '.caf',\n * audioQuality: IOSAudioQuality.MIN,\n * sampleRate: 44100,\n * numberOfChannels: 2,\n * bitRate: 128000,\n * linearPCMBitDepth: 16,\n * linearPCMIsBigEndian: false,\n * linearPCMIsFloat: false,\n * },\n * web: {\n * mimeType: 'audio/webm',\n * bitsPerSecond: 128000,\n * },\n * };\n * ```\n */\nexport const RecordingOptionsPresets: Record = {\n HIGH_QUALITY,\n LOW_QUALITY,\n};\n","import { EventEmitter, Platform, UnavailabilityError } from 'expo-modules-core';\n\nimport {\n Playback,\n PlaybackMixin,\n AVPlaybackSource,\n AVMetadata,\n AVPlaybackStatus,\n AVPlaybackStatusToSet,\n assertStatusValuesInBounds,\n getNativeSourceAndFullInitialStatusForLoadAsync,\n getUnloadedStatus,\n AVPlaybackTolerance,\n} from '../AV';\nimport { PitchCorrectionQuality } from '../Audio';\nimport ExponentAV from '../ExponentAV';\nimport { throwIfAudioIsDisabled } from './AudioAvailability';\n\n// @needsAudit\nexport type AudioChannel = {\n /**\n * All samples for this specific Audio Channel in PCM Buffer format (-1 to 1).\n */\n frames: number[];\n};\n\n// @needsAudit\n/**\n * Object passed to the `onAudioSampleReceived` function. Represents a single sample from an audio source.\n * The sample contains all frames (PCM Buffer values) for each channel of the audio, so if the audio is _stereo_ (interleaved),\n * there will be two channels, one for left and one for right audio.\n */\nexport type AudioSample = {\n /**\n * An array representing the data from each channel in PCM Buffer format. Array elements are objects in the following format: `{ frames: number[] }`,\n * where each frame is a number in PCM Buffer format (`-1` to `1` range).\n */\n channels: AudioChannel[];\n /**\n * A number representing the timestamp of the current sample in seconds, relative to the audio track's timeline.\n * > **Known issue:** When using the `ExoPlayer` Android implementation, the timestamp is always `-1`.\n */\n timestamp: number;\n};\n\n// @needsAudit\nexport type SoundObject = {\n /**\n * The newly created and loaded `Sound` object.\n */\n sound: Sound;\n /**\n * The `PlaybackStatus` of the `Sound` object. See the [AV documentation](/versions/latest/sdk/av) for further information.\n */\n status: AVPlaybackStatus;\n};\n\ntype AudioInstance = number | HTMLMediaElement | null;\ntype AudioSampleCallback = ((sample: AudioSample) => void) | null;\n\ndeclare global {\n interface Global {\n __EXAV_setOnAudioSampleReceivedCallback:\n | ((key: number, callback: AudioSampleCallback) => void)\n | undefined;\n }\n}\n\n// @needsAudit\n/**\n * This class represents a sound corresponding to an Asset or URL.\n * @return A newly constructed instance of `Audio.Sound`.\n *\n * @example\n * ```ts\n * const sound = new Audio.Sound();\n * try {\n * await sound.loadAsync(require('./assets/sounds/hello.mp3'));\n * await sound.playAsync();\n * // Your sound is playing!\n *\n * // Don't forget to unload the sound from memory\n * // when you are done using the Sound object\n * await sound.unloadAsync();\n * } catch (error) {\n * // An error occurred!\n * }\n * ```\n *\n * > Method not described below and the rest of the API for `Audio.Sound` is the same as the imperative playback API for `Video`.\n * > See the [AV documentation](/versions/latest/sdk/av) for further information.\n */\nexport class Sound implements Playback {\n _loaded: boolean = false;\n _loading: boolean = false;\n _key: AudioInstance = null;\n _lastStatusUpdate: string | null = null;\n _lastStatusUpdateTime: Date | null = null;\n _subscriptions: { remove: () => void }[] = [];\n _eventEmitter: EventEmitter = new EventEmitter(ExponentAV);\n _coalesceStatusUpdatesInMillis: number = 100;\n _onPlaybackStatusUpdate: ((status: AVPlaybackStatus) => void) | null = null;\n _onMetadataUpdate: ((metadata: AVMetadata) => void) | null = null;\n _onAudioSampleReceived: AudioSampleCallback = null;\n\n /** @deprecated Use `Sound.createAsync()` instead */\n static create = async (\n source: AVPlaybackSource,\n initialStatus: AVPlaybackStatusToSet = {},\n onPlaybackStatusUpdate: ((status: AVPlaybackStatus) => void) | null = null,\n downloadFirst: boolean = true\n ): Promise => {\n console.warn(\n `Sound.create is deprecated in favor of Sound.createAsync with the same API except for the new method name`\n );\n return Sound.createAsync(source, initialStatus, onPlaybackStatusUpdate, downloadFirst);\n };\n\n /**\n * Creates and loads a sound from source.\n *\n * ```ts\n * const { sound } = await Audio.Sound.createAsync(\n * source,\n * initialStatus,\n * onPlaybackStatusUpdate,\n * downloadFirst\n * );\n *\n * // Which is equivalent to the following:\n * const sound = new Audio.Sound();\n * sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);\n * await sound.loadAsync(source, initialStatus, downloadFirst);\n * ```\n *\n * @param source The source of the sound. See the [AV documentation](/versions/latest/sdk/av/#playback-api) for details on the possible `source` values.\n *\n * @param initialStatus The initial intended `PlaybackStatusToSet` of the sound, whose values will override the default initial playback status.\n * This value defaults to `{}` if no parameter is passed. See the [AV documentation](/versions/latest/sdk/av) for details on `PlaybackStatusToSet` and the default\n * initial playback status.\n *\n * @param onPlaybackStatusUpdate A function taking a single parameter `PlaybackStatus`. This value defaults to `null` if no parameter is passed.\n * See the [AV documentation](/versions/latest/sdk/av) for details on the functionality provided by `onPlaybackStatusUpdate`\n *\n * @param downloadFirst If set to true, the system will attempt to download the resource to the device before loading. This value defaults to `true`.\n * Note that at the moment, this will only work for `source`s of the form `require('path/to/file')` or `Asset` objects.\n *\n * @example\n * ```ts\n * try {\n * const { sound: soundObject, status } = await Audio.Sound.createAsync(\n * require('./assets/sounds/hello.mp3'),\n * { shouldPlay: true }\n * );\n * // Your sound is playing!\n * } catch (error) {\n * // An error occurred!\n * }\n * ```\n *\n * @return A `Promise` that is rejected if creation failed, or fulfilled with the `SoundObject` if creation succeeded.\n */\n static createAsync = async (\n source: AVPlaybackSource,\n initialStatus: AVPlaybackStatusToSet = {},\n onPlaybackStatusUpdate: ((status: AVPlaybackStatus) => void) | null = null,\n downloadFirst: boolean = true\n ): Promise => {\n const sound: Sound = new Sound();\n sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);\n const status: AVPlaybackStatus = await sound.loadAsync(source, initialStatus, downloadFirst);\n return { sound, status };\n };\n\n // Internal methods\n\n _callOnPlaybackStatusUpdateForNewStatus(status: AVPlaybackStatus) {\n const shouldDismissBasedOnCoalescing =\n this._lastStatusUpdateTime &&\n JSON.stringify(status) === this._lastStatusUpdate &&\n Date.now() - this._lastStatusUpdateTime.getTime() < this._coalesceStatusUpdatesInMillis;\n\n if (this._onPlaybackStatusUpdate != null && !shouldDismissBasedOnCoalescing) {\n this._onPlaybackStatusUpdate(status);\n this._lastStatusUpdateTime = new Date();\n this._lastStatusUpdate = JSON.stringify(status);\n }\n }\n\n async _performOperationAndHandleStatusAsync(\n operation: () => Promise\n ): Promise {\n throwIfAudioIsDisabled();\n if (this._loaded) {\n const status = await operation();\n this._callOnPlaybackStatusUpdateForNewStatus(status);\n return status;\n } else {\n throw new Error('Cannot complete operation because sound is not loaded.');\n }\n }\n\n private _updateAudioSampleReceivedCallback() {\n if (globalThis.__EXAV_setOnAudioSampleReceivedCallback == null) {\n if (Platform.OS === 'ios' || Platform.OS === 'android') {\n console.warn(\n 'expo-av: Failed to set up Audio Sample Buffer callback. ' +\n \"Do you have 'Remote Debugging' enabled in your app's Developer Menu (https://docs.expo.dev/workflow/debugging)? \" +\n 'Audio Sample Buffer callbacks are not supported while using Remote Debugging, you will need to disable it to use them.'\n );\n return;\n } else {\n throw new UnavailabilityError('expo-av', 'setOnAudioSampleReceived');\n }\n }\n if (this._key == null) {\n throw new Error(\n 'Cannot set Audio Sample Buffer callback when the Sound instance has not been successfully loaded/initialized!'\n );\n }\n if (typeof this._key !== 'number') {\n throw new Error(\n `Cannot set Audio Sample Buffer callback when Sound instance key is of type ${typeof this\n ._key}! (expected: number)`\n );\n }\n\n globalThis.__EXAV_setOnAudioSampleReceivedCallback(this._key, this._onAudioSampleReceived);\n }\n\n _internalStatusUpdateCallback = ({\n key,\n status,\n }: {\n key: AudioInstance;\n status: AVPlaybackStatus;\n }) => {\n if (this._key === key) {\n this._callOnPlaybackStatusUpdateForNewStatus(status);\n }\n };\n\n _internalMetadataUpdateCallback = ({\n key,\n metadata,\n }: {\n key: AudioInstance;\n metadata: AVMetadata;\n }) => {\n if (this._key === key) {\n this._onMetadataUpdate?.(metadata);\n }\n };\n\n _internalErrorCallback = ({ key, error }: { key: AudioInstance; error: string }) => {\n if (this._key === key) {\n this._errorCallback(error);\n }\n };\n\n // TODO: We can optimize by only using time observer on native if (this._onPlaybackStatusUpdate).\n _subscribeToNativeEvents() {\n if (this._loaded) {\n this._subscriptions.push(\n this._eventEmitter.addListener(\n 'didUpdatePlaybackStatus',\n this._internalStatusUpdateCallback\n ),\n this._eventEmitter.addListener('didUpdateMetadata', this._internalMetadataUpdateCallback)\n );\n\n this._subscriptions.push(\n this._eventEmitter.addListener('ExponentAV.onError', this._internalErrorCallback)\n );\n }\n }\n\n _clearSubscriptions() {\n this._subscriptions.forEach((e) => e.remove());\n this._subscriptions = [];\n }\n\n _errorCallback = (error: string) => {\n this._clearSubscriptions();\n this._loaded = false;\n this._key = null;\n this._callOnPlaybackStatusUpdateForNewStatus(getUnloadedStatus(error));\n };\n\n // ### Unified playback API ### (consistent with Video.js)\n // All calls automatically call onPlaybackStatusUpdate as a side effect.\n\n // Get status API\n\n getStatusAsync = async (): Promise => {\n if (this._loaded) {\n return this._performOperationAndHandleStatusAsync(() =>\n ExponentAV.getStatusForSound(this._key)\n );\n }\n const status: AVPlaybackStatus = getUnloadedStatus();\n this._callOnPlaybackStatusUpdateForNewStatus(status);\n return status;\n };\n\n /**\n * Sets a function to be called regularly with the `AVPlaybackStatus` of the playback object.\n *\n * `onPlaybackStatusUpdate` will be called whenever a call to the API for this playback object completes\n * (such as `setStatusAsync()`, `getStatusAsync()`, or `unloadAsync()`), nd will also be called at regular intervals\n * while the media is in the loaded state.\n *\n * Set `progressUpdateIntervalMillis` via `setStatusAsync()` or `setProgressUpdateIntervalAsync()` to modify\n * the interval with which `onPlaybackStatusUpdate` is called while loaded.\n *\n * @param onPlaybackStatusUpdate A function taking a single parameter `AVPlaybackStatus`.\n */\n setOnPlaybackStatusUpdate(onPlaybackStatusUpdate: ((status: AVPlaybackStatus) => void) | null) {\n this._onPlaybackStatusUpdate = onPlaybackStatusUpdate;\n this.getStatusAsync();\n }\n\n /**\n * Sets a function to be called whenever the metadata of the sound object changes, if one is set.\n * @param onMetadataUpdate A function taking a single object of type `AVMetadata` as a parameter.\n * @platform ios\n */\n setOnMetadataUpdate(onMetadataUpdate: (metadata: AVMetadata) => void) {\n this._onMetadataUpdate = onMetadataUpdate;\n }\n\n /**\n * Sets a function to be called during playback, receiving the audio sample as parameter.\n * @param callback A function taking the `AudioSampleCallback` as parameter.\n */\n setOnAudioSampleReceived(callback: AudioSampleCallback) {\n this._onAudioSampleReceived = callback;\n if (this._key != null) {\n this._updateAudioSampleReceivedCallback();\n }\n }\n\n // Loading / unloading API\n\n async loadAsync(\n source: AVPlaybackSource,\n initialStatus: AVPlaybackStatusToSet = {},\n downloadFirst: boolean = true\n ): Promise {\n throwIfAudioIsDisabled();\n if (this._loading) {\n throw new Error('The Sound is already loading.');\n }\n if (!this._loaded) {\n this._loading = true;\n\n const { nativeSource, fullInitialStatus } =\n await getNativeSourceAndFullInitialStatusForLoadAsync(source, initialStatus, downloadFirst);\n\n // This is a workaround, since using load with resolve / reject seems to not work.\n return new Promise((resolve, reject) => {\n const loadSuccess = (result: [AudioInstance, AVPlaybackStatus]) => {\n const [key, status] = result;\n this._key = key;\n this._loaded = true;\n this._loading = false;\n this._subscribeToNativeEvents();\n this._callOnPlaybackStatusUpdateForNewStatus(status);\n resolve(status);\n };\n\n const loadError = (error: Error) => {\n this._loading = false;\n reject(error);\n };\n\n ExponentAV.loadForSound(nativeSource, fullInitialStatus).then(loadSuccess).catch(loadError);\n });\n } else {\n throw new Error('The Sound is already loaded.');\n }\n }\n\n async unloadAsync(): Promise {\n if (this._loaded) {\n this._loaded = false;\n const key = this._key;\n this._key = null;\n const status = await ExponentAV.unloadForSound(key);\n this._callOnPlaybackStatusUpdateForNewStatus(status);\n this._clearSubscriptions();\n return status;\n } else {\n return this.getStatusAsync(); // Automatically calls onPlaybackStatusUpdate.\n }\n }\n\n // Set status API (only available while isLoaded = true)\n\n async setStatusAsync(status: AVPlaybackStatusToSet): Promise {\n assertStatusValuesInBounds(status);\n return this._performOperationAndHandleStatusAsync(() =>\n ExponentAV.setStatusForSound(this._key, status)\n );\n }\n\n async replayAsync(status: AVPlaybackStatusToSet = {}): Promise {\n if (status.positionMillis && status.positionMillis !== 0) {\n throw new Error('Requested position after replay has to be 0.');\n }\n\n return this._performOperationAndHandleStatusAsync(() =>\n ExponentAV.replaySound(this._key, {\n ...status,\n positionMillis: 0,\n shouldPlay: true,\n })\n );\n }\n\n // Methods of the Playback interface that are set via PlaybackMixin\n playAsync!: () => Promise;\n playFromPositionAsync!: (\n positionMillis: number,\n tolerances?: AVPlaybackTolerance\n ) => Promise;\n pauseAsync!: () => Promise;\n stopAsync!: () => Promise;\n setPositionAsync!: (\n positionMillis: number,\n tolerances?: AVPlaybackTolerance\n ) => Promise;\n setRateAsync!: (\n rate: number,\n shouldCorrectPitch: boolean,\n pitchCorrectionQuality?: PitchCorrectionQuality\n ) => Promise;\n setVolumeAsync!: (volume: number, audioPan?: number) => Promise;\n setIsMutedAsync!: (isMuted: boolean) => Promise;\n setIsLoopingAsync!: (isLooping: boolean) => Promise;\n setProgressUpdateIntervalAsync!: (\n progressUpdateIntervalMillis: number\n ) => Promise;\n}\n\nObject.assign(Sound.prototype, PlaybackMixin);\n","import { PermissionResponse, PermissionStatus, SyntheticPlatformEmitter } from 'expo-modules-core';\n\nimport type { AVPlaybackNativeSource, AVPlaybackStatus, AVPlaybackStatusToSet } from './AV.types';\nimport type { RecordingStatus } from './Audio/Recording.types';\nimport { RecordingOptionsPresets } from './Audio/RecordingConstants';\n\nasync function getPermissionWithQueryAsync(\n name: PermissionNameWithAdditionalValues\n): Promise {\n if (!navigator || !navigator.permissions || !navigator.permissions.query) return null;\n\n try {\n const { state } = await navigator.permissions.query({ name });\n switch (state) {\n case 'granted':\n return PermissionStatus.GRANTED;\n case 'denied':\n return PermissionStatus.DENIED;\n default:\n return PermissionStatus.UNDETERMINED;\n }\n } catch {\n // Firefox - TypeError: 'microphone' (value of 'name' member of PermissionDescriptor) is not a valid value for enumeration PermissionName.\n return PermissionStatus.UNDETERMINED;\n }\n}\n\nfunction getUserMedia(constraints: MediaStreamConstraints): Promise {\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n return navigator.mediaDevices.getUserMedia(constraints);\n }\n\n // Some browsers partially implement mediaDevices. We can't just assign an object\n // with getUserMedia as it would overwrite existing properties.\n // Here, we will just add the getUserMedia property if it's missing.\n\n // First get ahold of the legacy getUserMedia, if present\n const getUserMedia =\n // TODO: this method is deprecated, migrate to https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n function () {\n const error: any = new Error('Permission unimplemented');\n error.code = 0;\n error.name = 'NotAllowedError';\n throw error;\n };\n\n return new Promise((resolve, reject) => {\n getUserMedia.call(navigator, constraints, resolve, reject);\n });\n}\n\nfunction getStatusFromMedia(media?: HTMLMediaElement): AVPlaybackStatus {\n if (!media) {\n return {\n isLoaded: false,\n error: undefined,\n };\n }\n\n const isPlaying = !!(\n media.currentTime > 0 &&\n !media.paused &&\n !media.ended &&\n media.readyState > 2\n );\n\n const status: AVPlaybackStatus = {\n isLoaded: true,\n uri: media.src,\n progressUpdateIntervalMillis: 100, //TODO: Bacon: Add interval between calls\n durationMillis: media.duration * 1000,\n positionMillis: media.currentTime * 1000,\n // playableDurationMillis: media.buffered * 1000,\n // seekMillisToleranceBefore?: number\n // seekMillisToleranceAfter?: number\n shouldPlay: media.autoplay,\n isPlaying,\n isBuffering: false, //media.waiting,\n rate: media.playbackRate,\n // TODO: Bacon: This seems too complicated right now: https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-frequency\n shouldCorrectPitch: false,\n volume: media.volume,\n audioPan: 0,\n isMuted: media.muted,\n isLooping: media.loop,\n didJustFinish: media.ended,\n };\n\n return status;\n}\n\nasync function setStatusForMedia(\n media: HTMLMediaElement,\n status: AVPlaybackStatusToSet\n): Promise {\n if (status.positionMillis !== undefined) {\n media.currentTime = status.positionMillis / 1000;\n }\n // if (status.progressUpdateIntervalMillis !== undefined) {\n // media.progressUpdateIntervalMillis = status.progressUpdateIntervalMillis;\n // }\n // if (status.seekMillisToleranceBefore !== undefined) {\n // media.seekMillisToleranceBefore = status.seekMillisToleranceBefore;\n // }\n // if (status.seekMillisToleranceAfter !== undefined) {\n // media.seekMillisToleranceAfter = status.seekMillisToleranceAfter;\n // }\n // if (status.shouldCorrectPitch !== undefined) {\n // media.shouldCorrectPitch = status.shouldCorrectPitch;\n // }\n if (status.shouldPlay !== undefined) {\n if (status.shouldPlay) {\n await media.play();\n } else {\n await media.pause();\n }\n }\n if (status.rate !== undefined) {\n media.playbackRate = status.rate;\n }\n if (status.volume !== undefined) {\n media.volume = status.volume;\n }\n if (status.isMuted !== undefined) {\n media.muted = status.isMuted;\n }\n if (status.isLooping !== undefined) {\n media.loop = status.isLooping;\n }\n\n return getStatusFromMedia(media);\n}\n\nlet mediaRecorder: null | any /*MediaRecorder*/ = null;\nlet mediaRecorderUptimeOfLastStartResume: number = 0;\nlet mediaRecorderDurationAlreadyRecorded: number = 0;\nlet mediaRecorderIsRecording: boolean = false;\n\nfunction getAudioRecorderDurationMillis() {\n let duration = mediaRecorderDurationAlreadyRecorded;\n if (mediaRecorderIsRecording && mediaRecorderUptimeOfLastStartResume > 0) {\n duration += Date.now() - mediaRecorderUptimeOfLastStartResume;\n }\n return duration;\n}\n\nexport default {\n get name(): string {\n return 'ExponentAV';\n },\n async getStatusForVideo(element: HTMLMediaElement): Promise {\n return getStatusFromMedia(element);\n },\n async loadForVideo(\n element: HTMLMediaElement,\n nativeSource: AVPlaybackNativeSource,\n fullInitialStatus: AVPlaybackStatusToSet\n ): Promise {\n return getStatusFromMedia(element);\n },\n async unloadForVideo(element: HTMLMediaElement): Promise {\n return getStatusFromMedia(element);\n },\n async setStatusForVideo(\n element: HTMLMediaElement,\n status: AVPlaybackStatusToSet\n ): Promise {\n return setStatusForMedia(element, status);\n },\n async replayVideo(\n element: HTMLMediaElement,\n status: AVPlaybackStatusToSet\n ): Promise {\n return setStatusForMedia(element, status);\n },\n /* Audio */\n async setAudioMode() {},\n async setAudioIsEnabled() {},\n async getStatusForSound(element: HTMLMediaElement) {\n return getStatusFromMedia(element);\n },\n async loadForSound(\n nativeSource: string | { uri: string; [key: string]: any },\n fullInitialStatus: AVPlaybackStatusToSet\n ): Promise<[HTMLMediaElement, AVPlaybackStatus]> {\n const source = typeof nativeSource === 'string' ? nativeSource : nativeSource.uri;\n const media = new Audio(source);\n\n media.ontimeupdate = () => {\n SyntheticPlatformEmitter.emit('didUpdatePlaybackStatus', {\n key: media,\n status: getStatusFromMedia(media),\n });\n };\n\n media.onerror = () => {\n SyntheticPlatformEmitter.emit('ExponentAV.onError', {\n key: media,\n error: media.error!.message,\n });\n };\n\n const status = await setStatusForMedia(media, fullInitialStatus);\n\n return [media, status];\n },\n async unloadForSound(element: HTMLMediaElement) {\n element.pause();\n element.removeAttribute('src');\n element.load();\n return getStatusFromMedia(element);\n },\n async setStatusForSound(\n element: HTMLMediaElement,\n status: AVPlaybackStatusToSet\n ): Promise {\n return setStatusForMedia(element, status);\n },\n async replaySound(\n element: HTMLMediaElement,\n status: AVPlaybackStatusToSet\n ): Promise {\n return setStatusForMedia(element, status);\n },\n\n /* Recording */\n // async setUnloadedCallbackForAndroidRecording() {},\n async getAudioRecordingStatus(): Promise {\n return {\n canRecord: mediaRecorder?.state === 'recording' || mediaRecorder?.state === 'inactive',\n isRecording: mediaRecorder?.state === 'recording',\n isDoneRecording: false,\n durationMillis: getAudioRecorderDurationMillis(),\n uri: null,\n };\n },\n async prepareAudioRecorder(options): Promise<{\n uri: string | null;\n // status is of type RecordingStatus, but without the canRecord field populated\n status: Pick>;\n }> {\n if (typeof navigator !== 'undefined' && !navigator.mediaDevices) {\n throw new Error('No media devices available');\n }\n\n mediaRecorderUptimeOfLastStartResume = 0;\n mediaRecorderDurationAlreadyRecorded = 0;\n\n const stream = await getUserMedia({ audio: true });\n\n mediaRecorder = new (window as any).MediaRecorder(\n stream,\n options?.web || RecordingOptionsPresets.HIGH_QUALITY.web\n );\n\n mediaRecorder.addEventListener('pause', () => {\n mediaRecorderDurationAlreadyRecorded = getAudioRecorderDurationMillis();\n mediaRecorderIsRecording = false;\n });\n\n mediaRecorder.addEventListener('resume', () => {\n mediaRecorderUptimeOfLastStartResume = Date.now();\n mediaRecorderIsRecording = true;\n });\n\n mediaRecorder.addEventListener('start', () => {\n mediaRecorderUptimeOfLastStartResume = Date.now();\n mediaRecorderDurationAlreadyRecorded = 0;\n mediaRecorderIsRecording = true;\n });\n\n mediaRecorder.addEventListener('stop', () => {\n mediaRecorderDurationAlreadyRecorded = getAudioRecorderDurationMillis();\n mediaRecorderIsRecording = false;\n\n // Clears recording icon in Chrome tab\n stream.getTracks().forEach((track) => track.stop());\n });\n\n const { uri, ...status } = await this.getAudioRecordingStatus();\n\n return { uri: null, status };\n },\n async startAudioRecording(): Promise {\n if (mediaRecorder === null) {\n throw new Error(\n 'Cannot start an audio recording without initializing a MediaRecorder. Run prepareToRecordAsync() before attempting to start an audio recording.'\n );\n }\n\n if (mediaRecorder.state === 'paused') {\n mediaRecorder.resume();\n } else {\n mediaRecorder.start();\n }\n\n return this.getAudioRecordingStatus();\n },\n async pauseAudioRecording(): Promise {\n if (mediaRecorder === null) {\n throw new Error(\n 'Cannot start an audio recording without initializing a MediaRecorder. Run prepareToRecordAsync() before attempting to start an audio recording.'\n );\n }\n\n // Set status to paused\n mediaRecorder.pause();\n\n return this.getAudioRecordingStatus();\n },\n async stopAudioRecording(): Promise {\n if (mediaRecorder === null) {\n throw new Error(\n 'Cannot start an audio recording without initializing a MediaRecorder. Run prepareToRecordAsync() before attempting to start an audio recording.'\n );\n }\n\n if (mediaRecorder.state === 'inactive') {\n return this.getAudioRecordingStatus();\n }\n\n const dataPromise = new Promise((resolve) =>\n mediaRecorder.addEventListener('dataavailable', (e) => resolve(e.data))\n );\n\n mediaRecorder.stop();\n\n const data = await dataPromise;\n const url = URL.createObjectURL(data);\n\n return {\n ...(await this.getAudioRecordingStatus()),\n uri: url,\n };\n },\n async unloadAudioRecorder(): Promise {\n mediaRecorder = null;\n },\n\n async getPermissionsAsync(): Promise {\n const maybeStatus = await getPermissionWithQueryAsync('microphone');\n switch (maybeStatus) {\n case PermissionStatus.GRANTED:\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n case PermissionStatus.DENIED:\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n default:\n return await this.requestPermissionsAsync();\n }\n },\n async requestPermissionsAsync(): Promise {\n try {\n const stream = await getUserMedia({ audio: true });\n stream.getTracks().forEach((track) => track.stop());\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: true,\n granted: true,\n };\n } catch {\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n }\n },\n};\n","import { EventEmitter, Subscription, UnavailabilityError, Platform } from 'expo-modules-core';\n\nimport {\n ClipboardImage,\n ContentType,\n GetImageOptions,\n GetStringOptions,\n SetStringOptions,\n} from './Clipboard.types';\nimport { ClipboardPasteButton } from './ClipboardPasteButton';\nimport ExpoClipboard from './ExpoClipboard';\n\nconst emitter = new EventEmitter(ExpoClipboard);\n\nconst onClipboardEventName = 'onClipboardChanged';\n\ntype ClipboardEvent = {\n /**\n * @deprecated Returns empty string. Use [`getStringAsync()`](#getstringasyncoptions) instead to retrieve clipboard content.\n */\n content: string;\n /**\n * An array of content types that are available on the clipboard.\n */\n contentTypes: ContentType[];\n};\n\nexport { Subscription, ClipboardEvent };\n\n/**\n * Gets the content of the user's clipboard. Please note that calling this method on web will prompt\n * the user to grant your app permission to \"see text and images copied to the clipboard.\"\n *\n * @param options Options for the clipboard content to be retrieved.\n * @returns A promise that resolves to the content of the clipboard.\n */\nexport async function getStringAsync(options: GetStringOptions = {}): Promise {\n if (!ExpoClipboard.getStringAsync) {\n throw new UnavailabilityError('Clipboard', 'getStringAsync');\n }\n return await ExpoClipboard.getStringAsync(options);\n}\n\n/**\n * Sets the content of the user's clipboard.\n *\n * @param text The string to save to the clipboard.\n * @param options Options for the clipboard content to be set.\n * @returns On web, this returns a promise that fulfills to a boolean value indicating whether or not\n * the string was saved to the user's clipboard. On iOS and Android, the promise always resolves to `true`.\n */\nexport async function setStringAsync(\n text: string,\n options: SetStringOptions = {}\n): Promise {\n if (!ExpoClipboard.setStringAsync) {\n throw new UnavailabilityError('Clipboard', 'setStringAsync');\n }\n return ExpoClipboard.setStringAsync(text, options);\n}\n\n/**\n * Sets the content of the user's clipboard.\n * @deprecated Use [`setStringAsync()`](#setstringasynctext-options) instead.\n *\n * @returns On web, this returns a boolean value indicating whether or not the string was saved to\n * the user's clipboard. On iOS and Android, nothing is returned.\n */\nexport function setString(text: string): void {\n if (Platform.OS === 'web') {\n // on web, we need to return legacy method,\n // because of different return type\n return ExpoClipboard.setString(text);\n } else {\n setStringAsync(text);\n }\n}\n\n/**\n * Returns whether the clipboard has text content. Returns true for both plain text and rich text (e.g. HTML).\n *\n * On web, this requires the user to grant your app permission to _\"see text and images copied to the clipboard\"_.\n *\n * @returns A promise that fulfills to `true` if clipboard has text content, resolves to `false` otherwise.\n */\nexport function hasStringAsync(): Promise {\n if (!ExpoClipboard.hasStringAsync) {\n throw new UnavailabilityError('Clipboard', 'hasStringAsync');\n }\n return ExpoClipboard.hasStringAsync();\n}\n\n/**\n * Gets the URL from the user's clipboard.\n *\n * @returns A promise that fulfills to the URL in the clipboard.\n * @platform ios\n */\nexport async function getUrlAsync(): Promise {\n if (!ExpoClipboard.getUrlAsync) {\n throw new UnavailabilityError('Clipboard', 'getUrlAsync');\n }\n return await ExpoClipboard.getUrlAsync();\n}\n\n/**\n * Sets a URL in the user's clipboard.\n *\n * This function behaves the same as [`setStringAsync()`](#setstringasynctext-options), except that\n * it sets the clipboard content type to be a URL. It lets your app or other apps know that the\n * clipboard contains a URL and behave accordingly.\n *\n * @param url The URL to save to the clipboard.\n * @platform ios\n */\nexport async function setUrlAsync(url: string): Promise {\n if (!ExpoClipboard.setUrlAsync) {\n throw new UnavailabilityError('Clipboard', 'setUrlAsync');\n }\n return ExpoClipboard.setUrlAsync(url);\n}\n\n/**\n * Returns whether the clipboard has a URL content.\n *\n * @returns A promise that fulfills to `true` if clipboard has URL content, resolves to `false` otherwise.\n * @platform ios\n */\nexport async function hasUrlAsync(): Promise {\n if (!ExpoClipboard.hasUrlAsync) {\n throw new UnavailabilityError('Clipboard', 'hasUrlAsync');\n }\n return await ExpoClipboard.hasUrlAsync();\n}\n\n/**\n * Gets the image from the user's clipboard and returns it in the specified format. Please note that calling\n * this method on web will prompt the user to grant your app permission to \"see text and images copied to the clipboard.\"\n *\n * @param options A `GetImageOptions` object to specify the desired format of the image.\n * @returns If there was an image in the clipboard, the promise resolves to\n * a [`ClipboardImage`](#clipboardimage) object containing the base64 string and metadata of the image.\n * Otherwise, it resolves to `null`.\n *\n * @example\n * ```tsx\n * const img = await Clipboard.getImageAsync({ format: 'png' });\n * // ...\n * \n * ```\n */\nexport async function getImageAsync(options: GetImageOptions): Promise {\n if (!ExpoClipboard.getImageAsync) {\n throw new UnavailabilityError('Clipboard', 'getImageAsync');\n }\n return await ExpoClipboard.getImageAsync(options);\n}\n\n/**\n * Sets an image in the user's clipboard.\n *\n * @param base64Image Image encoded as a base64 string, without MIME type.\n *\n * @example\n * ```tsx\n * const result = await ImagePicker.launchImageLibraryAsync({\n * mediaTypes: ImagePicker.MediaTypeOptions.Images,\n * base64: true,\n * });\n * await Clipboard.setImageAsync(result.base64);\n * ```\n */\nexport async function setImageAsync(base64Image: string): Promise {\n if (!ExpoClipboard.setImageAsync) {\n throw new UnavailabilityError('Clipboard', 'setImageAsync');\n }\n return ExpoClipboard.setImageAsync(base64Image);\n}\n\n/**\n * Returns whether the clipboard has an image content.\n *\n * On web, this requires the user to grant your app permission to _\"see text and images copied to the clipboard\"_.\n *\n * @returns A promise that fulfills to `true` if clipboard has image content, resolves to `false` otherwise.\n */\nexport async function hasImageAsync(): Promise {\n if (!ExpoClipboard.hasImageAsync) {\n throw new UnavailabilityError('Clipboard', 'hasImageAsync');\n }\n return ExpoClipboard.hasImageAsync();\n}\n\n/**\n * Adds a listener that will fire whenever the content of the user's clipboard changes. This method\n * is a no-op on Web.\n *\n * @param listener Callback to execute when listener is triggered. The callback is provided a\n * single argument that is an object containing information about clipboard contents.\n *\n * @example\n * ```typescript\n * Clipboard.addClipboardListener(({ contentTypes }: ClipboardEvent) => {\n * if (contentTypes.includes(Clipboard.ContentType.PLAIN_TEXT)) {\n * Clipboard.getStringAsync().then(content => {\n * alert('Copy pasta! Here\\'s the string that was copied: ' + content)\n * });\n * } else if (contentTypes.includes(Clipboard.ContentType.IMAGE)) {\n * alert('Yay! Clipboard contains an image');\n * }\n * });\n * ```\n */\nexport function addClipboardListener(listener: (event: ClipboardEvent) => void): Subscription {\n // TODO: Get rid of this wrapper once we remove deprecated `content` property (not before SDK47)\n const listenerWrapper = (event: ClipboardEvent) => {\n const wrappedEvent: ClipboardEvent = {\n ...event,\n get content(): string {\n console.warn(\n \"The 'content' property of the clipboard event is deprecated. Use 'getStringAsync()' instead to get clipboard content\"\n );\n return '';\n },\n };\n listener(wrappedEvent);\n };\n return emitter.addListener(onClipboardEventName, listenerWrapper);\n}\n\n/**\n * Removes the listener added by addClipboardListener. This method is a no-op on Web.\n *\n * @param subscription The subscription to remove (created by addClipboardListener).\n *\n * @example\n * ```typescript\n * const subscription = addClipboardListener(() => {\n * alert('Copy pasta!');\n * });\n * removeClipboardListener(subscription);\n * ```\n */\nexport function removeClipboardListener(subscription: Subscription) {\n emitter.removeSubscription(subscription);\n}\n\n/**\n * Property that determines if the `ClipboardPasteButton` is available.\n *\n * This requires the users device to be using at least iOS 16.\n *\n * `true` if the component is available, and `false` otherwise.\n */\nexport const isPasteButtonAvailable: boolean =\n Platform.OS === 'ios' ? ExpoClipboard.isPasteButtonAvailable : false;\n\nexport * from './Clipboard.types';\nexport { ClipboardPasteButton };\n","import { ViewProps, StyleProp, ViewStyle } from 'react-native';\n\n// @needsAudit\nexport interface GetImageOptions {\n /**\n * The format of the clipboard image to be converted to.\n */\n format: 'png' | 'jpeg';\n /**\n * Specify the quality of the returned image, between `0` and `1`. Defaults to `1` (highest quality).\n * Applicable only when `format` is set to `jpeg`, ignored otherwise.\n * @default 1\n */\n jpegQuality?: number;\n}\n\n// @needsAudit\nexport interface ClipboardImage {\n /**\n * A Base64-encoded string of the image data.\n * Its format is dependent on the `format` option.\n *\n * > **NOTE:** The string is already prepended with `data:image/png;base64,` or `data:image/jpeg;base64,` prefix.\n *\n * You can use it directly as the source of an `Image` element.\n * @example\n * ```ts\n * \n * ```\n */\n data: string;\n /**\n * Dimensions (`width` and `height`) of the image pasted from clipboard.\n */\n size: {\n width: number;\n height: number;\n };\n}\n\n/**\n * Type used to define what type of data is stored in the clipboard.\n */\nexport enum ContentType {\n PLAIN_TEXT = 'plain-text',\n HTML = 'html',\n IMAGE = 'image',\n /**\n * @platform iOS\n */\n URL = 'url',\n}\n\n/**\n * Type used to determine string format stored in the clipboard.\n */\nexport enum StringFormat {\n PLAIN_TEXT = 'plainText',\n HTML = 'html',\n}\n\nexport interface GetStringOptions {\n /**\n * The target format of the clipboard string to be converted to, if possible.\n *\n * @default StringFormat.PLAIN_TEXT\n */\n preferredFormat?: StringFormat;\n}\n\nexport interface SetStringOptions {\n /**\n * The input format of the provided string.\n * Adjusting this option can help other applications interpret copied string properly.\n *\n * @default StringFormat.PLAIN_TEXT\n */\n inputFormat?: StringFormat;\n}\n\n// @needsAudit\nexport interface ClipboardPasteButtonProps extends ViewProps {\n /**\n * A callback that is called with the result of the paste action.\n * Inspect the `type` property to determine the type of the pasted data.\n \n * Can be one of `text` or `image`.\n *\n * @example\n * ```ts\n * onPress={(data) => {\n * if (data.type === 'image') {\n * setImageData(data);\n * } else {\n * setTextData(data);\n * }\n * }}\n * ```\n */\n onPress: (data: PasteEventPayload) => void;\n /**\n * The backgroundColor of the button.\n * Leaving this as the default allows the color to adjust to the system theme settings.\n */\n backgroundColor?: string | null;\n /**\n * The foregroundColor of the button.\n * @default white\n */\n foregroundColor?: string | null;\n /**\n * The cornerStyle of the button.\n * @default capsule\n *\n * @see [Apple Documentation](https://developer.apple.com/documentation/uikit/uibutton/configuration/cornerstyle) for more details.\n */\n cornerStyle?: CornerStyle | null;\n /**\n * The displayMode of the button.\n * @default `iconAndLabel`\n *\n * @see [Apple Documentation](https://developer.apple.com/documentation/uikit/uipastecontrol/displaymode) for more details.\n */\n displayMode?: DisplayMode | null;\n /**\n * The custom style to apply to the button. Should not include `backgroundColor`, `borderRadius` or `color`\n * properties.\n */\n style?: StyleProp>;\n /**\n * The options to use when pasting an image from the clipboard.\n */\n imageOptions?: GetImageOptions | null;\n /**\n * An array of the content types that will cause the button to become active\n * @note do not include `plain-text` and `html` at the same time as this will cause all text to be treated as `html`\n * @default ['plain-text', 'image']\n */\n acceptedContentTypes?: AcceptedContentType[];\n}\n\ntype AcceptedContentType = 'plain-text' | 'image' | 'url' | 'html';\n\ntype CornerStyle = 'dynamic' | 'fixed' | 'capsule' | 'large' | 'medium' | 'small';\n\ntype DisplayMode = 'iconAndLabel' | 'iconOnly' | 'labelOnly';\n\nexport type PasteEventPayload = TextPasteEvent | ImagePasteEvent;\n\nexport interface TextPasteEvent {\n text: string;\n type: 'text';\n}\n\nexport interface ImagePasteEvent extends ClipboardImage {\n type: 'image';\n}\n","import React from 'react';\nimport { NativeSyntheticEvent } from 'react-native';\n\nimport { ClipboardPasteButtonProps, PasteEventPayload } from './Clipboard.types';\nimport ExpoClipboardPasteButton from './ExpoClipboardPasteButton';\n\n// @needsAudit\n/**\n * This component displays the `UIPasteControl` button on your screen. This allows pasting from the clipboard without requesting permission from the user.\n *\n * You should only attempt to render this if [`Clipboard.isPasteButtonAvailable`](#ispastebuttonavailable)\n * is `true`. This component will render nothing if it is not available, and you will get\n * a warning in development mode (`__DEV__ === true`).\n *\n * The properties of this component extend from `View`; however, you should not attempt to set\n * `backgroundColor`, `color` or `borderRadius` with the `style` property. Apple restricts customisation of this view.\n * Instead, you should use the backgroundColor and foregroundColor properties to set the colors of the button, the cornerStyle property to change the border radius,\n * and the displayMode property to change the appearance of the icon and label. The word \"Paste\" is not editable and neither is the icon.\n *\n * Make sure to attach height and width via the style props as without these styles, the button will\n * not appear on the screen.\n *\n * @see [Apple Documentation](https://developer.apple.com/documentation/uikit/uipastecontrol) for more details.\n */\nexport function ClipboardPasteButton({ onPress, ...restProps }: ClipboardPasteButtonProps) {\n if (!ExpoClipboardPasteButton) {\n if (__DEV__) {\n console.warn(\"'ApplePasteButton' is not available.\");\n }\n return null;\n }\n\n const onPastePressed = ({ nativeEvent }: NativeSyntheticEvent) => {\n onPress(nativeEvent);\n };\n\n return ;\n}\n","export { default } from './web/ClipboardModule';\n","import { requireNativeViewManager } from 'expo-modules-core';\nimport { Platform } from 'react-native';\n\nlet ExpoClipboard: any;\n\nif (Platform.OS === 'ios') {\n ExpoClipboard = requireNativeViewManager('ExpoClipboard');\n}\n\nexport default ExpoClipboard;\n","import {\n ClipboardImage,\n GetImageOptions,\n GetStringOptions,\n SetStringOptions,\n StringFormat,\n} from '../Clipboard.types';\nimport {\n ClipboardUnavailableException,\n CopyFailureException,\n NoPermissionException,\n PasteFailureException,\n} from './Exceptions';\nimport {\n base64toBlob,\n blobToBase64Async,\n findHtmlInClipboardAsync,\n findImageInClipboardAsync,\n getImageSizeFromBlobAsync,\n htmlToPlainText,\n isClipboardPermissionDeniedAsync,\n} from './Utils';\n\nexport default {\n get name(): string {\n return 'ExpoClipboard';\n },\n async getStringAsync(options: GetStringOptions): Promise {\n if (!navigator.clipboard) {\n throw new ClipboardUnavailableException();\n }\n\n try {\n switch (options.preferredFormat) {\n case StringFormat.HTML: {\n // Try reading HTML first\n const clipboardItems = await navigator.clipboard.read();\n const blob = await findHtmlInClipboardAsync(clipboardItems);\n if (!blob) {\n // Fall back to plain text\n return await navigator.clipboard.readText();\n }\n return await new Response(blob).text();\n }\n default: {\n let text = await navigator.clipboard.readText();\n if (!text || text === '') {\n // If there's no direct plain text, try reading HTML\n const clipboardItems = await navigator.clipboard.read();\n const blob = await findHtmlInClipboardAsync(clipboardItems);\n const blobText = await blob?.text();\n text = htmlToPlainText(blobText ?? '');\n }\n return text;\n }\n }\n } catch (e) {\n // it might fail, because user denied permission\n if (e.name === 'NotAllowedError' || (await isClipboardPermissionDeniedAsync())) {\n throw new NoPermissionException();\n }\n\n try {\n // Internet Explorer\n // @ts-ignore\n return window.clipboardData.getData('Text');\n } catch {\n return Promise.reject(new Error('Unable to retrieve item from clipboard'));\n }\n }\n },\n // TODO: (barthap) The `setString` was deprecated in SDK 45. Remove this function in a few SDK cycles.\n setString(text: string): boolean {\n const textField = document.createElement('textarea');\n textField.textContent = text;\n document.body.appendChild(textField);\n textField.select();\n try {\n document.execCommand('copy');\n return true;\n } catch {\n return false;\n } finally {\n document.body.removeChild(textField);\n }\n },\n async setStringAsync(text: string, options: SetStringOptions): Promise {\n switch (options.inputFormat) {\n case StringFormat.HTML: {\n if (!navigator.clipboard) {\n throw new ClipboardUnavailableException();\n }\n\n try {\n const clipboardItemInput = createHtmlClipboardItem(text);\n await navigator.clipboard.write([clipboardItemInput]);\n return true;\n } catch (e) {\n // it might fail, because user denied permission\n if (e.name === 'NotAllowedError' || (await isClipboardPermissionDeniedAsync())) {\n throw new NoPermissionException();\n }\n throw new CopyFailureException(e.message);\n }\n }\n default: {\n try {\n if (!navigator.clipboard) {\n throw new Error();\n }\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n // we can fall back to legacy behavior in any kind of failure\n // including navigator.clipboard unavailability\n return this.setString(text);\n }\n }\n }\n },\n async hasStringAsync(): Promise {\n return await clipboardHasTypesAsync(['text/plain', 'text/html']);\n },\n async getImageAsync(_options: GetImageOptions): Promise {\n if (!navigator.clipboard) {\n throw new ClipboardUnavailableException();\n }\n\n try {\n const clipboardItems = await navigator.clipboard.read();\n const blob = await findImageInClipboardAsync(clipboardItems);\n if (!blob) {\n return null;\n }\n\n const [data, size] = await Promise.all([\n blobToBase64Async(blob),\n getImageSizeFromBlobAsync(blob),\n ]);\n\n return { data, size };\n } catch (e) {\n // it might fail, because user denied permission\n if (e.name === 'NotAllowedError' || (await isClipboardPermissionDeniedAsync())) {\n throw new NoPermissionException();\n }\n throw new PasteFailureException(e.message);\n }\n },\n async setImageAsync(base64image: string): Promise {\n if (!navigator.clipboard) {\n throw new ClipboardUnavailableException();\n }\n\n try {\n // we set it always to `image/png` because it's the only format supported by the clipboard\n // but it seems to work even when provided jpeg data\n const blob = base64toBlob(base64image, 'image/png');\n await navigator.clipboard.write([\n new ClipboardItem({\n [blob.type]: blob,\n }),\n ]);\n } catch (err: any) {\n throw new CopyFailureException(err.message);\n }\n },\n async hasImageAsync(): Promise {\n return await clipboardHasTypesAsync(['image/png', 'image/jpeg']);\n },\n addClipboardListener(): void {},\n removeClipboardListener(): void {},\n};\n\n/**\n * Resolves to true if clipboard has one of provided {@link types}.\n * @throws `ClipboardUnavailableException` if AsyncClipboard API is not available\n * @throws `NoPermissionException` if user denied permission\n */\nasync function clipboardHasTypesAsync(types: string[]): Promise {\n if (!navigator.clipboard) {\n throw new ClipboardUnavailableException();\n }\n\n try {\n const clipboardItems = await navigator.clipboard.read();\n return clipboardItems.flatMap((item) => item.types).some((type) => types.includes(type));\n } catch (e) {\n // it might fail, because user denied permission\n if (e.name === 'NotAllowedError' || (await isClipboardPermissionDeniedAsync())) {\n throw new NoPermissionException();\n }\n throw e;\n }\n}\n\nfunction createHtmlClipboardItem(htmlString: string): ClipboardItem {\n return new ClipboardItem({\n // @ts-ignore `Blob` from `lib.dom.d.ts` and the one from `@types/react-native` differ\n 'text/html': new Blob([htmlString], { type: 'text/html' }),\n // @ts-ignore `Blob` from `lib.dom.d.ts` and the one from `@types/react-native` differ\n 'text/plain': new Blob([htmlToPlainText(htmlString)], { type: 'text/plain' }),\n });\n}\n","import { CodedError } from 'expo-modules-core';\n\nexport class ClipboardUnavailableException extends CodedError {\n constructor() {\n super('ERR_CLIPBOARD_UNAVAILABLE', \"The 'AsyncClipboard' API is not available on this browser\");\n }\n}\n\nexport class CopyFailureException extends CodedError {\n constructor(cause: string) {\n super('ERR_COPY_FAILURE', `Failed to copy to clipboard: ${cause}`);\n }\n}\n\nexport class PasteFailureException extends CodedError {\n constructor(cause: string) {\n super('ERR_COPY_FAILURE', `Failed to paste from clipboard: ${cause}`);\n }\n}\n\nexport class NoPermissionException extends CodedError {\n constructor() {\n super('ERR_NO_PERMISSION', 'User denied permission to access clipboard');\n }\n}\n","/**\n * Converts base64-encoded data to a `Blob` object.\n * @see https://stackoverflow.com/a/20151856\n */\nexport function base64toBlob(base64Data: string, contentType: string): Blob {\n contentType = contentType || '';\n const sliceSize = 1024;\n const byteCharacters = atob(base64Data);\n const bytesLength = byteCharacters.length;\n const slicesCount = Math.ceil(bytesLength / sliceSize);\n const byteArrays = new Array(slicesCount);\n\n for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n const begin = sliceIndex * sliceSize;\n const end = Math.min(begin + sliceSize, bytesLength);\n\n const bytes = new Array(end - begin);\n for (let offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n // I cannot use `@ts-expect-error` here because some environments consider this correct:\n // expo-module build - OK,\n // expo-module test - error\n // @ts-ignore `Blob` from `lib.dom.d.ts` and the one from `@types/react-native` differ somehow\n return new Blob(byteArrays, { type: contentType });\n}\n\n/**\n * Converts blob to base64-encoded string with Data-URL prefix.\n */\nexport function blobToBase64Async(blob: Blob): Promise {\n return new Promise((resolve, _) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.readAsDataURL(blob);\n });\n}\n\nexport function htmlToPlainText(html: string) {\n const tempDivElement = document.createElement('div');\n tempDivElement.innerHTML = html;\n return tempDivElement.textContent || tempDivElement.innerText || '';\n}\n\nexport function getImageSizeFromBlobAsync(blob: Blob): Promise<{ width: number; height: number }> {\n return new Promise((resolve, _) => {\n const blobUrl = URL.createObjectURL(blob);\n const img = document.createElement('img');\n img.src = blobUrl;\n img.onload = function () {\n resolve({ width: img.width, height: img.height });\n };\n });\n}\n\nexport async function findImageInClipboardAsync(items: ClipboardItems): Promise {\n for (const clipboardItem of items) {\n // first look for png\n if (clipboardItem.types.some((type) => type === 'image/png')) {\n return await clipboardItem.getType('image/png');\n }\n\n // alternatively, an image might be a jpeg\n // NOTE: Currently, this is not supported by browsers yet. They only support PNG now\n if (clipboardItem.types.some((type) => type === 'image/jpeg')) {\n return await clipboardItem.getType('image/jpeg');\n }\n }\n return null;\n}\n\nexport async function findHtmlInClipboardAsync(items: ClipboardItems): Promise {\n for (const clipboardItem of items) {\n if (clipboardItem.types.some((type) => type === 'text/html')) {\n return await clipboardItem.getType('text/html');\n }\n }\n return null;\n}\n\nexport async function isClipboardPermissionDeniedAsync(): Promise {\n const queryOpts = { name: 'clipboard-read' as PermissionName };\n const permissionStatus = await navigator.permissions.query(queryOpts);\n return permissionStatus.state === 'denied';\n}\n","import { ExpoConfig } from '@expo/config-types';\nimport { CodedError, NativeModulesProxy } from 'expo-modules-core';\nimport { Platform, NativeModules } from 'react-native';\n\nimport {\n AndroidManifest,\n AppManifest,\n AppOwnership,\n Constants,\n EASConfig,\n ExecutionEnvironment,\n ExpoGoConfig,\n IOSManifest,\n Manifest,\n NativeConstants,\n PlatformManifest,\n UserInterfaceIdiom,\n WebManifest,\n} from './Constants.types';\nimport ExponentConstants from './ExponentConstants';\n\nexport {\n AndroidManifest,\n AppOwnership,\n Constants,\n ExecutionEnvironment,\n IOSManifest,\n NativeConstants,\n PlatformManifest,\n UserInterfaceIdiom,\n WebManifest,\n};\n\nif (!ExponentConstants) {\n console.warn(\n \"No native ExponentConstants module found, are you sure the expo-constants's module is linked properly?\"\n );\n}\n\nlet rawManifest: AppManifest | Manifest | null = null;\n// If expo-updates defines a non-empty manifest, prefer that one\nif (NativeModulesProxy.ExpoUpdates) {\n let updatesManifest;\n if (NativeModulesProxy.ExpoUpdates.manifest) {\n updatesManifest = NativeModulesProxy.ExpoUpdates.manifest;\n } else if (NativeModulesProxy.ExpoUpdates.manifestString) {\n updatesManifest = JSON.parse(NativeModulesProxy.ExpoUpdates.manifestString);\n }\n if (updatesManifest && Object.keys(updatesManifest).length > 0) {\n rawManifest = updatesManifest;\n }\n}\n\n// If dev-launcher defines a non-empty manifest, prefer that one\nif (NativeModules.EXDevLauncher) {\n let devLauncherManifest;\n if (NativeModules.EXDevLauncher.manifestString) {\n devLauncherManifest = JSON.parse(NativeModules.EXDevLauncher.manifestString);\n }\n\n if (devLauncherManifest && Object.keys(devLauncherManifest).length > 0) {\n rawManifest = devLauncherManifest;\n }\n}\n\n// Fall back to ExponentConstants.manifest if we don't have one from Updates\nif (!rawManifest && ExponentConstants && ExponentConstants.manifest) {\n rawManifest = ExponentConstants.manifest;\n // On Android we pass the manifest in JSON form so this step is necessary\n if (typeof rawManifest === 'string') {\n rawManifest = JSON.parse(rawManifest);\n }\n}\n\nconst { name, appOwnership, ...nativeConstants } = (ExponentConstants || {}) as any;\n\nlet warnedAboutManifestField = false;\n\nconst constants: Constants = {\n ...nativeConstants,\n // Ensure this is null in bare workflow\n appOwnership: appOwnership ?? null,\n};\n\nObject.defineProperties(constants, {\n installationId: {\n get() {\n return nativeConstants.installationId;\n },\n enumerable: false,\n },\n /**\n * Use `manifest` property by default.\n * This property is only used for internal purposes.\n * It behaves similarly to the original one, but suppresses warning upon no manifest available.\n * `expo-asset` uses it to prevent users from seeing mentioned warning.\n */\n __unsafeNoWarnManifest: {\n get(): AppManifest | Manifest | null {\n const maybeManifest = getManifest(true);\n if (!maybeManifest || !isAppManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: false,\n },\n __unsafeNoWarnManifest2: {\n get(): Manifest | null {\n const maybeManifest = getManifest(true);\n if (!maybeManifest || !isManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: false,\n },\n manifest: {\n get(): AppManifest | null {\n if (__DEV__ && !warnedAboutManifestField) {\n console.warn(`Constants.manifest has been deprecated in favor of Constants.expoConfig.`);\n warnedAboutManifestField = true;\n }\n\n const maybeManifest = getManifest();\n if (!maybeManifest || !isAppManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: true,\n },\n manifest2: {\n get(): Manifest | null {\n const maybeManifest = getManifest();\n if (!maybeManifest || !isManifest(maybeManifest)) {\n return null;\n }\n return maybeManifest;\n },\n enumerable: true,\n },\n expoConfig: {\n get():\n | (ExpoConfig & {\n /**\n * Only present during development using @expo/cli.\n */\n hostUri?: string;\n })\n | null {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.expoClient ?? null;\n } else if (isAppManifest(maybeManifest)) {\n return maybeManifest;\n }\n\n return null;\n },\n enumerable: true,\n },\n expoGoConfig: {\n get(): ExpoGoConfig | null {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.expoGo ?? null;\n } else if (isAppManifest(maybeManifest)) {\n return maybeManifest;\n }\n\n return null;\n },\n enumerable: true,\n },\n easConfig: {\n get(): EASConfig | null {\n const maybeManifest = getManifest(true);\n if (!maybeManifest) {\n return null;\n }\n\n if (isManifest(maybeManifest)) {\n return maybeManifest.extra?.eas ?? null;\n } else if (isAppManifest(maybeManifest)) {\n return maybeManifest;\n }\n\n return null;\n },\n enumerable: true,\n },\n __rawManifest_TEST: {\n get(): AppManifest | Manifest | null {\n return rawManifest;\n },\n set(value: AppManifest | Manifest | null) {\n rawManifest = value;\n },\n enumerable: false,\n },\n});\n\nfunction isAppManifest(manifest: AppManifest | Manifest): manifest is AppManifest {\n return !isManifest(manifest);\n}\n\nfunction isManifest(manifest: AppManifest | Manifest): manifest is Manifest {\n return 'metadata' in manifest;\n}\n\nfunction getManifest(suppressWarning = false): AppManifest | Manifest | null {\n if (!rawManifest) {\n const invalidManifestType = rawManifest === null ? 'null' : 'undefined';\n if (\n nativeConstants.executionEnvironment === ExecutionEnvironment.Bare &&\n Platform.OS !== 'web'\n ) {\n if (!suppressWarning) {\n console.warn(\n `Constants.manifest is ${invalidManifestType} because the embedded app.config could not be read. Ensure that you have installed the expo-constants build scripts if you need to read from Constants.manifest.`\n );\n }\n } else if (\n nativeConstants.executionEnvironment === ExecutionEnvironment.StoreClient ||\n nativeConstants.executionEnvironment === ExecutionEnvironment.Standalone\n ) {\n // If we somehow get here, this is a truly exceptional state to be in.\n // Constants.manifest should *always* be defined in those contexts.\n throw new CodedError(\n 'ERR_CONSTANTS_MANIFEST_UNAVAILABLE',\n `Constants.manifest is ${invalidManifestType}, must be an object.`\n );\n }\n }\n return rawManifest;\n}\n\nexport default constants as Constants;\n","import { ExpoConfig } from '@expo/config-types';\n\n// @needsAudit\nexport enum AppOwnership {\n /**\n * It is a [standalone app](/classic/building-standalone-apps#building-standalone-apps).\n */\n Standalone = 'standalone',\n /**\n * The experience is running inside of the Expo Go app.\n */\n Expo = 'expo',\n /**\n * It has been opened through a link from a standalone app.\n */\n Guest = 'guest',\n}\n\n// @docsMissing\nexport enum ExecutionEnvironment {\n Bare = 'bare',\n Standalone = 'standalone',\n StoreClient = 'storeClient',\n}\n\n// @needsAudit\n/**\n * Current supported values are `handset` and `tablet`. Apple TV and CarPlay will show up\n * as `unsupported`.\n */\nexport enum UserInterfaceIdiom {\n Handset = 'handset',\n Tablet = 'tablet',\n Unsupported = 'unsupported',\n}\n\n// @needsAudit\nexport interface IOSManifest {\n /**\n * The build number specified in the embedded **Info.plist** value for `CFBundleVersion` in this app.\n * In a standalone app, you can set this with the `ios.buildNumber` value in **app.json**. This\n * may differ from the value in `Constants.expoConfig.ios.buildNumber` because the manifest\n * can be updated, whereas this value will never change for a given native binary.\n * The value is set to `null` in case you run your app in Expo Go.\n */\n buildNumber: string | null;\n /**\n * The Apple internal model identifier for this device, e.g. `iPhone1,1`.\n * @deprecated Use `expo-device`'s [`Device.modelId`](./device/#devicemodelid).\n */\n platform: string;\n /**\n * The human-readable model name of this device, e.g. `\"iPhone 7 Plus\"` if it can be determined,\n * otherwise will be `null`.\n * @deprecated Moved to `expo-device` as [`Device.modelName`](./device/#devicemodelname).\n */\n model: string | null;\n /**\n * The user interface idiom of this device, i.e. whether the app is running on an iPhone or an iPad.\n * @deprecated Use `expo-device`'s [`Device.getDeviceTypeAsync()`](./device/#devicegetdevicetypeasync).\n */\n userInterfaceIdiom: UserInterfaceIdiom;\n /**\n * The version of iOS running on this device, e.g. `10.3`.\n * @deprecated Use `expo-device`'s [`Device.osVersion`](./device/#deviceosversion).\n */\n systemVersion: string;\n [key: string]: any;\n}\n\n// @needsAudit\nexport interface AndroidManifest {\n /**\n * The version code set by `android.versionCode` in app.json.\n * The value is set to `null` in case you run your app in Expo Go.\n * @deprecated Use `expo-application`'s [`Application.nativeBuildVersion`](./application/#applicationnativebuildversion).\n */\n versionCode: number;\n [key: string]: any;\n}\n\nexport interface WebManifest {\n [key: string]: any;\n}\n\n// @docsMissing\nexport interface ManifestAsset {\n url: string;\n}\n\n// @needsAudit @docsMissing\n/**\n * A modern manifest.\n */\nexport type Manifest = {\n id: string;\n createdAt: string;\n runtimeVersion: string;\n launchAsset: ManifestAsset;\n assets: ManifestAsset[];\n metadata: object;\n extra?: ManifestExtra;\n};\n\n// @docsMissing\nexport type ManifestExtra = ClientScopingConfig & {\n expoClient?: ExpoConfig & {\n /**\n * Only present during development using @expo/cli.\n */\n hostUri?: string;\n };\n expoGo?: ExpoGoConfig;\n eas?: EASConfig;\n};\n\n// @needsAudit\nexport type EASConfig = {\n /**\n * The ID for this project if it's using EAS. UUID. This value will not change when a project is\n * transferred between accounts or renamed.\n */\n projectId?: string;\n};\n\n// @needsAudit\nexport type ClientScopingConfig = {\n /**\n * An opaque unique string for scoping client-side data to this project. This value\n * will not change when a project is transferred between accounts or renamed.\n */\n scopeKey?: string;\n};\n\n// @docsMissing\nexport type ExpoGoConfig = {\n mainModuleName?: string;\n debuggerHost?: string;\n logUrl?: string;\n developer?: {\n tool?: string;\n [key: string]: any;\n };\n packagerOpts?: ExpoGoPackagerOpts;\n};\n\n// @docsMissing\nexport type ExpoGoPackagerOpts = {\n hostType?: string;\n dev?: boolean;\n strict?: boolean;\n minify?: boolean;\n urlType?: string;\n urlRandomness?: string;\n lanType?: string;\n [key: string]: any;\n};\n\nexport type ExpoClientConfig = ExpoConfig & {\n /**\n * Published apps only.\n */\n releaseId?: string;\n revisionId?: string;\n releaseChannel?: string;\n bundleUrl: string;\n hostUri?: string;\n publishedTime?: string;\n /**\n * The Expo account name and slug for this project.\n * @deprecated Prefer `projectId` or `originalFullName` instead for identification and\n * `scopeKey` for scoping due to immutability.\n */\n id?: string;\n /**\n * The original Expo account name and slug for this project. Formatted like `@username/slug`.\n * When unauthenticated, the username is `@anonymous`. For published projects, this value\n * will not change when a project is transferred between accounts or renamed.\n */\n originalFullName?: string;\n /**\n * The Expo account name and slug used for display purposes. Formatted like `@username/slug`.\n * When unauthenticated, the username is `@anonymous`. For published projects, this value\n * may change when a project is transferred between accounts or renamed.\n */\n currentFullName?: string;\n};\n\n/**\n * Represents an intersection of all possible Config types.\n */\nexport type AppManifest = ExpoClientConfig &\n ExpoGoConfig &\n EASConfig &\n ClientScopingConfig &\n Record;\n\n// @needsAudit @docsMissing\nexport interface PlatformManifest {\n ios?: IOSManifest;\n android?: AndroidManifest;\n web?: WebManifest;\n detach?: {\n scheme?: string;\n [key: string]: any;\n };\n logUrl?: string;\n scheme?: string;\n hostUri?: string;\n developer?: string;\n [key: string]: any;\n}\n\n// @needsAudit @docsMissing\nexport interface NativeConstants {\n /**\n * @hidden\n */\n name: 'ExponentConstants';\n /**\n * Returns `expo`, `standalone`, or `guest`. This property only applies to the managed workflow\n * and classic builds; for apps built with EAS Build and in bare workflow, the result is\n * always `null`.\n */\n appOwnership: AppOwnership | null;\n debugMode: boolean;\n /**\n * A human-readable name for the device type.\n */\n deviceName?: string;\n /**\n * The [device year class](https://github.com/facebook/device-year-class) of this device.\n * @deprecated Moved to `expo-device` as [`Device.deviceYearClass`](./device/#deviceyearclass).\n */\n deviceYearClass: number | null;\n executionEnvironment: ExecutionEnvironment;\n experienceUrl: string;\n // only nullable on web\n expoRuntimeVersion: string | null;\n /**\n * The version string of the Expo Go app currently running.\n * Returns `null` in bare workflow and web.\n */\n expoVersion: string | null;\n isDetached?: boolean;\n intentUri?: string;\n /**\n * An identifier that is unique to this particular device and whose lifetime is at least as long\n * as the installation of the app.\n * @deprecated `Constants.installationId` is deprecated in favor of generating your own ID and\n * storing it.\n */\n installationId: string;\n /**\n * `true` if the app is running on a device, `false` if running in a simulator or emulator.\n * @deprecated Use `expo-device`'s [`Device.isDevice`](./device/#deviceisdevice).\n */\n isDevice: boolean;\n isHeadless: boolean;\n linkingUri: string;\n /**\n * The **Info.plist** value for `CFBundleShortVersionString` on iOS and the version name set\n * by `version` in app.json on Android at the time the native app was built.\n * @deprecated Use `expo-application`'s [`Application.nativeApplicationVersion`](./application/#applicationnativeapplicationversion).\n */\n nativeAppVersion: string | null;\n /**\n * The **Info.plist** value for `CFBundleVersion` on iOS (set with `ios.buildNumber` value in\n * **app.json** in a standalone app) and the version code set by `android.versionCode` in\n * **app.json** on Android at the time the native app was built.\n * @deprecated Use `expo-application`'s [`Application.nativeBuildVersion`](./application/#applicationnativebuildversion).\n */\n nativeBuildVersion: string | null;\n /**\n * Classic manifest for Expo apps using classic updates and the updates embedded in builds.\n * Returns `null` in bare workflow and when `manifest2` is non-null.\n * @deprecated Use `Constants.expoConfig` instead, which behaves more consistently across EAS Build\n * and EAS Update.\n */\n manifest: AppManifest | null;\n /**\n * Manifest for Expo apps using modern Expo Updates from a remote source, such as apps that\n * use EAS Update. Returns `null` in bare workflow and when `manifest` is non-null.\n * `Constants.expoConfig` should be used for accessing the Expo config object.\n */\n manifest2: Manifest | null;\n /**\n * The standard Expo config object defined in `app.json` and `app.config.js` files. For both\n * classic and modern manifests, whether they are embedded or remote.\n */\n expoConfig:\n | (ExpoConfig & {\n /**\n * Only present during development using @expo/cli.\n */\n hostUri?: string;\n })\n | null;\n /**\n * The standard Expo Go config object populated when running in Expo Go.\n */\n expoGoConfig: ExpoGoConfig | null;\n /**\n * The standard EAS config object populated when using EAS.\n */\n easConfig: EASConfig | null;\n /**\n * A string that is unique to the current session of your app. It is different across apps and\n * across multiple launches of the same app.\n */\n sessionId: string;\n /**\n * The default status bar height for the device. Does not factor in changes when location tracking\n * is in use or a phone call is active.\n */\n statusBarHeight: number;\n /**\n * A list of the system font names available on the current device.\n */\n systemFonts: string[];\n systemVersion?: number;\n /**\n * @hidden\n */\n supportedExpoSdks?: string[];\n platform?: PlatformManifest;\n /**\n * Gets the user agent string which would be included in requests sent by a web view running on\n * this device. This is probably not the same user agent you might be providing in your JS `fetch`\n * requests.\n */\n getWebViewUserAgentAsync: () => Promise;\n [key: string]: any;\n}\n\nexport interface Constants extends NativeConstants {\n /**\n * @hidden\n * @warning do not use this property. Use `manifest` by default.\n *\n * In certain cases accessing manifest via this property\n * suppresses important warning about missing manifest.\n */\n __unsafeNoWarnManifest?: AppManifest;\n /**\n * @hidden\n * @warning do not use this property. Use `manifest2` by default.\n *\n * In certain cases accessing manifest via this property\n * suppresses important warning about missing manifest.\n */\n __unsafeNoWarnManifest2?: Manifest;\n}\n","import { Platform } from 'expo-modules-core';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n ExecutionEnvironment,\n NativeConstants,\n PlatformManifest,\n WebManifest,\n} from './Constants.types';\n\nconst ID_KEY = 'EXPO_CONSTANTS_INSTALLATION_ID';\n\ndeclare let __DEV__: boolean;\ndeclare let process: { env: any };\ndeclare let navigator: Navigator;\ndeclare let location: Location;\ndeclare let localStorage: Storage;\n\nconst _sessionId = uuidv4();\n\nfunction getBrowserName(): string | undefined {\n if (Platform.isDOMAvailable) {\n const agent = navigator.userAgent.toLowerCase();\n if (agent.includes('edge')) {\n return 'Edge';\n } else if (agent.includes('edg')) {\n return 'Chromium Edge';\n } else if (agent.includes('opr') && !!window['opr']) {\n return 'Opera';\n } else if (agent.includes('chrome') && !!window['chrome']) {\n return 'Chrome';\n } else if (agent.includes('trident')) {\n return 'IE';\n } else if (agent.includes('firefox')) {\n return 'Firefox';\n } else if (agent.includes('safari')) {\n return 'Safari';\n }\n }\n\n return undefined;\n}\n\nexport default {\n get name(): string {\n return 'ExponentConstants';\n },\n get appOwnership() {\n return null;\n },\n get executionEnvironment() {\n return ExecutionEnvironment.Bare;\n },\n get installationId(): string {\n let installationId;\n try {\n installationId = localStorage.getItem(ID_KEY);\n if (installationId == null || typeof installationId !== 'string') {\n installationId = uuidv4();\n localStorage.setItem(ID_KEY, installationId as string);\n }\n } catch {\n installationId = _sessionId;\n } finally {\n return installationId;\n }\n },\n get sessionId(): string {\n return _sessionId;\n },\n get platform(): PlatformManifest {\n return { web: Platform.isDOMAvailable ? { ua: navigator.userAgent } : undefined };\n },\n get isHeadless(): boolean {\n if (!Platform.isDOMAvailable) return true;\n\n return /\\bHeadlessChrome\\//.test(navigator.userAgent);\n },\n get isDevice(): true {\n // TODO: Bacon: Possibly want to add information regarding simulators\n return true;\n },\n get expoVersion(): string | null {\n return this.manifest!.sdkVersion || null;\n },\n get linkingUri(): string {\n if (Platform.isDOMAvailable) {\n // On native this is `exp://`\n // On web we should use the protocol and hostname (location.origin)\n return location.origin;\n } else {\n return '';\n }\n },\n get expoRuntimeVersion(): string | null {\n return this.expoVersion;\n },\n get deviceName(): string | undefined {\n return getBrowserName();\n },\n get nativeAppVersion(): null {\n return null;\n },\n get nativeBuildVersion(): null {\n return null;\n },\n get systemFonts(): string[] {\n // TODO: Bacon: Maybe possible.\n return [];\n },\n get statusBarHeight(): number {\n return 0;\n },\n get deviceYearClass(): number | null {\n // TODO: Bacon: The android version isn't very accurate either, maybe we could try and guess this value.\n return null;\n },\n get manifest(): WebManifest {\n // This is defined by @expo/webpack-config.\n // If your site is bundled with a different config then you may not have access to the app.json automatically.\n return process.env.APP_MANIFEST || {};\n },\n get manifest2(): null {\n return null;\n },\n get experienceUrl(): string {\n if (Platform.isDOMAvailable) {\n return location.origin;\n } else {\n return '';\n }\n },\n get debugMode(): boolean {\n return __DEV__;\n },\n async getWebViewUserAgentAsync(): Promise {\n if (Platform.isDOMAvailable) {\n return navigator.userAgent;\n } else {\n return null;\n }\n },\n} as NativeConstants;\n","import { toByteArray } from 'base64-js';\nimport { UnavailabilityError, UintBasedTypedArray, IntBasedTypedArray } from 'expo-modules-core';\n\nimport { CryptoDigestAlgorithm, CryptoEncoding, CryptoDigestOptions, Digest } from './Crypto.types';\nimport ExpoCrypto from './ExpoCrypto';\n\ndeclare const global: any;\n\nexport * from './Crypto.types';\n\nclass CryptoError extends TypeError {\n code = 'ERR_CRYPTO';\n\n constructor(message: string) {\n super(`expo-crypto: ${message}`);\n }\n}\n\n// @needsAudit\n/**\n * Generates completely random bytes using native implementations. The `byteCount` property\n * is a `number` indicating the number of bytes to generate in the form of a `Uint8Array`.\n * Falls back to `Math.random` during development to prevent issues with React Native Debugger.\n * @param byteCount - A number within the range from `0` to `1024`. Anything else will throw a `TypeError`.\n * @return An array of random bytes with the same length as the `byteCount`.\n */\nexport function getRandomBytes(byteCount: number): Uint8Array {\n assertByteCount(byteCount, 'getRandomBytes');\n const validByteCount = Math.floor(byteCount);\n if (__DEV__) {\n if (!global.nativeCallSyncHook || global.__REMOTEDEV__) {\n // remote javascript debugging is enabled\n const array = new Uint8Array(validByteCount);\n for (let i = 0; i < validByteCount; i++) {\n array[i] = Math.floor(Math.random() * 256);\n }\n return array;\n }\n }\n if (ExpoCrypto.getRandomBytes) {\n return ExpoCrypto.getRandomBytes(validByteCount);\n } else if (ExpoCrypto.getRandomBase64String) {\n const base64 = ExpoCrypto.getRandomBase64String(validByteCount);\n return toByteArray(base64);\n } else {\n throw new UnavailabilityError('expo-crypto', 'getRandomBytes');\n }\n}\n\n// @needsAudit\n/**\n * Generates completely random bytes using native implementations. The `byteCount` property\n * is a `number` indicating the number of bytes to generate in the form of a `Uint8Array`.\n * @param byteCount - A number within the range from `0` to `1024`. Anything else will throw a `TypeError`.\n * @return A promise that fulfills with an array of random bytes with the same length as the `byteCount`.\n */\nexport async function getRandomBytesAsync(byteCount: number): Promise {\n assertByteCount(byteCount, 'getRandomBytesAsync');\n const validByteCount = Math.floor(byteCount);\n if (ExpoCrypto.getRandomBytesAsync) {\n return await ExpoCrypto.getRandomBytesAsync(validByteCount);\n } else if (ExpoCrypto.getRandomBase64StringAsync) {\n const base64 = await ExpoCrypto.getRandomBase64StringAsync(validByteCount);\n return toByteArray(base64);\n } else {\n throw new UnavailabilityError('expo-crypto', 'getRandomBytesAsync');\n }\n}\n\nfunction assertByteCount(value: any, methodName: string): void {\n if (\n typeof value !== 'number' ||\n isNaN(value) ||\n Math.floor(value) < 0 ||\n Math.floor(value) > 1024\n ) {\n throw new TypeError(\n `expo-crypto: ${methodName}(${value}) expected a valid number from range 0...1024`\n );\n }\n}\n\nfunction assertAlgorithm(algorithm: CryptoDigestAlgorithm): void {\n if (!Object.values(CryptoDigestAlgorithm).includes(algorithm)) {\n throw new CryptoError(\n `Invalid algorithm provided. Expected one of: CryptoDigestAlgorithm.${Object.keys(\n CryptoDigestAlgorithm\n ).join(', AlgCryptoDigestAlgorithmorithm.')}`\n );\n }\n}\n\nfunction assertData(data: string): void {\n if (typeof data !== 'string') {\n throw new CryptoError(`Invalid data provided. Expected a string.`);\n }\n}\n\nfunction assertEncoding(encoding: CryptoEncoding): void {\n if (!Object.values(CryptoEncoding).includes(encoding)) {\n throw new CryptoError(\n `Invalid encoding provided. Expected one of: CryptoEncoding.${Object.keys(\n CryptoEncoding\n ).join(', CryptoEncoding.')}`\n );\n }\n}\n\n// @needsAudit\n/**\n * The `digestStringAsync()` method of `Crypto` generates a digest of the supplied `data` string with the provided digest `algorithm`.\n * A digest is a short fixed-length value derived from some variable-length input. **Cryptographic digests** should exhibit _collision-resistance_,\n * meaning that it's very difficult to generate multiple inputs that have equal digest values.\n * You can specify the returned string format as one of `CryptoEncoding`. By default, the resolved value will be formatted as a `HEX` string.\n * On web, this method can only be called from a secure origin (HTTPS) otherwise, an error will be thrown.\n *\n * @param algorithm The cryptographic hash function to use to transform a block of data into a fixed-size output.\n * @param data The value that will be used to generate a digest.\n * @param options Format of the digest string. Defaults to: `CryptoDigestOptions.HEX`.\n * @return Return a Promise which fulfills with a value representing the hashed input.\n *\n * @example\n * ```ts\n * const digest = await Crypto.digestStringAsync(\n * Crypto.CryptoDigestAlgorithm.SHA512,\n * '🥓 Easy to Digest! 💙'\n * );\n * ```\n */\nexport async function digestStringAsync(\n algorithm: CryptoDigestAlgorithm,\n data: string,\n options: CryptoDigestOptions = { encoding: CryptoEncoding.HEX }\n): Promise {\n if (!ExpoCrypto.digestStringAsync) {\n throw new UnavailabilityError('expo-crypto', 'digestStringAsync');\n }\n\n assertAlgorithm(algorithm);\n assertData(data);\n assertEncoding(options.encoding);\n\n return await ExpoCrypto.digestStringAsync(algorithm, data, options);\n}\n\n/**\n * The `getRandomValues()` method of `Crypto` fills a provided `TypedArray` with cryptographically secure random values.\n *\n * @param typedArray An integer based [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) to fill with cryptographically secure random values. It modifies the input array in place.\n * @return The input array filled with cryptographically secure random values.\n *\n * @example\n * ```ts\n * const byteArray = new Uint8Array(16);\n * Crypto.getRandomValues(byteArray);\n * console.log('Your lucky bytes: ' + byteArray);\n * ```\n */\nexport function getRandomValues(\n typedArray: T\n): T {\n ExpoCrypto.getRandomValues(typedArray);\n return typedArray;\n}\n\n/**\n * The `randomUUID()` method returns a unique identifier based on the V4 UUID spec (RFC4122).\n * It uses cryptographically secure random values to generate the UUID.\n *\n * @return A string containing a newly generated UUIDv4 identifier\n * @example\n * ```ts\n * const UUID = Crypto.randomUUID();\n * console.log('Your UUID: ' + UUID);\n * ```\n */\nexport function randomUUID(): string {\n return ExpoCrypto.randomUUID();\n}\n\nconst digestLengths = {\n [CryptoDigestAlgorithm.SHA1]: 20,\n [CryptoDigestAlgorithm.SHA256]: 32,\n [CryptoDigestAlgorithm.SHA384]: 48,\n [CryptoDigestAlgorithm.SHA512]: 64,\n [CryptoDigestAlgorithm.MD2]: 16,\n [CryptoDigestAlgorithm.MD4]: 16,\n [CryptoDigestAlgorithm.MD5]: 16,\n};\n\n/**\n * The `digest()` method of `Crypto` generates a digest of the supplied `TypedArray` of bytes `data` with the provided digest `algorithm`.\n * A digest is a short fixed-length value derived from some variable-length input. **Cryptographic digests** should exhibit _collision-resistance_,\n * meaning that it's very difficult to generate multiple inputs that have equal digest values.\n * On web, this method can only be called from a secure origin (HTTPS) otherwise, an error will be thrown.\n *\n * @param algorithm The cryptographic hash function to use to transform a block of data into a fixed-size output.\n * @param data The value that will be used to generate a digest.\n * @return A Promise which fulfills with an ArrayBuffer representing the hashed input.\n * @example\n * ```ts\n * const array = new Uint8Array([1, 2, 3, 4, 5]);\n * const digest = await Crypto.digest(Crypto.CryptoDigestAlgorithm.SHA512, array);\n * console.log('Your digest: ' + digest);\n * ```\n */\nexport function digest(algorithm: CryptoDigestAlgorithm, data: BufferSource): Promise {\n return new Promise((resolve, reject) => {\n try {\n if (typeof ExpoCrypto.digestAsync === 'function') {\n resolve(ExpoCrypto.digestAsync(algorithm, data));\n } else {\n const output = new Uint8Array(digestLengths[algorithm]);\n ExpoCrypto.digest(algorithm, output, data);\n resolve(output.buffer);\n }\n } catch (error) {\n reject(error);\n }\n });\n}\n","// @needsAudit\n/**\n * [`Cryptographic hash function`](https://developer.mozilla.org/en-US/docs/Glossary/Cryptographic_hash_function)\n */\nexport enum CryptoDigestAlgorithm {\n /**\n * `160` bits.\n */\n SHA1 = 'SHA-1',\n /**\n * `256` bits. Collision Resistant.\n */\n SHA256 = 'SHA-256',\n /**\n * `384` bits. Collision Resistant.\n */\n SHA384 = 'SHA-384',\n /**\n * `512` bits. Collision Resistant.\n */\n SHA512 = 'SHA-512',\n /**\n * `128` bits.\n * @platform ios\n */\n MD2 = 'MD2',\n /**\n * `128` bits.\n * @platform ios\n */\n MD4 = 'MD4',\n /**\n * `128` bits.\n * @platform android\n * @platform ios\n */\n MD5 = 'MD5',\n}\n\n// @needsAudit\nexport enum CryptoEncoding {\n HEX = 'hex',\n /**\n * Has trailing padding. Does not wrap lines. Does not have a trailing newline.\n */\n BASE64 = 'base64',\n}\n\n// @needsAudit\nexport type CryptoDigestOptions = {\n /**\n * Format the digest is returned in.\n */\n encoding: CryptoEncoding;\n};\n\n// @docsMissing\nexport type Digest = string;\n","import { CodedError, TypedArray } from 'expo-modules-core';\n\nimport { CryptoDigestAlgorithm, CryptoEncoding, CryptoDigestOptions } from './Crypto.types';\n\nconst getCrypto = (): Crypto => window.crypto ?? (window as any).msCrypto;\n\nexport default {\n get name(): string {\n return 'ExpoCrypto';\n },\n async digestStringAsync(\n algorithm: CryptoDigestAlgorithm,\n data: string,\n options: CryptoDigestOptions\n ): Promise {\n if (!crypto.subtle) {\n throw new CodedError(\n 'ERR_CRYPTO_UNAVAILABLE',\n 'Access to the WebCrypto API is restricted to secure origins (https).'\n );\n }\n const encoder = new TextEncoder();\n const buffer = encoder.encode(data);\n const hashedData = await crypto.subtle.digest(algorithm, buffer);\n if (options.encoding === CryptoEncoding.HEX) {\n return hexString(hashedData);\n } else if (options.encoding === CryptoEncoding.BASE64) {\n return btoa(String.fromCharCode(...new Uint8Array(hashedData)));\n }\n throw new CodedError('ERR_CRYPTO_DIGEST', 'Invalid encoding type provided.');\n },\n getRandomBytes(length: number): Uint8Array {\n const array = new Uint8Array(length);\n return getCrypto().getRandomValues(array);\n },\n async getRandomBytesAsync(length: number): Promise {\n const array = new Uint8Array(length);\n return getCrypto().getRandomValues(array);\n },\n getRandomValues(typedArray: TypedArray) {\n return getCrypto().getRandomValues(typedArray);\n },\n randomUUID() {\n return getCrypto().randomUUID();\n },\n digestAsync(algorithm: AlgorithmIdentifier, data: ArrayBuffer): Promise {\n return getCrypto().subtle.digest(algorithm, data);\n },\n};\n\nfunction hexString(buffer: ArrayBuffer): string {\n const byteArray = new Uint8Array(buffer);\n\n const hexCodes = [...byteArray].map((value) => {\n const hexCode = value.toString(16);\n const paddedHexCode = hexCode.padStart(2, '0');\n return paddedHexCode;\n });\n\n return hexCodes.join('');\n}\n","import * as DevLauncher from 'expo-dev-launcher';\nimport * as DevMenu from 'expo-dev-menu';\n\nexport { DevMenu, DevLauncher };\n\nexport const registerErrorHandlers = DevLauncher.registerErrorHandlers;\nexport const isDevelopmentBuild = DevLauncher.isDevelopmentBuild;\n","import { NativeModules } from 'react-native';\nimport './setUpErrorHandler.fx';\n\nexport { disableErrorHandling } from './DevLauncherErrorManager';\n\nexport function registerErrorHandlers() {\n console.warn(\n 'DevLauncher.registerErrorHandlers has been deprecated. To enable error handlers you need to import \"expo-dev-launcher\" at the top of your index.js.'\n );\n}\n\nexport function isDevelopmentBuild(): boolean {\n return !!NativeModules.EXDevLauncher;\n}\n\nexport type DevLauncherExtension = {\n navigateToLauncherAsync: () => Promise;\n};\n","import WebUnsupportedError from './WebUnsupportedError';\n\nexport function disableErrorHandling() {\n throw new WebUnsupportedError();\n}\n","export default class WebUnsupportedError extends Error {\n constructor() {\n super(\"`expo-dev-launcher` isn't supported on Expo Web.\");\n }\n}\n","import { DeviceEventEmitter } from 'react-native';\n\nimport ExpoDevMenu from './ExpoDevMenu';\nimport { ExpoDevMenuItem } from './ExpoDevMenu.types';\n\nexport function openMenu(): void {\n ExpoDevMenu.openMenu();\n}\n\nexport function hideMenu(): void {\n ExpoDevMenu.hideMenu();\n}\n\nexport function closeMenu(): void {\n ExpoDevMenu.closeMenu();\n}\n\nlet hasRegisteredCallbackListener = false;\n\nfunction registerCallbackListener() {\n if (!hasRegisteredCallbackListener) {\n DeviceEventEmitter.addListener('registeredCallbackFired', (name: string) => {\n hasRegisteredCallbackListener = true;\n const handler = handlers.get(name);\n\n if (handler != null) {\n handler();\n }\n });\n }\n}\n\nregisterCallbackListener();\n\nlet handlers = new Map void>();\n\nexport async function registerDevMenuItems(items: ExpoDevMenuItem[]) {\n if (!__DEV__) {\n // resolve undefined\n return;\n }\n\n handlers = new Map();\n const callbackNames: { name: string; shouldCollapse?: boolean }[] = [];\n\n items.forEach((item) => {\n handlers.set(item.name, item.callback);\n callbackNames.push({ name: item.name, shouldCollapse: item.shouldCollapse });\n });\n\n return await ExpoDevMenu.addDevMenuCallbacks(callbackNames);\n}\n","import { ExpoDevMenu } from './ExpoDevMenu.types';\nimport WebUnsupportedError from './WebUnsupportedError';\n\nexport default {\n openMenu() {\n throw new WebUnsupportedError();\n },\n closeMenu() {\n throw new WebUnsupportedError();\n },\n hideMenu() {\n throw new WebUnsupportedError();\n },\n addDevMenuCallbacks() {\n throw new WebUnsupportedError();\n },\n} as ExpoDevMenu;\n","export default class WebUnsupportedError extends Error {\n constructor() {\n super(\"`expo-dev-menu` isn't supported on Expo Web.\");\n }\n}\n","import { UnavailabilityError } from 'expo-modules-core';\n\nimport { DeviceType } from './Device.types';\nimport ExpoDevice from './ExpoDevice';\n\nexport { DeviceType };\n\n/**\n * `true` if the app is running on a real device and `false` if running in a simulator or emulator.\n * On web, this is always set to `true`.\n */\nexport const isDevice: boolean = ExpoDevice ? ExpoDevice.isDevice : true;\n\n/**\n * The device brand. The consumer-visible brand of the product/hardware. On web, this value is always `null`.\n *\n * @example\n * ```js\n * Device.brand; // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n * ```\n * @platform android\n * @platform ios\n */\nexport const brand: string | null = ExpoDevice ? ExpoDevice.brand : null;\n\n/**\n * The actual device manufacturer of the product or hardware. This value of this field may be `null` if it cannot be determined.\n *\n * To view difference between `brand` and `manufacturer` on Android see [official documentation](https://developer.android.com/reference/android/os/Build).\n *\n * @example\n * ```js\n * Device.manufacturer; // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n * ```\n */\nexport const manufacturer: string | null = ExpoDevice ? ExpoDevice.manufacturer : null;\n\n/**\n * The internal model ID of the device. This is useful for programmatically identifying the type of device and is not a human-friendly string.\n * On web and Android, this value is always `null`.\n *\n * @example\n * ```js\n * Device.modelId; // iOS: \"iPhone7,2\"; Android: null; web: null\n * ```\n * @platform ios\n */\nexport const modelId = ExpoDevice ? ExpoDevice.modelId || null : null;\n\n/**\n * The human-friendly name of the device model. This is the name that people would typically use to refer to the device rather than a programmatic model identifier.\n * This value of this field may be `null` if it cannot be determined.\n *\n * @example\n * ```js\n * Device.modelName; // Android: \"Pixel 2\"; iOS: \"iPhone XS Max\"; web: \"iPhone\", null\n * ```\n */\nexport const modelName: string | null = ExpoDevice ? ExpoDevice.modelName : null;\n\n/**\n * The specific configuration or name of the industrial design. It represents the device's name when it was designed during manufacturing into mass production.\n * On Android, it corresponds to [`Build.DEVICE`](https://developer.android.com/reference/android/os/Build#DEVICE). On web and iOS, this value is always `null`.\n *\n * @example\n * ```js\n * Device.designName; // Android: \"kminilte\"; iOS: null; web: null\n * ```\n * @platform android\n */\nexport const designName: string | null = ExpoDevice ? ExpoDevice.designName || null : null;\n\n/**\n * The device's overall product name chosen by the device implementer containing the development name or code name of the device.\n * Corresponds to [`Build.PRODUCT`](https://developer.android.com/reference/android/os/Build#PRODUCT). On web and iOS, this value is always `null`.\n *\n * @example\n * ```js\n * Device.productName; // Android: \"kminiltexx\"; iOS: null; web: null\n * ```\n * @platform android\n */\nexport const productName: string | null = ExpoDevice ? ExpoDevice.productName || null : null;\n\n/**\n * The type of the device as a [`DeviceType`](#devicetype) enum value.\n *\n * On Android, for devices other than TVs, the device type is determined by the screen resolution (screen diagonal size), so the result may not be completely accurate.\n * If the screen diagonal length is between 3\" and 6.9\", the method returns `DeviceType.PHONE`. For lengths between 7\" and 18\", the method returns `DeviceType.TABLET`.\n * Otherwise, the method returns `DeviceType.UNKNOWN`.\n *\n * @example\n * ```js\n * Device.deviceType; // UNKNOWN, PHONE, TABLET, TV, DESKTOP\n * ```\n */\nexport const deviceType: DeviceType | null = ExpoDevice ? ExpoDevice.deviceType : null;\n\n/**\n * The [device year class](https://github.com/facebook/device-year-class) of this device. On web, this value is always `null`.\n */\nexport const deviceYearClass: number | null = ExpoDevice ? ExpoDevice.deviceYearClass : null;\n\n/**\n * The device's total memory, in bytes. This is the total memory accessible to the kernel, but not necessarily to a single app.\n * This is basically the amount of RAM the device has, not including below-kernel fixed allocations like DMA buffers, RAM for the baseband CPU, etc…\n * On web, this value is always `null`.\n *\n * @example\n * ```js\n * Device.totalMemory; // 17179869184\n * ```\n */\nexport const totalMemory: number | null = ExpoDevice ? ExpoDevice.totalMemory : null;\n\n/**\n * A list of supported processor architecture versions. The device expects the binaries it runs to be compiled for one of these architectures.\n * This value is `null` if the supported architectures could not be determined, particularly on web.\n *\n * @example\n * ```js\n * Device.supportedCpuArchitectures; // ['arm64 v8', 'Intel x86-64h Haswell', 'arm64-v8a', 'armeabi-v7a\", 'armeabi']\n * ```\n */\nexport const supportedCpuArchitectures: string[] | null = ExpoDevice\n ? ExpoDevice.supportedCpuArchitectures\n : null;\n\n/**\n * The name of the OS running on the device.\n *\n * @example\n * ```js\n * Device.osName; // Android: \"Android\"; iOS: \"iOS\" or \"iPadOS\"; web: \"iOS\", \"Android\", \"Windows\"\n * ```\n */\nexport const osName: string | null = ExpoDevice ? ExpoDevice.osName : null;\n\n/**\n * The human-readable OS version string. Note that the version string may not always contain three numbers separated by dots.\n *\n * @example\n * ```js\n * Device.osVersion; // Android: \"4.0.3\"; iOS: \"12.3.1\"; web: \"11.0\", \"8.1.0\"\n * ```\n */\nexport const osVersion: string | null = ExpoDevice ? ExpoDevice.osVersion : null;\n\n/**\n * The build ID of the OS that more precisely identifies the version of the OS. On Android, this corresponds to `Build.DISPLAY` (not `Build.ID`)\n * and currently is a string as described [here](https://source.android.com/setup/start/build-numbers). On iOS, this corresponds to `kern.osversion`\n * and is the detailed OS version sometimes displayed next to the more human-readable version. On web, this value is always `null`.\n *\n * @example\n * ```js\n * Device.osBuildId; // Android: \"PSR1.180720.075\"; iOS: \"16F203\"; web: null\n * ```\n */\nexport const osBuildId: string | null = ExpoDevice ? ExpoDevice.osBuildId : null;\n\n/**\n * The internal build ID of the OS running on the device. On Android, this corresponds to `Build.ID`.\n * On iOS, this is the same value as [`Device.osBuildId`](#deviceosbuildid). On web, this value is always `null`.\n *\n * @example\n * ```js\n * Device.osInternalBuildId; // Android: \"MMB29K\"; iOS: \"16F203\"; web: null,\n * ```\n */\nexport const osInternalBuildId: string | null = ExpoDevice ? ExpoDevice.osInternalBuildId : null;\n\n/**\n * A string that uniquely identifies the build of the currently running system OS. On Android, it follows this template:\n * - `$(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/\\$(TAGS)`\n * On web and iOS, this value is always `null`.\n *\n * @example\n * ```js\n * Device.osBuildFingerprint;\n * // Android: \"google/sdk_gphone_x86/generic_x86:9/PSR1.180720.075/5124027:user/release-keys\";\n * // iOS: null; web: null\n * ```\n * @platform android\n */\nexport const osBuildFingerprint: string | null = ExpoDevice\n ? ExpoDevice.osBuildFingerprint || null\n : null;\n\n/**\n * The Android SDK version of the software currently running on this hardware device. This value never changes while a device is booted,\n * but it may increase when the hardware manufacturer provides an OS update. See [here](https://developer.android.com/reference/android/os/Build.VERSION_CODES.html)\n * to see all possible version codes and corresponding versions. On iOS and web, this value is always `null`.\n *\n * @example\n * ```js\n * Device.platformApiLevel; // Android: 19; iOS: null; web: null\n * ```\n * @platform android\n */\nexport const platformApiLevel: number | null = ExpoDevice\n ? ExpoDevice.platformApiLevel || null\n : null;\n\n/**\n * The human-readable name of the device, which may be set by the device's user. If the device name is unavailable, particularly on web, this value is `null`.\n *\n * > On iOS 16 and newer, this value will be set to generic \"iPhone\" until you add the correct entitlement, see [iOS Capabilities page](/build-reference/ios-capabilities)\n * > to learn how to add one and check out [Apple documentation](https://developer.apple.com/documentation/uikit/uidevice/1620015-name#discussion)\n * > for more details on this change.\n *\n * @example\n * ```js\n * Device.deviceName; // \"Vivian's iPhone XS\"\n * ```\n */\nexport const deviceName: string | null = ExpoDevice ? ExpoDevice.deviceName : null;\n\n/**\n * Checks the type of the device as a [`DeviceType`](#devicetype) enum value.\n *\n * On Android, for devices other than TVs, the device type is determined by the screen resolution (screen diagonal size), so the result may not be completely accurate.\n * If the screen diagonal length is between 3\" and 6.9\", the method returns `DeviceType.PHONE`. For lengths between 7\" and 18\", the method returns `DeviceType.TABLET`.\n * Otherwise, the method returns `DeviceType.UNKNOWN`.\n *\n * @return Returns a promise that resolves to a [`DeviceType`](#devicetype) enum value.\n * @example\n * ```js\n * await Device.getDeviceTypeAsync();\n * // DeviceType.PHONE\n * ```\n */\nexport async function getDeviceTypeAsync(): Promise {\n if (!ExpoDevice.getDeviceTypeAsync) {\n throw new UnavailabilityError('expo-device', 'getDeviceTypeAsync');\n }\n return await ExpoDevice.getDeviceTypeAsync();\n}\n\n/**\n * Gets the uptime since the last reboot of the device, in milliseconds. Android devices do not count time spent in deep sleep.\n * @return Returns a promise that resolves to a `number` that represents the milliseconds since last reboot.\n * @example\n * ```js\n * await Device.getUptimeAsync();\n * // 4371054\n * ```\n * @platform android\n * @platform ios\n */\nexport async function getUptimeAsync(): Promise {\n if (!ExpoDevice.getUptimeAsync) {\n throw new UnavailabilityError('expo-device', 'getUptimeAsync');\n }\n return await ExpoDevice.getUptimeAsync();\n}\n\n/**\n * Returns the maximum amount of memory that the Java VM will attempt to use. If there is no inherent limit then `Number.MAX_SAFE_INTEGER` is returned.\n * @return Returns a promise that resolves to the maximum available memory that the Java VM will use, in bytes.\n * @example\n * ```js\n * await Device.getMaxMemoryAsync();\n * // 402653184\n * ```\n * @platform android\n */\nexport async function getMaxMemoryAsync(): Promise {\n if (!ExpoDevice.getMaxMemoryAsync) {\n throw new UnavailabilityError('expo-device', 'getMaxMemoryAsync');\n }\n let maxMemory = await ExpoDevice.getMaxMemoryAsync();\n if (maxMemory === -1) {\n maxMemory = Number.MAX_SAFE_INTEGER;\n }\n return maxMemory;\n}\n\n/**\n * > **warning** This method is experimental and is not completely reliable. See description below.\n *\n * Checks whether the device has been rooted (Android) or jailbroken (iOS). This is not completely reliable because there exist solutions to bypass root-detection\n * on both [iOS](https://www.theiphonewiki.com/wiki/XCon) and [Android](https://tweakerlinks.com/how-to-bypass-apps-root-detection-in-android-device/).\n * Further, many root-detection checks can be bypassed via reverse engineering.\n * - On Android, it's implemented in a way to find all possible files paths that contain the `\"su\"` executable but some devices that are not rooted may also have this executable. Therefore, there's no guarantee that this method will always return correctly.\n * - On iOS, [these jailbreak checks](https://www.theiphonewiki.com/wiki/Bypassing_Jailbreak_Detection) are used to detect if a device is rooted/jailbroken. However, since there are closed-sourced solutions such as [xCon](https://www.theiphonewiki.com/wiki/XCon) that aim to hook every known method and function responsible for informing an application of a jailbroken device, this method may not reliably detect devices that have xCon or similar packages installed.\n * - On web, this always resolves to `false` even if the device is rooted.\n * @return Returns a promise that resolves to a `boolean` that specifies whether this device is rooted.\n * @example\n * ```js\n * await Device.isRootedExperimentalAsync();\n * // true or false\n * ```\n */\nexport async function isRootedExperimentalAsync(): Promise {\n if (!ExpoDevice.isRootedExperimentalAsync) {\n throw new UnavailabilityError('expo-device', 'isRootedExperimentalAsync');\n }\n return await ExpoDevice.isRootedExperimentalAsync();\n}\n\n/**\n * **Using this method requires you to [add the `REQUEST_INSTALL_PACKAGES` permission](/config/app#permissions).**\n * Returns whether applications can be installed for this user via the system's [Intent#ACTION_INSTALL_PACKAGE](https://developer.android.com/reference/android/content/Intent.html#ACTION_INSTALL_PACKAGE)\n * mechanism rather than through the OS's default app store, like Google Play.\n * @return Returns a promise that resolves to a `boolean` that represents whether the calling package is allowed to request package installation.\n * @example\n * ```js\n * await Device.isSideLoadingEnabledAsync();\n * // true or false\n * ```\n * @platform android\n */\nexport async function isSideLoadingEnabledAsync(): Promise {\n if (!ExpoDevice.isSideLoadingEnabledAsync) {\n throw new UnavailabilityError('expo-device', 'isSideLoadingEnabledAsync');\n }\n return await ExpoDevice.isSideLoadingEnabledAsync();\n}\n\n/**\n * Gets a list of features that are available on the system. The feature names are platform-specific.\n * See [Android documentation]()\n * to learn more about this implementation.\n * @return Returns a promise that resolves to an array of strings, each of which is a platform-specific name of a feature available on the current device.\n * On iOS and web, the promise always resolves to an empty array.\n * @example\n * ```js\n * await Device.getPlatformFeaturesAsync();\n * // [\n * // 'android.software.adoptable_storage',\n * // 'android.software.backup',\n * // 'android.hardware.sensor.accelerometer',\n * // 'android.hardware.touchscreen',\n * // ]\n * ```\n * @platform android\n */\nexport async function getPlatformFeaturesAsync(): Promise {\n if (!ExpoDevice.getPlatformFeaturesAsync) {\n return [];\n }\n return await ExpoDevice.getPlatformFeaturesAsync();\n}\n\n/**\n * Tells if the device has a specific system feature.\n * @param feature The platform-specific name of the feature to check for on the device. You can get all available system features with `Device.getSystemFeatureAsync()`.\n * See [Android documentation]() to view acceptable feature strings.\n * @return Returns a promise that resolves to a boolean value indicating whether the device has the specified system feature.\n * On iOS and web, the promise always resolves to `false`.\n * @example\n * ```js\n * await Device.hasPlatformFeatureAsync('amazon.hardware.fire_tv');\n * // true or false\n * ```\n * @platform android\n */\nexport async function hasPlatformFeatureAsync(feature: string): Promise {\n if (!ExpoDevice.hasPlatformFeatureAsync) {\n return false;\n }\n return await ExpoDevice.hasPlatformFeatureAsync(feature);\n}\n","/**\n * An enum representing the different types of devices supported by Expo.\n */\nexport enum DeviceType {\n /**\n * An unrecognized device type.\n */\n UNKNOWN = 0,\n /**\n * Mobile phone handsets, typically with a touch screen and held in one hand.\n */\n PHONE,\n /**\n * Tablet computers, typically with a touch screen that is larger than a usual phone.\n */\n TABLET,\n /**\n * Desktop or laptop computers, typically with a keyboard and mouse.\n */\n DESKTOP,\n /**\n * Device with TV-based interfaces.\n */\n TV,\n}\n","import { Platform } from 'expo-modules-core';\nimport UAParser from 'ua-parser-js';\n\nimport { DeviceType } from './Device.types';\n\ntype NavigatorWithDeviceMemory = Navigator & { deviceMemory: number };\n\nlet result: any = null;\nif (Platform.isDOMAvailable) {\n const parser = new UAParser(window.navigator.userAgent);\n result = parser.getResult();\n}\n\nfunction convertGiBtoBytes(gib: number): number {\n return Math.round(gib * 1024 ** 3);\n}\n\nfunction getDeviceType(): DeviceType {\n switch (result?.device?.type) {\n case 'mobile':\n return DeviceType.PHONE;\n case 'tablet':\n return DeviceType.TABLET;\n case 'smarttv':\n return DeviceType.TV;\n case 'console':\n case 'embedded':\n case 'wearable':\n return DeviceType.UNKNOWN;\n default:\n return DeviceType.DESKTOP;\n }\n}\n\nexport default {\n get isDevice(): boolean {\n return true;\n },\n get brand(): null {\n return null;\n },\n get manufacturer(): null {\n return (result && result.device.vendor) || null;\n },\n get modelName(): string | null {\n return (result && result.device.model) || null;\n },\n get deviceYearClass(): null {\n return null;\n },\n get deviceType(): DeviceType {\n return getDeviceType();\n },\n get totalMemory(): number | null {\n if (Platform.isDOMAvailable && 'deviceMemory' in navigator) {\n const { deviceMemory } = navigator as NavigatorWithDeviceMemory;\n return convertGiBtoBytes(deviceMemory);\n }\n return null;\n },\n get supportedCpuArchitectures(): string[] | null {\n return result && result.cpu.architecture ? [result.cpu.architecture] : null;\n },\n get osName(): string {\n return (result && result.os.name) || '';\n },\n get osVersion(): string {\n return (result && result.os.version) || '';\n },\n get osBuildId(): null {\n return null;\n },\n get osInternalBuildId(): null {\n return null;\n },\n get deviceName(): null {\n return null;\n },\n async getDeviceTypeAsync(): Promise {\n return getDeviceType();\n },\n async isRootedExperimentalAsync(): Promise {\n return false;\n },\n};\n","import { CodedError, Platform } from 'expo-modules-core';\nimport FontObserver from 'fontfaceobserver';\n\nimport { UnloadFontOptions } from './Font';\nimport { FontDisplay, FontResource } from './Font.types';\n\nfunction getFontFaceStyleSheet(): CSSStyleSheet | null {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n const styleSheet = getStyleElement();\n return styleSheet.sheet ? (styleSheet.sheet as CSSStyleSheet) : null;\n}\n\ntype RuleItem = { rule: CSSFontFaceRule; index: number };\n\nfunction getFontFaceRules(): RuleItem[] {\n const sheet = getFontFaceStyleSheet();\n if (sheet) {\n // @ts-ignore: rule iterator\n const rules = [...sheet.cssRules];\n\n const items: RuleItem[] = [];\n\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (rule instanceof CSSFontFaceRule) {\n items.push({ rule, index: i });\n }\n }\n return items;\n }\n return [];\n}\n\nfunction getFontFaceRulesMatchingResource(\n fontFamilyName: string,\n options?: UnloadFontOptions\n): RuleItem[] {\n const rules = getFontFaceRules();\n return rules.filter(({ rule }) => {\n return (\n rule.style.fontFamily === fontFamilyName &&\n (options && options.display ? options.display === (rule.style as any).fontDisplay : true)\n );\n });\n}\n\nexport default {\n get name(): string {\n return 'ExpoFontLoader';\n },\n\n async unloadAllAsync(): Promise {\n if (!Platform.isDOMAvailable) return;\n\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n document.removeChild(element);\n }\n },\n\n async unloadAsync(fontFamilyName: string, options?: UnloadFontOptions): Promise {\n const sheet = getFontFaceStyleSheet();\n if (!sheet) return;\n const items = getFontFaceRulesMatchingResource(fontFamilyName, options);\n for (const item of items) {\n sheet.deleteRule(item.index);\n }\n },\n\n async loadAsync(fontFamilyName: string, resource: FontResource): Promise {\n if (!Platform.isDOMAvailable) {\n return;\n }\n\n const canInjectStyle = document.head && typeof document.head.appendChild === 'function';\n if (!canInjectStyle) {\n throw new CodedError(\n 'ERR_WEB_ENVIRONMENT',\n `The browser's \\`document.head\\` element doesn't support injecting fonts.`\n );\n }\n\n const style = _createWebStyle(fontFamilyName, resource);\n document.head!.appendChild(style);\n\n if (!isFontLoadingListenerSupported()) {\n return;\n }\n\n return new FontObserver(fontFamilyName, { display: resource.display }).load();\n },\n};\n\nconst ID = 'expo-generated-fonts';\n\nfunction getStyleElement(): HTMLStyleElement {\n const element = document.getElementById(ID);\n if (element && element instanceof HTMLStyleElement) {\n return element;\n }\n const styleElement = document.createElement('style');\n styleElement.id = ID;\n styleElement.type = 'text/css';\n return styleElement;\n}\n\nfunction _createWebStyle(fontFamily: string, resource: FontResource): HTMLStyleElement {\n const fontStyle = `@font-face {\n font-family: ${fontFamily};\n src: url(${resource.uri});\n font-display: ${resource.display || FontDisplay.AUTO};\n }`;\n\n const styleElement = getStyleElement();\n // @ts-ignore: TypeScript does not define HTMLStyleElement::styleSheet. This is just for IE and\n // possibly can be removed if it's unnecessary on IE 11.\n if (styleElement.styleSheet) {\n const styleElementIE = styleElement as any;\n styleElementIE.styleSheet.cssText = styleElementIE.styleSheet.cssText\n ? styleElementIE.styleSheet.cssText + fontStyle\n : fontStyle;\n } else {\n const textNode = document.createTextNode(fontStyle);\n styleElement.appendChild(textNode);\n }\n return styleElement;\n}\n\nfunction isFontLoadingListenerSupported(): boolean {\n const { userAgent } = window.navigator;\n // WebKit is broken https://github.com/bramstein/fontfaceobserver/issues/95\n const isIOS = !!userAgent.match(/iPad|iPhone/i);\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n // Edge is broken https://github.com/bramstein/fontfaceobserver/issues/109#issuecomment-333356795\n const isEdge = userAgent.includes('Edge');\n // Internet Explorer\n const isIE = userAgent.includes('Trident');\n // Firefox\n const isFirefox = userAgent.includes('Firefox');\n return !isSafari && !isIOS && !isEdge && !isIE && !isFirefox;\n}\n","import { CodedError, UnavailabilityError } from 'expo-modules-core';\n\nimport ExpoFontLoader from './ExpoFontLoader';\nimport { FontDisplay, FontSource, FontResource, UnloadFontOptions } from './Font.types';\nimport {\n getAssetForSource,\n loadSingleFontAsync,\n fontFamilyNeedsScoping,\n getNativeFontName,\n} from './FontLoader';\n\nconst loaded: { [name: string]: boolean } = {};\nconst loadPromises: { [name: string]: Promise } = {};\n\n// @needsAudit\n// note(brentvatne): at some point we may want to warn if this is called outside of a managed app.\n/**\n * Used to transform font family names to the scoped name. This does not need to\n * be called in standalone or bare apps but it will return unscoped font family\n * names if it is called in those contexts.\n *\n * @param fontFamily Name of font to process.\n * @returns Returns a name processed for use with the [current workflow](https://docs.expo.dev/archive/managed-vs-bare/).\n */\nexport function processFontFamily(fontFamily: string | null): string | null {\n if (!fontFamily || !fontFamilyNeedsScoping(fontFamily)) {\n return fontFamily;\n }\n\n if (!isLoaded(fontFamily)) {\n if (__DEV__) {\n if (isLoading(fontFamily)) {\n console.error(\n `You started loading the font \"${fontFamily}\", but used it before it finished loading. You need to wait for Font.loadAsync to complete before using the font.`\n );\n } else {\n console.error(\n `fontFamily \"${fontFamily}\" is not a system font and has not been loaded through Font.loadAsync.\\n\n- If you intended to use a system font, make sure you typed the name correctly and that it is supported by your device operating system.\\n\n- If this is a custom font, be sure to load it with Font.loadAsync.`\n );\n }\n }\n\n return 'System';\n }\n\n return `ExpoFont-${getNativeFontName(fontFamily)}`;\n}\n\n// @needsAudit\n/**\n * Synchronously detect if the font for `fontFamily` has finished loading.\n *\n * @param fontFamily The name used to load the `FontResource`.\n * @return Returns `true` if the font has fully loaded.\n */\nexport function isLoaded(fontFamily: string): boolean {\n return fontFamily in loaded;\n}\n\n// @needsAudit\n/**\n * Synchronously detect if the font for `fontFamily` is still being loaded.\n *\n * @param fontFamily The name used to load the `FontResource`.\n * @returns Returns `true` if the font is still loading.\n */\nexport function isLoading(fontFamily: string): boolean {\n return fontFamily in loadPromises;\n}\n\n// @needsAudit\n/**\n * Highly efficient method for loading fonts from static or remote resources which can then be used\n * with the platform's native text elements. In the browser this generates a `@font-face` block in\n * a shared style sheet for fonts. No CSS is needed to use this method.\n *\n * @param fontFamilyOrFontMap string or map of values that can be used as the [`fontFamily`](https://reactnative.dev/docs/text#style)\n * style prop with React Native Text elements.\n * @param source the font asset that should be loaded into the `fontFamily` namespace.\n *\n * @return Returns a promise that fulfils when the font has loaded. Often you may want to wrap the\n * method in a `try/catch/finally` to ensure the app continues if the font fails to load.\n */\nexport async function loadAsync(\n fontFamilyOrFontMap: string | Record,\n source?: FontSource\n): Promise {\n if (typeof fontFamilyOrFontMap === 'object') {\n if (source) {\n throw new CodedError(\n `ERR_FONT_API`,\n `No fontFamily can be used for the provided source: ${source}. The second argument of \\`loadAsync()\\` can only be used with a \\`string\\` value as the first argument.`\n );\n }\n const fontMap = fontFamilyOrFontMap;\n const names = Object.keys(fontMap);\n await Promise.all(names.map((name) => loadFontInNamespaceAsync(name, fontMap[name])));\n return;\n }\n\n return await loadFontInNamespaceAsync(fontFamilyOrFontMap, source);\n}\n\nasync function loadFontInNamespaceAsync(\n fontFamily: string,\n source?: FontSource | null\n): Promise {\n if (!source) {\n throw new CodedError(\n `ERR_FONT_SOURCE`,\n `Cannot load null or undefined font source: { \"${fontFamily}\": ${source} }. Expected asset of type \\`FontSource\\` for fontFamily of name: \"${fontFamily}\"`\n );\n }\n\n if (loaded[fontFamily]) {\n return;\n }\n\n if (loadPromises.hasOwnProperty(fontFamily)) {\n return loadPromises[fontFamily];\n }\n\n // Important: we want all callers that concurrently try to load the same font to await the same\n // promise. If we're here, we haven't created the promise yet. To ensure we create only one\n // promise in the program, we need to create the promise synchronously without yielding the event\n // loop from this point.\n\n const asset = getAssetForSource(source);\n loadPromises[fontFamily] = (async () => {\n try {\n await loadSingleFontAsync(fontFamily, asset);\n loaded[fontFamily] = true;\n } finally {\n delete loadPromises[fontFamily];\n }\n })();\n\n await loadPromises[fontFamily];\n}\n\n// @needsAudit\n/**\n * Unloads all the custom fonts. This is used for testing.\n */\nexport async function unloadAllAsync(): Promise {\n if (!ExpoFontLoader.unloadAllAsync) {\n throw new UnavailabilityError('expo-font', 'unloadAllAsync');\n }\n\n if (Object.keys(loadPromises).length) {\n throw new CodedError(\n `ERR_UNLOAD`,\n `Cannot unload fonts while they're still loading: ${Object.keys(loadPromises).join(', ')}`\n );\n }\n\n for (const fontFamily of Object.keys(loaded)) {\n delete loaded[fontFamily];\n }\n\n await ExpoFontLoader.unloadAllAsync();\n}\n\n// @needsAudit\n/**\n * Unload custom fonts matching the `fontFamily`s and display values provided.\n * Because fonts are automatically unloaded on every platform this is mostly used for testing.\n *\n * @param fontFamilyOrFontMap The name or names of the custom fonts that will be unloaded.\n * @param options When `fontFamilyOrFontMap` is a string, this should be the font source used to load\n * the custom font originally.\n */\nexport async function unloadAsync(\n fontFamilyOrFontMap: string | Record,\n options?: UnloadFontOptions\n): Promise {\n if (!ExpoFontLoader.unloadAsync) {\n throw new UnavailabilityError('expo-font', 'unloadAsync');\n }\n if (typeof fontFamilyOrFontMap === 'object') {\n if (options) {\n throw new CodedError(\n `ERR_FONT_API`,\n `No fontFamily can be used for the provided options: ${options}. The second argument of \\`unloadAsync()\\` can only be used with a \\`string\\` value as the first argument.`\n );\n }\n const fontMap = fontFamilyOrFontMap;\n const names = Object.keys(fontMap);\n await Promise.all(names.map((name) => unloadFontInNamespaceAsync(name, fontMap[name])));\n return;\n }\n\n return await unloadFontInNamespaceAsync(fontFamilyOrFontMap, options);\n}\n\nasync function unloadFontInNamespaceAsync(\n fontFamily: string,\n options?: UnloadFontOptions | null\n): Promise {\n if (!loaded[fontFamily]) {\n return;\n } else {\n delete loaded[fontFamily];\n }\n\n // Important: we want all callers that concurrently try to load the same font to await the same\n // promise. If we're here, we haven't created the promise yet. To ensure we create only one\n // promise in the program, we need to create the promise synchronously without yielding the event\n // loop from this point.\n\n const nativeFontName = getNativeFontName(fontFamily);\n\n if (!nativeFontName) {\n throw new CodedError(`ERR_FONT_FAMILY`, `Cannot unload an empty name`);\n }\n\n await ExpoFontLoader.unloadAsync(nativeFontName, options);\n}\n\nexport { FontDisplay, FontSource, FontResource, UnloadFontOptions };\n","import { Asset } from 'expo-asset';\n\n// @needsAudit\n/**\n * The different types of assets you can provide to the [`loadAsync()`](#loadAsync) function.\n * A font source can be a URI, a module ID, or an Expo Asset.\n */\nexport type FontSource = string | number | Asset | FontResource;\n\n// @needsAudit\n/**\n * An object used to dictate the resource that is loaded into the provided font namespace when used\n * with [`loadAsync`](#loadasync).\n */\nexport type FontResource = {\n uri?: string | number;\n /**\n * Sets the [`font-display`](#fontdisplay) property for a given typeface in the browser.\n * @platform web\n */\n display?: FontDisplay;\n default?: string;\n};\n\n// @needsAudit\n/**\n * Sets the [font-display](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display)\n * for a given typeface. The default font value on web is `FontDisplay.AUTO`.\n * Even though setting the `fontDisplay` does nothing on native platforms, the default behavior\n * emulates `FontDisplay.SWAP` on flagship devices like iOS, Samsung, Pixel, etc. Default\n * functionality varies on One Plus devices. In the browser this value is set in the generated\n * `@font-face` CSS block and not as a style property meaning you cannot dynamically change this\n * value based on the element it's used in.\n * @platform web\n */\nexport enum FontDisplay {\n /**\n * __(Default)__ The font display strategy is defined by the user agent or platform.\n * This generally defaults to the text being invisible until the font is loaded.\n * Good for buttons or banners that require a specific treatment.\n */\n AUTO = 'auto',\n /**\n * Fallback text is rendered immediately with a default font while the desired font is loaded.\n * This is good for making the content appear to load instantly and is usually preferred.\n */\n SWAP = 'swap',\n /**\n * The text will be invisible until the font has loaded. If the font fails to load then nothing\n * will appear - it's best to turn this off when debugging missing text.\n */\n BLOCK = 'block',\n /**\n * Splits the behavior between `SWAP` and `BLOCK`.\n * There will be a [100ms timeout](https://developers.google.com/web/updates/2016/02/font-display?hl=en)\n * where the text with a custom font is invisible, after that the text will either swap to the\n * styled text or it'll show the unstyled text and continue to load the custom font. This is good\n * for buttons that need a custom font but should also be quickly available to screen-readers.\n */\n FALLBACK = 'fallback',\n /**\n * This works almost identically to `FALLBACK`, the only difference is that the browser will\n * decide to load the font based on slow connection speed or critical resource demand.\n */\n OPTIONAL = 'optional',\n}\n\n// @needsAudit\n/**\n * Object used to query fonts for unloading.\n */\nexport type UnloadFontOptions = Pick;\n","import { Asset } from 'expo-asset';\nimport { CodedError } from 'expo-modules-core';\n\nimport ExpoFontLoader from './ExpoFontLoader';\nimport { FontResource, FontSource, FontDisplay } from './Font.types';\n\nfunction uriFromFontSource(asset: any): string | null {\n if (typeof asset === 'string') {\n return asset || null;\n } else if (typeof asset === 'object') {\n return asset.uri || asset.localUri || asset.default || null;\n } else if (typeof asset === 'number') {\n return uriFromFontSource(Asset.fromModule(asset));\n }\n return null;\n}\n\nfunction displayFromFontSource(asset: any): FontDisplay | undefined {\n return asset.display || FontDisplay.AUTO;\n}\n\nexport function fontFamilyNeedsScoping(name: string): boolean {\n return false;\n}\n\nexport function getAssetForSource(source: FontSource): Asset | FontResource {\n const uri = uriFromFontSource(source);\n const display = displayFromFontSource(source);\n\n if (!uri || typeof uri !== 'string') {\n throwInvalidSourceError(uri);\n }\n\n return {\n uri: uri!,\n display,\n };\n}\n\nfunction throwInvalidSourceError(source: any): never {\n let type: string = typeof source;\n if (type === 'object') type = JSON.stringify(source, null, 2);\n throw new CodedError(\n `ERR_FONT_SOURCE`,\n `Expected font asset of type \\`string | FontResource | Asset\\` instead got: ${type}`\n );\n}\n\nexport async function loadSingleFontAsync(\n name: string,\n input: Asset | FontResource\n): Promise {\n if (typeof input !== 'object' || typeof input.uri !== 'string' || (input as any).downloadAsync) {\n throwInvalidSourceError(input);\n }\n\n await ExpoFontLoader.loadAsync(name, input);\n}\n\nexport function getNativeFontName(name: string): string {\n return name;\n}\n","export default {\n get name(): string {\n return 'ExpoHaptics';\n },\n};\n","import { UnavailabilityError } from 'expo-modules-core';\n\nimport ExpoHaptics from './ExpoHaptics';\nimport { NotificationFeedbackType, ImpactFeedbackStyle } from './Haptics.types';\n\n// @needsAudit\n/**\n * The kind of notification response used in the feedback.\n * @param type A notification feedback type that on iOS is directly mapped to [UINotificationFeedbackType](https://developer.apple.com/documentation/uikit/uinotificationfeedbacktype),\n * while on Android these are simulated using [Vibrator](https://developer.android.com/reference/android/os/Vibrator).\n * You can use one of `Haptics.NotificationFeedbackType.{Success, Warning, Error}`.\n * @return A `Promise` which fulfils once native size haptics functionality is triggered.\n */\nexport async function notificationAsync(\n type: NotificationFeedbackType = NotificationFeedbackType.Success\n): Promise {\n if (!ExpoHaptics.notificationAsync) {\n throw new UnavailabilityError('Haptics', 'notificationAsync');\n }\n await ExpoHaptics.notificationAsync(type);\n}\n\n// @needsAudit\n/**\n * @param style A collision indicator that on iOS is directly mapped to [`UIImpactFeedbackStyle`](https://developer.apple.com/documentation/uikit/uiimpactfeedbackstyle),\n * while on Android these are simulated using [Vibrator](https://developer.android.com/reference/android/os/Vibrator).\n * You can use one of `Haptics.ImpactFeedbackStyle.{Light, Medium, Heavy}`.\n * @return A `Promise` which fulfils once native size haptics functionality is triggered.\n */\nexport async function impactAsync(\n style: ImpactFeedbackStyle = ImpactFeedbackStyle.Medium\n): Promise {\n if (!ExpoHaptics.impactAsync) {\n throw new UnavailabilityError('Haptic', 'impactAsync');\n }\n await ExpoHaptics.impactAsync(style);\n}\n\n// @needsAudit\n/**\n * Used to let a user know when a selection change has been registered.\n * @return A `Promise` which fulfils once native size haptics functionality is triggered.\n */\nexport async function selectionAsync(): Promise {\n if (!ExpoHaptics.selectionAsync) {\n throw new UnavailabilityError('Haptic', 'selectionAsync');\n }\n await ExpoHaptics.selectionAsync();\n}\n\nexport { NotificationFeedbackType, ImpactFeedbackStyle };\n","// @needsAudit\n/**\n * The type of notification feedback generated by a UINotificationFeedbackGenerator object.\n * [`UINotificationFeedbackType`](https://developer.apple.com/documentation/uikit/uinotificationfeedbacktype)\n */\nexport enum NotificationFeedbackType {\n /**\n * A notification feedback type indicating that a task has completed successfully.\n */\n Success = 'success',\n /**\n * A notification feedback type indicating that a task has produced a warning.\n */\n Warning = 'warning',\n /**\n * A notification feedback type indicating that a task has failed.\n */\n Error = 'error',\n}\n\n// @needsAudit\n/**\n * The mass of the objects in the collision simulated by a UIImpactFeedbackGenerator object\n * [`UINotificationFeedbackStyle`](https://developer.apple.com/documentation/uikit/uiimpactfeedbackstyle)\n */\nexport enum ImpactFeedbackStyle {\n /**\n * A collision between small, light user interface elements.\n */\n Light = 'light',\n /**\n * A collision between moderately sized user interface elements.\n */\n Medium = 'medium',\n /**\n * A collision between large, heavy user interface elements.\n */\n Heavy = 'heavy',\n}\n","import { PermissionResponse, PermissionStatus, Platform } from 'expo-modules-core';\n\nimport {\n ImagePickerAsset,\n ImagePickerResult,\n MediaTypeOptions,\n OpenFileBrowserOptions,\n} from './ImagePicker.types';\n\nconst MediaTypeInput = {\n [MediaTypeOptions.All]: 'video/mp4,video/quicktime,video/x-m4v,video/*,image/*',\n [MediaTypeOptions.Images]: 'image/*',\n [MediaTypeOptions.Videos]: 'video/mp4,video/quicktime,video/x-m4v,video/*',\n};\n\nexport default {\n get name(): string {\n return 'ExponentImagePicker';\n },\n\n async launchImageLibraryAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n base64 = false,\n }): Promise {\n // SSR guard\n if (!Platform.isDOMAvailable) {\n return { canceled: true, assets: null };\n }\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n base64,\n });\n },\n\n async launchCameraAsync({\n mediaTypes = MediaTypeOptions.Images,\n allowsMultipleSelection = false,\n base64 = false,\n }): Promise {\n // SSR guard\n if (!Platform.isDOMAvailable) {\n return { canceled: true, assets: null };\n }\n return await openFileBrowserAsync({\n mediaTypes,\n allowsMultipleSelection,\n capture: true,\n base64,\n });\n },\n\n /*\n * Delegate to expo-permissions to request camera permissions\n */\n async getCameraPermissionsAsync() {\n return permissionGrantedResponse();\n },\n async requestCameraPermissionsAsync() {\n return permissionGrantedResponse();\n },\n\n /*\n * Camera roll permissions don't need to be requested on web, so we always\n * respond with granted.\n */\n async getMediaLibraryPermissionsAsync(_writeOnly: boolean) {\n return permissionGrantedResponse();\n },\n async requestMediaLibraryPermissionsAsync(_writeOnly: boolean): Promise {\n return permissionGrantedResponse();\n },\n};\n\nfunction permissionGrantedResponse(): PermissionResponse {\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n granted: true,\n canAskAgain: true,\n };\n}\n\nfunction openFileBrowserAsync({\n mediaTypes,\n capture = false,\n allowsMultipleSelection = false,\n base64,\n}: OpenFileBrowserOptions): Promise {\n const mediaTypeFormat = MediaTypeInput[mediaTypes];\n\n const input = document.createElement('input');\n input.style.display = 'none';\n input.setAttribute('type', 'file');\n input.setAttribute('accept', mediaTypeFormat);\n input.setAttribute('id', String(Math.random()));\n if (allowsMultipleSelection) {\n input.setAttribute('multiple', 'multiple');\n }\n if (capture) {\n input.setAttribute('capture', 'camera');\n }\n document.body.appendChild(input);\n\n return new Promise((resolve) => {\n input.addEventListener('change', async () => {\n if (input.files) {\n const files = allowsMultipleSelection ? input.files : [input.files[0]];\n const assets: ImagePickerAsset[] = await Promise.all(\n Array.from(files).map((file) => readFile(file, { base64 }))\n );\n\n resolve({ canceled: false, assets });\n } else {\n resolve({ canceled: true, assets: null });\n }\n document.body.removeChild(input);\n });\n\n const event = new MouseEvent('click');\n input.dispatchEvent(event);\n });\n}\n\nfunction readFile(targetFile: Blob, options: { base64: boolean }): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => {\n reject(new Error(`Failed to read the selected media because the operation failed.`));\n };\n reader.onload = ({ target }) => {\n const uri = (target as any).result;\n const returnRaw = () => resolve({ uri, width: 0, height: 0 });\n\n if (typeof uri === 'string') {\n const image = new Image();\n image.src = uri;\n image.onload = () => {\n resolve({\n uri,\n width: image.naturalWidth ?? image.width,\n height: image.naturalHeight ?? image.height,\n // The blob's result cannot be directly decoded as Base64 without\n // first removing the Data-URL declaration preceding the\n // Base64-encoded data. To retrieve only the Base64 encoded string,\n // first remove data:*/*;base64, from the result.\n // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL\n ...(options.base64 && { base64: uri.substr(uri.indexOf(',') + 1) }),\n });\n };\n image.onerror = () => returnRaw();\n } else {\n returnRaw();\n }\n };\n\n reader.readAsDataURL(targetFile);\n });\n}\n","import {\n PermissionStatus,\n PermissionExpiration,\n PermissionHookOptions,\n PermissionResponse,\n createPermissionHook,\n UnavailabilityError,\n CodedError,\n} from 'expo-modules-core';\n\nimport ExponentImagePicker from './ExponentImagePicker';\nimport {\n CameraPermissionResponse,\n MediaLibraryPermissionResponse,\n ImagePickerResult,\n ImagePickerErrorResult,\n ImagePickerOptions,\n} from './ImagePicker.types';\n\nfunction validateOptions(options: ImagePickerOptions) {\n const { aspect, quality, videoMaxDuration } = options;\n\n if (aspect != null) {\n const [x, y] = aspect;\n\n if (x <= 0 || y <= 0) {\n throw new CodedError(\n 'ERR_INVALID_ARGUMENT',\n `Invalid aspect ratio values ${x}:${y}. Provide positive numbers.`\n );\n }\n }\n\n if (quality && (quality < 0 || quality > 1)) {\n throw new CodedError(\n 'ERR_INVALID_ARGUMENT',\n `Invalid 'quality' value ${quality}. Provide a value between 0 and 1.`\n );\n }\n\n if (videoMaxDuration && videoMaxDuration < 0) {\n throw new CodedError(\n 'ERR_INVALID_ARGUMENT',\n `Invalid 'videoMaxDuration' value ${videoMaxDuration}. Provide a non-negative number.`\n );\n }\n\n return options;\n}\n\nconst DEPRECATED_RESULT_KEYS = [\n 'uri',\n 'assetId',\n 'width',\n 'height',\n 'type',\n 'exif',\n 'base64',\n 'duration',\n 'fileName',\n 'fileSize',\n];\nfunction mergeDeprecatedResult(result: ImagePickerResult): ImagePickerResult {\n const firstAsset = result?.assets?.[0];\n const deprecatedResult = {\n ...result,\n get cancelled() {\n console.warn(\n 'Key \"cancelled\" in the image picker result is deprecated and will be removed in SDK 48, use \"canceled\" instead'\n );\n return this.canceled;\n },\n };\n for (const key of DEPRECATED_RESULT_KEYS) {\n Object.defineProperty(deprecatedResult, key, {\n get() {\n console.warn(\n `Key \"${key}\" in the image picker result is deprecated and will be removed in SDK 48, you can access selected assets through the \"assets\" array instead`\n );\n return firstAsset?.[key];\n },\n });\n }\n return deprecatedResult;\n}\n\n// @needsAudit\n/**\n * Checks user's permissions for accessing camera.\n * @return A promise that fulfills with an object of type [CameraPermissionResponse](#camerapermissionresponse).\n */\nexport async function getCameraPermissionsAsync(): Promise {\n return ExponentImagePicker.getCameraPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Checks user's permissions for accessing photos.\n * @param writeOnly Whether to request write or read and write permissions. Defaults to `false`\n * @return A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse).\n */\nexport async function getMediaLibraryPermissionsAsync(\n writeOnly: boolean = false\n): Promise {\n return ExponentImagePicker.getMediaLibraryPermissionsAsync(writeOnly);\n}\n\n// @needsAudit\n/**\n * Asks the user to grant permissions for accessing camera. This does nothing on web because the\n * browser camera is not used.\n * @return A promise that fulfills with an object of type [CameraPermissionResponse](#camerarollpermissionresponse).\n */\nexport async function requestCameraPermissionsAsync(): Promise {\n return ExponentImagePicker.requestCameraPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Asks the user to grant permissions for accessing user's photo. This method does nothing on web.\n * @param writeOnly Whether to request write or read and write permissions. Defaults to `false`\n * @return A promise that fulfills with an object of type [MediaLibraryPermissionResponse](#medialibrarypermissionresponse).\n */\nexport async function requestMediaLibraryPermissionsAsync(\n writeOnly: boolean = false\n): Promise {\n const imagePickerMethod = ExponentImagePicker.requestMediaLibraryPermissionsAsync;\n return imagePickerMethod(writeOnly);\n}\n\n// @needsAudit\n/**\n * Check or request permissions to access the media library.\n * This uses both `requestMediaLibraryPermissionsAsync` and `getMediaLibraryPermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = ImagePicker.useMediaLibraryPermissions();\n * ```\n */\nexport const useMediaLibraryPermissions = createPermissionHook<\n MediaLibraryPermissionResponse,\n { writeOnly?: boolean }\n>({\n // TODO(cedric): permission requesters should have an options param or a different requester\n getMethod: (options) => getMediaLibraryPermissionsAsync(options?.writeOnly),\n requestMethod: (options) => requestMediaLibraryPermissionsAsync(options?.writeOnly),\n});\n\n// @needsAudit\n/**\n * Check or request permissions to access the camera.\n * This uses both `requestCameraPermissionsAsync` and `getCameraPermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = ImagePicker.useCameraPermissions();\n * ```\n */\nexport const useCameraPermissions = createPermissionHook({\n getMethod: getCameraPermissionsAsync,\n requestMethod: requestCameraPermissionsAsync,\n});\n\n// @needsAudit\n/**\n * Android system sometimes kills the `MainActivity` after the `ImagePicker` finishes. When this\n * happens, we lost the data selected from the `ImagePicker`. However, you can retrieve the lost\n * data by calling `getPendingResultAsync`. You can test this functionality by turning on\n * `Don't keep activities` in the developer options.\n * @return\n * - **On Android:** a promise that resolves to an array of objects of exactly same type as in\n * `ImagePicker.launchImageLibraryAsync` or `ImagePicker.launchCameraAsync` if the `ImagePicker`\n * finished successfully. Otherwise, to the array of [`ImagePickerErrorResult`](#imagepickerimagepickererrorresult).\n * - **On other platforms:** an empty array.\n */\nexport async function getPendingResultAsync(): Promise<\n (ImagePickerResult | ImagePickerErrorResult)[]\n> {\n if (ExponentImagePicker.getPendingResultAsync) {\n return ExponentImagePicker.getPendingResultAsync();\n }\n return [];\n}\n\n// @needsAudit\n/**\n * Display the system UI for taking a photo with the camera. Requires `Permissions.CAMERA`.\n * On Android and iOS 10 `Permissions.CAMERA_ROLL` is also required. On mobile web, this must be\n * called immediately in a user interaction like a button press, otherwise the browser will block\n * the request without a warning.\n * > **Note:** Make sure that you handle `MainActivity` destruction on **Android**. See [ImagePicker.getPendingResultAsync](#imagepickergetpendingresultasync).\n * > **Notes for Web:** The system UI can only be shown after user activation (e.g. a `Button` press).\n * Therefore, calling `launchCameraAsync` in `componentDidMount`, for example, will **not** work as\n * intended. The `cancelled` event will not be returned in the browser due to platform restrictions\n * and inconsistencies across browsers.\n * @param options An `ImagePickerOptions` object.\n * @return A promise that resolves to an object with `canceled` and `assets` fields.\n * When the user canceled the action the `assets` is always `null`, otherwise it's an array of\n * the selected media assets which have a form of [`ImagePickerAsset`](#imagepickerasset).\n */\nexport async function launchCameraAsync(\n options: ImagePickerOptions = {}\n): Promise {\n if (!ExponentImagePicker.launchCameraAsync) {\n throw new UnavailabilityError('ImagePicker', 'launchCameraAsync');\n }\n const result = await ExponentImagePicker.launchCameraAsync(validateOptions(options));\n return mergeDeprecatedResult(result);\n}\n\n// @needsAudit\n/**\n * Display the system UI for choosing an image or a video from the phone's library.\n * Requires `Permissions.MEDIA_LIBRARY` on iOS 10 only. On mobile web, this must be called\n * immediately in a user interaction like a button press, otherwise the browser will block the\n * request without a warning.\n *\n * **Animated GIFs support:** On Android, if the selected image is an animated GIF, the result image will be an\n * animated GIF too if and only if `quality` is explicitly set to `1.0` and `allowsEditing` is set to `false`.\n * Otherwise compression and/or cropper will pick the first frame of the GIF and return it as the\n * result (on Android the result will be a PNG). On iOS, both quality and cropping are supported.\n *\n * > **Notes for Web:** The system UI can only be shown after user activation (e.g. a `Button` press).\n * Therefore, calling `launchImageLibraryAsync` in `componentDidMount`, for example, will **not**\n * work as intended. The `cancelled` event will not be returned in the browser due to platform\n * restrictions and inconsistencies across browsers.\n * @param options An object extended by [`ImagePickerOptions`](#imagepickeroptions).\n * @return A promise that resolves to an object with `canceled` and `assets` fields.\n * When the user canceled the action the `assets` is always `null`, otherwise it's an array of\n * the selected media assets which have a form of [`ImagePickerAsset`](#imagepickerasset).\n */\nexport async function launchImageLibraryAsync(\n options?: ImagePickerOptions\n): Promise {\n if (!ExponentImagePicker.launchImageLibraryAsync) {\n throw new UnavailabilityError('ImagePicker', 'launchImageLibraryAsync');\n }\n if (options?.allowsEditing && options.allowsMultipleSelection) {\n console.warn(\n '[expo-image-picker] `allowsEditing` is not supported when `allowsMultipleSelection` is enabled and will be ignored.' +\n \"Disable either 'allowsEditing' or 'allowsMultipleSelection' in 'launchImageLibraryAsync' \" +\n 'to fix this warning.'\n );\n }\n const result = await ExponentImagePicker.launchImageLibraryAsync(options ?? {});\n return mergeDeprecatedResult(result);\n}\n\nexport * from './ImagePicker.types';\n\nexport { PermissionStatus, PermissionExpiration, PermissionHookOptions, PermissionResponse };\n","import { PermissionResponse } from 'expo-modules-core';\n\n// @needsAudit\n/**\n * Alias for `PermissionResponse` type exported by `expo-modules-core`.\n */\nexport type CameraPermissionResponse = PermissionResponse;\n\n// @needsAudit\n/**\n * Extends `PermissionResponse` type exported by `expo-modules-core`, containing additional iOS-specific field.\n */\nexport type MediaLibraryPermissionResponse = PermissionResponse & {\n /**\n * @platform ios\n */\n accessPrivileges?: 'all' | 'limited' | 'none';\n};\n\n// @needsAudit\nexport enum MediaTypeOptions {\n /**\n * Images and videos.\n */\n All = 'All',\n /**\n * Only videos.\n */\n Videos = 'Videos',\n /**\n * Only images.\n */\n Images = 'Images',\n}\n\n// @needsAudit\nexport enum VideoExportPreset {\n /**\n * Resolution: __Unchanged__ •\n * Video compression: __None__ •\n * Audio compression: __None__\n */\n Passthrough = 0,\n /**\n * Resolution: __Depends on the device__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n LowQuality = 1,\n /**\n * Resolution: __Depends on the device__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n MediumQuality = 2,\n /**\n * Resolution: __Depends on the device__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n HighestQuality = 3,\n /**\n * Resolution: __640 × 480__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n H264_640x480 = 4,\n /**\n * Resolution: __960 × 540__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n H264_960x540 = 5,\n /**\n * Resolution: __1280 × 720__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n H264_1280x720 = 6,\n /**\n * Resolution: __1920 × 1080__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n H264_1920x1080 = 7,\n /**\n * Resolution: __3840 × 2160__ •\n * Video compression: __H.264__ •\n * Audio compression: __AAC__\n */\n H264_3840x2160 = 8,\n /**\n * Resolution: __1920 × 1080__ •\n * Video compression: __HEVC__ •\n * Audio compression: __AAC__\n */\n HEVC_1920x1080 = 9,\n /**\n * Resolution: __3840 × 2160__ •\n * Video compression: __HEVC__ •\n * Audio compression: __AAC__\n */\n HEVC_3840x2160 = 10,\n}\n\n// @needsAudit\nexport enum UIImagePickerControllerQualityType {\n /**\n * Highest available resolution.\n */\n High = 0,\n /**\n * Depends on the device.\n */\n Medium = 1,\n /**\n * Depends on the device.\n */\n Low = 2,\n /**\n * 640 × 480\n */\n VGA640x480 = 3,\n /**\n * 1280 × 720\n */\n IFrame1280x720 = 4,\n /**\n * 960 × 540\n */\n IFrame960x540 = 5,\n}\n\n/**\n * Picker presentation style. Its values are directly mapped to the [`UIModalPresentationStyle`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle).\n *\n * @platform ios\n */\nexport enum UIImagePickerPresentationStyle {\n /**\n * A presentation style in which the presented picker covers the screen.\n */\n FULL_SCREEN = 'fullScreen',\n /**\n * A presentation style that partially covers the underlying content.\n */\n PAGE_SHEET = 'pageSheet',\n /**\n * A presentation style that displays the picker centered in the screen.\n */\n FORM_SHEET = 'formSheet',\n /**\n * A presentation style where the picker is displayed over the app's content.\n */\n CURRENT_CONTEXT = 'currentContext',\n /**\n * A presentation style in which the picker view covers the screen.\n */\n OVER_FULL_SCREEN = 'overFullScreen',\n /**\n * A presentation style where the picker is displayed over the app's content.\n */\n OVER_CURRENT_CONTEXT = 'overCurrentContext',\n /**\n * A presentation style where the picker is displayed in a popover view.\n */\n POPOVER = 'popover',\n /**\n * The default presentation style chosen by the system.\n * On older iOS versions, falls back to `WebBrowserPresentationStyle.FullScreen`.\n *\n * @platform ios 13+\n */\n AUTOMATIC = 'automatic',\n}\n\n/**\n * Picker preferred asset representation mode. Its values are directly mapped to the [`PHPickerConfigurationAssetRepresentationMode`](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode).\n *\n * @platform ios\n */\nexport enum UIImagePickerPreferredAssetRepresentationMode {\n /**\n * A mode that indicates that the system chooses the appropriate asset representation.\n */\n Automatic = 'automatic',\n /**\n * A mode that uses the most compatible asset representation.\n */\n Compatible = 'compatible',\n /**\n * A mode that uses the current representation to avoid transcoding, if possible.\n */\n Current = 'current',\n}\n\nexport enum CameraType {\n /**\n * Back/rear camera.\n */\n back = 'back',\n /**\n * Front camera\n */\n front = 'front',\n}\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerAsset` instead\n */\nexport type ImageInfo = ImagePickerAsset;\n\n/**\n * Represents an asset (image or video) returned by the image picker or camera.\n */\nexport type ImagePickerAsset = {\n /**\n * URI to the local image or video file (usable as the source of an `Image` element, in the case of\n * an image) and `width` and `height` specify the dimensions of the media.\n */\n uri: string;\n /**\n * The unique ID that represents the picked image or video, if picked from the library. It can be used\n * by [expo-media-library](./media-library) to manage the picked asset.\n *\n * > This might be `null` when the ID is unavailable or the user gave limited permission to access the media library.\n * > On Android, the ID is unavailable when the user selects a photo by directly browsing file system.\n *\n * @platform ios\n * @platform android\n */\n assetId?: string | null;\n /**\n * Width of the image or video.\n */\n width: number;\n /**\n * Height of the image or video.\n */\n height: number;\n /**\n * The type of the asset.\n */\n type?: 'image' | 'video';\n /**\n * Preferred filename to use when saving this item. This might be `null` when the name is unavailable\n * or user gave limited permission to access the media library.\n *\n * @platform ios\n */\n fileName?: string | null;\n /**\n * File size of the picked image or video, in bytes.\n *\n * @platform ios\n */\n fileSize?: number;\n /**\n * The `exif` field is included if the `exif` option is truthy, and is an object containing the\n * image's EXIF data. The names of this object's properties are EXIF tags and the values are the\n * respective EXIF values for those tags.\n */\n exif?: Record | null;\n /**\n * When the `base64` option is truthy, it is a Base64-encoded string of the selected image's JPEG data, otherwise `null`.\n * If you prepend this with `'data:image/jpeg;base64,'` to create a data URI,\n * you can use it as the source of an `Image` element; for example:\n * ```ts\n * \n * ```\n */\n base64?: string | null;\n /**\n * Length of the video in milliseconds or `null` if the asset is not a video.\n */\n duration?: number | null;\n};\n\n// @needsAudit\nexport type ImagePickerErrorResult = {\n /**\n * The error code.\n */\n code: string;\n /**\n * The error message.\n */\n message: string;\n /**\n * The exception which caused the error.\n */\n exception?: string;\n};\n\n// @needsAudit\n/**\n * Type representing successful and canceled pick result.\n */\nexport type ImagePickerResult = ImagePickerSuccessResult | ImagePickerCanceledResult;\n\n/**\n * Type representing successful pick result.\n */\nexport type ImagePickerSuccessResult = {\n /**\n * Boolean flag set to `false` showing that the request was successful.\n */\n canceled: false;\n /**\n * An array of picked assets.\n */\n assets: ImagePickerAsset[];\n};\n\n/**\n * Type representing canceled pick result.\n */\nexport type ImagePickerCanceledResult = {\n /**\n * Boolean flag set to `true` showing that the request was canceled.\n */\n canceled: true;\n /**\n * `null` signifying that the request was canceled.\n */\n assets: null;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` instead.\n */\nexport type ImagePickerCancelledResult = ImagePickerCanceledResult;\n\n/**\n * @hidden\n * @deprecated `ImagePickerMultipleResult` has been deprecated in favor of `ImagePickerResult`.\n */\nexport type ImagePickerMultipleResult = ImagePickerResult;\n\n// @needsAudit\nexport type ImagePickerOptions = {\n /**\n * Whether to show a UI to edit the image after it is picked. On Android the user can crop and\n * rotate the image and on iOS simply crop it.\n *\n * > - Cropping multiple images is not supported - this option is mutually exclusive with `allowsMultipleSelection`.\n * > - On iOS, this option is ignored if `allowsMultipleSelection` is enabled.\n * > - On iOS cropping a `.bmp` image will convert it to `.png`.\n *\n * @default false\n * @platform ios\n * @platform android\n */\n allowsEditing?: boolean;\n /**\n * An array with two entries `[x, y]` specifying the aspect ratio to maintain if the user is\n * allowed to edit the image (by passing `allowsEditing: true`). This is only applicable on\n * Android, since on iOS the crop rectangle is always a square.\n */\n aspect?: [number, number];\n /**\n * Specify the quality of compression, from `0` to `1`. `0` means compress for small size,\n * `1` means compress for maximum quality.\n * > Note: If the selected image has been compressed before, the size of the output file may be\n * > bigger than the size of the original image.\n *\n * > Note: On iOS, if a `.bmp` or `.png` image is selected from the library, this option is ignored.\n *\n * @default 0.2\n * @platform ios\n * @platform android\n */\n quality?: number;\n /**\n * Choose what type of media to pick.\n * @default ImagePicker.MediaTypeOptions.Images\n */\n mediaTypes?: MediaTypeOptions;\n /**\n * Whether to also include the EXIF data for the image. On iOS the EXIF data does not include GPS\n * tags in the camera case.\n */\n exif?: boolean;\n /**\n * Whether to also include the image data in Base64 format.\n */\n base64?: boolean;\n /**\n * Specify preset which will be used to compress selected video.\n * @default ImagePicker.VideoExportPreset.Passthrough\n * @platform ios 11+\n * @deprecated See [`videoExportPreset`](https://developer.apple.com/documentation/uikit/uiimagepickercontroller/2890964-videoexportpreset?language=objc)\n * in Apple documentation.\n */\n videoExportPreset?: VideoExportPreset;\n /**\n * Specify the quality of recorded videos. Defaults to the highest quality available for the device.\n * @default ImagePicker.UIImagePickerControllerQualityType.High\n * @platform ios\n */\n videoQuality?: UIImagePickerControllerQualityType;\n /**\n * Whether or not to allow selecting multiple media files at once.\n *\n * > Cropping multiple images is not supported - this option is mutually exclusive with `allowsEditing`.\n * > If this option is enabled, then `allowsEditing` is ignored.\n *\n * @default false\n * @platform ios 14+\n * @platform android\n * @platform web\n */\n allowsMultipleSelection?: boolean;\n /**\n * The maximum number of items that user can select. Applicable when `allowsMultipleSelection` is enabled.\n * Setting the value to `0` sets the selection limit to the maximum that the system supports.\n *\n * @platform ios 14+\n * @platform android\n * @default 0\n */\n selectionLimit?: number;\n /**\n * Whether to display number badges when assets are selected. The badges are numbered\n * in selection order. Assets are then returned in the exact same order they were selected.\n *\n * > Assets should be returned in the selection order regardless of this option,\n * > but there is no guarantee that it is always true when this option is disabled.\n *\n * @platform ios 15+\n * @default false\n */\n orderedSelection?: boolean;\n /**\n * Maximum duration, in seconds, for video recording. Setting this to `0` disables the limit.\n * Defaults to `0` (no limit).\n * - **On iOS**, when `allowsEditing` is set to `true`, maximum duration is limited to 10 minutes.\n * This limit is applied automatically, if `0` or no value is specified.\n * - **On Android**, effect of this option depends on support of installed camera app.\n * - **On Web** this option has no effect - the limit is browser-dependant.\n */\n videoMaxDuration?: number;\n /**\n * Choose [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle?language=objc)\n * to customize view during taking photo/video.\n * @default ImagePicker.UIImagePickerPresentationStyle.Automatic\n * @platform ios\n */\n presentationStyle?: UIImagePickerPresentationStyle;\n /**\n * Selects the camera-facing type. The `CameraType` enum provides two options:\n * `front` for the front-facing camera and `back` for the back-facing camera.\n * - **On Android**, the behavior of this option may vary based on the camera app installed on the device.\n * @default CameraType.back\n * @platform ios\n * @platform android\n */\n cameraType?: CameraType;\n /**\n * Choose [preferred asset representation mode](https://developer.apple.com/documentation/photokit/phpickerconfigurationassetrepresentationmode)\n * to use when loading assets.\n * @default ImagePicker.UIImagePickerPreferredAssetRepresentationMode.Automatic\n * @platform ios 14+\n */\n preferredAssetRepresentationMode?: UIImagePickerPreferredAssetRepresentationMode;\n};\n\n// @needsAudit\nexport type OpenFileBrowserOptions = {\n /**\n * Choose what type of media to pick.\n * @default ImagePicker.MediaTypeOptions.Images\n */\n mediaTypes: MediaTypeOptions;\n // @docsMissing\n capture?: boolean;\n /**\n * Whether or not to allow selecting multiple media files at once.\n * @platform web\n */\n allowsMultipleSelection: boolean;\n /**\n * Whether to also include the image data in Base64 format.\n */\n base64: boolean;\n};\n\n/**\n * @hidden\n * @deprecated Use `ImagePickerResult` or `OpenFileBrowserOptions` instead.\n */\nexport type ExpandImagePickerResult =\n T extends {\n allowsMultipleSelection: true;\n }\n ? ImagePickerResult\n : ImagePickerResult;\n","import React from 'react';\n\nimport { ImageNativeProps, ImageSource, ImageLoadEventData } from './Image.types';\nimport AnimationManager, { AnimationManagerNode } from './web/AnimationManager';\nimport ImageWrapper from './web/ImageWrapper';\nimport loadStyle from './web/style';\nimport useSourceSelection from './web/useSourceSelection';\n\nloadStyle();\n\nexport const ExpoImageModule = {\n prefetch(urls: string | string[]): void {\n const urlsArray = Array.isArray(urls) ? urls : [urls];\n urlsArray.forEach((url) => {\n const img = new Image();\n img.src = url;\n });\n },\n\n async clearMemoryCache(): Promise {\n return false;\n },\n\n async clearDiskCache(): Promise {\n return false;\n },\n};\n\nfunction onLoadAdapter(onLoad?: (event: ImageLoadEventData) => void) {\n return (event: React.SyntheticEvent) => {\n const target = event.target as HTMLImageElement;\n onLoad?.({\n source: {\n url: target.currentSrc,\n width: target.naturalWidth,\n height: target.naturalHeight,\n mediaType: null,\n },\n cacheType: 'none',\n });\n };\n}\n\nfunction onErrorAdapter(onError?: { (event: { error: string }): void }) {\n return ({ source }: { source?: ImageSource | null }) => {\n onError?.({\n error: `Failed to load image from url: ${source?.uri}`,\n });\n };\n}\n\nconst setCssVariables = (element: HTMLElement, size: DOMRect) => {\n element?.style.setProperty('--expo-image-width', `${size.width}px`);\n element?.style.setProperty('--expo-image-height', `${size.height}px`);\n};\n\nexport default function ExpoImage({\n source,\n placeholder,\n contentFit,\n contentPosition,\n placeholderContentFit,\n onLoad,\n transition,\n onError,\n responsivePolicy,\n onLoadEnd,\n priority,\n blurRadius,\n recyclingKey,\n ...props\n}: ImageNativeProps) {\n const { aspectRatio, backgroundColor, transform, borderColor, ...style } = props.style ?? {};\n const imagePlaceholderContentFit = placeholderContentFit || 'scale-down';\n const blurhashStyle = {\n objectFit: placeholderContentFit || contentFit,\n };\n const { containerRef, source: selectedSource } = useSourceSelection(\n source,\n responsivePolicy,\n setCssVariables\n );\n\n const initialNodeAnimationKey =\n (recyclingKey ? `${recyclingKey}-${placeholder?.[0]?.uri}` : placeholder?.[0]?.uri) ?? '';\n\n const initialNode: AnimationManagerNode | null = placeholder?.[0]?.uri\n ? [\n initialNodeAnimationKey,\n ({ onAnimationFinished }) =>\n (className, style) =>\n (\n \n ),\n ]\n : null;\n\n const currentNodeAnimationKey =\n (recyclingKey\n ? `${recyclingKey}-${selectedSource?.uri ?? placeholder?.[0]?.uri}`\n : selectedSource?.uri ?? placeholder?.[0]?.uri) ?? '';\n\n const currentNode: AnimationManagerNode = [\n currentNodeAnimationKey,\n ({ onAnimationFinished, onReady, onMount, onError: onErrorInner }) =>\n (className, style) =>\n (\n \n ),\n ];\n return (\n \n \n {currentNode}\n \n \n );\n}\n","import React from 'react';\nimport { StyleSheet } from 'react-native';\n\nimport ExpoImage, { ExpoImageModule } from './ExpoImage';\nimport { ImageProps } from './Image.types';\nimport { resolveContentFit, resolveContentPosition, resolveTransition } from './utils';\nimport { resolveSources } from './utils/resolveSources';\n\nlet loggedDefaultSourceDeprecationWarning = false;\n\nexport class Image extends React.PureComponent {\n /**\n * Preloads images at the given urls that can be later used in the image view.\n * Preloaded images are always cached on the disk, so make sure to use\n * `disk` (default) or `memory-disk` cache policy.\n */\n static prefetch(urls: string | string[]): void {\n return ExpoImageModule.prefetch(Array.isArray(urls) ? urls : [urls]);\n }\n\n /**\n * Asynchronously clears all images stored in memory.\n * @platform android\n * @platform ios\n * @return A promise resolving to `true` when the operation succeeds.\n * It may resolve to `false` on Android when the activity is no longer available.\n * Resolves to `false` on Web.\n */\n static async clearMemoryCache(): Promise {\n return await ExpoImageModule.clearMemoryCache();\n }\n\n /**\n * Asynchronously clears all images from the disk cache.\n * @platform android\n * @platform ios\n * @return A promise resolving to `true` when the operation succeeds.\n * It may resolve to `false` on Android when the activity is no longer available.\n * Resolves to `false` on Web.\n */\n static async clearDiskCache(): Promise {\n return await ExpoImageModule.clearDiskCache();\n }\n\n render() {\n const {\n style,\n source,\n placeholder,\n contentFit,\n contentPosition,\n transition,\n fadeDuration,\n resizeMode: resizeModeProp,\n defaultSource,\n loadingIndicatorSource,\n ...restProps\n } = this.props;\n\n const { resizeMode: resizeModeStyle, ...restStyle } = StyleSheet.flatten(style) || {};\n const resizeMode = resizeModeProp ?? resizeModeStyle;\n\n if ((defaultSource || loadingIndicatorSource) && !loggedDefaultSourceDeprecationWarning) {\n console.warn(\n '[expo-image]: `defaultSource` and `loadingIndicatorSource` props are deprecated, use `placeholder` instead'\n );\n loggedDefaultSourceDeprecationWarning = true;\n }\n\n return (\n \n );\n }\n}\n","import {\n ImageContentFit,\n ImageContentPosition,\n ImageContentPositionObject,\n ImageContentPositionString,\n ImageProps,\n ImageTransition,\n} from './Image.types';\n\nlet loggedResizeModeDeprecationWarning = false;\nlet loggedRepeatDeprecationWarning = false;\nlet loggedFadeDurationDeprecationWarning = false;\n\n/**\n * If the `contentFit` is not provided, it's resolved from the equivalent `resizeMode` prop\n * that we support to provide compatibility with React Native Image.\n */\nexport function resolveContentFit(\n contentFit?: ImageContentFit,\n resizeMode?: ImageProps['resizeMode']\n): ImageContentFit {\n if (contentFit) {\n return contentFit;\n }\n if (resizeMode) {\n if (!loggedResizeModeDeprecationWarning) {\n console.log('[expo-image]: Prop \"resizeMode\" is deprecated, use \"contentFit\" instead');\n loggedResizeModeDeprecationWarning = true;\n }\n\n switch (resizeMode) {\n case 'contain':\n case 'cover':\n return resizeMode;\n case 'stretch':\n return 'fill';\n case 'center':\n return 'scale-down';\n case 'repeat':\n if (!loggedRepeatDeprecationWarning) {\n console.log('[expo-image]: Resize mode \"repeat\" is no longer supported');\n loggedRepeatDeprecationWarning = true;\n }\n }\n }\n return 'cover';\n}\n\n/**\n * It resolves a stringified form of the `contentPosition` prop to an object,\n * which is the only form supported in the native code.\n */\nexport function resolveContentPosition(\n contentPosition?: ImageContentPosition\n): ImageContentPositionObject {\n if (typeof contentPosition === 'string') {\n const contentPositionStringMappings: Record<\n ImageContentPositionString,\n ImageContentPositionObject\n > = {\n center: { top: '50%', left: '50%' },\n top: { top: 0, left: '50%' },\n right: { top: '50%', right: 0 },\n bottom: { bottom: 0, left: '50%' },\n left: { top: '50%', left: 0 },\n 'top center': { top: 0, left: '50%' },\n 'top right': { top: 0, right: 0 },\n 'top left': { top: 0, left: 0 },\n 'right center': { top: '50%', right: 0 },\n 'right top': { top: 0, right: 0 },\n 'right bottom': { bottom: 0, right: 0 },\n 'bottom center': { bottom: 0, left: '50%' },\n 'bottom right': { bottom: 0, right: 0 },\n 'bottom left': { bottom: 0, left: 0 },\n 'left center': { top: '50%', left: 0 },\n 'left top': { top: 0, left: 0 },\n 'left bottom': { bottom: 0, left: 0 },\n };\n const contentPositionObject = contentPositionStringMappings[contentPosition];\n\n if (!contentPositionObject) {\n console.warn(`[expo-image]: Content position \"${contentPosition}\" is invalid`);\n return contentPositionStringMappings.center;\n }\n return contentPositionObject;\n }\n return contentPosition ?? { top: '50%', left: '50%' };\n}\n\n/**\n * If `transition` or `fadeDuration` is a number, it's resolved to a cross dissolve transition with the given duration.\n * When `fadeDuration` is used, it logs an appropriate deprecation warning.\n */\nexport function resolveTransition(\n transition?: ImageProps['transition'],\n fadeDuration?: ImageProps['fadeDuration']\n): ImageTransition | null {\n if (typeof transition === 'number') {\n return { duration: transition };\n }\n if (!transition && typeof fadeDuration === 'number') {\n if (!loggedFadeDurationDeprecationWarning) {\n console.warn('[expo-image]: Prop \"fadeDuration\" is deprecated, use \"transition\" instead');\n loggedFadeDurationDeprecationWarning = true;\n }\n return { duration: fadeDuration };\n }\n return transition ?? null;\n}\n","import { Platform } from 'expo-modules-core';\nimport { PixelRatio } from 'react-native';\nimport { PackagerAsset } from 'react-native/Libraries/Image/AssetRegistry';\n\nexport type ResolvedAssetSource = {\n __packager_asset: boolean;\n width?: number;\n height?: number;\n uri: string;\n scale: number;\n};\n\n// Returns the Metro dev server-specific asset location.\nfunction getScaledAssetPath(asset): string {\n const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());\n const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n const type = !asset.type ? '' : `.${asset.type}`;\n if (__DEV__) {\n return asset.httpServerLocation + '/' + asset.name + scaleSuffix + type;\n } else {\n return asset.httpServerLocation.replace(/\\.\\.\\//g, '_') + '/' + asset.name + scaleSuffix + type;\n }\n}\n\nexport default class AssetSourceResolver {\n serverUrl: string;\n // where the jsbundle is being run from\n // NOTE(EvanBacon): Never defined on web.\n jsbundleUrl?: string | null;\n // the asset to resolve\n asset: PackagerAsset;\n\n constructor(\n serverUrl: string | undefined | null,\n jsbundleUrl: string | undefined | null,\n asset: PackagerAsset\n ) {\n this.serverUrl = serverUrl || 'https://expo.dev';\n this.jsbundleUrl = null;\n this.asset = asset;\n }\n\n // Always true for web runtimes\n isLoadedFromServer(): boolean {\n return true;\n }\n\n // Always false for web runtimes\n isLoadedFromFileSystem(): boolean {\n return false;\n }\n\n defaultAsset(): ResolvedAssetSource {\n return this.assetServerURL();\n }\n\n /**\n * @returns absolute remote URL for the hosted asset.\n */\n assetServerURL(): ResolvedAssetSource {\n const fromUrl = new URL(getScaledAssetPath(this.asset), this.serverUrl);\n fromUrl.searchParams.set('platform', Platform.OS);\n fromUrl.searchParams.set('hash', this.asset.hash);\n return this.fromSource(\n // Relative on web\n fromUrl.toString().replace(fromUrl.origin, '')\n );\n }\n\n fromSource(source: string): ResolvedAssetSource {\n return {\n __packager_asset: true,\n width: this.asset.width ?? undefined,\n height: this.asset.height ?? undefined,\n uri: source,\n scale: AssetSourceResolver.pickScale(this.asset.scales, PixelRatio.get()),\n };\n }\n\n static pickScale(scales: number[], deviceScale: number): number {\n for (let i = 0; i < scales.length; i++) {\n if (scales[i] >= deviceScale) {\n return scales[i];\n }\n }\n return scales[scales.length - 1] || 1;\n }\n}\n","const digitCharacters = [\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n '#',\n '$',\n '%',\n '*',\n '+',\n ',',\n '-',\n '.',\n ':',\n ';',\n '=',\n '?',\n '@',\n '[',\n ']',\n '^',\n '_',\n '{',\n '|',\n '}',\n '~',\n];\n\nexport const decode83 = (str: string) => {\n let value = 0;\n for (let i = 0; i < str.length; i++) {\n const c = str[i];\n const digit = digitCharacters.indexOf(c);\n value = value * 83 + digit;\n }\n return value;\n};\n\nexport const encode83 = (n: number, length: number): string => {\n let result = '';\n for (let i = 1; i <= length; i++) {\n const digit = (Math.floor(n) / Math.pow(83, length - i)) % 83;\n result += digitCharacters[Math.floor(digit)];\n }\n return result;\n};\n","import { decode83 } from './base83';\nimport { ValidationError } from './error';\nimport { sRGBToLinear, signPow, linearTosRGB } from './utils';\n\n/**\n * Returns an error message if invalid or undefined if valid\n * @param blurhash\n */\nconst validateBlurhash = (blurhash: string) => {\n if (!blurhash || blurhash.length < 6) {\n throw new ValidationError('The blurhash string must be at least 6 characters');\n }\n\n const sizeFlag = decode83(blurhash[0]);\n const numY = Math.floor(sizeFlag / 9) + 1;\n const numX = (sizeFlag % 9) + 1;\n\n if (blurhash.length !== 4 + 2 * numX * numY) {\n throw new ValidationError(\n `blurhash length mismatch: length is ${blurhash.length} but it should be ${\n 4 + 2 * numX * numY\n }`\n );\n }\n};\n\nexport const isBlurhashValid = (blurhash: string): { result: boolean; errorReason?: string } => {\n try {\n validateBlurhash(blurhash);\n } catch (error) {\n return { result: false, errorReason: error.message };\n }\n\n return { result: true };\n};\n\nconst decodeDC = (value: number) => {\n const intR = value >> 16;\n const intG = (value >> 8) & 255;\n const intB = value & 255;\n return [sRGBToLinear(intR), sRGBToLinear(intG), sRGBToLinear(intB)];\n};\n\nconst decodeAC = (value: number, maximumValue: number) => {\n const quantR = Math.floor(value / (19 * 19));\n const quantG = Math.floor(value / 19) % 19;\n const quantB = value % 19;\n\n const rgb = [\n signPow((quantR - 9) / 9, 2.0) * maximumValue,\n signPow((quantG - 9) / 9, 2.0) * maximumValue,\n signPow((quantB - 9) / 9, 2.0) * maximumValue,\n ];\n\n return rgb;\n};\n\nconst decode = (blurhash: string, width: number, height: number, punch?: number) => {\n validateBlurhash(blurhash);\n\n punch = (punch || 1) | 1;\n\n const sizeFlag = decode83(blurhash[0]);\n const numY = Math.floor(sizeFlag / 9) + 1;\n const numX = (sizeFlag % 9) + 1;\n\n const quantisedMaximumValue = decode83(blurhash[1]);\n const maximumValue = (quantisedMaximumValue + 1) / 166;\n\n const colors = new Array(numX * numY);\n\n for (let i = 0; i < colors.length; i++) {\n if (i === 0) {\n const value = decode83(blurhash.substring(2, 6));\n colors[i] = decodeDC(value);\n } else {\n const value = decode83(blurhash.substring(4 + i * 2, 6 + i * 2));\n colors[i] = decodeAC(value, maximumValue * punch);\n }\n }\n\n const bytesPerRow = width * 4;\n const pixels = new Uint8ClampedArray(bytesPerRow * height);\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let r = 0;\n let g = 0;\n let b = 0;\n\n for (let j = 0; j < numY; j++) {\n for (let i = 0; i < numX; i++) {\n const basis = Math.cos((Math.PI * x * i) / width) * Math.cos((Math.PI * y * j) / height);\n const color = colors[i + j * numX];\n r += color[0] * basis;\n g += color[1] * basis;\n b += color[2] * basis;\n }\n }\n\n const intR = linearTosRGB(r);\n const intG = linearTosRGB(g);\n const intB = linearTosRGB(b);\n\n pixels[4 * x + 0 + y * bytesPerRow] = intR;\n pixels[4 * x + 1 + y * bytesPerRow] = intG;\n pixels[4 * x + 2 + y * bytesPerRow] = intB;\n pixels[4 * x + 3 + y * bytesPerRow] = 255; // alpha\n }\n }\n return pixels;\n};\n\nexport default decode;\n","export class ValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ValidationError';\n this.message = message;\n }\n}\n","// adapted from https://gist.github.com/ngbrown/d62eb518753378eb0a9bf02bb4723235\n// modified from https://gist.github.com/WorldMaker/a3cbe0059acd827edee568198376b95a\n// https://github.com/woltapp/react-blurhash/issues/3\n\nimport { useEffect, useState } from 'react';\n\nimport decode from './decode';\n\nexport function useBlurhash(\n blurhash: string | undefined | null,\n width: number = 32,\n height: number = 32,\n punch: number = 1\n) {\n punch = punch || 1;\n\n const [url, setUrl] = useState(null);\n\n useEffect(() => {\n let isCanceled = false;\n\n if (!blurhash) return;\n\n const pixels = decode(blurhash, width, height, punch);\n\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n const imageData = context!.createImageData(width, height);\n imageData.data.set(pixels);\n context!.putImageData(imageData, 0, 0);\n canvas.toBlob((blob) => {\n if (!isCanceled) {\n setUrl((oldUrl) => {\n if (oldUrl) {\n URL.revokeObjectURL(oldUrl);\n }\n return blob ? URL.createObjectURL(blob) : oldUrl;\n });\n }\n });\n\n return function cleanupBlurhash() {\n isCanceled = true;\n setUrl((oldUrl) => {\n if (oldUrl) {\n URL.revokeObjectURL(oldUrl);\n }\n return null;\n });\n };\n }, [blurhash, height, width, punch]);\n\n return url;\n}\n","export const sRGBToLinear = (value: number) => {\n const v = value / 255;\n if (v <= 0.04045) {\n return v / 12.92;\n } else {\n return Math.pow((v + 0.055) / 1.055, 2.4);\n }\n};\n\nexport const linearTosRGB = (value: number) => {\n const v = Math.max(0, Math.min(1, value));\n if (v <= 0.0031308) {\n return Math.trunc(v * 12.92 * 255 + 0.5);\n } else {\n return Math.trunc((1.055 * Math.pow(v, 1 / 2.4) - 0.055) * 255 + 0.5);\n }\n};\n\nexport const sign = (n: number) => (n < 0 ? -1 : 1);\n\nexport const signPow = (val: number, exp: number) => sign(val) * Math.pow(Math.abs(val), exp);\n","import { getAssetByID } from 'react-native/Libraries/Image/AssetRegistry';\n\nimport AssetSourceResolver, { ResolvedAssetSource } from './AssetSourceResolver.web';\n\nlet _customSourceTransformer;\n\nexport function setCustomSourceTransformer(\n transformer: (resolver: AssetSourceResolver) => ResolvedAssetSource\n): void {\n _customSourceTransformer = transformer;\n}\n\n/**\n * `source` is either a number (opaque type returned by require('./foo.png'))\n * or an `ImageSource` like { uri: '' }\n */\nexport default function resolveAssetSource(source: any): ResolvedAssetSource | undefined {\n if (typeof source === 'object') {\n return source;\n }\n\n const asset = getAssetByID(source);\n if (!asset) {\n return undefined;\n }\n\n const resolver = new AssetSourceResolver('https://expo.dev', null, asset);\n if (_customSourceTransformer) {\n return _customSourceTransformer(resolver);\n }\n return resolver.defaultAsset();\n}\n\nObject.defineProperty(resolveAssetSource, 'setCustomSourceTransformer', {\n get() {\n return setCustomSourceTransformer;\n },\n});\n\nexport const { pickScale } = AssetSourceResolver;\n","import { ImageSource } from '../Image.types';\n\n/**\n * Converts a string in blurhash format (`blurhash:///`\n * or //) into an `ImageSource`.\n * Note: The blurhash:/ uri scheme is removed, because for backward compatibility reasons,\n * strings without a scheme are assumed to be `blurhash` by default.\n *\n * @return An ImageSource representing the provided blurhash.\n * */\nexport function resolveBlurhashString(str: string): ImageSource {\n const [blurhash, width, height] = str.replace(/^blurhash:\\//, '').split('/');\n return {\n uri: blurhash,\n width: parseInt(width, 10) || 16,\n height: parseInt(height, 10) || 16,\n };\n}\n\n/**\n * Converts a string in thumbhash format (`thumbhash:/` or ``)\n * into an `ImageSource`.\n * Note: Unlike the `resolveBlurhashString` the `thumbhash:/` scheme has to be present,\n * as the scheme has to be explicitly stated to be interpreted a `thumbhash` source.\n *\n * @return An ImageSource representing the provided thumbhash.\n * */\nexport function resolveThumbhashString(str: string): ImageSource {\n const hash = str.replace(/^thumbhash:\\//, '');\n return {\n uri: 'thumbhash:/' + hash,\n };\n}\n","import { ImageNativeProps, ImageProps, ImageSource } from '../Image.types';\nimport resolveAssetSource from './resolveAssetSource';\nimport { resolveBlurhashString, resolveThumbhashString } from './resolveHashString';\n\nexport function isBlurhashString(str: string): boolean {\n return /^(blurhash:\\/)?[\\w#$%*+,\\-.:;=?@[\\]^_{}|~]+(\\/[\\d.]+)*$/.test(str);\n}\n\n// Base64 strings will be recognized as blurhash by default (to keep compatibility),\n// interpret as thumbhash only if correct uri scheme is provided\nexport function isThumbhashString(str: string): boolean {\n return str.startsWith('thumbhash:/');\n}\n\nfunction resolveSource(source?: ImageSource | string | number | null): ImageSource | null {\n if (typeof source === 'string') {\n if (isBlurhashString(source)) {\n return resolveBlurhashString(source);\n } else if (isThumbhashString(source)) {\n return resolveThumbhashString(source);\n }\n return { uri: source };\n }\n if (typeof source === 'number') {\n return resolveAssetSource(source);\n }\n if (typeof source === 'object' && (source?.blurhash || source?.thumbhash)) {\n const { blurhash, thumbhash, ...restSource } = source;\n const resolved = thumbhash\n ? resolveThumbhashString(thumbhash)\n : resolveBlurhashString(blurhash as string);\n return {\n ...resolved,\n ...restSource,\n };\n }\n return source ?? null;\n}\n\n/**\n * Resolves provided `source` prop to an array of objects expected by the native implementation.\n */\nexport function resolveSources(sources?: ImageProps['source']): ImageNativeProps['source'] {\n if (Array.isArray(sources)) {\n return sources.map(resolveSource).filter(Boolean) as ImageSource[];\n }\n return [resolveSource(sources)].filter(Boolean) as ImageSource[];\n}\n","// Code copied and slightly modified from https://github.com/evanw/thumbhash\n\n/**\n * Encodes an RGBA image to a ThumbHash. RGB should not be premultiplied by A.\n *\n * @param w The width of the input image. Must be ≤100px.\n * @param h The height of the input image. Must be ≤100px.\n * @param rgba The pixels in the input image, row-by-row. Must have w*h*4 elements.\n * @returns The ThumbHash as a Uint8Array.\n */\n\nexport function rgbaToThumbHash(w: number, h: number, rgba: Uint8Array) {\n // Encoding an image larger than 100x100 is slow with no benefit\n if (w > 100 || h > 100) throw new Error(`${w}x${h} doesn't fit in 100x100`);\n const { PI, round, max, cos, abs } = Math;\n\n // Determine the average color\n let avg_r = 0,\n avg_g = 0,\n avg_b = 0,\n avg_a = 0;\n for (let i = 0, j = 0; i < w * h; i++, j += 4) {\n const alpha = rgba[j + 3] / 255;\n avg_r += (alpha / 255) * rgba[j];\n avg_g += (alpha / 255) * rgba[j + 1];\n avg_b += (alpha / 255) * rgba[j + 2];\n avg_a += alpha;\n }\n if (avg_a) {\n avg_r /= avg_a;\n avg_g /= avg_a;\n avg_b /= avg_a;\n }\n\n const hasAlpha = avg_a < w * h;\n const l_limit = hasAlpha ? 5 : 7; // Use fewer luminance bits if there's alpha\n const lx = max(1, round((l_limit * w) / max(w, h)));\n const ly = max(1, round((l_limit * h) / max(w, h)));\n const l: number[] = []; // luminance\n const p: number[] = []; // yellow - blue\n const q: number[] = []; // red - green\n const a: number[] = []; // alpha\n\n // Convert the image from RGBA to LPQA (composite atop the average color)\n for (let i = 0, j = 0; i < w * h; i++, j += 4) {\n const alpha = rgba[j + 3] / 255;\n const r = avg_r * (1 - alpha) + (alpha / 255) * rgba[j];\n const g = avg_g * (1 - alpha) + (alpha / 255) * rgba[j + 1];\n const b = avg_b * (1 - alpha) + (alpha / 255) * rgba[j + 2];\n l[i] = (r + g + b) / 3;\n p[i] = (r + g) / 2 - b;\n q[i] = r - g;\n a[i] = alpha;\n }\n\n // Encode using the DCT into DC (constant) and normalized AC (varying) terms\n const encodeChannel = (channel, nx, ny) => {\n let dc = 0;\n const ac: number[] = [];\n let scale = 0;\n const fx: number[] = [];\n for (let cy = 0; cy < ny; cy++) {\n for (let cx = 0; cx * ny < nx * (ny - cy); cx++) {\n let f = 0;\n for (let x = 0; x < w; x++) fx[x] = cos((PI / w) * cx * (x + 0.5));\n for (let y = 0; y < h; y++)\n for (let x = 0, fy = cos((PI / h) * cy * (y + 0.5)); x < w; x++)\n f += channel[x + y * w] * fx[x] * fy;\n f /= w * h;\n if (cx || cy) {\n ac.push(f);\n scale = max(scale, abs(f));\n } else {\n dc = f;\n }\n }\n }\n if (scale) for (let i = 0; i < ac.length; i++) ac[i] = 0.5 + (0.5 / scale) * ac[i];\n return [dc, ac, scale];\n };\n const [l_dc, l_ac, l_scale] = encodeChannel(l, max(3, lx), max(3, ly));\n const [p_dc, p_ac, p_scale] = encodeChannel(p, 3, 3);\n const [q_dc, q_ac, q_scale] = encodeChannel(q, 3, 3);\n const [a_dc, a_ac, a_scale] = hasAlpha ? encodeChannel(a, 5, 5) : [];\n\n // Write the constants\n const isLandscape = w > h;\n const header24 =\n round(63 * (l_dc as number)) |\n (round(31.5 + 31.5 * (p_dc as number)) << 6) |\n (round(31.5 + 31.5 * (q_dc as number)) << 12) |\n (round(31 * (l_scale as number)) << 18) |\n ((hasAlpha ? 1 : 0) << 23);\n const header16 =\n (isLandscape ? ly : lx) |\n (round(63 * (p_scale as number)) << 3) |\n (round(63 * (q_scale as number)) << 9) |\n ((isLandscape ? 1 : 0) << 15);\n const hash = [\n header24 & 255,\n (header24 >> 8) & 255,\n header24 >> 16,\n header16 & 255,\n header16 >> 8,\n ];\n const ac_start = hasAlpha ? 6 : 5;\n let ac_index = 0;\n if (hasAlpha) hash.push(round(15 * (a_dc as number)) | (round(15 * (a_scale as number)) << 4));\n\n // Write the varying factors\n for (const ac of hasAlpha ? [l_ac, p_ac, q_ac, a_ac] : [l_ac, p_ac, q_ac])\n for (const f of ac as number[])\n hash[ac_start + (ac_index >> 1)] |= round(15 * f) << ((ac_index++ & 1) << 2);\n return new Uint8Array(hash);\n}\n\n/**\n * Decodes a ThumbHash to an RGBA image. RGB is not be premultiplied by A.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The width, height, and pixels of the rendered placeholder image.\n */\nexport function thumbHashToRGBA(hash: Uint8Array) {\n const { PI, min, max, cos, round } = Math;\n\n // Read the constants\n const header24 = hash[0] | (hash[1] << 8) | (hash[2] << 16);\n const header16 = hash[3] | (hash[4] << 8);\n const l_dc = (header24 & 63) / 63;\n const p_dc = ((header24 >> 6) & 63) / 31.5 - 1;\n const q_dc = ((header24 >> 12) & 63) / 31.5 - 1;\n const l_scale = ((header24 >> 18) & 31) / 31;\n const hasAlpha = header24 >> 23;\n const p_scale = ((header16 >> 3) & 63) / 63;\n const q_scale = ((header16 >> 9) & 63) / 63;\n const isLandscape = header16 >> 15;\n const lx = max(3, isLandscape ? (hasAlpha ? 5 : 7) : header16 & 7);\n const ly = max(3, isLandscape ? header16 & 7 : hasAlpha ? 5 : 7);\n const a_dc = hasAlpha ? (hash[5] & 15) / 15 : 1;\n const a_scale = (hash[5] >> 4) / 15;\n\n // Read the varying factors (boost saturation by 1.25x to compensate for quantization)\n const ac_start = hasAlpha ? 6 : 5;\n let ac_index = 0;\n const decodeChannel = (nx, ny, scale) => {\n const ac: number[] = [];\n for (let cy = 0; cy < ny; cy++)\n for (let cx = cy ? 0 : 1; cx * ny < nx * (ny - cy); cx++)\n ac.push(\n (((hash[ac_start + (ac_index >> 1)] >> ((ac_index++ & 1) << 2)) & 15) / 7.5 - 1) * scale\n );\n return ac;\n };\n const l_ac = decodeChannel(lx, ly, l_scale);\n const p_ac = decodeChannel(3, 3, p_scale * 1.25);\n const q_ac = decodeChannel(3, 3, q_scale * 1.25);\n const a_ac = hasAlpha && decodeChannel(5, 5, a_scale);\n\n // Decode using the DCT into RGB\n const ratio = thumbHashToApproximateAspectRatio(hash);\n const w = round(ratio > 1 ? 32 : 32 * ratio);\n const h = round(ratio > 1 ? 32 / ratio : 32);\n const rgba = new Uint8Array(w * h * 4),\n fx: number[] = [],\n fy: number[] = [];\n for (let y = 0, i = 0; y < h; y++) {\n for (let x = 0; x < w; x++, i += 4) {\n let l = l_dc,\n p = p_dc,\n q = q_dc,\n a = a_dc;\n\n // Precompute the coefficients\n for (let cx = 0, n = max(lx, hasAlpha ? 5 : 3); cx < n; cx++)\n fx[cx] = cos((PI / w) * (x + 0.5) * cx);\n for (let cy = 0, n = max(ly, hasAlpha ? 5 : 3); cy < n; cy++)\n fy[cy] = cos((PI / h) * (y + 0.5) * cy);\n\n // Decode L\n for (let cy = 0, j = 0; cy < ly; cy++)\n for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx * ly < lx * (ly - cy); cx++, j++)\n l += l_ac[j] * fx[cx] * fy2;\n\n // Decode P and Q\n for (let cy = 0, j = 0; cy < 3; cy++) {\n for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx < 3 - cy; cx++, j++) {\n const f = fx[cx] * fy2;\n p += p_ac[j] * f;\n q += q_ac[j] * f;\n }\n }\n\n // Decode A\n if (hasAlpha)\n for (let cy = 0, j = 0; cy < 5; cy++)\n for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx < 5 - cy; cx++, j++)\n a += a_ac[j] * fx[cx] * fy2;\n\n // Convert to RGB\n const b = l - (2 / 3) * p;\n const r = (3 * l - b + q) / 2;\n const g = r - q;\n rgba[i] = max(0, 255 * min(1, r));\n rgba[i + 1] = max(0, 255 * min(1, g));\n rgba[i + 2] = max(0, 255 * min(1, b));\n rgba[i + 3] = max(0, 255 * min(1, a));\n }\n }\n return { w, h, rgba };\n}\n\n/**\n * Extracts the average color from a ThumbHash. RGB is not be premultiplied by A.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The RGBA values for the average color. Each value ranges from 0 to 1.\n */\nexport function thumbHashToAverageRGBA(hash: Uint8Array) {\n const { min, max } = Math;\n const header = hash[0] | (hash[1] << 8) | (hash[2] << 16);\n const l = (header & 63) / 63;\n const p = ((header >> 6) & 63) / 31.5 - 1;\n const q = ((header >> 12) & 63) / 31.5 - 1;\n const hasAlpha = header >> 23;\n const a = hasAlpha ? (hash[5] & 15) / 15 : 1;\n const b = l - (2 / 3) * p;\n const r = (3 * l - b + q) / 2;\n const g = r - q;\n return {\n r: max(0, min(1, r)),\n g: max(0, min(1, g)),\n b: max(0, min(1, b)),\n a,\n };\n}\n\n/**\n * Extracts the approximate aspect ratio of the original image.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The approximate aspect ratio (i.e. width / height).\n */\nexport function thumbHashToApproximateAspectRatio(hash: Uint8Array) {\n const header = hash[3];\n const hasAlpha = hash[2] & 0x80;\n const isLandscape = hash[4] & 0x80;\n const lx = isLandscape ? (hasAlpha ? 5 : 7) : header & 7;\n const ly = isLandscape ? header & 7 : hasAlpha ? 5 : 7;\n return lx / ly;\n}\n\n/**\n * Encodes an RGBA image to a PNG data URL. RGB should not be premultiplied by\n * A. This is optimized for speed and simplicity and does not optimize for size\n * at all. This doesn't do any compression (all values are stored uncompressed).\n *\n * @param w The width of the input image. Must be ≤100px.\n * @param h The height of the input image. Must be ≤100px.\n * @param rgba The pixels in the input image, row-by-row. Must have w*h*4 elements.\n * @returns A data URL containing a PNG for the input image.\n */\nexport function rgbaToDataURL(w: number, h: number, rgba: Uint8Array) {\n const row = w * 4 + 1;\n const idat = 6 + h * (5 + row);\n const bytes = [\n 137,\n 80,\n 78,\n 71,\n 13,\n 10,\n 26,\n 10,\n 0,\n 0,\n 0,\n 13,\n 73,\n 72,\n 68,\n 82,\n 0,\n 0,\n w >> 8,\n w & 255,\n 0,\n 0,\n h >> 8,\n h & 255,\n 8,\n 6,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n idat >>> 24,\n (idat >> 16) & 255,\n (idat >> 8) & 255,\n idat & 255,\n 73,\n 68,\n 65,\n 84,\n 120,\n 1,\n ];\n const table = [\n 0, 498536548, 997073096, 651767980, 1994146192, 1802195444, 1303535960, 1342533948, -306674912,\n -267414716, -690576408, -882789492, -1687895376, -2032938284, -1609899400, -1111625188,\n ];\n let a = 1,\n b = 0;\n for (let y = 0, i = 0, end = row - 1; y < h; y++, end += row - 1) {\n bytes.push(y + 1 < h ? 0 : 1, row & 255, row >> 8, ~row & 255, (row >> 8) ^ 255, 0);\n for (b = (b + a) % 65521; i < end; i++) {\n const u = rgba[i] & 255;\n bytes.push(u);\n a = (a + u) % 65521;\n b = (b + a) % 65521;\n }\n }\n bytes.push(\n b >> 8,\n b & 255,\n a >> 8,\n a & 255,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 73,\n 69,\n 78,\n 68,\n 174,\n 66,\n 96,\n 130\n );\n for (let [start, end] of [\n [12, 29],\n [37, 41 + idat],\n ]) {\n let c = ~0;\n for (let i = start; i < end; i++) {\n c ^= bytes[i];\n c = (c >>> 4) ^ table[c & 15];\n c = (c >>> 4) ^ table[c & 15];\n }\n c = ~c;\n bytes[end++] = c >>> 24;\n bytes[end++] = (c >> 16) & 255;\n bytes[end++] = (c >> 8) & 255;\n bytes[end++] = c & 255;\n }\n return 'data:image/png;base64,' + btoa(String.fromCharCode(...bytes));\n}\n\n/**\n * Decodes a ThumbHash to a PNG data URL. This is a convenience function that\n * just calls \"thumbHashToRGBA\" followed by \"rgbaToDataURL\".\n *\n * @param hash The bytes of the ThumbHash.\n * @returns A data URL containing a PNG for the rendered ThumbHash.\n */\nexport function thumbHashToDataURL(hash: Uint8Array): string {\n const image = thumbHashToRGBA(hash);\n return rgbaToDataURL(image.w, image.h, image.rgba);\n}\n\n/**\n * Convenience function added to the original thumbhash code, allows generating a thumbhash image directly from\n * thumbhash string.\n * @param thumbhash string from which thumbhashDataURL should be generated\n * @returns A data URL containing a PNG for the rendered ThumbHash\n */\nexport function thumbHashStringToDataURL(thumbhash: string): string {\n const hash = Uint8Array.from(atob(thumbhash), (c) => c.charCodeAt(0));\n return thumbHashToDataURL(hash);\n}\n","import React from 'react';\n\nimport { ImageTransition } from '../Image.types';\n\ntype Callbacks = {\n onReady?: (() => void) | null;\n onAnimationFinished?: (() => void) | null;\n onMount?: (() => void) | null;\n onError?: (() => void) | null;\n};\n\nexport type AnimationManagerNode = [\n key: string,\n renderFunction: (\n renderProps: NonNullable\n ) => (className: string, style: React.CSSProperties) => React.ReactElement\n];\n\nconst SUPPORTED_ANIMATIONS: ImageTransition['effect'][] = [\n 'cross-dissolve',\n 'flip-from-left',\n 'flip-from-right',\n 'flip-from-top',\n 'flip-from-bottom',\n];\n\ntype NodeStatus = 'mounted' | 'in' | 'active' | 'out' | 'errored';\n\nfunction useAnimationManagerNode(node: AnimationManagerNode | null, initialStatus?: NodeStatus) {\n const newNode = React.useMemo(() => {\n if (!node) {\n return null;\n }\n const [animationKey, renderFunction] = node;\n // key, ReactElement, ref, callbacks\n return {\n animationKey,\n persistedElement: renderFunction,\n status: (initialStatus || 'mounted') as NodeStatus,\n };\n }, [node?.[0]]);\n return newNode;\n}\n\nfunction validateTimingFunctionForAnimation(\n animationClass: ImageTransition['effect'],\n timingFunction: ImageTransition['timing']\n) {\n if (animationClass?.includes('flip')) {\n if (timingFunction?.includes('ease')) {\n return 'ease-in-out';\n }\n return 'linear';\n }\n return timingFunction || null;\n}\n\nfunction validateAnimationClass(effect: ImageTransition['effect']) {\n if (SUPPORTED_ANIMATIONS.includes(effect)) {\n return effect;\n }\n return 'cross-dissolve';\n}\n\nexport function getAnimatorFromTransition(transition: ImageTransition | null | undefined) {\n if (!transition?.duration) {\n return null;\n }\n const animationClass = validateAnimationClass(transition.effect);\n if (!animationClass) {\n return {\n startingClass: '',\n animateInClass: '',\n animateOutClass: '',\n containerClass: '',\n timingFunction: 'linear',\n animationClass: '',\n duration: 0,\n };\n }\n\n const timingFunction = validateTimingFunctionForAnimation(animationClass, transition.timing);\n const timingClass = `image-timing-${timingFunction}`;\n\n return {\n startingClass: `${animationClass}-start`,\n animateInClass: [animationClass, 'transitioning', `${animationClass}-active`, timingClass].join(\n ' '\n ),\n animateOutClass: [animationClass, `${animationClass}-end`, timingClass].join(' '),\n containerClass: `${animationClass}-container`,\n timingFunction,\n animationClass,\n duration: transition?.duration || 0,\n };\n}\n\ntype MountedAnimationNode = {\n animationKey: string;\n persistedElement: (\n renderProps: Callbacks\n ) => (className: string, style: React.CSSProperties) => React.ReactElement;\n status: NodeStatus;\n};\n\nexport default function AnimationManager({\n children: renderFunction,\n initial,\n transition,\n recyclingKey,\n}: {\n children: AnimationManagerNode;\n initial: AnimationManagerNode | null;\n transition: ImageTransition | null | undefined;\n recyclingKey?: string | null | undefined;\n}) {\n const animation = getAnimatorFromTransition(transition);\n\n const initialNode = useAnimationManagerNode(initial, 'active');\n\n const [nodes, setNodes] = React.useState(\n initialNode ? [initialNode] : []\n );\n\n const [prevRecyclingKey, setPrevRecyclingKey] = React.useState(recyclingKey ?? '');\n if (prevRecyclingKey !== (recyclingKey ?? '')) {\n setPrevRecyclingKey(recyclingKey ?? '');\n setNodes(initialNode ? [initialNode] : []);\n }\n\n const removeAllNodesOfKeyExceptShowing = (key?: string) => {\n setNodes((n) =>\n n.filter(\n (node) =>\n (key ? node.animationKey !== key : false) ||\n node.status === 'in' ||\n node.status === 'active'\n )\n );\n };\n\n const newNode = useAnimationManagerNode(renderFunction);\n\n React.useEffect(() => {\n setNodes((n) => {\n if (!newNode) {\n return n;\n }\n const existingNodeIndex = n.findIndex((node) => node.animationKey === newNode.animationKey);\n if (existingNodeIndex >= 0) {\n if (animation) {\n return n.map((n2) =>\n n2.animationKey === newNode.animationKey\n ? { ...newNode, status: 'in' }\n : { ...n2, status: 'out' }\n );\n } else {\n return [{ ...newNode, status: 'in' }];\n }\n }\n return [...n, newNode];\n });\n }, [newNode]);\n\n function wrapNodeWithCallbacks(node: MountedAnimationNode) {\n if (renderFunction[0] === node.animationKey) {\n return renderFunction[1]({\n onReady: () => {\n if (animation) {\n setNodes((nodes) =>\n nodes.map((n) => (n === newNode ? { ...n, status: 'in' } : { ...n, status: 'out' }))\n );\n } else {\n setNodes([{ ...node, status: 'in' }]);\n }\n },\n onAnimationFinished: () => {\n setNodes([{ ...node, status: 'in' }]);\n },\n onError: () => {\n setNodes((nodes) => nodes.map((n) => (n === node ? { ...n, status: 'errored' } : n)));\n },\n });\n }\n if (initial?.[0] === node.animationKey) {\n return initial[1]({\n onAnimationFinished: () => {\n if (node.status === 'out') {\n removeAllNodesOfKeyExceptShowing(node.animationKey);\n }\n },\n onError: () => {\n setNodes((nodes) => nodes.map((n) => (n === node ? { ...n, status: 'errored' } : n)));\n },\n });\n }\n return node.persistedElement({\n onAnimationFinished: () => {\n removeAllNodesOfKeyExceptShowing(node.animationKey);\n },\n });\n }\n const styles = {\n transitionDuration: `${animation?.duration || 0}ms`,\n transitionTimingFunction: animation?.timingFunction || 'linear',\n };\n const classes = {\n in: animation?.animateInClass,\n out: animation?.animateOutClass,\n mounted: animation?.startingClass,\n };\n\n return (\n <>\n {[...nodes]\n .filter((n) => n.status !== 'errored')\n .map((n) => (\n
\n {wrapNodeWithCallbacks(n)(classes[n.status], styles)}\n
\n ))}\n \n );\n}\n","import React, { CSSProperties, SyntheticEvent, useEffect, Ref, useMemo } from 'react';\n\nimport {\n ImageContentPositionObject,\n ImageContentPositionValue,\n ImageNativeProps,\n ImageSource,\n} from '../Image.types';\nimport { useBlurhash } from '../utils/blurhash/useBlurhash';\nimport { isBlurhashString, isThumbhashString } from '../utils/resolveSources';\nimport { thumbHashStringToDataURL } from '../utils/thumbhash/thumbhash';\n\nfunction ensureUnit(value: string | number) {\n const trimmedValue = String(value).trim();\n if (trimmedValue.endsWith('%')) {\n return trimmedValue;\n }\n return `${trimmedValue}px`;\n}\n\ntype KeysOfUnion = T extends T ? keyof T : never;\n\nfunction getObjectPositionFromContentPositionObject(\n contentPosition?: ImageContentPositionObject\n): string {\n const resolvedPosition = { ...contentPosition } as Record<\n KeysOfUnion,\n ImageContentPositionValue\n >;\n if (!resolvedPosition) {\n return '50% 50%';\n }\n if (resolvedPosition.top == null && resolvedPosition.bottom == null) {\n resolvedPosition.top = '50%';\n }\n if (resolvedPosition.left == null && resolvedPosition.right == null) {\n resolvedPosition.left = '50%';\n }\n\n return (\n ['top', 'bottom', 'left', 'right']\n .map((key) => {\n if (key in resolvedPosition) {\n return `${key} ${ensureUnit(resolvedPosition[key])}`;\n }\n return '';\n })\n .join(' ') || '50% 50%'\n );\n}\n\nfunction getFetchPriorityFromImagePriority(priority: ImageNativeProps['priority'] = 'normal') {\n return priority && ['low', 'high'].includes(priority) ? priority : 'auto';\n}\n\nconst ImageWrapper = React.forwardRef(\n (\n {\n source,\n events,\n contentPosition,\n hashPlaceholderContentPosition,\n priority,\n style,\n hashPlaceholderStyle,\n className,\n accessibilityLabel,\n ...props\n }: {\n source?: ImageSource | null;\n events?: {\n onLoad?: (((event: SyntheticEvent) => void) | undefined | null)[];\n onError?: ((({ source }: { source: ImageSource | null }) => void) | undefined | null)[];\n onTransitionEnd?: ((() => void) | undefined | null)[];\n onMount?: ((() => void) | undefined | null)[];\n };\n contentPosition?: ImageContentPositionObject;\n hashPlaceholderContentPosition?: ImageContentPositionObject;\n priority?: string | null;\n style: CSSProperties;\n hashPlaceholderStyle?: CSSProperties;\n className?: string;\n accessibilityLabel?: string;\n },\n ref: Ref\n ) => {\n useEffect(() => {\n events?.onMount?.forEach((e) => e?.());\n }, []);\n const isBlurhash = isBlurhashString(source?.uri || '');\n const isThumbhash = isThumbhashString(source?.uri || '');\n const isHash = isBlurhash || isThumbhash;\n\n // Thumbhash uri always has to start with 'thumbhash:/'\n const thumbhash = source?.uri?.replace(/thumbhash:\\//, '');\n const thumbhashUri = useMemo(\n () => (isThumbhash ? thumbHashStringToDataURL(thumbhash ?? '') : null),\n [thumbhash]\n );\n\n const blurhashUri = useBlurhash(isBlurhash ? source?.uri : null, source?.width, source?.height);\n const objectPosition = getObjectPositionFromContentPositionObject(\n isHash ? hashPlaceholderContentPosition : contentPosition\n );\n\n const uri = isHash ? blurhashUri ?? thumbhashUri : source?.uri;\n if (!uri) return null;\n return (\n {\n if (typeof window !== 'undefined') {\n // this ensures the animation will run, since the starting class is applied at least 1 frame before the target class set in the onLoad event callback\n window.requestAnimationFrame(() => {\n events?.onLoad?.forEach((e) => e?.(event));\n });\n } else {\n events?.onLoad?.forEach((e) => e?.(event));\n }\n }}\n onTransitionEnd={() => events?.onTransitionEnd?.forEach((e) => e?.())}\n onError={() => events?.onError?.forEach((e) => e?.({ source: source || null }))}\n />\n );\n }\n);\nexport default ImageWrapper;\n","const style = `\n.expo-image-container .cross-dissolve {\n transition-property: opacity;\n animation-fill-mode: forwards;\n}\n.expo-image-container .cross-dissolve-start:not(.transitioning) {\n opacity: 0;\n}\n.expo-image-container .cross-dissolve-active {\n opacity: 1;\n}\n.expo-image-container .cross-dissolve-end {\n opacity: 0;\n}\n.expo-image-container .flip-from-left {\n transition-property: transform, opacity;\n transition-timing-function: var(--expo-image-timing,linear), steps(2, jump-none) !important;\n transform-origin: center;\n\n}\n.expo-image-container .flip-from-left-container {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n perspective: 1000px;\n}\n.expo-image-container .flip-from-left-start:not(.transitioning) {\n transform: translateZ(calc(var(--expo-image-width,1000px) * -1.25)) rotateY(-180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-left-active {\n transform: translateZ(0px) rotateY(0) ;\n opacity:1;\n}\n.expo-image-container .flip-from-left-end {\n transform: translateZ(calc(var(--expo-image-width,1000px) * -1.25)) rotateY(180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-right {\n transition-property: transform, opacity;\n transition-timing-function: var(--expo-image-timing,linear), steps(2, jump-none) !important;\n transform-origin: center;\n}\n.expo-image-container .flip-from-right-container {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n perspective: 1000px;\n}\n.expo-image-container .flip-from-right-start:not(.transitioning) {\n transform: translateZ(calc(var(--expo-image-width,1000px) * -1.25)) rotateY(180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-right-active {\n transform: translateZ(0px) rotateY(0) ;\n opacity:1;\n}\n.expo-image-container .flip-from-right-end {\n transform: translateZ(calc(var(--expo-image-width,1000px) * -1.25)) rotateY(-180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-top {\n transition-property: transform, opacity;\n transition-timing-function: var(--expo-image-timing,linear), steps(2, jump-none) !important;\n transform-origin: center;\n}\n.expo-image-container .flip-from-top-container {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n perspective: 1000px;\n}\n.expo-image-container .flip-from-top-start:not(.transitioning) {\n transform: translateZ(calc(var(--expo-image-height,1000px) * -1.5)) rotateX(180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-top-active {\n transform: translateZ(0px) rotateX(0) ;\n opacity:1;\n}\n.expo-image-container .flip-from-top-end {\n transform: translateZ(calc(var(--expo-image-height,1000px) * -1.5)) rotateX(-180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-bottom {\n transition-property: transform, opacity;\n transition-timing-function: var(--expo-image-timing,linear), steps(2, jump-none) !important;\n transform-origin: center;\n}\n.expo-image-container .flip-from-bottom-container {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n perspective: 1000px;\n}\n.expo-image-container .flip-from-bottom-start:not(.transitioning) {\n transform: translateZ(calc(var(--expo-image-height,1000px) * -1.25)) rotateX(-180deg);\n opacity: 0;\n}\n.expo-image-container .flip-from-bottom-active {\n transform: translateZ(0px) rotateX(0) ;\n opacity:1;\n}\n.expo-image-container .flip-from-bottom-end {\n transform: translateZ(calc(var(--expo-image-height,1000px) * -1.25)) rotateX(180deg);\n opacity: 0;\n}\n.expo-image-container .image-timing-linear {\n --expo-image-timing: linear;\n}\n.expo-image-container .image-timing-ease-in {\n --expo-image-timing: ease-in;\n}\n.expo-image-container .image-timing-ease-out {\n --expo-image-timing: ease-out;\n}\n.expo-image-container .image-timing-ease-in-out {\n --expo-image-timing: ease-in-out;\n}\n`;\nexport default function loadStyle() {\n if (typeof document !== 'undefined') {\n const styleTag = document.createElement('style');\n styleTag.innerHTML = style;\n document.head.appendChild(styleTag);\n }\n}\n","import React, { useState, useRef } from 'react';\n\nimport { ImageProps, ImageSource } from '../Image.types';\n\nfunction findBestSourceForSize(\n sources: ImageSource[] | undefined,\n size: DOMRect | null\n): ImageSource | null {\n return (\n [...(sources || [])]\n // look for the smallest image that's still larger then a container\n ?.map((source) => {\n if (!size) {\n return { source, penalty: 0, covers: false };\n }\n const { width, height } =\n typeof source === 'object' ? source : { width: null, height: null };\n if (width == null || height == null) {\n return { source, penalty: 0, covers: false };\n }\n if (width < size.width || height < size.height) {\n return {\n source,\n penalty: Math.max(size.width - width, size.height - height),\n covers: false,\n };\n }\n return { source, penalty: (width - size.width) * (height - size.height), covers: true };\n })\n .sort((a, b) => a.penalty - b.penalty)\n .sort((a, b) => Number(b.covers) - Number(a.covers))[0]?.source ?? null\n );\n}\n\nexport default function useSourceSelection(\n sources?: ImageSource[],\n sizeCalculation: ImageProps['responsivePolicy'] = 'live',\n measurementCallback?: (target: HTMLElement, size: DOMRect) => void\n) {\n const hasMoreThanOneSource = (sources?.length ?? 0) > 1;\n // null - not calculated yet, DOMRect - size available\n const [size, setSize] = useState(null);\n const resizeObserver = useRef(null);\n\n React.useEffect(() => {\n return () => {\n resizeObserver.current?.disconnect();\n };\n }, []);\n\n const containerRef = React.useCallback(\n (element: HTMLDivElement) => {\n if (!hasMoreThanOneSource && !measurementCallback) {\n return;\n }\n const rect = element?.getBoundingClientRect();\n measurementCallback?.(element, rect);\n setSize(rect);\n\n if (sizeCalculation === 'live') {\n resizeObserver.current?.disconnect();\n if (!element) {\n return;\n }\n resizeObserver.current = new ResizeObserver((entries) => {\n setSize(entries[0].contentRect);\n measurementCallback?.(entries[0].target as any, entries[0].contentRect);\n });\n resizeObserver.current.observe(element);\n }\n },\n [hasMoreThanOneSource, sizeCalculation]\n );\n\n const bestSourceForSize = size !== undefined ? findBestSourceForSize(sources, size) : null;\n const source = (hasMoreThanOneSource ? bestSourceForSize : sources?.[0]) ?? null;\n\n return React.useMemo(\n () => ({\n containerRef,\n source,\n }),\n [source]\n );\n}\n","import { CodedError, Platform, Subscription } from 'expo-modules-core';\n\nimport { KeepAwakeEventState, KeepAwakeListener } from './KeepAwake.types';\n\nconst wakeLockMap: Record = {};\n\ntype WakeLockSentinel = {\n onrelease: null | ((event: any) => void);\n released: boolean;\n type: 'screen';\n release?: Function;\n\n addEventListener?: (event: string, listener: (event: any) => void) => void;\n removeEventListener?: (event: string, listener: (event: any) => void) => void;\n};\n\ndeclare const navigator: {\n wakeLock: {\n request(type: 'screen'): Promise;\n };\n};\n\n/** Wraps the webWakeLock API https://developer.mozilla.org/en-US/docs/Web/API/Screen_Wake_Lock_API */\nexport default {\n async isAvailableAsync() {\n if (Platform.isDOMAvailable) {\n return 'wakeLock' in navigator;\n }\n return false;\n },\n async activate(tag: string) {\n if (!Platform.isDOMAvailable) {\n return;\n }\n const wakeLock = await navigator.wakeLock.request('screen');\n wakeLockMap[tag] = wakeLock;\n },\n async deactivate(tag: string) {\n if (!Platform.isDOMAvailable) {\n return;\n }\n if (wakeLockMap[tag]) {\n wakeLockMap[tag].release?.();\n delete wakeLockMap[tag];\n } else {\n throw new CodedError(\n 'ERR_KEEP_AWAKE_TAG_INVALID',\n `The wake lock with tag ${tag} has not activated yet`\n );\n }\n },\n addListenerForTag(tag: string, listener: KeepAwakeListener): Subscription {\n const eventListener = () => {\n listener({ state: KeepAwakeEventState.RELEASE });\n };\n const sentinel = wakeLockMap[tag];\n if (sentinel) {\n if ('addEventListener' in sentinel) {\n sentinel.addEventListener?.('release', eventListener);\n } else {\n sentinel.onrelease = eventListener;\n }\n }\n return {\n remove: () => {\n const sentinel = wakeLockMap[tag];\n if (sentinel) {\n if (sentinel.removeEventListener) {\n sentinel.removeEventListener('release', eventListener);\n } else {\n sentinel.onrelease = null;\n }\n }\n },\n };\n },\n};\n","// @needsAudit\nexport type KeepAwakeEvent = {\n /** Keep awake state. */\n state: KeepAwakeEventState;\n};\n\n// @needsAudit\nexport enum KeepAwakeEventState {\n RELEASE = 'release',\n}\n\n// @needsAudit\nexport type KeepAwakeListener = (event: KeepAwakeEvent) => void;\n\nexport type KeepAwakeOptions = {\n /**\n * The call will throw an unhandled promise rejection on Android when the original Activity is dead or deactivated.\n * Set the value to `true` for suppressing the uncaught exception.\n */\n suppressDeactivateWarnings?: boolean;\n\n /**\n * A callback that is invoked when the keep-awake state changes.\n * @platform web\n */\n listener?: KeepAwakeListener;\n};\n","import { Subscription, UnavailabilityError } from 'expo-modules-core';\nimport { useEffect } from 'react';\n\nimport ExpoKeepAwake from './ExpoKeepAwake';\nimport { KeepAwakeListener, KeepAwakeOptions } from './KeepAwake.types';\n\n/** Default tag, used when no tag has been specified in keep awake method calls. */\nexport const ExpoKeepAwakeTag = 'ExpoKeepAwakeDefaultTag';\n\n/** @returns `true` on all platforms except [unsupported web browsers](https://caniuse.com/wake-lock). */\nexport async function isAvailableAsync(): Promise {\n if (ExpoKeepAwake.isAvailableAsync) {\n return await ExpoKeepAwake.isAvailableAsync();\n }\n return true;\n}\n\n/**\n * A React hook to keep the screen awake for as long as the owner component is mounted.\n * The optionally provided `tag` argument is used when activating and deactivating the keep-awake\n * feature. If unspecified, the default `tag` is used. See the documentation for `activateKeepAwakeAsync`\n * below to learn more about the `tag` argument.\n *\n * @param tag Tag to lock screen sleep prevention. If not provided, the default tag is used.\n * @param options Additional options for the keep awake hook.\n */\nexport function useKeepAwake(tag: string = ExpoKeepAwakeTag, options?: KeepAwakeOptions): void {\n useEffect(() => {\n let isMounted = true;\n activateKeepAwakeAsync(tag).then(() => {\n if (isMounted && ExpoKeepAwake.addListenerForTag && options?.listener) {\n addListener(tag, options.listener);\n }\n });\n return () => {\n isMounted = false;\n if (options?.suppressDeactivateWarnings) {\n deactivateKeepAwake(tag).catch(() => {});\n } else {\n deactivateKeepAwake(tag);\n }\n };\n }, [tag]);\n}\n\n// @needsAudit\n/**\n * Prevents the screen from sleeping until `deactivateKeepAwake` is called with the same `tag` value.\n *\n * If the `tag` argument is specified, the screen will not sleep until you call `deactivateKeepAwake`\n * with the same `tag` argument. When using multiple `tags` for activation you'll have to deactivate\n * each one in order to re-enable screen sleep. If tag is unspecified, the default `tag` is used.\n *\n * Web support [is limited](https://caniuse.com/wake-lock).\n *\n * @param tag Tag to lock screen sleep prevention. If not provided, the default tag is used.\n * @deprecated use `activateKeepAwakeAsync` instead.\n */\nexport function activateKeepAwake(tag: string = ExpoKeepAwakeTag): Promise {\n console.warn('`activateKeepAwake` is deprecated. Use `activateKeepAwakeAsync` instead.');\n return activateKeepAwakeAsync(tag);\n}\n\n// @needsAudit\n/**\n * Prevents the screen from sleeping until `deactivateKeepAwake` is called with the same `tag` value.\n *\n * If the `tag` argument is specified, the screen will not sleep until you call `deactivateKeepAwake`\n * with the same `tag` argument. When using multiple `tags` for activation you'll have to deactivate\n * each one in order to re-enable screen sleep. If tag is unspecified, the default `tag` is used.\n *\n * Web support [is limited](https://caniuse.com/wake-lock).\n *\n * @param tag Tag to lock screen sleep prevention. If not provided, the default tag is used.\n */\nexport async function activateKeepAwakeAsync(tag: string = ExpoKeepAwakeTag): Promise {\n await ExpoKeepAwake.activate?.(tag);\n}\n\n// @needsAudit\n/**\n * Releases the lock on screen-sleep prevention associated with the given `tag` value. If `tag`\n * is unspecified, it defaults to the same default tag that `activateKeepAwake` uses.\n *\n * @param tag Tag to release the lock on screen sleep prevention. If not provided,\n * the default tag is used.\n */\nexport async function deactivateKeepAwake(tag: string = ExpoKeepAwakeTag): Promise {\n await ExpoKeepAwake.deactivate?.(tag);\n}\n\n/**\n * Observe changes to the keep awake timer.\n * On web, this changes when navigating away from the active window/tab. No-op on native.\n * @platform web\n *\n * @example\n * ```ts\n * KeepAwake.addListener(({ state }) => {\n * // ...\n * });\n * ```\n */\nexport function addListener(\n tagOrListener: string | KeepAwakeListener,\n listener?: KeepAwakeListener\n): Subscription {\n // Assert so the type is non-nullable.\n if (!ExpoKeepAwake.addListenerForTag) {\n throw new UnavailabilityError('ExpoKeepAwake', 'addListenerForTag');\n }\n\n const tag = typeof tagOrListener === 'string' ? tagOrListener : ExpoKeepAwakeTag;\n const _listener = typeof tagOrListener === 'function' ? tagOrListener : listener;\n\n return ExpoKeepAwake.addListenerForTag(tag, _listener);\n}\n\nexport * from './KeepAwake.types';\n","import * as React from 'react';\nimport { Platform, processColor, ViewProps } from 'react-native';\n\nimport NativeLinearGradient from './NativeLinearGradient';\nimport { NativeLinearGradientPoint } from './NativeLinearGradient.types';\n\n// @needsAudit\n/**\n * An object `{ x: number; y: number }` or array `[x, y]` that represents the point\n * at which the gradient starts or ends, as a fraction of the overall size of the gradient ranging\n * from `0` to `1`, inclusive.\n */\nexport type LinearGradientPoint =\n | {\n /**\n * A number ranging from `0` to `1`, representing the position of gradient transformation.\n */\n x: number;\n /**\n * A number ranging from `0` to `1`, representing the position of gradient transformation.\n */\n y: number;\n }\n | NativeLinearGradientPoint;\n\n// @needsAudit\nexport type LinearGradientProps = ViewProps & {\n /**\n * An array of colors that represent stops in the gradient. At least two colors are required\n * (for a single-color background, use the `style.backgroundColor` prop on a `View` component).\n */\n colors: string[];\n /**\n * An array that contains `number`s ranging from `0` to `1`, inclusive, and is the same length as the `colors` property.\n * Each number indicates a color-stop location where each respective color should be located.\n * If not specified, the colors will be distributed evenly across the gradient.\n *\n * For example, `[0.5, 0.8]` would render:\n * - the first color, solid, from the beginning of the gradient view to 50% through (the middle);\n * - a gradient from the first color to the second from the 50% point to the 80% point; and\n * - the second color, solid, from the 80% point to the end of the gradient view.\n *\n * > The color-stop locations must be ascending from least to greatest.\n * @default []\n */\n locations?: number[] | null;\n /**\n * For example, `{ x: 0.1, y: 0.2 }` means that the gradient will start `10%` from the left and `20%` from the top.\n *\n * **On web**, this only changes the angle of the gradient because CSS gradients don't support changing the starting position.\n * @default { x: 0.5, y: 0.0 }\n */\n start?: LinearGradientPoint | null;\n /**\n * For example, `{ x: 0.1, y: 0.2 }` means that the gradient will end `10%` from the left and `20%` from the bottom.\n *\n * **On web**, this only changes the angle of the gradient because CSS gradients don't support changing the end position.\n * @default { x: 0.5, y: 1.0 }\n */\n end?: LinearGradientPoint | null;\n};\n\n/**\n * Renders a native view that transitions between multiple colors in a linear direction.\n */\nexport class LinearGradient extends React.Component {\n render() {\n const { colors, locations, start, end, ...props } = this.props;\n let resolvedLocations = locations;\n if (locations && colors.length !== locations.length) {\n console.warn('LinearGradient colors and locations props should be arrays of the same length');\n resolvedLocations = locations.slice(0, colors.length);\n }\n\n return (\n \n );\n }\n}\n\nfunction _normalizePoint(\n point: LinearGradientPoint | null | undefined\n): NativeLinearGradientPoint | undefined {\n if (!point) {\n return undefined;\n }\n\n if (Array.isArray(point) && point.length !== 2) {\n console.warn('start and end props for LinearGradient must be of the format [x,y] or {x, y}');\n return undefined;\n }\n\n return Array.isArray(point) ? point : [point.x, point.y];\n}\n","import * as React from 'react';\nimport { View } from 'react-native';\n\nimport { NativeLinearGradientPoint, NativeLinearGradientProps } from './NativeLinearGradient.types';\nimport { normalizeColor } from './normalizeColor';\n\nexport default function NativeLinearGradient({\n colors,\n locations,\n startPoint,\n endPoint,\n ...props\n}: NativeLinearGradientProps): React.ReactElement {\n const [{ height, width }, setLayout] = React.useState({\n height: 1,\n width: 1,\n });\n\n // TODO(Bacon): In the future we could consider adding `backgroundRepeat: \"no-repeat\"`. For more\n // browser support.\n const linearGradientBackgroundImage = React.useMemo(() => {\n return getLinearGradientBackgroundImage(colors, locations, startPoint, endPoint, width, height);\n }, [colors, locations, startPoint, endPoint, width, height]);\n\n return (\n {\n const { width, height } = event.nativeEvent.layout;\n\n setLayout((oldLayout) => {\n // don't set new layout state unless the layout has actually changed\n if (width !== oldLayout.width || height !== oldLayout.height) {\n return { height, width };\n }\n\n return oldLayout;\n });\n\n if (props.onLayout) {\n props.onLayout(event);\n }\n }}\n />\n );\n}\n\n/**\n * Extracted to a separate function in order to be able to test logic independently.\n */\nexport function getLinearGradientBackgroundImage(\n colors: number[] | string[],\n locations?: number[] | null,\n startPoint?: NativeLinearGradientPoint | null,\n endPoint?: NativeLinearGradientPoint | null,\n width: number = 1,\n height: number = 1\n) {\n const gradientColors = calculateGradientColors(colors, locations);\n const angle = calculatePseudoAngle(width, height, startPoint, endPoint);\n return `linear-gradient(${angle}deg, ${gradientColors.join(', ')})`;\n}\n\nfunction calculatePseudoAngle(\n width: number,\n height: number,\n startPoint?: NativeLinearGradientPoint | null,\n endPoint?: NativeLinearGradientPoint | null\n) {\n const getControlPoints = (): NativeLinearGradientPoint[] => {\n let correctedStartPoint: NativeLinearGradientPoint = [0, 0];\n if (Array.isArray(startPoint)) {\n correctedStartPoint = [\n startPoint[0] != null ? startPoint[0] : 0.0,\n startPoint[1] != null ? startPoint[1] : 0.0,\n ];\n }\n let correctedEndPoint: NativeLinearGradientPoint = [0.0, 1.0];\n if (Array.isArray(endPoint)) {\n correctedEndPoint = [\n endPoint[0] != null ? endPoint[0] : 0.0,\n endPoint[1] != null ? endPoint[1] : 1.0,\n ];\n }\n return [correctedStartPoint, correctedEndPoint];\n };\n\n const [start, end] = getControlPoints();\n start[0] *= width;\n end[0] *= width;\n start[1] *= height;\n end[1] *= height;\n const py = end[1] - start[1];\n const px = end[0] - start[0];\n\n return 90 + (Math.atan2(py, px) * 180) / Math.PI;\n}\n\nfunction calculateGradientColors(colors: number[] | string[], locations?: number[] | null) {\n return colors.map((color: number | string, index: number): string | void => {\n const output = normalizeColor(color);\n if (locations && locations[index]) {\n const location = Math.max(0, Math.min(1, locations[index]));\n // Convert 0...1 to 0...100\n const percentage = location * 100;\n return `${output} ${percentage}%`;\n }\n return output;\n });\n}\n","/**\n * Copyright (c) Expo.\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { processColor } from 'react-native';\n\nconst isWebColor = (color: string): boolean =>\n color === 'currentcolor' ||\n color === 'currentColor' ||\n color === 'inherit' ||\n color.indexOf('var(') === 0;\n\nexport function normalizeColor(color?: number | string, opacity: number = 1): void | string {\n if (color == null) return;\n\n if (typeof color === 'string' && isWebColor(color)) {\n return color;\n }\n\n const colorInt = processColor(color) as number | undefined;\n if (colorInt != null) {\n const r = (colorInt >> 16) & 255;\n const g = (colorInt >> 8) & 255;\n const b = colorInt & 255;\n const a = ((colorInt >> 24) & 255) / 255;\n const alpha = (a * opacity).toFixed(2);\n return `rgba(${r},${g},${b},${alpha})`;\n }\n}\n","import { Platform } from 'expo-modules-core';\nimport invariant from 'invariant';\n\nimport { NativeURLListener, URLListener } from './Linking.types';\n\nconst EventTypes = ['url'];\n\nconst listeners: { listener: URLListener; nativeListener: NativeURLListener }[] = [];\n\nexport default {\n addEventListener(type: 'url', listener: URLListener): { remove(): void } {\n // Do nothing in Node.js environments\n if (!Platform.isDOMAvailable) {\n return { remove() {} };\n }\n\n invariant(\n EventTypes.indexOf(type) !== -1,\n `Linking.addEventListener(): ${type} is not a valid event`\n );\n const nativeListener: NativeURLListener = (nativeEvent) =>\n listener({ url: window.location.href, nativeEvent });\n listeners.push({ listener, nativeListener });\n window.addEventListener('message', nativeListener, false);\n return {\n remove: () => {\n this.removeEventListener(type, listener);\n },\n };\n },\n\n removeEventListener(type: 'url', listener: URLListener): void {\n // Do nothing in Node.js environments\n if (!Platform.isDOMAvailable) {\n return;\n }\n invariant(\n EventTypes.indexOf(type) !== -1,\n `Linking.removeEventListener(): ${type} is not a valid event.`\n );\n const listenerIndex = listeners.findIndex((pair) => pair.listener === listener);\n invariant(\n listenerIndex !== -1,\n 'Linking.removeEventListener(): cannot remove an unregistered event listener.'\n );\n const nativeListener = listeners[listenerIndex].nativeListener;\n window.removeEventListener('message', nativeListener, false);\n listeners.splice(listenerIndex, 1);\n },\n\n async canOpenURL(url: string): Promise {\n // In reality this should be able to return false for links like `chrome://` on chrome.\n return true;\n },\n\n async getInitialURL(): Promise {\n if (!Platform.isDOMAvailable) return '';\n return window.location.href;\n },\n\n async openURL(url: string): Promise {\n if (Platform.isDOMAvailable) {\n // @ts-ignore\n window.location = new URL(url, window.location).toString();\n }\n },\n};\n","import Constants from 'expo-constants';\nimport { Platform, UnavailabilityError } from 'expo-modules-core';\nimport invariant from 'invariant';\nimport qs from 'qs';\nimport { useEffect, useState } from 'react';\nimport { EmitterSubscription } from 'react-native';\nimport URL from 'url-parse';\n\nimport NativeLinking from './ExpoLinking';\nimport {\n CreateURLOptions,\n ParsedURL,\n QueryParams,\n SendIntentExtras,\n URLListener,\n} from './Linking.types';\nimport { hasCustomScheme, resolveScheme } from './Schemes';\n\nfunction validateURL(url: string): void {\n invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n invariant(url, 'Invalid URL: cannot be empty');\n}\n\nfunction getHostUri(): string | null {\n if (Constants.expoConfig?.hostUri) {\n return Constants.expoConfig.hostUri;\n } else if (!hasCustomScheme()) {\n // we're probably not using up-to-date xdl, so just fake it for now\n // we have to remove the /--/ on the end since this will be inserted again later\n return removeScheme(Constants.linkingUri).replace(/\\/--($|\\/.*$)/, '');\n } else {\n return null;\n }\n}\n\nfunction isExpoHosted(): boolean {\n const hostUri = getHostUri();\n return !!(\n hostUri &&\n (/^(.*\\.)?(expo\\.io|exp\\.host|exp\\.direct|expo\\.test|expo\\.dev)(:.*)?(\\/.*)?$/.test(hostUri) ||\n Constants.expoGoConfig?.developer)\n );\n}\n\nfunction removeScheme(url: string): string {\n return url.replace(/^[a-zA-Z0-9+.-]+:\\/\\//, '');\n}\n\nfunction removePort(url: string): string {\n return url.replace(/(?=([a-zA-Z0-9+.-]+:\\/\\/)?[^/]):\\d+/, '');\n}\n\nfunction removeLeadingSlash(url: string): string {\n return url.replace(/^\\//, '');\n}\n\nfunction removeTrailingSlashAndQueryString(url: string): string {\n return url.replace(/\\/?\\?.*$/, '');\n}\n\nfunction ensureTrailingSlash(input: string, shouldAppend: boolean): string {\n const hasSlash = input.endsWith('/');\n if (hasSlash && !shouldAppend) {\n return input.substring(0, input.length - 1);\n } else if (!hasSlash && shouldAppend) {\n return `${input}/`;\n }\n return input;\n}\n\nfunction ensureLeadingSlash(input: string, shouldAppend: boolean): string {\n const hasSlash = input.startsWith('/');\n if (hasSlash && !shouldAppend) {\n return input.substring(1);\n } else if (!hasSlash && shouldAppend) {\n return `/${input}`;\n }\n return input;\n}\n\n// @needsAudit\n/**\n * Create a URL that works for the environment the app is currently running in.\n * The scheme in bare and standalone must be defined in the app.json under `expo.scheme`.\n *\n * # Examples\n * - Bare: empty string\n * - Standalone, Custom: `yourscheme:///path`\n * - Web (dev): `https://localhost:19006/path`\n * - Web (prod): `https://myapp.com/path`\n * - Expo Client (dev): `exp://128.0.0.1:8081/--/path`\n * - Expo Client (prod): `exp://exp.host/@yourname/your-app/--/path`\n *\n * @param path addition path components to append to the base URL.\n * @param queryParams An object with a set of query parameters. These will be merged with any\n * Expo-specific parameters that are needed (e.g. release channel) and then appended to the URL\n * as a query string.\n * @param scheme Optional URI protocol to use in the URL `:///`, when `undefined` the scheme\n * will be chosen from the Expo config (`app.config.js` or `app.json`).\n * @return A URL string which points to your app with the given deep link information.\n * @deprecated An alias for [`createURL()`](#linkingcreateurlpath-namedparameters). This method is\n * deprecated and will be removed in a future SDK version.\n */\nexport function makeUrl(path: string = '', queryParams?: QueryParams, scheme?: string): string {\n return createURL(path, { queryParams, scheme, isTripleSlashed: true });\n}\n\n// @needsAudit\n/**\n * Helper method for constructing a deep link into your app, given an optional path and set of query\n * parameters. Creates a URI scheme with two slashes by default.\n *\n * The scheme in bare and standalone must be defined in the Expo config (`app.config.js` or `app.json`)\n * under `expo.scheme`.\n *\n * # Examples\n * - Bare: `://path` - uses provided scheme or scheme from Expo config `scheme`.\n * - Standalone, Custom: `yourscheme://path`\n * - Web (dev): `https://localhost:19006/path`\n * - Web (prod): `https://myapp.com/path`\n * - Expo Client (dev): `exp://128.0.0.1:8081/--/path`\n * - Expo Client (prod): `exp://exp.host/@yourname/your-app/--/path`\n *\n * @param path Addition path components to append to the base URL.\n * @param namedParameters Additional options object.\n * @return A URL string which points to your app with the given deep link information.\n */\nexport function createURL(\n path: string,\n { scheme, queryParams = {}, isTripleSlashed = false }: CreateURLOptions = {}\n): string {\n if (Platform.OS === 'web') {\n if (!Platform.isDOMAvailable) return '';\n\n const origin = ensureTrailingSlash(window.location.origin, false);\n let queryString = qs.stringify(queryParams);\n if (queryString) {\n queryString = `?${queryString}`;\n }\n\n let outputPath = path;\n if (outputPath) outputPath = ensureLeadingSlash(path, true);\n\n return encodeURI(`${origin}${outputPath}${queryString}`);\n }\n\n const resolvedScheme = resolveScheme({ scheme });\n\n let hostUri = getHostUri() || '';\n\n if (hasCustomScheme() && isExpoHosted()) {\n hostUri = '';\n }\n\n if (path) {\n if (isExpoHosted() && hostUri) {\n path = `/--/${removeLeadingSlash(path)}`;\n }\n if (isTripleSlashed && !path.startsWith('/')) {\n path = `/${path}`;\n }\n } else {\n path = '';\n }\n\n // merge user-provided query params with any that were already in the hostUri\n // e.g. release-channel\n let queryString = '';\n const queryStringMatchResult = hostUri.match(/(.*)\\?(.+)/);\n if (queryStringMatchResult) {\n hostUri = queryStringMatchResult[1];\n queryString = queryStringMatchResult[2];\n let paramsFromHostUri = {};\n try {\n const parsedParams = qs.parse(queryString);\n if (typeof parsedParams === 'object') {\n paramsFromHostUri = parsedParams;\n }\n } catch {}\n queryParams = {\n ...queryParams,\n ...paramsFromHostUri,\n };\n }\n queryString = qs.stringify(queryParams);\n if (queryString) {\n queryString = `?${queryString}`;\n }\n\n hostUri = ensureLeadingSlash(hostUri, !isTripleSlashed);\n\n return encodeURI(\n `${resolvedScheme}:${isTripleSlashed ? '/' : ''}/${hostUri}${path}${queryString}`\n );\n}\n\n// @needsAudit\n/**\n * Helper method for parsing out deep link information from a URL.\n * @param url A URL that points to the currently running experience (e.g. an output of `Linking.createURL()`).\n * @return A `ParsedURL` object.\n */\nexport function parse(url: string): ParsedURL {\n validateURL(url);\n\n const parsed = URL(url, /* parseQueryString */ true);\n\n for (const param in parsed.query) {\n parsed.query[param] = decodeURIComponent(parsed.query[param]!);\n }\n const queryParams = parsed.query;\n\n const hostUri = getHostUri() || '';\n const hostUriStripped = removePort(removeTrailingSlashAndQueryString(hostUri));\n\n let path = parsed.pathname || null;\n let hostname = parsed.hostname || null;\n let scheme = parsed.protocol || null;\n\n if (scheme) {\n // Remove colon at end\n scheme = scheme.substring(0, scheme.length - 1);\n }\n\n if (path) {\n path = removeLeadingSlash(path);\n\n let expoPrefix: string | null = null;\n if (hostUriStripped) {\n const parts = hostUriStripped.split('/');\n expoPrefix = parts.slice(1).concat(['--/']).join('/');\n }\n\n if (isExpoHosted() && !hasCustomScheme() && expoPrefix && path.startsWith(expoPrefix)) {\n path = path.substring(expoPrefix.length);\n hostname = null;\n } else if (path.indexOf('+') > -1) {\n path = path.substring(path.indexOf('+') + 1);\n }\n }\n\n return {\n hostname,\n path,\n queryParams,\n scheme,\n };\n}\n\n// @needsAudit\n/**\n * Add a handler to `Linking` changes by listening to the `url` event type and providing the handler.\n * It is recommended to use the [`useURL()`](#useurl) hook instead.\n * @param type The only valid type is `'url'`.\n * @param handler An [`URLListener`](#urllistener) function that takes an `event` object of the type\n * [`EventType`](#eventype).\n * @return An EmitterSubscription that has the remove method from EventSubscription\n * @see [React Native Docs Linking page](https://reactnative.dev/docs/linking#addeventlistener).\n */\nexport function addEventListener(type: 'url', handler: URLListener): EmitterSubscription {\n return NativeLinking.addEventListener(type, handler);\n}\n\n// @needsAudit\n/**\n * Helper method which wraps React Native's `Linking.getInitialURL()` in `Linking.parse()`.\n * Parses the deep link information out of the URL used to open the experience initially.\n * If no link opened the app, all the fields will be `null`.\n * > On the web it parses the current window URL.\n * @return A promise that resolves with `ParsedURL` object.\n */\nexport async function parseInitialURLAsync(): Promise {\n const initialUrl = await NativeLinking.getInitialURL();\n if (!initialUrl) {\n return {\n scheme: null,\n hostname: null,\n path: null,\n queryParams: null,\n };\n }\n\n return parse(initialUrl);\n}\n\n// @needsAudit\n/**\n * Launch an Android intent with extras.\n * > Use [IntentLauncher](./intent-launcher) instead, `sendIntent` is only included in\n * > `Linking` for API compatibility with React Native's Linking API.\n * @platform android\n */\nexport async function sendIntent(action: string, extras?: SendIntentExtras[]): Promise {\n if (Platform.OS === 'android') {\n return await NativeLinking.sendIntent(action, extras);\n }\n throw new UnavailabilityError('Linking', 'sendIntent');\n}\n\n// @needsAudit\n/**\n * Open the operating system settings app and displays the app’s custom settings, if it has any.\n */\nexport async function openSettings(): Promise {\n if (Platform.OS === 'web') {\n throw new UnavailabilityError('Linking', 'openSettings');\n }\n if (NativeLinking.openSettings) {\n return await NativeLinking.openSettings();\n }\n await openURL('app-settings:');\n}\n\n// @needsAudit\n/**\n * Get the URL that was used to launch the app if it was launched by a link.\n * @return The URL string that launched your app, or `null`.\n */\nexport async function getInitialURL(): Promise {\n return (await NativeLinking.getInitialURL()) ?? null;\n}\n\n// @needsAudit\n/**\n * Attempt to open the given URL with an installed app. See the [Linking guide](/guides/linking)\n * for more information.\n * @param url A URL for the operating system to open, eg: `tel:5555555`, `exp://`.\n * @return A `Promise` that is fulfilled with `true` if the link is opened operating system\n * automatically or the user confirms the prompt to open the link. The `Promise` rejects if there\n * are no applications registered for the URL or the user cancels the dialog.\n */\nexport async function openURL(url: string): Promise {\n validateURL(url);\n return await NativeLinking.openURL(url);\n}\n\n// @needsAudit\n/**\n * Determine whether or not an installed app can handle a given URL.\n * On web this always returns `true` because there is no API for detecting what URLs can be opened.\n * @param url The URL that you want to test can be opened.\n * @return A `Promise` object that is fulfilled with `true` if the URL can be handled, otherwise it\n * `false` if not.\n *\n * The `Promise` will reject on Android if it was impossible to check if the URL can be opened, and\n * on iOS if you didn't [add the specific scheme in the `LSApplicationQueriesSchemes` key inside **Info.plist**](/guides/linking#linking-from-your-app).\n */\nexport async function canOpenURL(url: string): Promise {\n validateURL(url);\n return await NativeLinking.canOpenURL(url);\n}\n\n// @needsAudit\n/**\n * Returns the initial URL followed by any subsequent changes to the URL.\n * @return Returns the initial URL or `null`.\n */\nexport function useURL(): string | null {\n const [url, setLink] = useState(null);\n\n function onChange(event: { url: string }) {\n setLink(event.url);\n }\n\n useEffect(() => {\n getInitialURL().then((url) => setLink(url));\n const subscription = addEventListener('url', onChange);\n return () => subscription.remove();\n }, []);\n\n return url;\n}\n\nexport * from './Linking.types';\nexport * from './Schemes';\n","import type { ParsedQs } from 'qs';\n\n// @docsMissing\nexport type QueryParams = ParsedQs;\n\n// @needsAudit @docsMissing\nexport type ParsedURL = {\n scheme: string | null;\n hostname: string | null;\n /**\n * The path into the app specified by the URL.\n */\n path: string | null;\n /**\n * The set of query parameters specified by the query string of the url used to open the app.\n */\n queryParams: QueryParams | null;\n};\n\n// @needsAudit\nexport type CreateURLOptions = {\n /**\n * URI protocol `://` that must be built into your native app.\n */\n scheme?: string;\n /**\n * An object of parameters that will be converted into a query string.\n */\n queryParams?: QueryParams;\n /**\n * Should the URI be triple slashed `scheme:///path` or double slashed `scheme://path`.\n */\n isTripleSlashed?: boolean;\n};\n\n// @docsMissing\nexport type EventType = {\n url: string;\n nativeEvent?: MessageEvent;\n};\n\n// @docsMissing\nexport type URLListener = (event: EventType) => void;\n\n// @docsMissing\nexport type NativeURLListener = (nativeEvent: MessageEvent) => void;\n\n// @docsMissing\nexport type SendIntentExtras = { key: string; value: string | number | boolean };\n","import Constants, { ExecutionEnvironment } from 'expo-constants';\nimport { Platform } from 'expo-modules-core';\n\nconst LINKING_GUIDE_URL = `https://docs.expo.dev/guides/linking/`;\n\n// @docsMissing\nexport function hasCustomScheme(): boolean {\n if (Constants.executionEnvironment === ExecutionEnvironment.Bare) {\n // Bare always uses a custom scheme.\n return true;\n } else if (Constants.executionEnvironment === ExecutionEnvironment.Standalone) {\n // Standalone uses a custom scheme when one is defined.\n const manifestSchemes = collectManifestSchemes();\n return !!manifestSchemes.length;\n }\n // Store client uses the default scheme.\n return false;\n}\n\ntype SchemeConfig = {\n scheme?: string | string[];\n};\n\nfunction getSchemes(config: SchemeConfig | null | undefined): string[] {\n if (config) {\n if (Array.isArray(config.scheme)) {\n const validate = (value: any): value is string => {\n return typeof value === 'string';\n };\n return config.scheme.filter(validate);\n } else if (typeof config.scheme === 'string') {\n return [config.scheme];\n }\n }\n return [];\n}\n\n// Valid schemes for the Expo client.\nconst EXPO_CLIENT_SCHEMES = Platform.select({\n // Results from `npx uri-scheme list --info-path ios/Exponent/Supporting/Info.plist`\n ios: [\n 'exp',\n 'exps',\n 'fb1696089354000816',\n 'host.exp.exponent',\n 'com.googleusercontent.apps.603386649315-vp4revvrcgrcjme51ebuhbkbspl048l9',\n ],\n // Collected manually\n android: ['exp', 'exps'],\n});\n\n/**\n * Collect a list of platform schemes from the manifest.\n *\n * This method is based on the `Scheme` modules from `@expo/config-plugins`\n * which are used for collecting the schemes before prebuilding a native app.\n *\n * - iOS: scheme -> ios.scheme -> ios.bundleIdentifier\n * - Android: scheme -> android.scheme -> android.package\n */\nexport function collectManifestSchemes(): string[] {\n // ios.scheme, android.scheme, and scheme as an array are not yet added to the\n // Expo config spec, but there's no harm in adding them early.\n // They'll be added when we drop support for `expo build` or decide\n // to have them only work with `eas build`.\n const platformManifest =\n (Platform.select({\n ios: Constants.expoConfig?.ios,\n android: Constants.expoConfig?.android,\n web: {},\n }) as SchemeConfig) ?? {};\n\n return getSchemes(Constants.expoConfig).concat(getSchemes(platformManifest));\n}\n\nfunction getNativeAppIdScheme(): string | null {\n // Add the native application identifier to the list of schemes for parity with `expo build`.\n // The native app id has been added to builds for a long time to support Google Sign-In.\n return (\n Platform.select({\n ios: Constants.expoConfig?.ios?.bundleIdentifier,\n // TODO: This may change to android.applicationId in the future.\n android: Constants.expoConfig?.android?.package,\n }) ?? null\n );\n}\n\n// @needsAudit\n/**\n * Ensure the user has linked the expo-constants manifest in bare workflow.\n */\nexport function hasConstantsManifest(): boolean {\n return !!Object.keys(Constants.expoConfig ?? {}).length;\n}\n\n// @docsMissing\nexport function resolveScheme(options: { scheme?: string; isSilent?: boolean }): string {\n if (\n Constants.executionEnvironment !== ExecutionEnvironment.StoreClient &&\n !hasConstantsManifest()\n ) {\n throw new Error(\n `expo-linking needs access to the expo-constants manifest (app.json or app.config.js) to determine what URI scheme to use. Setup the manifest and rebuild: https://github.com/expo/expo/blob/main/packages/expo-constants/README.md`\n );\n }\n\n const manifestSchemes = collectManifestSchemes();\n const nativeAppId = getNativeAppIdScheme();\n\n if (!manifestSchemes.length) {\n if (__DEV__ && !options.isSilent) {\n // Assert a config warning if no scheme is setup yet. `isSilent` is used for warnings, but we'll ignore it for exceptions.\n console.warn(\n `Linking requires a build-time setting \\`scheme\\` in the project's Expo config (app.config.js or app.json) for production apps, if it's left blank, your app may crash. The scheme does not apply to development in the Expo client but you should add it as soon as you start working with Linking to avoid creating a broken build. Learn more: ${LINKING_GUIDE_URL}`\n );\n } else if (!__DEV__ || Constants.executionEnvironment !== ExecutionEnvironment.StoreClient) {\n // Throw in production or when not in store client. Use the __DEV__ flag so users can test this functionality with `expo start --no-dev`,\n throw new Error(\n 'Cannot make a deep link into a standalone app with no custom scheme defined'\n );\n }\n }\n\n // In the Expo client...\n if (Constants.executionEnvironment === ExecutionEnvironment.StoreClient) {\n if (options.scheme) {\n // This enables users to use the fb or google redirects on iOS in the Expo client.\n if (EXPO_CLIENT_SCHEMES.includes(options.scheme)) {\n return options.scheme;\n }\n // Silently ignore to make bare workflow development easier.\n }\n // Fallback to the default client scheme.\n return 'exp';\n }\n\n const schemes = [...manifestSchemes, nativeAppId].filter(Boolean);\n\n if (options.scheme) {\n if (__DEV__) {\n // Bare workflow development assertion about the provided scheme matching the Expo config.\n if (!schemes.includes(options.scheme) && !options.isSilent) {\n // TODO: Will this cause issues for things like Facebook or Google that use `reversed-client-id://` or `fb:/`?\n // Traditionally these APIs don't use the Linking API directly.\n console.warn(\n `The provided Linking scheme '${\n options.scheme\n }' does not appear in the list of possible URI schemes in your Expo config. Expected one of: ${schemes\n .map((scheme) => `'${scheme}'`)\n .join(', ')}`\n );\n }\n }\n // Return the user provided value.\n return options.scheme;\n }\n // If no scheme is provided, we'll guess what the scheme is based on the manifest.\n // This is to attempt to keep managed apps working across expo build and EAS build.\n // EAS build ejects the app before building it so we can assume that the user will\n // be using one of defined schemes.\n\n // If the native app id is the only scheme,\n if (!!nativeAppId && !manifestSchemes.length && !options.isSilent) {\n // Assert a config warning if no scheme is setup yet.\n // This warning only applies to managed workflow EAS apps, as bare workflow\n console.warn(\n `Linking requires a build-time setting \\`scheme\\` in the project's Expo config (app.config.js or app.json) for bare or production apps. Manually providing a \\`scheme\\` property can circumvent this warning. Using native app identifier as the scheme '${nativeAppId}'. Learn more: ${LINKING_GUIDE_URL}`\n );\n return nativeAppId;\n }\n // When the native app id is defined, it'll be added to the list of schemes, for most\n // users this will be unexpected behavior and cause all apps to warn when the Linking API\n // is used without a predefined scheme. For now, if the native app id is defined, require\n // at least one more scheme to be added before throwing a warning.\n // i.e. `scheme: ['foo', 'bar']` (unimplemented functionality).\n const [scheme, ...extraSchemes] = manifestSchemes;\n\n if (!scheme) {\n const errorMessage = `Linking requires a build-time setting \\`scheme\\` in the project's Expo config (app.config.js or app.json) for bare or production apps. Manually providing a \\`scheme\\` property can circumvent this error. Learn more: ${LINKING_GUIDE_URL}`;\n // Throw in production, use the __DEV__ flag so users can test this functionality with `expo start --no-dev`\n throw new Error(errorMessage);\n }\n if (extraSchemes.length && !options.isSilent) {\n console.warn(\n `Linking found multiple possible URI schemes in your Expo config.\\nUsing '${scheme}'. Ignoring: ${[\n ...extraSchemes,\n nativeAppId,\n ]\n .filter(Boolean)\n .join(', ')}.\\nPlease supply the preferred URI scheme to the Linking API.`\n );\n }\n return scheme;\n}\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","/* eslint-env browser */\nimport { Platform, Subscription } from 'expo-modules-core';\nimport * as rtlDetect from 'rtl-detect';\n\nimport { Localization, Calendar, Locale, CalendarIdentifier } from './Localization.types';\n\nconst getNavigatorLocales = () => {\n return Platform.isDOMAvailable ? navigator.languages || [navigator.language] : [];\n};\n\ntype ExtendedLocale = Intl.Locale &\n // typescript definitions for navigator language don't include some modern Intl properties\n Partial<{\n textInfo: { direction: 'ltr' | 'rtl' };\n timeZones: string[];\n weekInfo: { firstDay: number };\n hourCycles: string[];\n timeZone: string;\n calendars: string[];\n }>;\n\nconst WEB_LANGUAGE_CHANGE_EVENT = 'languagechange';\n\nexport function addLocaleListener(listener: (event) => void): Subscription {\n addEventListener(WEB_LANGUAGE_CHANGE_EVENT, listener);\n return {\n remove: () => removeEventListener(WEB_LANGUAGE_CHANGE_EVENT, listener),\n };\n}\n\nexport function addCalendarListener(listener: (event) => void): Subscription {\n addEventListener(WEB_LANGUAGE_CHANGE_EVENT, listener);\n return {\n remove: () => removeEventListener(WEB_LANGUAGE_CHANGE_EVENT, listener),\n };\n}\nexport function removeSubscription(subscription: Subscription) {\n subscription.remove();\n}\n\nexport default {\n get currency(): string | null {\n // TODO: Add support\n return null;\n },\n get decimalSeparator(): string {\n return (1.1).toLocaleString().substring(1, 2);\n },\n get digitGroupingSeparator(): string {\n const value = (1000).toLocaleString();\n return value.length === 5 ? value.substring(1, 2) : '';\n },\n get isRTL(): boolean {\n return rtlDetect.isRtlLang(this.locale) ?? false;\n },\n get isMetric(): boolean {\n const { region } = this;\n switch (region) {\n case 'US': // USA\n case 'LR': // Liberia\n case 'MM': // Myanmar\n return false;\n }\n return true;\n },\n get locale(): string {\n if (!Platform.isDOMAvailable) {\n return '';\n }\n const locale =\n navigator.language ||\n navigator['systemLanguage'] ||\n navigator['browserLanguage'] ||\n navigator['userLanguage'] ||\n this.locales[0];\n return locale;\n },\n get locales(): string[] {\n if (!Platform.isDOMAvailable) {\n return [];\n }\n const { languages = [] } = navigator;\n return Array.from(languages);\n },\n get timezone(): string {\n const defaultTimeZone = 'Etc/UTC';\n if (typeof Intl === 'undefined') {\n return defaultTimeZone;\n }\n return Intl.DateTimeFormat().resolvedOptions().timeZone || defaultTimeZone;\n },\n get isoCurrencyCodes(): string[] {\n // TODO(Bacon): Add this - very low priority\n return [];\n },\n get region(): string | null {\n // There is no way to obtain the current region, as is possible on native.\n // Instead, use the country-code from the locale when possible (e.g. \"en-US\").\n const { locale } = this;\n const [, ...suffixes] = typeof locale === 'string' ? locale.split('-') : [];\n for (const suffix of suffixes) {\n if (suffix.length === 2) {\n return suffix.toUpperCase();\n }\n }\n return null;\n },\n\n getLocales(): Locale[] {\n const locales = getNavigatorLocales();\n return locales?.map((languageTag) => {\n // TextInfo is an experimental API that is not available in all browsers.\n // We might want to consider using a locale lookup table instead.\n const locale =\n typeof Intl !== 'undefined'\n ? (new Intl.Locale(languageTag) as unknown as ExtendedLocale)\n : { region: null, textInfo: null, language: null };\n const { region, textInfo, language } = locale;\n\n // Properties added only for compatibility with native, use `toLocaleString` instead.\n const digitGroupingSeparator =\n Array.from((10000).toLocaleString(languageTag)).filter((c) => c > '9' || c < '0')[0] ||\n null; // using 1e5 instead of 1e4 since for some locales (like pl-PL) 1e4 does not use digit grouping\n const decimalSeparator = (1.1).toLocaleString(languageTag).substring(1, 2);\n\n return {\n languageTag,\n languageCode: language || languageTag.split('-')[0] || 'en',\n textDirection: (textInfo?.direction as 'ltr' | 'rtl') || null,\n digitGroupingSeparator,\n decimalSeparator,\n measurementSystem: null,\n currencyCode: null,\n currencySymbol: null,\n regionCode: region || null,\n };\n });\n },\n getCalendars(): Calendar[] {\n const locale = ((typeof Intl !== 'undefined'\n ? Intl.DateTimeFormat().resolvedOptions()\n : null) ?? null) as unknown as null | ExtendedLocale;\n return [\n {\n calendar: ((locale?.calendar || locale?.calendars?.[0]) as CalendarIdentifier) || null,\n timeZone: locale?.timeZone || locale?.timeZones?.[0] || null,\n uses24hourClock: (locale?.hourCycle || locale?.hourCycles?.[0])?.startsWith('h2') ?? null, //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle\n firstWeekday: locale?.weekInfo?.firstDay || null,\n },\n ];\n },\n\n async getLocalizationAsync(): Promise> {\n const {\n currency,\n decimalSeparator,\n digitGroupingSeparator,\n isoCurrencyCodes,\n isMetric,\n isRTL,\n locale,\n locales,\n region,\n timezone,\n } = this;\n return {\n currency,\n decimalSeparator,\n digitGroupingSeparator,\n isoCurrencyCodes,\n isMetric,\n isRTL,\n locale,\n locales,\n region,\n timezone,\n };\n },\n};\n","import { useEffect, useReducer, useMemo } from 'react';\n\nimport ExpoLocalization, {\n addCalendarListener,\n addLocaleListener,\n removeSubscription,\n} from './ExpoLocalization';\nimport { Localization } from './Localization.types';\nexport * from './Localization.types';\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * Three-character ISO 4217 currency code. Returns `null` on web.\n *\n * @example `'USD'`, `'EUR'`, `'CNY'`, `null`\n */\nexport const currency = ExpoLocalization.currency;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * Decimal separator used for formatting numbers.\n *\n * @example `','`, `'.'`\n */\nexport const decimalSeparator = ExpoLocalization.decimalSeparator;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * Digit grouping separator used when formatting numbers larger than 1000.\n *\n * @example `'.'`, `''`, `','`\n */\nexport const digitGroupingSeparator = ExpoLocalization.digitGroupingSeparator;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * A list of all the supported language ISO codes.\n */\nexport const isoCurrencyCodes = ExpoLocalization.isoCurrencyCodes;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * Boolean value that indicates whether the system uses the metric system.\n * On Android and web, this is inferred from the current region.\n */\nexport const isMetric = ExpoLocalization.isMetric;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * Returns if the system's language is written from Right-to-Left.\n * This can be used to build features like [bidirectional icons](https://material.io/design/usability/bidirectionality.html).\n *\n * Returns `false` in Server Side Rendering (SSR) environments.\n */\nexport const isRTL = ExpoLocalization.isRTL;\n\n// @needsAudit\n/**\n * Consider using Localization.getLocales() for a list of user preferred locales instead.\n * An [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag),\n * consisting of a two-character language code and optional script, region and variant codes.\n *\n * @example `'en'`, `'en-US'`, `'zh-Hans'`, `'zh-Hans-CN'`, `'en-emodeng'`\n */\nexport const locale = ExpoLocalization.locale;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * List of all the native languages provided by the user settings.\n * These are returned in the order the user defines in their device settings.\n *\n * @example `['en', 'en-US', 'zh-Hans', 'zh-Hans-CN', 'en-emodeng']`\n */\nexport const locales = ExpoLocalization.locales;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * The current time zone in display format.\n * On Web time zone is calculated with Intl.DateTimeFormat().resolvedOptions().timeZone. For a\n * better estimation you could use the moment-timezone package but it will add significant bloat to\n * your website's bundle size.\n *\n * @example `'America/Los_Angeles'`\n */\nexport const timezone = ExpoLocalization.timezone;\n\n// @needsAudit\n/**\n * @deprecated Use Localization.getLocales() instead.\n * The region code for your device that comes from the Region setting under Language & Region on iOS.\n * This value is always available on iOS, but might return `null` on Android or web.\n *\n * @example `'US'`, `'NZ'`, `null`\n */\nexport const region = ExpoLocalization.region;\n\n/**\n * List of user's locales, returned as an array of objects of type `Locale`.\n * Guaranteed to contain at least 1 element.\n * These are returned in the order the user defines in their device settings.\n * On the web currency and measurements systems are not provided, instead returned as null.\n * If needed, you can infer them from the current region using a lookup table.\n * @example `[{\n \"languageTag\": \"pl-PL\",\n \"languageCode\": \"pl\",\n \"textDirection\": \"ltr\",\n \"digitGroupingSeparator\": \" \",\n \"decimalSeparator\": \",\",\n \"measurementSystem\": \"metric\",\n \"currencyCode\": \"PLN\",\n \"currencySymbol\": \"zł\",\n \"regionCode\": \"PL\"\n }]`\n */\nexport const getLocales = ExpoLocalization.getLocales;\n\n/**\n * List of user's preferred calendars, returned as an array of objects of type `Calendar`.\n * Guaranteed to contain at least 1 element.\n * For now always returns a single element, but it's likely to return a user preference list on some platforms in the future.\n * @example `[\n {\n \"calendar\": \"gregory\",\n \"timeZone\": \"Europe/Warsaw\",\n \"uses24hourClock\": true,\n \"firstWeekday\": 1\n }\n ]`\n */\nexport const getCalendars = ExpoLocalization.getCalendars;\n\n/**\n * A hook providing a list of user's locales, returned as an array of objects of type `Locale`.\n * Guaranteed to contain at least 1 element.\n * These are returned in the order the user defines in their device settings.\n * On the web currency and measurements systems are not provided, instead returned as null.\n * If needed, you can infer them from the current region using a lookup table.\n * If the OS settings change, the hook will rerender with a new list of locales.\n * @example `[{\n \"languageTag\": \"pl-PL\",\n \"languageCode\": \"pl\",\n \"textDirection\": \"ltr\",\n \"digitGroupingSeparator\": \" \",\n \"decimalSeparator\": \",\",\n \"measurementSystem\": \"metric\",\n \"currencyCode\": \"PLN\",\n \"currencySymbol\": \"zł\",\n \"regionCode\": \"PL\"\n }]`\n */\nexport function useLocales() {\n const [key, invalidate] = useReducer((k) => k + 1, 0);\n const locales = useMemo(() => getLocales(), [key]);\n useEffect(() => {\n const subscription = addLocaleListener(invalidate);\n return () => {\n removeSubscription(subscription);\n };\n }, []);\n return locales;\n}\n\n/**\n * A hook providing a list of user's preferred calendars, returned as an array of objects of type `Calendar`.\n * Guaranteed to contain at least 1 element.\n * For now always returns a single element, but it's likely to return a user preference list on some platforms in the future.\n * If the OS settings change, the hook will rerender with a new list of calendars.\n * @example `[\n {\n \"calendar\": \"gregory\",\n \"timeZone\": \"Europe/Warsaw\",\n \"uses24hourClock\": true,\n \"firstWeekday\": 1\n }\n ]`\n */\nexport function useCalendars() {\n const [key, invalidate] = useReducer((k) => k + 1, 0);\n const calendars = useMemo(() => getCalendars(), [key]);\n useEffect(() => {\n const subscription = addCalendarListener(invalidate);\n return () => {\n removeSubscription(subscription);\n };\n }, []);\n return calendars;\n}\n\n// @needsAudit\n/**\n * Get the latest native values from the device. Locale can be changed on some Android devices\n * without resetting the app.\n * > On iOS, changing the locale will cause the device to reset meaning the constants will always be\n * correct.\n *\n * @example\n * ```ts\n * // When the app returns from the background on Android...\n *\n * const { locale } = await Localization.getLocalizationAsync();\n * ```\n * @deprecated\n * Use Localization.getLocales() or Localization.getCalendars() instead.\n */\nexport async function getLocalizationAsync(): Promise {\n return await ExpoLocalization.getLocalizationAsync();\n}\n","// @needsAudit\nexport type Localization = {\n /**\n * Three-character ISO 4217 currency code. Returns `null` on web.\n *\n * @example `'USD'`, `'EUR'`, `'CNY'`, `null`\n */\n currency: string | null;\n /**\n * Decimal separator used for formatting numbers.\n *\n * @example `','`, `'.'`\n */\n decimalSeparator: string;\n /**\n * Digit grouping separator used when formatting numbers larger than 1000.\n *\n * @example `'.'`, `''`, `','`\n */\n digitGroupingSeparator: string;\n /**\n * A list of all the supported language ISO codes.\n */\n isoCurrencyCodes: string[];\n /**\n * Boolean value that indicates whether the system uses the metric system.\n * On Android and web, this is inferred from the current region.\n */\n isMetric: boolean;\n /**\n * Returns if the system's language is written from Right-to-Left.\n * This can be used to build features like [bidirectional icons](https://material.io/design/usability/bidirectionality.html).\n *\n * Returns `false` in Server Side Rendering (SSR) environments.\n */\n isRTL: boolean;\n /**\n * An [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag),\n * consisting of a two-character language code and optional script, region and variant codes.\n *\n * @example `'en'`, `'en-US'`, `'zh-Hans'`, `'zh-Hans-CN'`, `'en-emodeng'`\n */\n locale: string;\n /**\n * List of all the native languages provided by the user settings.\n * These are returned in the order that the user defined in the device settings.\n *\n * @example `['en', 'en-US', 'zh-Hans', 'zh-Hans-CN', 'en-emodeng']`\n */\n locales: string[];\n /**\n * The region code for your device that comes from the Region setting under Language & Region on iOS.\n * This value is always available on iOS, but might return `null` on Android or web.\n *\n * @example `'US'`, `'NZ'`, `null`\n */\n region: string | null;\n /**\n * The current time zone in display format.\n * On Web time zone is calculated with Intl.DateTimeFormat().resolvedOptions().timeZone. For a\n * better estimation you could use the moment-timezone package but it will add significant bloat to\n * your website's bundle size.\n *\n * @example `'America/Los_Angeles'`\n */\n timezone: string;\n};\n\nexport type Locale = {\n /**\n * An [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag) with a region code.\n * @example `'en-US'`, `'es-419'`, `'pl-PL'`.\n */\n languageTag: string;\n /**\n * An [IETF BCP 47 language tag](https://en.wikipedia.org/wiki/IETF_language_tag) without the region code.\n * @example `'en'`, `'es'`, `'pl'`.\n */\n languageCode: string;\n /**\n * The region code for your device that comes from the Region setting under Language & Region on iOS, Region settings on Android and is parsed from locale on Web (can be `null` on Web).\n */\n regionCode: string | null;\n /**\n * Currency code for the locale.\n * Is `null` on Web, use a table lookup based on region instead.\n * @example `'USD'`, `'EUR'`, `'PLN'`.\n */\n currencyCode: string | null;\n /**\n * Currency symbol for the locale.\n * Is `null` on Web, use a table lookup based on region (if available) instead.\n * @example `'$'`, `'€'`, `'zł'`.\n */\n currencySymbol: string | null;\n /**\n * Decimal separator used for formatting numbers with fractional parts.\n * @example `'.'`, `','`.\n */\n decimalSeparator: string | null;\n /**\n * Digit grouping separator used for formatting large numbers.\n * @example `'.'`, `','`.\n */\n digitGroupingSeparator: string | null;\n /**\n * Text direction for the locale. One of: `'ltr'`, `'rtl'`, but can also be `null` on some browsers without support for the [textInfo](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/textInfo) property in [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) API.\n */\n textDirection: 'ltr' | 'rtl' | null;\n /**\n * The measurement system used in the locale.\n * Is `null` on Web, as user chosen measurement system is not exposed on the web and using locale to determine measurement systems is unreliable.\n * Ask for user preferences if possible.\n */\n measurementSystem: `metric` | `us` | `uk` | null;\n};\n\n/**\n * An enum mapping days of the week in Gregorian calendar to their index as returned by the `firstWeekday` property.\n */\nexport enum Weekday {\n SUNDAY = 1,\n MONDAY = 2,\n TUESDAY = 3,\n WEDNESDAY = 4,\n THURSDAY = 5,\n FRIDAY = 6,\n SATURDAY = 7,\n}\n\n/**\n * The calendar identifier, one of [Unicode calendar types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar).\n * Gregorian calendar is aliased and can be referred to as both `CalendarIdentifier.GREGORIAN` and `CalendarIdentifier.GREGORY`.\n */\nexport enum CalendarIdentifier {\n /** Thai Buddhist calendar */\n BUDDHIST = 'buddhist',\n /** Traditional Chinese calendar */\n CHINESE = 'chinese',\n /** Coptic calendar */\n COPTIC = 'coptic',\n /** Traditional Korean calendar */\n DANGI = 'dangi',\n /** Ethiopic calendar, Amete Alem (epoch approx. 5493 B.C.E) */\n ETHIOAA = 'ethioaa',\n /** Ethiopic calendar, Amete Mihret (epoch approx, 8 C.E.) */\n ETHIOPIC = 'ethiopic',\n /** Gregorian calendar */\n GREGORY = 'gregory',\n /** Gregorian calendar (alias) */\n GREGORIAN = 'gregory',\n /** Traditional Hebrew calendar */\n HEBREW = 'hebrew',\n /** Indian calendar */\n INDIAN = 'indian',\n /** Islamic calendar */\n ISLAMIC = 'islamic',\n /** Islamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - civil epoch) */\n ISLAMIC_CIVIL = 'islamic-civil',\n /** Islamic calendar, Saudi Arabia sighting */\n ISLAMIC_RGSA = 'islamic-rgsa',\n /**Islamic calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - astronomical epoch) */\n ISLAMIC_TBLA = 'islamic-tbla',\n /** Islamic calendar, Umm al-Qura */\n ISLAMIC_UMALQURA = 'islamic-umalqura',\n /** ISO calendar (Gregorian calendar using the ISO 8601 calendar week rules) */\n ISO8601 = 'iso8601',\n /** Japanese imperial calendar */\n JAPANESE = 'japanese',\n /** Persian calendar */\n PERSIAN = 'persian',\n /** Civil (algorithmic) Arabic calendar */\n ROC = 'roc',\n}\n\nexport type Calendar = {\n /**\n * The calendar identifier, one of [Unicode calendar types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/calendar).\n *\n * On Android is limited to one of device's [available calendar types](https://developer.android.com/reference/java/util/Calendar#getAvailableCalendarTypes()).\n *\n * On iOS uses [calendar identifiers](https://developer.apple.com/documentation/foundation/calendar/identifier), but maps them to the corresponding Unicode types, will also never contain `'dangi'` or `'islamic-rgsa'` due to it not being implemented on iOS.\n */\n calendar: CalendarIdentifier | null;\n /**\n * True when current device settings use 24 hour time format.\n * Can be null on some browsers that don't support the [hourCycle](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle) property in [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) API.\n */\n uses24hourClock: boolean | null;\n /**\n * The first day of the week. For most calendars Sunday is numbered `1`, with Saturday being number `7`.\n * Can be null on some browsers that don't support the [weekInfo](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/weekInfo) property in [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) API.\n * @example `1`, `7`.\n */\n firstWeekday: Weekday | null;\n /**\n * Time zone for the calendar. Can be `null` on Web.\n * @example `'America/Los_Angeles'`, `'Europe/Warsaw'`, `'GMT+1'`.\n */\n timeZone: string | null;\n};\n","import { PermissionResponse, PermissionStatus } from 'expo-modules-core';\n\nimport {\n LocationLastKnownOptions,\n LocationObject,\n LocationOptions,\n LocationAccuracy,\n} from './Location.types';\nimport { LocationEventEmitter } from './LocationEventEmitter';\n\nclass GeocoderError extends Error {\n code: string;\n\n constructor() {\n super('Geocoder service is not available for this device.');\n this.code = 'E_NO_GEOCODER';\n }\n}\n\n/**\n * Converts `GeolocationPosition` to JavaScript object.\n */\nfunction geolocationPositionToJSON(position: LocationObject): LocationObject {\n const { coords, timestamp } = position;\n return {\n coords: {\n latitude: coords.latitude,\n longitude: coords.longitude,\n altitude: coords.altitude,\n accuracy: coords.accuracy,\n altitudeAccuracy: coords.altitudeAccuracy,\n heading: coords.heading,\n speed: coords.speed,\n },\n timestamp,\n };\n}\n\n/**\n * Checks whether given location didn't exceed given `maxAge` and fits in the required accuracy.\n */\nfunction isLocationValid(location: LocationObject, options: LocationLastKnownOptions): boolean {\n const maxAge = typeof options.maxAge === 'number' ? options.maxAge : Infinity;\n const requiredAccuracy =\n typeof options.requiredAccuracy === 'number' ? options.requiredAccuracy : Infinity;\n const locationAccuracy = location.coords.accuracy ?? Infinity;\n\n return Date.now() - location.timestamp <= maxAge && locationAccuracy <= requiredAccuracy;\n}\n\n/**\n * Gets the permission details. The implementation is not very good as it actually requests\n * for the current location, but there is no better way on web so far :(\n */\nasync function getPermissionsAsync(): Promise {\n return new Promise((resolve) => {\n const resolveWithStatus = (status) =>\n resolve({\n status,\n granted: status === PermissionStatus.GRANTED,\n canAskAgain: true,\n expires: 0,\n });\n\n navigator.geolocation.getCurrentPosition(\n () => resolveWithStatus(PermissionStatus.GRANTED),\n ({ code }) => {\n if (code === 1 /* PERMISSION_DENIED */) {\n resolveWithStatus(PermissionStatus.DENIED);\n } else {\n resolveWithStatus(PermissionStatus.UNDETERMINED);\n }\n },\n { enableHighAccuracy: false, maximumAge: Infinity }\n );\n });\n}\n\nlet lastKnownPosition: LocationObject | null = null;\n\nexport default {\n get name(): string {\n return 'ExpoLocation';\n },\n async getProviderStatusAsync(): Promise<{ locationServicesEnabled: boolean }> {\n return {\n locationServicesEnabled: 'geolocation' in navigator,\n };\n },\n async getLastKnownPositionAsync(\n options: LocationLastKnownOptions = {}\n ): Promise {\n if (lastKnownPosition && isLocationValid(lastKnownPosition, options)) {\n return lastKnownPosition;\n }\n return null;\n },\n async getCurrentPositionAsync(options: LocationOptions): Promise {\n return new Promise((resolve, reject) => {\n const resolver = (position) => {\n lastKnownPosition = geolocationPositionToJSON(position);\n resolve(lastKnownPosition);\n };\n navigator.geolocation.getCurrentPosition(resolver, reject, {\n maximumAge: Infinity,\n enableHighAccuracy: (options.accuracy ?? 0) > LocationAccuracy.Balanced,\n ...options,\n });\n });\n },\n async removeWatchAsync(watchId): Promise {\n navigator.geolocation.clearWatch(watchId);\n },\n async watchDeviceHeading(headingId): Promise {\n console.warn('Location.watchDeviceHeading: is not supported on web');\n },\n async hasServicesEnabledAsync(): Promise {\n return 'geolocation' in navigator;\n },\n async geocodeAsync(): Promise {\n throw new GeocoderError();\n },\n async reverseGeocodeAsync(): Promise {\n throw new GeocoderError();\n },\n async watchPositionImplAsync(watchId: string, options: LocationOptions): Promise {\n return new Promise((resolve) => {\n // @ts-ignore: the types here need to be fixed\n watchId = global.navigator.geolocation.watchPosition(\n (position) => {\n lastKnownPosition = geolocationPositionToJSON(position);\n LocationEventEmitter.emit('Expo.locationChanged', {\n watchId,\n location: lastKnownPosition,\n });\n },\n undefined,\n // @ts-ignore: the options object needs to be fixed\n options\n );\n resolve(watchId);\n });\n },\n\n getPermissionsAsync,\n async requestPermissionsAsync(): Promise {\n return getPermissionsAsync();\n },\n async requestForegroundPermissionsAsync(): Promise {\n return getPermissionsAsync();\n },\n async requestBackgroundPermissionsAsync(): Promise {\n return getPermissionsAsync();\n },\n async getForegroundPermissionsAsync(): Promise {\n return getPermissionsAsync();\n },\n async getBackgroundPermissionsAsync(): Promise {\n return getPermissionsAsync();\n },\n\n // no-op\n startObserving() {},\n stopObserving() {},\n};\n","import { Platform } from 'expo-modules-core';\n\nimport ExpoLocation from './ExpoLocation';\nimport { LocationObject, LocationAccuracy, LocationOptions } from './Location.types';\nimport { LocationSubscriber } from './LocationSubscribers';\n\ntype GeolocationSuccessCallback = (data: LocationObject) => void;\ntype GeolocationErrorCallback = (error: any) => void;\n\ntype GeolocationOptions = {\n enableHighAccuracy?: boolean;\n};\n\ndeclare const global: any;\n\n// @needsAudit\n/**\n * Polyfills `navigator.geolocation` for interop with the core React Native and Web API approach to geolocation.\n */\nexport function installWebGeolocationPolyfill(): void {\n if (Platform.OS !== 'web') {\n // Make sure `window.navigator` is defined in the global scope.\n if (!('window' in global)) {\n global.window = global;\n }\n if (!('navigator' in global.window)) {\n global.window.navigator = {};\n }\n\n // @ts-ignore\n window.navigator.geolocation = {\n getCurrentPosition,\n watchPosition,\n clearWatch,\n\n // We don't polyfill stopObserving, this is an internal method that probably should not even exist\n // in react-native docs\n stopObserving: () => {},\n };\n }\n}\n\nfunction convertGeolocationOptions(options: GeolocationOptions): LocationOptions {\n return {\n accuracy: options.enableHighAccuracy ? LocationAccuracy.High : LocationAccuracy.Balanced,\n };\n}\n\nfunction getCurrentPosition(\n success: GeolocationSuccessCallback,\n error: GeolocationErrorCallback = () => {},\n options: GeolocationOptions = {}\n): void {\n _getCurrentPositionAsyncWrapper(success, error, options);\n}\n\n// This function exists to let us continue to return undefined from getCurrentPosition, while still\n// using async/await for the internal implementation of it\nasync function _getCurrentPositionAsyncWrapper(\n success: GeolocationSuccessCallback,\n error: GeolocationErrorCallback,\n options: GeolocationOptions\n): Promise {\n try {\n await ExpoLocation.requestPermissionsAsync();\n const result = await ExpoLocation.getCurrentPositionAsync(convertGeolocationOptions(options));\n success(result);\n } catch (e) {\n error(e);\n }\n}\n\n// Polyfill: navigator.geolocation.watchPosition\nfunction watchPosition(\n success: GeolocationSuccessCallback,\n error: GeolocationErrorCallback,\n options: GeolocationOptions\n) {\n const watchId = LocationSubscriber.registerCallback(success);\n\n ExpoLocation.watchPositionImplAsync(watchId, options).catch((err) => {\n LocationSubscriber.unregisterCallback(watchId);\n error({ watchId, message: err.message, code: err.code });\n });\n\n return watchId;\n}\n\n// Polyfill: navigator.geolocation.clearWatch\nfunction clearWatch(watchId: number) {\n LocationSubscriber.unregisterCallback(watchId);\n}\n","import {\n PermissionStatus,\n PermissionResponse,\n PermissionHookOptions,\n createPermissionHook,\n Platform,\n} from 'expo-modules-core';\n\nimport ExpoLocation from './ExpoLocation';\nimport {\n LocationAccuracy,\n LocationCallback,\n LocationGeocodedAddress,\n LocationGeocodedLocation,\n LocationHeadingCallback,\n LocationHeadingObject,\n LocationLastKnownOptions,\n LocationObject,\n LocationOptions,\n LocationPermissionResponse,\n LocationProviderStatus,\n LocationRegion,\n LocationSubscription,\n LocationTaskOptions,\n LocationActivityType,\n LocationGeofencingEventType,\n LocationGeofencingRegionState,\n LocationGeocodingOptions,\n} from './Location.types';\nimport { LocationEventEmitter } from './LocationEventEmitter';\nimport { LocationSubscriber, HeadingSubscriber, _getCurrentWatchId } from './LocationSubscribers';\n\n// @needsAudit\n/**\n * @deprecated The Geocoding web api is no longer available from SDK 49 onwards. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n * @param apiKey Google API key obtained from Google API Console. This API key must have `Geocoding API`\n * enabled, otherwise your geocoding requests will be denied.\n */\nfunction setGoogleApiKey(_apiKey: string) {}\n\n// @needsAudit\n/**\n * Check status of location providers.\n * @return A promise which fulfills with an object of type [LocationProviderStatus](#locationproviderstatus).\n */\nexport async function getProviderStatusAsync(): Promise {\n return ExpoLocation.getProviderStatusAsync();\n}\n\n// @needsAudit\n/**\n * Asks the user to turn on high accuracy location mode which enables network provider that uses\n * Google Play services to improve location accuracy and location-based services.\n * @return A promise resolving as soon as the user accepts the dialog. Rejects if denied.\n */\nexport async function enableNetworkProviderAsync(): Promise {\n // If network provider is disabled (user's location mode is set to \"Device only\"),\n // Android's location provider may not give you any results. Use this method in order to ask the user\n // to change the location mode to \"High accuracy\" which uses Google Play services and enables network provider.\n // `getCurrentPositionAsync` and `watchPositionAsync` are doing it automatically anyway.\n\n if (Platform.OS === 'android') {\n return ExpoLocation.enableNetworkProviderAsync();\n }\n}\n\n// @needsAudit\n/**\n * Requests for one-time delivery of the user's current location.\n * Depending on given `accuracy` option it may take some time to resolve,\n * especially when you're inside a building.\n * > __Note:__ Calling it causes the location manager to obtain a location fix which may take several\n * > seconds. Consider using [`Location.getLastKnownPositionAsync`](#locationgetlastknownpositionasyncoptions)\n * > if you expect to get a quick response and high accuracy is not required.\n * @param options\n * @return A promise which fulfills with an object of type [`LocationObject`](#locationobject).\n */\nexport async function getCurrentPositionAsync(\n options: LocationOptions = {}\n): Promise {\n return ExpoLocation.getCurrentPositionAsync(options);\n}\n\n// @needsAudit\n/**\n * Gets the last known position of the device or `null` if it's not available or doesn't match given\n * requirements such as maximum age or required accuracy.\n * It's considered to be faster than `getCurrentPositionAsync` as it doesn't request for the current\n * location, but keep in mind the returned location may not be up-to-date.\n * @param options\n * @return A promise which fulfills with an object of type [LocationObject](#locationobject) or\n * `null` if it's not available or doesn't match given requirements such as maximum age or required\n * accuracy.\n */\nexport async function getLastKnownPositionAsync(\n options: LocationLastKnownOptions = {}\n): Promise {\n return ExpoLocation.getLastKnownPositionAsync(options);\n}\n\n// @needsAudit\n/**\n * Subscribe to location updates from the device. Please note that updates will only occur while the\n * application is in the foreground. To get location updates while in background you'll need to use\n * [Location.startLocationUpdatesAsync](#locationstartlocationupdatesasynctaskname-options).\n * @param options\n * @param callback This function is called on each location update. It receives an object of type\n * [`LocationObject`](#locationobject) as the first argument.\n * @return A promise which fulfills with a [`LocationSubscription`](#locationsubscription) object.\n */\nexport async function watchPositionAsync(\n options: LocationOptions,\n callback: LocationCallback\n): Promise {\n const watchId = LocationSubscriber.registerCallback(callback);\n await ExpoLocation.watchPositionImplAsync(watchId, options);\n\n return {\n remove() {\n LocationSubscriber.unregisterCallback(watchId);\n },\n };\n}\n\n// @needsAudit\n/**\n * Gets the current heading information from the device. To simplify, it calls `watchHeadingAsync`\n * and waits for a couple of updates, and then returns the one that is accurate enough.\n * @return A promise which fulfills with an object of type [LocationHeadingObject](#locationheadingobject).\n */\nexport async function getHeadingAsync(): Promise {\n return new Promise(async (resolve) => {\n let tries = 0;\n\n const subscription = await watchHeadingAsync((heading) => {\n if (heading.accuracy > 1 || tries > 5) {\n subscription.remove();\n resolve(heading);\n } else {\n tries += 1;\n }\n });\n });\n}\n\n// @needsAudit\n/**\n * Subscribe to compass updates from the device.\n * @param callback This function is called on each compass update. It receives an object of type\n * [LocationHeadingObject](#locationheadingobject) as the first argument.\n * @return A promise which fulfills with a [`LocationSubscription`](#locationsubscription) object.\n */\nexport async function watchHeadingAsync(\n callback: LocationHeadingCallback\n): Promise {\n const watchId = HeadingSubscriber.registerCallback(callback);\n await ExpoLocation.watchDeviceHeading(watchId);\n\n return {\n remove() {\n HeadingSubscriber.unregisterCallback(watchId);\n },\n };\n}\n\n// @needsAudit\n/**\n * Geocode an address string to latitude-longitude location.\n * > **Note**: Using the Geocoding web api is no longer supported. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n *\n * > **Note**: Geocoding is resource consuming and has to be used reasonably. Creating too many\n * > requests at a time can result in an error, so they have to be managed properly.\n * > It's also discouraged to use geocoding while the app is in the background and its results won't\n * > be shown to the user immediately.\n *\n * > On Android, you must request a location permission (`Permissions.LOCATION`) from the user\n * > before geocoding can be used.\n * @param address A string representing address, eg. `\"Baker Street London\"`.\n * @param options\n * @return A promise which fulfills with an array (in most cases its size is 1) of [`LocationGeocodedLocation`](#locationgeocodedlocation) objects.\n */\nexport async function geocodeAsync(\n address: string,\n options?: LocationGeocodingOptions\n): Promise {\n if (typeof address !== 'string') {\n throw new TypeError(`Address to geocode must be a string. Got ${address} instead.`);\n }\n\n if (options?.useGoogleMaps || Platform.OS === 'web') {\n if (__DEV__) {\n console.warn(\n 'The Geocoding API has been removed in SDK 49, use Place Autocomplete service instead' +\n '(https://developers.google.com/maps/documentation/places/web-service/autocomplete)'\n );\n }\n return [];\n }\n\n return await ExpoLocation.geocodeAsync(address);\n}\n\n// @needsAudit\n/**\n * Reverse geocode a location to postal address.\n * > **Note**: Using the Geocoding web api is no longer supported. Use [Place Autocomplete](https://developers.google.com/maps/documentation/places/web-service/autocomplete) instead.\n *\n * > **Note**: Geocoding is resource consuming and has to be used reasonably. Creating too many\n * > requests at a time can result in an error, so they have to be managed properly.\n * > It's also discouraged to use geocoding while the app is in the background and its results won't\n * > be shown to the user immediately.\n *\n * > On Android, you must request a location permission (`Permissions.LOCATION`) from the user\n * > before geocoding can be used.\n * @param location An object representing a location.\n * @param options\n * @return A promise which fulfills with an array (in most cases its size is 1) of [`LocationGeocodedAddress`](#locationgeocodedaddress) objects.\n */\nexport async function reverseGeocodeAsync(\n location: Pick,\n options?: LocationGeocodingOptions\n): Promise {\n if (typeof location.latitude !== 'number' || typeof location.longitude !== 'number') {\n throw new TypeError(\n 'Location to reverse-geocode must be an object with number properties `latitude` and `longitude`.'\n );\n }\n\n if (options?.useGoogleMaps || Platform.OS === 'web') {\n if (__DEV__) {\n console.warn(\n 'The Geocoding API has been removed in SDK 49, use Place Autocomplete service instead' +\n '(https://developers.google.com/maps/documentation/places/web-service/autocomplete)'\n );\n }\n return [];\n }\n\n return await ExpoLocation.reverseGeocodeAsync(location);\n}\n\n// @needsAudit\n/**\n * Checks user's permissions for accessing location.\n * @return A promise that fulfills with an object of type [LocationPermissionResponse](#locationpermissionresponse).\n * @deprecated Use [`getForegroundPermissionsAsync`](#locationgetforegroundpermissionsasync) or [`getBackgroundPermissionsAsync`](#locationgetbackgroundpermissionsasync) instead.\n */\nexport async function getPermissionsAsync(): Promise {\n console.warn(\n `\"getPermissionsAsync()\" is now deprecated. Please use \"getForegroundPermissionsAsync()\" or \"getBackgroundPermissionsAsync()\" instead.`\n );\n return await ExpoLocation.getPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Asks the user to grant permissions for location.\n * @return A promise that fulfills with an object of type [LocationPermissionResponse](#locationpermissionresponse).\n * @deprecated Use [`requestForegroundPermissionsAsync`](#locationrequestforegroundpermissionsasync) or [`requestBackgroundPermissionsAsync`](#locationrequestbackgroundpermissionsasync) instead.\n */\nexport async function requestPermissionsAsync(): Promise {\n console.warn(\n `\"requestPermissionsAsync()\" is now deprecated. Please use \"requestForegroundPermissionsAsync()\" or \"requestBackgroundPermissionsAsync()\" instead.`\n );\n\n return await ExpoLocation.requestPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Checks user's permissions for accessing location while the app is in the foreground.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function getForegroundPermissionsAsync(): Promise {\n return await ExpoLocation.getForegroundPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Asks the user to grant permissions for location while the app is in the foreground.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function requestForegroundPermissionsAsync(): Promise {\n return await ExpoLocation.requestForegroundPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Check or request permissions for the foreground location.\n * This uses both `requestForegroundPermissionsAsync` and `getForegroundPermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = Location.useForegroundPermissions();\n * ```\n */\nexport const useForegroundPermissions = createPermissionHook({\n getMethod: getForegroundPermissionsAsync,\n requestMethod: requestForegroundPermissionsAsync,\n});\n\n// @needsAudit\n/**\n * Checks user's permissions for accessing location while the app is in the background.\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function getBackgroundPermissionsAsync(): Promise {\n return await ExpoLocation.getBackgroundPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Asks the user to grant permissions for location while the app is in the background.\n * On __Android 11 or higher__: this method will open the system settings page - before that happens\n * you should explain to the user why your application needs background location permission.\n * For example, you can use `Modal` component from `react-native` to do that.\n * > __Note__: Foreground permissions should be granted before asking for the background permissions\n * (your app can't obtain background permission without foreground permission).\n * @return A promise that fulfills with an object of type [PermissionResponse](#permissionresponse).\n */\nexport async function requestBackgroundPermissionsAsync(): Promise {\n return await ExpoLocation.requestBackgroundPermissionsAsync();\n}\n\n// @needsAudit\n/**\n * Check or request permissions for the background location.\n * This uses both `requestBackgroundPermissionsAsync` and `getBackgroundPermissionsAsync` to\n * interact with the permissions.\n *\n * @example\n * ```ts\n * const [status, requestPermission] = Location.useBackgroundPermissions();\n * ```\n */\nexport const useBackgroundPermissions = createPermissionHook({\n getMethod: getBackgroundPermissionsAsync,\n requestMethod: requestBackgroundPermissionsAsync,\n});\n\n// --- Location service\n\n// @needsAudit\n/**\n * Checks whether location services are enabled by the user.\n * @return A promise which fulfills to `true` if location services are enabled on the device,\n * or `false` if not.\n */\nexport async function hasServicesEnabledAsync(): Promise {\n return await ExpoLocation.hasServicesEnabledAsync();\n}\n\n// --- Background location updates\n\nfunction _validateTaskName(taskName: string) {\n if (!taskName || typeof taskName !== 'string') {\n throw new Error(`\\`taskName\\` must be a non-empty string. Got ${taskName} instead.`);\n }\n}\n\n// @docsMissing\nexport async function isBackgroundLocationAvailableAsync(): Promise {\n const providerStatus = await getProviderStatusAsync();\n return providerStatus.backgroundModeEnabled;\n}\n\n// @needsAudit\n/**\n * Registers for receiving location updates that can also come when the app is in the background.\n *\n * # Task parameters\n *\n * Background location task will be receiving following data:\n * - `locations` - An array of the new locations.\n *\n * ```ts\n * import * as TaskManager from 'expo-task-manager';\n *\n * TaskManager.defineTask(YOUR_TASK_NAME, ({ data: { locations }, error }) => {\n * if (error) {\n * // check `error.message` for more details.\n * return;\n * }\n * console.log('Received new locations', locations);\n * });\n * ```\n *\n * @param taskName Name of the task receiving location updates.\n * @param options An object of options passed to the location manager.\n *\n * @return A promise resolving once the task with location updates is registered.\n */\nexport async function startLocationUpdatesAsync(\n taskName: string,\n options: LocationTaskOptions = { accuracy: LocationAccuracy.Balanced }\n): Promise {\n _validateTaskName(taskName);\n await ExpoLocation.startLocationUpdatesAsync(taskName, options);\n}\n\n// @needsAudit\n/**\n * Stops geofencing for specified task.\n * @param taskName Name of the background location task to stop.\n * @return A promise resolving as soon as the task is unregistered.\n */\nexport async function stopLocationUpdatesAsync(taskName: string): Promise {\n _validateTaskName(taskName);\n await ExpoLocation.stopLocationUpdatesAsync(taskName);\n}\n\n// @needsAudit\n/**\n * @param taskName Name of the location task to check.\n * @return A promise which fulfills with boolean value indicating whether the location task is\n * started or not.\n */\nexport async function hasStartedLocationUpdatesAsync(taskName: string): Promise {\n _validateTaskName(taskName);\n return ExpoLocation.hasStartedLocationUpdatesAsync(taskName);\n}\n\n// --- Geofencing\n\nfunction _validateRegions(regions: LocationRegion[]) {\n if (!regions || regions.length === 0) {\n throw new Error(\n 'Regions array cannot be empty. Use `stopGeofencingAsync` if you want to stop geofencing all regions'\n );\n }\n for (const region of regions) {\n if (typeof region.latitude !== 'number') {\n throw new TypeError(`Region's latitude must be a number. Got '${region.latitude}' instead.`);\n }\n if (typeof region.longitude !== 'number') {\n throw new TypeError(\n `Region's longitude must be a number. Got '${region.longitude}' instead.`\n );\n }\n if (typeof region.radius !== 'number') {\n throw new TypeError(`Region's radius must be a number. Got '${region.radius}' instead.`);\n }\n }\n}\n\n// @needsAudit\n/**\n * Starts geofencing for given regions. When the new event comes, the task with specified name will\n * be called with the region that the device enter to or exit from.\n * If you want to add or remove regions from already running geofencing task, you can just call\n * `startGeofencingAsync` again with the new array of regions.\n *\n * # Task parameters\n *\n * Geofencing task will be receiving following data:\n * - `eventType` - Indicates the reason for calling the task, which can be triggered by entering or exiting the region.\n * See [GeofencingEventType](#geofencingeventtype).\n * - `region` - Object containing details about updated region. See [LocationRegion](#locationregion) for more details.\n *\n * @param taskName Name of the task that will be called when the device enters or exits from specified regions.\n * @param regions Array of region objects to be geofenced.\n *\n * @return A promise resolving as soon as the task is registered.\n *\n * @example\n * ```ts\n * import { GeofencingEventType } from 'expo-location';\n * import * as TaskManager from 'expo-task-manager';\n *\n * TaskManager.defineTask(YOUR_TASK_NAME, ({ data: { eventType, region }, error }) => {\n * if (error) {\n * // check `error.message` for more details.\n * return;\n * }\n * if (eventType === GeofencingEventType.Enter) {\n * console.log(\"You've entered region:\", region);\n * } else if (eventType === GeofencingEventType.Exit) {\n * console.log(\"You've left region:\", region);\n * }\n * });\n * ```\n */\nexport async function startGeofencingAsync(\n taskName: string,\n regions: LocationRegion[] = []\n): Promise {\n _validateTaskName(taskName);\n _validateRegions(regions);\n await ExpoLocation.startGeofencingAsync(taskName, { regions });\n}\n\n// @needsAudit\n/**\n * Stops geofencing for specified task. It unregisters the background task so the app will not be\n * receiving any updates, especially in the background.\n * @param taskName Name of the task to unregister.\n * @return A promise resolving as soon as the task is unregistered.\n */\nexport async function stopGeofencingAsync(taskName: string): Promise {\n _validateTaskName(taskName);\n await ExpoLocation.stopGeofencingAsync(taskName);\n}\n\n// @needsAudit\n/**\n * @param taskName Name of the geofencing task to check.\n * @return A promise which fulfills with boolean value indicating whether the geofencing task is\n * started or not.\n */\nexport async function hasStartedGeofencingAsync(taskName: string): Promise {\n _validateTaskName(taskName);\n return ExpoLocation.hasStartedGeofencingAsync(taskName);\n}\n\nexport { LocationEventEmitter as EventEmitter, _getCurrentWatchId };\n\nexport {\n LocationAccuracy as Accuracy,\n LocationActivityType as ActivityType,\n LocationGeofencingEventType as GeofencingEventType,\n LocationGeofencingRegionState as GeofencingRegionState,\n PermissionStatus,\n PermissionHookOptions,\n setGoogleApiKey,\n};\n\nexport { installWebGeolocationPolyfill } from './GeolocationPolyfill';\nexport * from './Location.types';\n","import { PermissionResponse } from 'expo-modules-core';\n\n// @needsAudit\n/**\n * Enum with available location accuracies.\n */\nexport enum LocationAccuracy {\n /**\n * Accurate to the nearest three kilometers.\n */\n Lowest = 1,\n /**\n * Accurate to the nearest kilometer.\n */\n Low = 2,\n /**\n * Accurate to within one hundred meters.\n */\n Balanced = 3,\n /**\n * Accurate to within ten meters of the desired target.\n */\n High = 4,\n /**\n * The best level of accuracy available.\n */\n Highest = 5,\n /**\n * The highest possible accuracy that uses additional sensor data to facilitate navigation apps.\n */\n BestForNavigation = 6,\n}\n\n// @needsAudit\n/**\n * Enum with available activity types of background location tracking.\n */\nexport enum LocationActivityType {\n /**\n * Default activity type. Use it if there is no other type that matches the activity you track.\n */\n Other = 1,\n /**\n * Location updates are being used specifically during vehicular navigation to track location\n * changes to the automobile.\n */\n AutomotiveNavigation = 2,\n /**\n * Use this activity type if you track fitness activities such as walking, running, cycling,\n * and so on.\n */\n Fitness = 3,\n /**\n * Activity type for movements for other types of vehicular navigation that are not automobile\n * related.\n */\n OtherNavigation = 4,\n /**\n * Intended for airborne activities. Fall backs to `ActivityType.Other` if\n * unsupported.\n * @platform ios 12+\n */\n Airborne = 5,\n}\n\n// @needsAudit\n/**\n * A type of the event that geofencing task can receive.\n */\nexport enum LocationGeofencingEventType {\n /**\n * Emitted when the device entered observed region.\n */\n Enter = 1,\n /**\n * Occurs as soon as the device left observed region\n */\n Exit = 2,\n}\n\n// @needsAudit\n/**\n * State of the geofencing region that you receive through the geofencing task.\n */\nexport enum LocationGeofencingRegionState {\n /**\n * Indicates that the device position related to the region is unknown.\n */\n Unknown = 0,\n /**\n * Indicates that the device is inside the region.\n */\n Inside = 1,\n /**\n * Inverse of inside state.\n */\n Outside = 2,\n}\n\n// @needsAudit\n/**\n * Type representing options argument in `getCurrentPositionAsync`.\n */\nexport type LocationOptions = {\n /**\n * Location manager accuracy. Pass one of `Accuracy` enum values.\n * For low-accuracies the implementation can avoid geolocation providers\n * that consume a significant amount of power (such as GPS).\n */\n accuracy?: LocationAccuracy;\n /**\n * Specifies whether to ask the user to turn on improved accuracy location mode\n * which uses Wi-Fi, cell networks and GPS sensor.\n * @default true\n * @platform android\n */\n mayShowUserSettingsDialog?: boolean;\n /**\n * Minimum time to wait between each update in milliseconds.\n * Default value may depend on `accuracy` option.\n * @platform android\n */\n timeInterval?: number;\n /**\n * Receive updates only when the location has changed by at least this distance in meters.\n * Default value may depend on `accuracy` option.\n */\n distanceInterval?: number;\n};\n\n// @needsAudit\n/**\n * Type representing options object that can be passed to `getLastKnownPositionAsync`.\n */\nexport type LocationLastKnownOptions = {\n /**\n * A number of milliseconds after which the last known location starts to be invalid and thus\n * `null` is returned.\n */\n maxAge?: number;\n /**\n * The maximum radius of uncertainty for the location, measured in meters. If the last known\n * location's accuracy radius is bigger (less accurate) then `null` is returned.\n */\n requiredAccuracy?: number;\n};\n\n// @needsAudit\n/**\n * Type representing background location task options.\n */\nexport type LocationTaskOptions = LocationOptions & {\n /**\n * A boolean indicating whether the status bar changes its appearance when\n * location services are used in the background.\n * @default false\n * @platform ios 11+\n */\n showsBackgroundLocationIndicator?: boolean;\n /**\n * The distance in meters that must occur between last reported location and the current location\n * before deferred locations are reported.\n * @default 0\n */\n deferredUpdatesDistance?: number;\n // @docsMissing\n deferredUpdatesTimeout?: number;\n /**\n * Minimum time interval in milliseconds that must pass since last reported location before all\n * later locations are reported in a batched update\n * @default 0\n */\n deferredUpdatesInterval?: number;\n /**\n * The type of user activity associated with the location updates.\n * @see See [Apple docs](https://developer.apple.com/documentation/corelocation/cllocationmanager/1620567-activitytype) for more details.\n * @default ActivityType.Other\n * @platform ios\n */\n activityType?: LocationActivityType;\n /**\n * A boolean value indicating whether the location manager can pause location\n * updates to improve battery life without sacrificing location data. When this option is set to\n * `true`, the location manager pauses updates (and powers down the appropriate hardware) at times\n * when the location data is unlikely to change. You can help the determination of when to pause\n * location updates by assigning a value to the `activityType` property.\n * @default false\n * @platform ios\n */\n pausesUpdatesAutomatically?: boolean;\n foregroundService?: LocationTaskServiceOptions;\n};\n\n// @needsAudit\nexport type LocationTaskServiceOptions = {\n /**\n * Title of the foreground service notification.\n */\n notificationTitle: string;\n /**\n * Subtitle of the foreground service notification.\n */\n notificationBody: string;\n /**\n * Color of the foreground service notification. Accepts `#RRGGBB` and `#AARRGGBB` hex formats.\n */\n notificationColor?: string;\n /**\n * Boolean value whether to destroy the foreground service if the app is killed.\n */\n killServiceOnDestroy?: boolean;\n};\n\n// @needsAudit\n/**\n * Type representing geofencing region object.\n */\nexport type LocationRegion = {\n /**\n * The identifier of the region object. Defaults to auto-generated UUID hash.\n */\n identifier?: string;\n /**\n * The latitude in degrees of region's center point.\n */\n latitude: number;\n /**\n * The longitude in degrees of region's center point.\n */\n longitude: number;\n /**\n * The radius measured in meters that defines the region's outer boundary.\n */\n radius: number;\n /**\n * Boolean value whether to call the task if the device enters the region.\n * @default true\n */\n notifyOnEnter?: boolean;\n /**\n * Boolean value whether to call the task if the device exits the region.\n * @default true\n */\n notifyOnExit?: boolean;\n /**\n * One of [GeofencingRegionState](#geofencingregionstate) region state. Determines whether the\n * device is inside or outside a region.\n */\n state?: LocationGeofencingRegionState;\n};\n\n// @needsAudit\n/**\n * Type representing the location object.\n */\nexport type LocationObject = {\n /**\n * The coordinates of the position.\n */\n coords: LocationObjectCoords;\n /**\n * The time at which this position information was obtained, in milliseconds since epoch.\n */\n timestamp: number;\n /**\n * Whether the location coordinates is mocked or not.\n * @platform android\n */\n mocked?: boolean;\n};\n\n// @needsAudit\n/**\n * Type representing the location GPS related data.\n */\nexport type LocationObjectCoords = {\n /**\n * The latitude in degrees.\n */\n latitude: number;\n /**\n * The longitude in degrees.\n */\n longitude: number;\n /**\n * The altitude in meters above the WGS 84 reference ellipsoid. Can be `null` on Web if it's not available.\n */\n altitude: number | null;\n /**\n * The radius of uncertainty for the location, measured in meters. Can be `null` on Web if it's not available.\n */\n accuracy: number | null;\n /**\n * The accuracy of the altitude value, in meters. Can be `null` on Web if it's not available.\n */\n altitudeAccuracy: number | null;\n /**\n * Horizontal direction of travel of this device, measured in degrees starting at due north and\n * continuing clockwise around the compass. Thus, north is 0 degrees, east is 90 degrees, south is\n * 180 degrees, and so on. Can be `null` on Web if it's not available.\n */\n heading: number | null;\n /**\n * The instantaneous speed of the device in meters per second. Can be `null` on Web if it's not available.\n */\n speed: number | null;\n};\n\n// @needsAudit\n/**\n * Represents `watchPositionAsync` callback.\n */\nexport type LocationCallback = (location: LocationObject) => any;\n\n// @needsAudit\n/**\n * Represents the object containing details about location provider.\n */\nexport type LocationProviderStatus = {\n /**\n * Whether location services are enabled. See [Location.hasServicesEnabledAsync](#locationhasservicesenabledasync)\n * for a more convenient solution to get this value.\n */\n locationServicesEnabled: boolean;\n // @docsMissing\n backgroundModeEnabled: boolean;\n /**\n * Whether the GPS provider is available. If `true` the location data will come\n * from GPS, especially for requests with high accuracy.\n * @platform android\n */\n gpsAvailable?: boolean;\n /**\n * Whether the network provider is available. If `true` the location data will\n * come from cellular network, especially for requests with low accuracy.\n * @platform android\n */\n networkAvailable?: boolean;\n /**\n * Whether the passive provider is available. If `true` the location data will\n * be determined passively.\n * @platform android\n */\n passiveAvailable?: boolean;\n};\n\n// @needsAudit\n/**\n * Type of the object containing heading details and provided by `watchHeadingAsync` callback.\n */\nexport type LocationHeadingObject = {\n /**\n * Measure of true north in degrees (needs location permissions, will return `-1` if not given).\n */\n trueHeading: number;\n /**\n * Measure of magnetic north in degrees.\n */\n magHeading: number;\n /**\n * Level of calibration of compass.\n * - `3`: high accuracy, `2`: medium accuracy, `1`: low accuracy, `0`: none\n * Reference for iOS:\n * - `3`: < 20 degrees uncertainty, `2`: < 35 degrees, `1`: < 50 degrees, `0`: > 50 degrees\n */\n accuracy: number;\n};\n\n// @needsAudit\n/**\n * Represents `watchHeadingAsync` callback.\n */\nexport type LocationHeadingCallback = (location: LocationHeadingObject) => any;\n\n// @needsAudit\n/**\n * An object of options for forward and reverse geocoding.\n */\nexport type LocationGeocodingOptions = {\n /**\n * Whether to force using Google Maps API instead of the native implementation.\n * Used by default only on Web platform. Requires providing an API key by `setGoogleApiKey`.\n */\n useGoogleMaps?: boolean;\n};\n\n// @needsAudit\n/**\n * Type representing a result of `geocodeAsync`.\n */\nexport type LocationGeocodedLocation = {\n /**\n * The latitude in degrees.\n */\n latitude: number;\n /**\n * The longitude in degrees.\n */\n longitude: number;\n /**\n * The altitude in meters above the WGS 84 reference ellipsoid.\n */\n altitude?: number;\n /**\n * The radius of uncertainty for the location, measured in meters.\n */\n accuracy?: number;\n};\n\n// @needsAudit\n/**\n * Type representing a result of `reverseGeocodeAsync`.\n */\nexport type LocationGeocodedAddress = {\n /**\n * City name of the address.\n */\n city: string | null;\n /**\n * Additional city-level information like district name.\n */\n district: string | null;\n /**\n * Street number of the address.\n */\n streetNumber: string | null;\n /**\n * Street name of the address.\n */\n street: string | null;\n /**\n * The state or province associated with the address.\n */\n region: string | null;\n /**\n * Additional information about administrative area.\n */\n subregion: string | null;\n /**\n * Localized country name of the address.\n */\n country: string | null;\n /**\n * Postal code of the address.\n */\n postalCode: string | null;\n /**\n * The name of the placemark, for example, \"Tower Bridge\".\n */\n name: string | null;\n /**\n * Localized (ISO) country code of the address, if available.\n */\n isoCountryCode: string | null;\n /**\n * The timezone identifier associated with the address.\n * @platform ios\n */\n timezone: string | null;\n};\n\n// @needsAudit\n/**\n * Represents subscription object returned by methods watching for new locations or headings.\n */\nexport type LocationSubscription = {\n /**\n * Call this function with no arguments to remove this subscription. The callback will no longer\n * be called for location updates.\n */\n remove: () => void;\n};\n\n// @needsAudit\nexport type PermissionDetailsLocationIOS = {\n /**\n * The scope of granted permission. Indicates when it's possible to use location.\n */\n scope: 'whenInUse' | 'always' | 'none';\n};\n\n// @needsAudit\nexport type PermissionDetailsLocationAndroid = {\n /**\n * @deprecated Use `accuracy` field instead.\n */\n scope: 'fine' | 'coarse' | 'none';\n /**\n * Indicates the type of location provider.\n */\n accuracy: 'fine' | 'coarse' | 'none';\n};\n\n// @needsAudit\n/**\n * `LocationPermissionResponse` extends [PermissionResponse](#permissionresponse)\n * type exported by `expo-modules-core` and contains additional platform-specific fields.\n */\nexport type LocationPermissionResponse = PermissionResponse & {\n ios?: PermissionDetailsLocationIOS;\n android?: PermissionDetailsLocationAndroid;\n};\n\nexport type { PermissionResponse };\n","import { EventEmitter } from 'expo-modules-core';\n\nexport const LocationEventEmitter = new EventEmitter({} as any);\n","import { Subscription } from 'expo-modules-core';\n\nimport ExpoLocation from './ExpoLocation';\nimport { LocationCallback, LocationHeadingCallback } from './Location.types';\nimport { LocationEventEmitter } from './LocationEventEmitter';\n\ntype EventObject = {\n watchId: number;\n [key: string]: any;\n};\n\nlet nextWatchId = 0;\n\nclass Subscriber {\n private eventName: string;\n private eventDataField: string;\n private callbacks: { [id: string]: CallbackType } = {};\n private eventSubscription: Subscription | null = null;\n\n constructor(eventName: string, eventDataField: string) {\n this.eventName = eventName;\n this.eventDataField = eventDataField;\n }\n\n maybeInitializeSubscription() {\n if (this.eventSubscription) {\n return;\n }\n this.eventSubscription = LocationEventEmitter.addListener(\n this.eventName,\n (event: EventObject) => this.trigger(event)\n );\n }\n\n /**\n * Registers given callback under new id which is then returned.\n */\n registerCallback(callback: CallbackType): number {\n this.maybeInitializeSubscription();\n const id = ++nextWatchId;\n this.callbacks[id] = callback;\n return id;\n }\n\n /**\n * Unregisters a callback with given id and revokes the subscription if possible.\n */\n unregisterCallback(id: number): void {\n // Do nothing if we have already unregistered the callback.\n if (!this.callbacks[id]) {\n return;\n }\n\n delete this.callbacks[id];\n ExpoLocation.removeWatchAsync(id);\n\n if (Object.keys(this.callbacks).length === 0 && this.eventSubscription) {\n LocationEventEmitter.removeSubscription(this.eventSubscription);\n this.eventSubscription = null;\n }\n }\n\n trigger(event: EventObject): void {\n const watchId = event.watchId;\n const callback = this.callbacks[watchId];\n\n if (callback) {\n callback(event[this.eventDataField]);\n } else {\n ExpoLocation.removeWatchAsync(watchId);\n }\n }\n}\n\nexport const LocationSubscriber = new Subscriber(\n 'Expo.locationChanged',\n 'location'\n);\nexport const HeadingSubscriber = new Subscriber(\n 'Expo.headingChanged',\n 'heading'\n);\n\n/**\n * @private Necessary for some unit tests.\n */\nexport function _getCurrentWatchId(): number {\n return nextWatchId;\n}\n","import qs from 'query-string';\n\nimport { MailComposerOptions, MailComposerResult, MailComposerStatus } from './MailComposer.types';\n\nfunction removeNullishValues(obj) {\n for (const propName in obj) {\n if (obj[propName] == null) {\n delete obj[propName];\n }\n }\n return obj;\n}\n\nfunction checkValue(value?: string[] | string): string | null {\n if (!value) {\n return null;\n }\n\n const arr = Array.isArray(value) ? value : [value];\n return arr.join(',');\n}\n\nexport default {\n get name(): string {\n return 'ExpoMailComposer';\n },\n async composeAsync(options: MailComposerOptions): Promise {\n const email = removeNullishValues({\n cc: checkValue(options.ccRecipients),\n bcc: checkValue(options.bccRecipients),\n subject: options.subject,\n body: options.body,\n });\n\n const query = qs.stringify(email);\n const queryComponent = query ? '?' + query : '';\n const to = checkValue(options.recipients) || '';\n const mailto = `mailto:${to}${queryComponent}`;\n\n window.open(mailto);\n\n return { status: MailComposerStatus.UNDETERMINED };\n },\n async isAvailableAsync(): Promise {\n return true;\n },\n};\n","import ExpoMailComposer from './ExpoMailComposer';\nimport { MailComposerOptions, MailComposerResult } from './MailComposer.types';\n\n// @needsAudit\n/**\n * Opens a mail modal for iOS and a mail app intent for Android and fills the fields with provided\n * data. On iOS you will need to be signed into the Mail app.\n * @return A promise fulfilled with an object containing a `status` field that specifies whether an\n * email was sent, saved, or cancelled. Android does not provide this info, so the status is always\n * set as if the email were sent.\n */\nexport async function composeAsync(options: MailComposerOptions): Promise {\n return await ExpoMailComposer.composeAsync(options);\n}\n\n// @needsAudit\n/**\n * Determine if the `MailComposer` API can be used in this app.\n * @return A promise resolves to `true` if the API can be used, and `false` otherwise.\n * - Returns `true` on iOS when the device has a default email setup for sending mail.\n * - Can return `false` on iOS if an MDM profile is setup to block outgoing mail. If this is the\n * case, you may want to use the Linking API instead.\n * - Always returns `true` in the browser and on Android.\n */\nexport async function isAvailableAsync(): Promise {\n return await ExpoMailComposer.isAvailableAsync();\n}\n\nexport * from './MailComposer.types';\n","// @needsAudit\n/**\n * A map defining the data to fill the mail.\n */\nexport type MailComposerOptions = {\n /**\n * An array of e-mail addresses of the recipients.\n */\n recipients?: string[];\n /**\n * An array of e-mail addresses of the CC recipients.\n */\n ccRecipients?: string[];\n /**\n * An array of e-mail addresses of the BCC recipients.\n */\n bccRecipients?: string[];\n /**\n * Subject of the e-mail.\n */\n subject?: string;\n /**\n * Body of the e-mail.\n */\n body?: string;\n /**\n * Whether the body contains HTML tags so it could be formatted properly.\n * Not working perfectly on Android.\n */\n isHtml?: boolean;\n /**\n * An array of app's internal file URIs to attach.\n */\n attachments?: string[];\n};\n\n// @docsMissing\nexport type MailComposerResult = {\n status: MailComposerStatus;\n};\n\n// @docsMissing\nexport enum MailComposerStatus {\n UNDETERMINED = 'undetermined',\n SENT = 'sent',\n SAVED = 'saved',\n CANCELLED = 'cancelled',\n}\n","import invariant from 'invariant';\nimport { NativeEventEmitter, NativeModules, Platform } from 'react-native';\n\nconst nativeEmitterSubscriptionKey = '@@nativeEmitterSubscription@@';\n\ntype NativeModule = {\n __expo_module_name__?: string;\n startObserving?: () => void;\n stopObserving?: () => void;\n addListener: (eventName: string) => void;\n removeListeners: (count: number) => void;\n};\n\n// @needsAudit\nexport type Subscription = {\n /**\n * A method to unsubscribe the listener.\n */\n remove: () => void;\n};\n\nexport class EventEmitter {\n _listenerCount = 0;\n _nativeModule: NativeModule;\n _eventEmitter: NativeEventEmitter;\n\n constructor(nativeModule: NativeModule) {\n // Expo modules installed through the JSI don't have `addListener` and `removeListeners` set,\n // so if someone wants to use them with `EventEmitter`, make sure to provide these functions\n // as they are required by `NativeEventEmitter`. This is only temporary — in the future\n // JSI modules will have event emitter built in.\n if (nativeModule.__expo_module_name__ && NativeModules.EXReactNativeEventEmitter) {\n nativeModule.addListener = (...args) =>\n NativeModules.EXReactNativeEventEmitter.addProxiedListener(\n nativeModule.__expo_module_name__,\n ...args\n );\n nativeModule.removeListeners = (...args) =>\n NativeModules.EXReactNativeEventEmitter.removeProxiedListeners(\n nativeModule.__expo_module_name__,\n ...args\n );\n }\n this._nativeModule = nativeModule;\n this._eventEmitter = new NativeEventEmitter(nativeModule as any);\n }\n\n addListener(eventName: string, listener: (event: T) => void): Subscription {\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.startObserving) {\n this._nativeModule.startObserving();\n }\n\n this._listenerCount++;\n const nativeEmitterSubscription = this._eventEmitter.addListener(eventName, listener);\n const subscription = {\n [nativeEmitterSubscriptionKey]: nativeEmitterSubscription,\n remove: () => {\n this.removeSubscription(subscription);\n },\n };\n return subscription;\n }\n\n removeAllListeners(eventName: string): void {\n // @ts-ignore: the EventEmitter interface has been changed in react-native@0.64.0\n const removedListenerCount = this._eventEmitter.listenerCount\n ? // @ts-ignore: this is available since 0.64\n this._eventEmitter.listenerCount(eventName)\n : // @ts-ignore: this is available in older versions\n this._eventEmitter.listeners(eventName).length;\n this._eventEmitter.removeAllListeners(eventName);\n this._listenerCount -= removedListenerCount;\n invariant(\n this._listenerCount >= 0,\n `EventEmitter must have a non-negative number of listeners`\n );\n\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.stopObserving) {\n this._nativeModule.stopObserving();\n }\n }\n\n removeSubscription(subscription: Subscription): void {\n const nativeEmitterSubscription = subscription[nativeEmitterSubscriptionKey];\n if (!nativeEmitterSubscription) {\n return;\n }\n\n if ('remove' in nativeEmitterSubscription) {\n // `react-native-web@0.17.1` doesn't support `removeSubscription`\n nativeEmitterSubscription.remove();\n } else if ('removeSubscription' in this._eventEmitter) {\n this._eventEmitter.removeSubscription(nativeEmitterSubscription!);\n }\n this._listenerCount--;\n\n // Ensure that the emitter's internal state remains correct even if `removeSubscription` is\n // called again with the same subscription\n delete subscription[nativeEmitterSubscriptionKey];\n\n // Release closed-over references to the emitter\n subscription.remove = () => {};\n\n if (!this._listenerCount && Platform.OS !== 'ios' && this._nativeModule.stopObserving) {\n this._nativeModule.stopObserving();\n }\n }\n\n emit(eventName: string, ...params: any[]): void {\n this._eventEmitter.emit(eventName, ...params);\n }\n}\n","import { ProxyNativeModule } from './NativeModulesProxy.types';\n\n// We default to an empty object shim wherever we don't have an environment-specific implementation\nexport default {} as { [moduleName: string]: ProxyNativeModule };\n","import React from 'react';\n\nimport { UnavailabilityError } from './errors/UnavailabilityError';\n\nexport function requireNativeViewManager

(viewName: string): React.ComponentType

{\n throw new UnavailabilityError('expo-modules-core', 'requireNativeViewManager');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { PermissionResponse } from './PermissionsInterface';\n\n// These types are identical, but improves the readability for suggestions in editors\ntype RequestPermissionMethod = () => Promise;\ntype GetPermissionMethod = () => Promise;\n\ninterface PermissionHookMethods {\n /** The permission method that requests the user to grant permission. */\n requestMethod: (options?: Options) => Promise;\n /** The permission method that only fetches the current permission status. */\n getMethod: (options?: Options) => Promise;\n}\n\ninterface PermissionHookBehavior {\n /** If the hook should automatically fetch the current permission status, without asking the user. */\n get?: boolean;\n /** If the hook should automatically request the user to grant permission. */\n request?: boolean;\n}\n\nexport type PermissionHookOptions = PermissionHookBehavior & Options;\n\n/**\n * Get or request permission for protected functionality within the app.\n * It uses separate permission requesters to interact with a single permission.\n * By default, the hook will only retrieve the permission status.\n */\nfunction usePermission(\n methods: PermissionHookMethods,\n options?: PermissionHookOptions\n): [Permission | null, RequestPermissionMethod, GetPermissionMethod] {\n const isMounted = useRef(true);\n const [status, setStatus] = useState(null);\n const { get = true, request = false, ...permissionOptions } = options || {};\n\n const getPermission = useCallback(async () => {\n const response = await methods.getMethod(\n Object.keys(permissionOptions).length > 0 ? (permissionOptions as Options) : undefined\n );\n if (isMounted.current) setStatus(response);\n return response;\n }, [methods.getMethod]);\n\n const requestPermission = useCallback(async () => {\n const response = await methods.requestMethod(\n Object.keys(permissionOptions).length > 0 ? (permissionOptions as Options) : undefined\n );\n if (isMounted.current) setStatus(response);\n return response;\n }, [methods.requestMethod]);\n\n useEffect(\n function runMethods() {\n if (request) requestPermission();\n if (!request && get) getPermission();\n },\n [get, request, requestPermission, getPermission]\n );\n\n // Workaround for unmounting components receiving state updates\n useEffect(function didMount() {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return [status, requestPermission, getPermission];\n}\n\n/**\n * Create a new permission hook with the permission methods built-in.\n * This can be used to quickly create specific permission hooks in every module.\n */\nexport function createPermissionHook(\n methods: PermissionHookMethods\n) {\n return (options?: PermissionHookOptions) =>\n usePermission(methods, options);\n}\n","export enum PermissionStatus {\n /**\n * User has granted the permission.\n */\n GRANTED = 'granted',\n /**\n * User hasn't granted or denied the permission yet.\n */\n UNDETERMINED = 'undetermined',\n /**\n * User has denied the permission.\n */\n DENIED = 'denied',\n}\n\n/**\n * Permission expiration time. Currently, all permissions are granted permanently.\n */\nexport type PermissionExpiration = 'never' | number;\n\n/**\n * An object obtained by permissions get and request functions.\n */\nexport interface PermissionResponse {\n /**\n * Determines the status of the permission.\n */\n status: PermissionStatus;\n /**\n * Determines time when the permission expires.\n */\n expires: PermissionExpiration;\n /**\n * A convenience boolean that indicates if the permission is granted.\n */\n granted: boolean;\n /**\n * Indicates if user can be asked again for specific permission.\n * If not, one should be directed to the Settings app\n * in order to enable/disable the permission.\n */\n canAskAgain: boolean;\n}\n","import { Platform as ReactNativePlatform, PlatformOSType } from 'react-native';\n\nimport {\n isDOMAvailable,\n canUseEventListeners,\n canUseViewport,\n isAsyncDebugging,\n} from './environment/browser';\n\nexport type PlatformSelectOSType = PlatformOSType | 'native' | 'electron' | 'default';\n\nexport type PlatformSelect = (specifics: { [platform in PlatformSelectOSType]?: T }) => T;\n\nconst Platform = {\n /**\n * Denotes the currently running platform.\n * Can be one of ios, android, web.\n */\n OS: ReactNativePlatform.OS,\n /**\n * Returns the value with the matching platform.\n * Object keys can be any of ios, android, native, web, default.\n *\n * @ios ios, native, default\n * @android android, native, default\n * @web web, default\n */\n select: ReactNativePlatform.select as PlatformSelect,\n /**\n * Denotes if the DOM API is available in the current environment.\n * The DOM is not available in native React runtimes and Node.js.\n */\n isDOMAvailable,\n /**\n * Denotes if the current environment can attach event listeners\n * to the window. This will return false in native React\n * runtimes and Node.js.\n */\n canUseEventListeners,\n /**\n * Denotes if the current environment can inspect properties of the\n * screen on which the current window is being rendered. This will\n * return false in native React runtimes and Node.js.\n */\n canUseViewport,\n /**\n * If the JavaScript is being executed in a remote JavaScript environment.\n * When `true`, synchronous native invocations cannot be executed.\n */\n isAsyncDebugging,\n};\n\nexport default Platform;\n","/**\n * This emitter is used for sending synthetic native events to listeners\n * registered in the API layer with `NativeEventEmitter`.\n */\nexport { DeviceEventEmitter as default } from 'react-native';\n","/** A union type for all integer based [`TypedArray` objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects). */\nexport type IntBasedTypedArray = Int8Array | Int16Array | Int32Array;\n\n/** A union type for all unsigned integer based [`TypedArray` objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects). */\nexport type UintBasedTypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array;\n\n/** A union type for all floating point based [`TypedArray` objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects). */\nexport type FloatBasedTypedArray = Float32Array | Float64Array;\n\n/** A [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray) describes an array-like view of an underlying binary data buffer. */\nexport type TypedArray = IntBasedTypedArray | UintBasedTypedArray | FloatBasedTypedArray;\n","import compareVersions from 'compare-versions';\n\nimport { CodedError } from './errors/CodedError';\n\nconst postedWarnings: { [key: string]: boolean } = {};\n\n/**\n * Used for deprecating values and throwing an error if a given version of Expo has passed.\n */\nexport default function deprecate(\n library: string,\n deprecatedAPI: string,\n options: {\n replacement?: string;\n currentVersion?: string;\n versionToRemove?: string;\n } = {}\n): void {\n const { currentVersion, versionToRemove, replacement } = options;\n const code = codeFromLibrary(library);\n const key = `${code}:${deprecatedAPI}:${replacement}`;\n if (!postedWarnings[key]) {\n postedWarnings[key] = true;\n }\n\n if (\n !currentVersion ||\n !versionToRemove ||\n compareVersions(currentVersion, versionToRemove) >= 0\n ) {\n let message = `\\`${deprecatedAPI}\\` has been removed`;\n if (versionToRemove) {\n message = `${message} as of version \"${versionToRemove}\"`;\n }\n if (replacement && replacement.length) {\n message = `${message} please migrate to: \\`${replacement}\\``;\n }\n\n throw new CodedError(`ERR_DEPRECATED_API`, prependLibrary(library, message));\n }\n\n let message = `\\`${deprecatedAPI}\\` has been deprecated`;\n if (replacement && replacement.length) {\n message = `${message} in favor of \\`${replacement}\\``;\n }\n if (versionToRemove && versionToRemove.length) {\n message = `${message} and will be removed in version \"${versionToRemove}\"`;\n }\n console.warn(prependLibrary(library, message));\n}\n\nfunction prependLibrary(library: string, message: string): string {\n return `${library}: ${message}`;\n}\n\n/**\n * Transform format:\n * Expo.AR -> EXPO_AR\n * expo-ar -> EXPO_AR\n */\nfunction codeFromLibrary(library: string): string {\n const code = library.replace(/[-.]/g, '_').toUpperCase();\n return code;\n}\n","declare global {\n // Add IE-specific interface to Window\n interface Window {\n attachEvent(event: string, listener: EventListener): boolean;\n }\n}\n\n// Used for delegating node actions when browser APIs aren't available\n// like in SSR websites.\nexport const isDOMAvailable = typeof window !== 'undefined' && !!window.document?.createElement;\nexport const canUseEventListeners =\n isDOMAvailable && !!(window.addEventListener || window.attachEvent);\nexport const canUseViewport = isDOMAvailable && !!window.screen;\nexport const isAsyncDebugging = false;\n","/**\n * A general error class that should be used for all errors in Expo modules.\n * Guarantees a `code` field that can be used to differentiate between different\n * types of errors without further subclassing Error.\n */\nexport class CodedError extends Error {\n code: string;\n info?: any;\n\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n }\n}\n","import Platform from '../Platform';\nimport { CodedError } from './CodedError';\n\n/**\n * A class for errors to be thrown when a property is accessed which is\n * unavailable, unsupported, or not currently implemented on the running\n * platform.\n */\nexport class UnavailabilityError extends CodedError {\n constructor(moduleName: string, propertyName: string) {\n super(\n 'ERR_UNAVAILABLE',\n `The method or property ${moduleName}.${propertyName} is not available on ${Platform.OS}, are you sure you've linked all the native dependencies properly?`\n );\n }\n}\n","import { DeviceEventEmitter } from 'react-native';\n\nimport { EventEmitter, Subscription } from './EventEmitter';\nimport NativeModulesProxy from './NativeModulesProxy';\nimport { ProxyNativeModule } from './NativeModulesProxy.types';\nimport { requireNativeViewManager } from './NativeViewManagerAdapter';\nimport Platform from './Platform';\nimport SyntheticPlatformEmitter from './SyntheticPlatformEmitter';\nimport { CodedError } from './errors/CodedError';\nimport { UnavailabilityError } from './errors/UnavailabilityError';\n\nimport './sweet/setUpErrorManager.fx';\n\nexport { default as deprecate } from './deprecate';\n\nexport {\n DeviceEventEmitter,\n EventEmitter,\n NativeModulesProxy,\n ProxyNativeModule,\n Platform,\n Subscription,\n SyntheticPlatformEmitter,\n requireNativeViewManager,\n // Errors\n CodedError,\n UnavailabilityError,\n};\n\nexport * from './requireNativeModule';\nexport * from './TypedArrays.types';\n\n/**\n * @deprecated renamed to `DeviceEventEmitter`\n */\nexport const RCTDeviceEventEmitter = DeviceEventEmitter;\n\nexport * from './PermissionsInterface';\nexport * from './PermissionsHook';\n","import NativeModulesProxy from './NativeModulesProxy';\n\ntype ExpoObject = {\n modules:\n | undefined\n | {\n [key: string]: any;\n };\n};\n\ndeclare global {\n // eslint-disable-next-line no-var\n var expo: ExpoObject | undefined;\n\n /**\n * @deprecated `global.ExpoModules` is deprecated, use `global.expo.modules` instead.\n */\n // eslint-disable-next-line no-var\n var ExpoModules:\n | undefined\n | {\n [key: string]: any;\n };\n}\n\n/**\n * Imports the native module registered with given name. In the first place it tries to load\n * the module installed through the JSI host object and then falls back to the bridge proxy module.\n * Notice that the modules loaded from the proxy may not support some features like synchronous functions.\n *\n * @param moduleName Name of the requested native module.\n * @returns Object representing the native module.\n * @throws Error when there is no native module with given name.\n */\nexport function requireNativeModule(moduleName: string): ModuleType {\n const nativeModule: ModuleType =\n globalThis.expo?.modules?.[moduleName] ??\n globalThis.ExpoModules?.[moduleName] ??\n NativeModulesProxy[moduleName];\n\n if (!nativeModule) {\n throw new Error(`Cannot find native module '${moduleName}'`);\n }\n return nativeModule;\n}\n","import NativeModulesProxy from '../NativeModulesProxy';\nexport default NativeModulesProxy.ExpoModulesCoreErrorManager;\n","import { EventEmitter } from '../EventEmitter';\nimport Platform from '../Platform';\nimport { CodedError } from '../errors/CodedError';\nimport NativeErrorManager from './NativeErrorManager';\n\nif (__DEV__ && Platform.OS === 'android' && NativeErrorManager) {\n const onNewException = 'ExpoModulesCoreErrorManager.onNewException';\n const eventEmitter = new EventEmitter(NativeErrorManager);\n\n eventEmitter.addListener(onNewException, ({ message }: { message: string }) => {\n console.error(message);\n });\n}\n\n// We have to export `CodedError` via global object to use in later in the C++ code.\nglobalThis.ExpoModulesCore_CodedError = CodedError;\n","import { BadgeModule } from './BadgeModule.types';\n\nlet lastSetBadgeCount = 0;\n\nconst badgeModule: BadgeModule = {\n addListener: () => {},\n removeListeners: () => {},\n getBadgeCountAsync: async () => {\n return lastSetBadgeCount;\n },\n setBadgeCountAsync: async (badgeCount, options) => {\n // If this module is loaded in SSR (NextJS), we can't modify the badge.\n // It also can't load the badgin module, that instantly invokes methods on window.\n if (typeof window === 'undefined') {\n return false;\n }\n const badgin = require('badgin');\n if (badgeCount > 0) {\n badgin.set(badgeCount, options);\n } else {\n badgin.clear();\n }\n lastSetBadgeCount = badgeCount;\n return true;\n },\n};\n\nexport default badgeModule;\n","import { ProxyNativeModule } from 'expo-modules-core';\n\n// @docsMissing\nexport enum AndroidNotificationVisibility {\n UNKNOWN = 0,\n PUBLIC = 1,\n PRIVATE = 2,\n SECRET = 3,\n}\n\n// @docsMissing\nexport enum AndroidAudioContentType {\n UNKNOWN = 0,\n SPEECH = 1,\n MUSIC = 2,\n MOVIE = 3,\n SONIFICATION = 4,\n}\n\n// @docsMissing\nexport enum AndroidImportance {\n UNKNOWN = 0,\n UNSPECIFIED = 1,\n NONE = 2,\n MIN = 3,\n LOW = 4,\n DEFAULT = 5,\n /**\n * @deprecated Use `DEFAULT` instead.\n */\n DEEFAULT = 5,\n HIGH = 6,\n MAX = 7,\n}\n\n// @docsMissing\nexport enum AndroidAudioUsage {\n UNKNOWN = 0,\n MEDIA = 1,\n VOICE_COMMUNICATION = 2,\n VOICE_COMMUNICATION_SIGNALLING = 3,\n ALARM = 4,\n NOTIFICATION = 5,\n NOTIFICATION_RINGTONE = 6,\n NOTIFICATION_COMMUNICATION_REQUEST = 7,\n NOTIFICATION_COMMUNICATION_INSTANT = 8,\n NOTIFICATION_COMMUNICATION_DELAYED = 9,\n NOTIFICATION_EVENT = 10,\n ASSISTANCE_ACCESSIBILITY = 11,\n ASSISTANCE_NAVIGATION_GUIDANCE = 12,\n ASSISTANCE_SONIFICATION = 13,\n GAME = 14,\n}\n\n// @docsMissing\nexport interface AudioAttributes {\n usage: AndroidAudioUsage;\n contentType: AndroidAudioContentType;\n flags: {\n enforceAudibility: boolean;\n requestHardwareAudioVideoSynchronization: boolean;\n };\n}\n\n// We're making inner flags required to set intentionally.\n// Not providing `true` for a flag makes it false, it doesn't make sense\n// to let it be left undefined.\nexport type AudioAttributesInput = Partial;\n\n/**\n * An object represents a notification channel.\n * @platform android\n */\nexport interface NotificationChannel {\n id: string;\n name: string | null;\n importance: AndroidImportance;\n bypassDnd: boolean;\n description: string | null;\n groupId?: string | null;\n lightColor: string;\n lockscreenVisibility: AndroidNotificationVisibility;\n showBadge: boolean;\n sound: 'default' | 'custom' | null;\n audioAttributes: AudioAttributes;\n vibrationPattern: number[] | null;\n enableLights: boolean;\n enableVibrate: boolean;\n}\n\ntype RequiredBy = Partial> & Required>;\n\n/**\n * An object represents a notification channel to be set.\n * @platform android\n */\nexport type NotificationChannelInput = RequiredBy<\n Omit<\n NotificationChannel,\n | 'id' // id is handled separately as a function argument\n | 'audioAttributes' // need to make it AudioAttributesInput\n | 'sound'\n > & { audioAttributes?: AudioAttributesInput; sound?: string | null },\n 'name' | 'importance'\n>;\n\nexport interface NotificationChannelManager extends ProxyNativeModule {\n getNotificationChannelsAsync?: () => Promise;\n getNotificationChannelAsync?: (channelId: string) => Promise;\n setNotificationChannelAsync?: (\n channelId: string,\n channelConfiguration: NotificationChannelInput\n ) => Promise;\n deleteNotificationChannelAsync?: (channelId: string) => Promise;\n}\n","import { createPermissionHook, Platform, UnavailabilityError } from 'expo-modules-core';\n\nimport {\n NotificationPermissionsRequest,\n NotificationPermissionsStatus,\n} from './NotificationPermissions.types';\nimport NotificationPermissionsModule from './NotificationPermissionsModule';\n\n/**\n * Calling this function checks current permissions settings related to notifications.\n * It lets you verify whether the app is currently allowed to display alerts, play sounds, etc.\n * There is no user-facing effect of calling this.\n * @return It returns a `Promise` resolving to an object represents permission settings ([`NotificationPermissionsStatus`](#notificationpermissionsstatus)).\n * On iOS, make sure you [properly interpret the permissions response](#interpreting-the-ios-permissions-response).\n * @example Check if the app is allowed to send any type of notifications (interrupting and non-interrupting–provisional on iOS).\n * ```ts\n * import * as Notifications from 'expo-notifications';\n *\n * export async function allowsNotificationsAsync() {\n * const settings = await Notifications.getPermissionsAsync();\n * return (\n * settings.granted || settings.ios?.status === Notifications.IosAuthorizationStatus.PROVISIONAL\n * );\n * }\n * ```\n * @header permissions\n */\nexport async function getPermissionsAsync() {\n if (!NotificationPermissionsModule.getPermissionsAsync) {\n throw new UnavailabilityError('Notifications', 'getPermissionsAsync');\n }\n\n return await NotificationPermissionsModule.getPermissionsAsync();\n}\n\n/**\n * Prompts the user for notification permissions according to request. **Request defaults to asking the user to allow displaying alerts,\n * setting badge count and playing sounds**.\n * @param permissions An object representing configuration for the request scope.\n * @return It returns a Promise resolving to an object represents permission settings ([`NotificationPermissionsStatus`](#notificationpermissionsstatus)).\n * On iOS, make sure you [properly interpret the permissions response](#interpreting-the-ios-permissions-response).\n * @example Prompts the user to allow the app to show alerts, play sounds, set badge count and let Siri read out messages through AirPods.\n * ```ts\n * import * as Notifications from 'expo-notifications';\n *\n * export function requestPermissionsAsync() {\n * return await Notifications.requestPermissionsAsync({\n * ios: {\n * allowAlert: true,\n * allowBadge: true,\n * allowSound: true,\n * allowAnnouncements: true,\n * },\n * });\n * }\n * ```\n * @header permissions\n */\nexport async function requestPermissionsAsync(permissions?: NotificationPermissionsRequest) {\n if (!NotificationPermissionsModule.requestPermissionsAsync) {\n throw new UnavailabilityError('Notifications', 'requestPermissionsAsync');\n }\n\n const requestedPermissions = permissions ?? {\n ios: {\n allowAlert: true,\n allowBadge: true,\n allowSound: true,\n },\n };\n const requestedPlatformPermissions = requestedPermissions[Platform.OS];\n return await NotificationPermissionsModule.requestPermissionsAsync(requestedPlatformPermissions);\n}\n\n// @needsAudit\n/**\n * Check or request permissions to send and receive push notifications.\n * This uses both `requestPermissionsAsync` and `getPermissionsAsync` to interact with the permissions.\n * @example\n * ```ts\n * const [permissionResponse, requestPermission] = Notifications.usePermissions();\n * ```\n * @header permission\n */\nexport const usePermissions = createPermissionHook<\n NotificationPermissionsStatus,\n NotificationPermissionsRequest\n>({\n requestMethod: requestPermissionsAsync,\n getMethod: getPermissionsAsync,\n});\n","import { PermissionStatus, Platform } from 'expo-modules-core';\n\nimport {\n NativeNotificationPermissionsRequest,\n NotificationPermissionsStatus,\n} from './NotificationPermissions.types';\nimport { NotificationPermissionsModule } from './NotificationPermissionsModule.types';\n\nfunction convertPermissionStatus(\n status?: NotificationPermission | 'prompt'\n): NotificationPermissionsStatus {\n switch (status) {\n case 'granted':\n return {\n status: PermissionStatus.GRANTED,\n expires: 'never',\n canAskAgain: false,\n granted: true,\n };\n case 'denied':\n return {\n status: PermissionStatus.DENIED,\n expires: 'never',\n canAskAgain: false,\n granted: false,\n };\n default:\n return {\n status: PermissionStatus.UNDETERMINED,\n expires: 'never',\n canAskAgain: true,\n granted: false,\n };\n }\n}\n\nasync function resolvePermissionAsync({\n shouldAsk,\n}: {\n shouldAsk: boolean;\n}): Promise {\n if (!Platform.isDOMAvailable) {\n return convertPermissionStatus('denied');\n }\n\n const { Notification = {} } = window as any;\n if (typeof Notification.requestPermission !== 'undefined') {\n let status = Notification.permission;\n if (shouldAsk) {\n status = await new Promise((resolve, reject) => {\n let resolved = false;\n function resolveOnce(status: string) {\n if (!resolved) {\n resolved = true;\n resolve(status);\n }\n }\n // Some browsers require a callback argument and some return a Promise\n Notification.requestPermission(resolveOnce)?.then(resolveOnce)?.catch(reject);\n });\n }\n return convertPermissionStatus(status);\n } else if (typeof navigator !== 'undefined' && navigator?.permissions?.query) {\n // TODO(Bacon): Support `push` in the future when it's stable.\n const query = await navigator.permissions.query({ name: 'notifications' });\n return convertPermissionStatus(query.state);\n }\n // Platforms like iOS Safari don't support Notifications so return denied.\n return convertPermissionStatus('denied');\n}\n\nexport default {\n addListener: () => {},\n removeListeners: () => {},\n async getPermissionsAsync(): Promise {\n return resolvePermissionAsync({ shouldAsk: false });\n },\n async requestPermissionsAsync(\n request: NativeNotificationPermissionsRequest\n ): Promise {\n return resolvePermissionAsync({ shouldAsk: true });\n },\n} as NotificationPermissionsModule;\n","import { EventEmitter, Subscription, CodedError, UnavailabilityError } from 'expo-modules-core';\n\nimport { Notification, NotificationBehavior } from './Notifications.types';\nimport NotificationsHandlerModule from './NotificationsHandlerModule';\n\n/**\n * @hidden\n */\nexport class NotificationTimeoutError extends CodedError {\n info: { notification: Notification; id: string };\n constructor(notificationId: string, notification: Notification) {\n super('ERR_NOTIFICATION_TIMEOUT', `Notification handling timed out for ID ${notificationId}.`);\n this.info = { id: notificationId, notification };\n }\n}\n\n// @docsMissing\nexport type NotificationHandlingError = NotificationTimeoutError | Error;\n\nexport interface NotificationHandler {\n /**\n * A function accepting an incoming notification returning a `Promise` resolving to a behavior ([`NotificationBehavior`](#notificationbehavior))\n * applicable to the notification\n * @param notification An object representing the notification.\n */\n handleNotification: (notification: Notification) => Promise;\n /**\n * A function called whenever an incoming notification is handled successfully.\n * @param notificationId Identifier of the notification.\n */\n handleSuccess?: (notificationId: string) => void;\n /**\n * A function called whenever handling of an incoming notification fails.\n * @param notificationId Identifier of the notification.\n * @param error An error which occurred in form of `NotificationHandlingError` object.\n */\n handleError?: (notificationId: string, error: NotificationHandlingError) => void;\n}\n\ntype HandleNotificationEvent = {\n id: string;\n notification: Notification;\n};\n\ntype HandleNotificationTimeoutEvent = HandleNotificationEvent;\n\n// Web uses SyntheticEventEmitter\nconst notificationEmitter = new EventEmitter(NotificationsHandlerModule);\n\nconst handleNotificationEventName = 'onHandleNotification';\nconst handleNotificationTimeoutEventName = 'onHandleNotificationTimeout';\n\nlet handleSubscription: Subscription | null = null;\nlet handleTimeoutSubscription: Subscription | null = null;\n\n/**\n * When a notification is received while the app is running, using this function you can set a callback that will decide\n * whether the notification should be shown to the user or not.\n *\n * When a notification is received, `handleNotification` is called with the incoming notification as an argument.\n * The function should respond with a behavior object within 3 seconds, otherwise, the notification will be discarded.\n * If the notification is handled successfully, `handleSuccess` is called with the identifier of the notification,\n * otherwise (or on timeout) `handleError` will be called.\n *\n * The default behavior when the handler is not set or does not respond in time is not to show the notification.\n * @param handler A single parameter which should be either `null` (if you want to clear the handler) or a [`NotificationHandler`](#notificationhandler) object.\n *\n * @example Implementing a notification handler that always shows the notification when it is received.\n * ```jsx\n * import * as Notifications from 'expo-notifications';\n *\n * Notifications.setNotificationHandler({\n * handleNotification: async () => ({\n * shouldShowAlert: true,\n * shouldPlaySound: false,\n * shouldSetBadge: false,\n * }),\n * });\n * ```\n * @header inForeground\n */\nexport function setNotificationHandler(handler: NotificationHandler | null): void {\n if (handleSubscription) {\n handleSubscription.remove();\n handleSubscription = null;\n }\n if (handleTimeoutSubscription) {\n handleTimeoutSubscription.remove();\n handleTimeoutSubscription = null;\n }\n\n if (handler) {\n handleSubscription = notificationEmitter.addListener(\n handleNotificationEventName,\n async ({ id, notification }) => {\n if (!NotificationsHandlerModule.handleNotificationAsync) {\n handler.handleError?.(\n id,\n new UnavailabilityError('Notifications', 'handleNotificationAsync')\n );\n return;\n }\n\n try {\n const behavior = await handler.handleNotification(notification);\n await NotificationsHandlerModule.handleNotificationAsync(id, behavior);\n handler.handleSuccess?.(id);\n } catch (error) {\n handler.handleError?.(id, error);\n }\n }\n );\n\n handleTimeoutSubscription = notificationEmitter.addListener(\n handleNotificationTimeoutEventName,\n ({ id, notification }) =>\n handler.handleError?.(id, new NotificationTimeoutError(id, notification))\n );\n }\n}\n","import { Platform } from 'expo-modules-core';\n\nimport { NotificationsHandlerModule } from './NotificationsHandlerModule.types';\n\nlet warningHasBeenShown = false;\n\nexport default {\n addListener: () => {\n if (!warningHasBeenShown) {\n console.warn(\n `[expo-notifications] Notifications handling is not yet fully supported on ${Platform.OS}. Handling notifications will have no effect.`\n );\n warningHasBeenShown = true;\n }\n },\n removeListeners: () => {},\n} as NotificationsHandlerModule;\n","import Constants from 'expo-constants';\nimport { CodedError, Platform, SyntheticPlatformEmitter } from 'expo-modules-core';\n\nimport { DevicePushToken } from './Tokens.types';\n\nexport default async function getDevicePushTokenAsync(): Promise {\n const data = await _subscribeDeviceToPushNotificationsAsync();\n SyntheticPlatformEmitter.emit('onDevicePushToken', { devicePushToken: data });\n return { type: Platform.OS, data };\n}\n\nfunction guardPermission() {\n if (!('Notification' in window)) {\n throw new CodedError(\n 'ERR_UNAVAILABLE',\n 'The Web Notifications API is not available on this device.'\n );\n }\n if (!navigator.serviceWorker) {\n throw new CodedError(\n 'ERR_UNAVAILABLE',\n 'Notifications cannot be used because the service worker API is not supported on this device. This might also happen because your web page does not support HTTPS.'\n );\n }\n if (Notification.permission !== 'granted') {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PERMISSION_DENIED',\n `Cannot use web notifications without permissions granted. Request permissions with \"expo-permissions\".`\n );\n }\n}\n\nasync function _subscribeDeviceToPushNotificationsAsync(): Promise {\n // @ts-expect-error: TODO: not on the schema\n const vapidPublicKey: string | null = Constants.expoConfig?.notification?.vapidPublicKey;\n if (!vapidPublicKey) {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PUSH_WEB_MISSING_CONFIG',\n 'You must provide `notification.vapidPublicKey` in `app.json` to use push notifications on web. Learn more: https://docs.expo.dev/versions/latest/guides/using-vapid/.'\n );\n }\n\n // @ts-expect-error: TODO: not on the schema\n const serviceWorkerPath = Constants.expoConfig?.notification?.serviceWorkerPath;\n if (!serviceWorkerPath) {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PUSH_MISSING_CONFIGURATION',\n 'You must specify `notification.serviceWorkerPath` in `app.json` to use push notifications on the web. Please provide the path to the service worker that will handle notifications.'\n );\n }\n guardPermission();\n\n let registration: ServiceWorkerRegistration | null = null;\n try {\n registration = await navigator.serviceWorker.register(serviceWorkerPath);\n } catch (error) {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PUSH_REGISTRATION_FAILED',\n `Could not register this device for push notifications because the service worker (${serviceWorkerPath}) could not be registered: ${error}`\n );\n }\n await navigator.serviceWorker.ready;\n\n if (!registration.active) {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PUSH_REGISTRATION_FAILED',\n 'Could not register this device for push notifications because the service worker is not active.'\n );\n }\n\n const subscribeOptions = {\n userVisibleOnly: true,\n applicationServerKey: _urlBase64ToUint8Array(vapidPublicKey),\n };\n let pushSubscription: PushSubscription | null = null;\n try {\n pushSubscription = await registration.pushManager.subscribe(subscribeOptions);\n } catch (error) {\n throw new CodedError(\n 'ERR_NOTIFICATIONS_PUSH_REGISTRATION_FAILED',\n 'The device was unable to register for remote notifications with the browser endpoint. (' +\n error +\n ')'\n );\n }\n const pushSubscriptionJson = pushSubscription.toJSON();\n\n const subscriptionObject = {\n endpoint: pushSubscriptionJson.endpoint,\n keys: {\n p256dh: pushSubscriptionJson.keys!.p256dh,\n auth: pushSubscriptionJson.keys!.auth,\n },\n };\n\n // Store notification icon string in service worker.\n // This message is received by `/expo-service-worker.js`.\n // We wrap it with `fromExpoWebClient` to make sure other message\n // will not override content such as `notificationIcon`.\n // https://stackoverflow.com/a/35729334/2603230\n const notificationIcon = (Constants.expoConfig?.notification ?? {}).icon;\n await registration.active.postMessage(\n JSON.stringify({ fromExpoWebClient: { notificationIcon } })\n );\n\n return subscriptionObject;\n}\n\n// https://github.com/web-push-libs/web-push#using-vapid-key-for-applicationserverkey\nfunction _urlBase64ToUint8Array(base64String: string): Uint8Array {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n","import { UnavailabilityError, Platform } from 'expo-modules-core';\n\nimport BadgeModule from './BadgeModule';\nimport { WebSetBadgeCountOptions } from './BadgeModule.types';\n\nexport interface SetBadgeCountOptions {\n /**\n * A configuration object described [in the `badgin` documentation](https://github.com/jaulz/badgin#options).\n */\n web?: WebSetBadgeCountOptions;\n}\n\n/**\n * Sets the badge of the app's icon to the specified number. Setting it to `0` clears the badge. On iOS, this method requires that you have requested\n * the user's permission for `allowBadge` via [`requestPermissionsAsync`](#notificationsrequestpermissionsasyncpermissions),\n * otherwise it will automatically return `false`.\n * > **Note:** Not all Android launchers support application badges. If the launcher does not support icon badges, the method will resolve to `false`.\n * @param badgeCount The count which should appear on the badge. A value of `0` will clear the badge.\n * @param options An object of options configuring behavior applied in Web environment.\n * @return It returns a Promise resolving to a boolean representing whether the setting of the badge succeeded.\n * @header badge\n */\nexport default async function setBadgeCountAsync(\n badgeCount: number,\n options?: SetBadgeCountOptions\n): Promise {\n if (!BadgeModule.setBadgeCountAsync) {\n throw new UnavailabilityError('ExpoNotifications', 'setBadgeCountAsync');\n }\n\n return await BadgeModule.setBadgeCountAsync(badgeCount, options?.[Platform.OS]);\n}\n","import { NotificationChannel, NotificationChannelInput } from './NotificationChannelManager.types';\n\n/**\n * Assigns the channel configuration to a channel of a specified name (creating it if need be).\n * This method lets you assign given notification channel to a notification channel group.\n *\n * > **Note:** For some settings to be applied on all Android versions, it may be necessary to duplicate the configuration across both\n * > a single notification and its respective notification channel.\n *\n * For example, for a notification to play a custom sound on Android versions **below** 8.0,\n * the custom notification sound has to be set on the notification (through the [`NotificationContentInput`](#notificationcontentinput)),\n * and for the custom sound to play on Android versions **above** 8.0, the relevant notification channel must have the custom sound configured\n * (through the [`NotificationChannelInput`](#notificationchannelinput)). For more information,\n * see [\"Setting custom notification sounds on Android\"](#setting-custom-notification-sounds-on-android).\n * @param channelId The channel identifier.\n * @param channel Object representing the channel's configuration.\n * @return A Promise which resolving to the object (of type [`NotificationChannel`](#notificationchannel)) describing the modified channel\n * or to `null` if the platform does not support notification channels.\n * @platform android\n * @header channels\n */\nexport default async function setNotificationChannelAsync(\n channelId: string,\n channel: NotificationChannelInput\n): Promise {\n console.debug('Notification channels feature is only supported on Android.');\n return null;\n}\n","export default {\n get name(): string {\n return 'ExpoSplashScreen';\n },\n preventAutoHideAsync() {\n return false;\n },\n hideAsync() {\n return false;\n },\n};\n","import { UnavailabilityError } from 'expo-modules-core';\n\nimport ExpoSplashScreen from './ExpoSplashScreen';\n\n// @needsAudit\n/**\n * Makes the native splash screen (configured in `app.json`) remain visible until `hideAsync` is called.\n *\n * > **Important note**: It is recommended to call this in global scope without awaiting, rather than\n * > inside React components or hooks, because otherwise this might be called too late,\n * > when the splash screen is already hidden.\n *\n * @example\n * ```ts\n * import * as SplashScreen from 'expo-splash-screen';\n *\n * SplashScreen.preventAutoHideAsync();\n *\n * export default function App() {\n * // ...\n * }\n * ```\n */\nexport async function preventAutoHideAsync(): Promise {\n if (!ExpoSplashScreen.preventAutoHideAsync) {\n throw new UnavailabilityError('expo-splash-screen', 'preventAutoHideAsync');\n }\n return await ExpoSplashScreen.preventAutoHideAsync();\n}\n\n// @needsAudit\n/**\n * Hides the native splash screen immediately. Be careful to ensure that your app has content ready\n * to display when you hide the splash screen, or you may see a blank screen briefly. See the\n * [\"Usage\"](#usage) section for an example.\n */\nexport async function hideAsync(): Promise {\n if (!ExpoSplashScreen.hideAsync) {\n throw new UnavailabilityError('expo-splash-screen', 'hideAsync');\n }\n return await ExpoSplashScreen.hideAsync();\n}\n\n/**\n * @deprecated Use `SplashScreen.hideAsync()` instead\n * @ignore\n */\nexport function hide(): void {\n console.warn('SplashScreen.hide() is deprecated in favour of SplashScreen.hideAsync()');\n hideAsync();\n}\n\n/**\n * @deprecated Use `SplashScreen.preventAutoHideAsync()` instead\n * @ignore\n */\nexport function preventAutoHide(): void {\n console.warn(\n 'SplashScreen.preventAutoHide() is deprecated in favour of SplashScreen.preventAutoHideAsync()'\n );\n preventAutoHideAsync();\n}\n","export * from './SplashScreen';\n","// Unimplemented on web\nexport default {\n get name(): string {\n return 'ExpoStoreReview';\n },\n async isAvailableAsync(): Promise {\n return false;\n },\n requestReview: null as null | (() => Promise),\n};\n","import Constants from 'expo-constants';\nimport * as Linking from 'expo-linking';\nimport { Platform } from 'expo-modules-core';\n\nimport StoreReview from './ExpoStoreReview';\n\n// @needsAudit\n/**\n * Determines if the platform has the capabilities to use `StoreReview.requestReview()`.\n * @return\n * This returns a promise fulfills with `boolean`, depending on the platform:\n * - On iOS, it will always resolve to `true`.\n * - On Android, it will resolve to `true` if the device is running Android 5.0+.\n * - On Web, it will resolve to `false`.\n */\nexport async function isAvailableAsync(): Promise {\n return StoreReview.isAvailableAsync();\n}\n\n// @needsAudit\n/**\n * In ideal circumstances this will open a native modal and allow the user to select a star rating\n * that will then be applied to the App Store, without leaving the app. If the device is running\n * a version of Android lower than 5.0, this will attempt to get the store URL and link the user to it.\n */\nexport async function requestReview(): Promise {\n if (StoreReview?.requestReview) {\n await StoreReview.requestReview();\n return;\n }\n // If StoreReview is unavailable then get the store URL from `app.config.js` or `app.json` and open the store\n const url = storeUrl();\n if (url) {\n const supported = await Linking.canOpenURL(url);\n if (!supported) {\n console.warn(\"Expo.StoreReview.requestReview(): Can't open store url: \", url);\n } else {\n await Linking.openURL(url);\n }\n } else {\n // If the store URL is missing, let the dev know.\n console.warn(\n \"Expo.StoreReview.requestReview(): Couldn't link to store, please make sure the `android.playStoreUrl` & `ios.appStoreUrl` fields are filled out in your `app.json`\"\n );\n }\n}\n\n// @needsAudit\n/**\n * This uses the `Constants` API to get the `Constants.expoConfig.ios.appStoreUrl` on iOS, or the\n * `Constants.expoConfig.android.playStoreUrl` on Android.\n *\n * On Web this will return `null`.\n */\nexport function storeUrl(): string | null {\n const expoConfig = Constants.expoConfig;\n if (Platform.OS === 'ios' && expoConfig?.ios) {\n return expoConfig.ios.appStoreUrl ?? null;\n } else if (Platform.OS === 'android' && expoConfig?.android) {\n return expoConfig.android.playStoreUrl ?? null;\n }\n return null;\n}\n\n// @needsAudit\n/**\n * @return This returns a promise that fulfills to `true` if `StoreReview.requestReview()` is capable\n * directing the user to some kind of store review flow. If the app config (`app.json`) does not\n * contain store URLs and native store review capabilities are not available then the promise\n * will fulfill to `false`.\n *\n * @example\n * ```ts\n * if (await StoreReview.hasAction()) {\n * // you can call StoreReview.requestReview()\n * }\n * ```\n */\nexport async function hasAction(): Promise {\n return !!storeUrl() || (await isAvailableAsync());\n}\n","import compareUrls from 'compare-urls';\nimport { CodedError, Platform } from 'expo-modules-core';\nimport { AppState, Dimensions, AppStateStatus, NativeEventSubscription } from 'react-native';\n\nimport {\n WebBrowserAuthSessionResult,\n WebBrowserOpenOptions,\n WebBrowserResult,\n WebBrowserResultType,\n WebBrowserWindowFeatures,\n} from './WebBrowser.types';\n\nconst POPUP_WIDTH = 500;\nconst POPUP_HEIGHT = 650;\n\nlet popupWindow: Window | null = null;\n\nconst listenerMap = new Map();\n\nconst getHandle = () => 'ExpoWebBrowserRedirectHandle';\nconst getOriginUrlHandle = (hash: string) => `ExpoWebBrowser_OriginUrl_${hash}`;\nconst getRedirectUrlHandle = (hash: string) => `ExpoWebBrowser_RedirectUrl_${hash}`;\n\nfunction dismissPopup() {\n if (!popupWindow) {\n return;\n }\n popupWindow.close();\n if (listenerMap.has(popupWindow)) {\n const { listener, appStateSubscription, interval } = listenerMap.get(popupWindow);\n clearInterval(interval);\n window.removeEventListener('message', listener);\n (appStateSubscription as NativeEventSubscription).remove();\n listenerMap.delete(popupWindow);\n\n const handle = window.localStorage.getItem(getHandle());\n if (handle) {\n window.localStorage.removeItem(getHandle());\n window.localStorage.removeItem(getOriginUrlHandle(handle));\n window.localStorage.removeItem(getRedirectUrlHandle(handle));\n }\n\n popupWindow = null;\n }\n}\n\nexport default {\n get name() {\n return 'ExpoWebBrowser';\n },\n async openBrowserAsync(\n url: string,\n browserParams: WebBrowserOpenOptions = {}\n ): Promise {\n if (!Platform.isDOMAvailable) return { type: WebBrowserResultType.CANCEL };\n const { windowName = '_blank', windowFeatures } = browserParams;\n const features = getPopupFeaturesString(windowFeatures);\n window.open(url, windowName, features);\n return { type: WebBrowserResultType.OPENED };\n },\n dismissAuthSession() {\n if (!Platform.isDOMAvailable) return;\n dismissPopup();\n },\n maybeCompleteAuthSession({ skipRedirectCheck }: { skipRedirectCheck?: boolean }): {\n type: 'success' | 'failed';\n message: string;\n } {\n if (!Platform.isDOMAvailable) {\n return {\n type: 'failed',\n message: 'Cannot use expo-web-browser in a non-browser environment',\n };\n }\n const handle = window.localStorage.getItem(getHandle());\n\n if (!handle) {\n return { type: 'failed', message: 'No auth session is currently in progress' };\n }\n\n const url = window.location.href;\n\n if (skipRedirectCheck !== true) {\n const redirectUrl = window.localStorage.getItem(getRedirectUrlHandle(handle));\n // Compare the original redirect url against the current url with it's query params removed.\n const currentUrl = window.location.origin + window.location.pathname;\n if (!compareUrls(redirectUrl, currentUrl)) {\n return {\n type: 'failed',\n message: `Current URL \"${currentUrl}\" and original redirect URL \"${redirectUrl}\" do not match.`,\n };\n }\n }\n\n // Save the link for app state listener\n window.localStorage.setItem(getOriginUrlHandle(handle), url);\n\n // Get the window that created the current popup\n const parent = window.opener ?? window.parent;\n if (!parent) {\n throw new CodedError(\n 'ERR_WEB_BROWSER_REDIRECT',\n `The window cannot complete the redirect request because the invoking window doesn't have a reference to it's parent. This can happen if the parent window was reloaded.`\n );\n }\n // Send the URL back to the opening window.\n parent.postMessage({ url, expoSender: handle }, parent.location.toString());\n return { type: 'success', message: `Attempting to complete auth` };\n\n // Maybe set timer to throw an error if the window is still open after attempting to complete.\n },\n // This method should be invoked from user input.\n async openAuthSessionAsync(\n url: string,\n redirectUrl?: string,\n openOptions?: WebBrowserOpenOptions\n ): Promise {\n if (!Platform.isDOMAvailable) return { type: WebBrowserResultType.CANCEL };\n\n redirectUrl = redirectUrl ?? getRedirectUrlFromUrlOrGenerate(url);\n\n if (popupWindow == null || popupWindow?.closed) {\n const features = getPopupFeaturesString(openOptions?.windowFeatures);\n popupWindow = window.open(url, openOptions?.windowName, features);\n\n if (popupWindow) {\n try {\n popupWindow.focus();\n } catch {}\n } else {\n throw new CodedError(\n 'ERR_WEB_BROWSER_BLOCKED',\n 'Popup window was blocked by the browser or failed to open. This can happen in mobile browsers when the window.open() method was invoked too long after a user input was fired.'\n );\n }\n }\n\n const state = await getStateFromUrlOrGenerateAsync(url);\n\n // Save handle for session\n window.localStorage.setItem(getHandle(), state);\n // Save redirect Url for further verification\n window.localStorage.setItem(getRedirectUrlHandle(state), redirectUrl);\n\n return new Promise(async (resolve) => {\n // Create a listener for messages sent from the popup\n const listener = (event: MessageEvent) => {\n if (!event.isTrusted) return;\n // Ensure we trust the sender.\n if (event.origin !== window.location.origin) {\n return;\n }\n const { data } = event;\n // Use a crypto hash to invalid message.\n const handle = window.localStorage.getItem(getHandle());\n // Ensure the sender is also from expo-web-browser\n if (data.expoSender === handle) {\n dismissPopup();\n resolve({ type: 'success', url: data.url });\n }\n };\n\n // Add a listener for receiving messages from the popup.\n window.addEventListener('message', listener, false);\n\n // Create an app state listener as a fallback to the popup listener\n const appStateListener = (state: AppStateStatus) => {\n if (state !== 'active') {\n return;\n }\n const handle = window.localStorage.getItem(getHandle());\n if (handle) {\n const url = window.localStorage.getItem(getOriginUrlHandle(handle));\n if (url) {\n dismissPopup();\n resolve({ type: 'success', url });\n }\n }\n };\n\n const appStateSubscription = AppState.addEventListener('change', appStateListener);\n\n // Check if the window has been closed every second.\n const interval = setInterval(() => {\n if (popupWindow?.closed) {\n if (resolve) resolve({ type: WebBrowserResultType.DISMISS });\n clearInterval(interval);\n dismissPopup();\n }\n }, 1000);\n\n // Store the listener and interval for clean up.\n listenerMap.set(popupWindow, {\n listener,\n interval,\n appStateSubscription,\n });\n });\n },\n};\n\n// Crypto\nfunction isCryptoAvailable(): boolean {\n if (!Platform.isDOMAvailable) return false;\n return !!(window?.crypto as any);\n}\n\nfunction isSubtleCryptoAvailable(): boolean {\n if (!isCryptoAvailable()) return false;\n return !!(window.crypto.subtle as any);\n}\n\nasync function getStateFromUrlOrGenerateAsync(inputUrl: string): Promise {\n const url = new URL(inputUrl);\n if (url.searchParams.has('state') && typeof url.searchParams.get('state') === 'string') {\n // Ensure we reuse the auth state if it's passed in.\n return url.searchParams.get('state')!;\n }\n // Generate a crypto state for verifying the return popup.\n return await generateStateAsync();\n}\n\nfunction getRedirectUrlFromUrlOrGenerate(inputUrl: string): string {\n const url = new URL(inputUrl);\n if (\n url.searchParams.has('redirect_uri') &&\n typeof url.searchParams.get('redirect_uri') === 'string'\n ) {\n // Ensure we reuse the redirect_uri if it's passed in the input url.\n return url.searchParams.get('redirect_uri')!;\n }\n // Emulate how native uses Constants.linkingUrl\n return location.origin + location.pathname;\n}\n\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nasync function generateStateAsync(): Promise {\n if (!isSubtleCryptoAvailable()) {\n throw new CodedError(\n 'ERR_WEB_BROWSER_CRYPTO',\n `The current environment doesn't support crypto. Ensure you are running from a secure origin (https).`\n );\n }\n const encoder = new TextEncoder();\n\n const data = generateRandom(10);\n const buffer = encoder.encode(data);\n const hashedData = await crypto.subtle.digest('SHA-256', buffer);\n const state = btoa(String.fromCharCode(...new Uint8Array(hashedData)));\n return state;\n}\n\nfunction generateRandom(size: number): string {\n let arr = new Uint8Array(size);\n if (arr.byteLength !== arr.length) {\n arr = new Uint8Array(arr.buffer);\n }\n const array = new Uint8Array(arr.length);\n if (isCryptoAvailable()) {\n window.crypto.getRandomValues(array);\n } else {\n for (let i = 0; i < size; i += 1) {\n array[i] = (Math.random() * CHARSET.length) | 0;\n }\n }\n return bufferToString(array);\n}\n\nfunction bufferToString(buffer): string {\n const state: string[] = [];\n for (let i = 0; i < buffer.byteLength; i += 1) {\n const index = buffer[i] % CHARSET.length;\n state.push(CHARSET[index]);\n }\n return state.join('');\n}\n\n// Window Features\n\n// Ensure feature string is an object\nfunction normalizePopupFeaturesString(\n options?: WebBrowserWindowFeatures | string\n): Record {\n let windowFeatures: Record = {};\n // This should be avoided because it adds extra time to the popup command.\n if (typeof options === 'string') {\n // Convert string of `key=value,foo=bar` into an object\n const windowFeaturePairs = options.split(',');\n for (const pair of windowFeaturePairs) {\n const [key, value] = pair.trim().split('=');\n if (key && value) {\n windowFeatures[key] = value;\n }\n }\n } else if (options) {\n windowFeatures = options;\n }\n return windowFeatures;\n}\n\n// Apply default values to the input feature set\nfunction getPopupFeaturesString(options?: WebBrowserWindowFeatures | string): string {\n const windowFeatures = normalizePopupFeaturesString(options);\n\n const width = windowFeatures.width ?? POPUP_WIDTH;\n const height = windowFeatures.height ?? POPUP_HEIGHT;\n\n const dimensions = Dimensions.get('screen');\n const top = windowFeatures.top ?? Math.max(0, (dimensions.height - height) * 0.5);\n const left = windowFeatures.left ?? Math.max(0, (dimensions.width - width) * 0.5);\n\n // Create a reasonable popup\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features\n return featureObjectToString({\n ...windowFeatures,\n // Toolbar buttons (Back, Forward, Reload, Stop buttons).\n toolbar: windowFeatures.toolbar ?? 'no',\n menubar: windowFeatures.menubar ?? 'no',\n // Shows the location bar or the address bar.\n location: windowFeatures.location ?? 'yes',\n resizable: windowFeatures.resizable ?? 'yes',\n // If this feature is on, then the new secondary window has a status bar.\n status: windowFeatures.status ?? 'no',\n scrollbars: windowFeatures.scrollbars ?? 'yes',\n top,\n left,\n width,\n height,\n });\n}\n\nexport function featureObjectToString(features: Record): string {\n return Object.keys(features).reduce((prev, current) => {\n let value = features[current];\n if (typeof value === 'boolean') {\n value = value ? 'yes' : 'no';\n }\n if (current && value) {\n if (prev) prev += ',';\n return `${prev}${current}=${value}`;\n }\n return prev;\n }, '');\n}\n","import { UnavailabilityError } from 'expo-modules-core';\nimport {\n AppState,\n AppStateStatus,\n Linking,\n Platform,\n EmitterSubscription,\n processColor,\n} from 'react-native';\n\nimport ExponentWebBrowser from './ExpoWebBrowser';\nimport {\n RedirectEvent,\n WebBrowserAuthSessionResult,\n WebBrowserCompleteAuthSessionOptions,\n WebBrowserCompleteAuthSessionResult,\n WebBrowserCoolDownResult,\n WebBrowserCustomTabsResults,\n WebBrowserMayInitWithUrlResult,\n WebBrowserOpenOptions,\n WebBrowserRedirectResult,\n WebBrowserResult,\n WebBrowserResultType,\n WebBrowserWarmUpResult,\n WebBrowserWindowFeatures,\n WebBrowserPresentationStyle,\n AuthSessionOpenOptions,\n} from './WebBrowser.types';\n\nexport {\n WebBrowserAuthSessionResult,\n WebBrowserCompleteAuthSessionOptions,\n WebBrowserCompleteAuthSessionResult,\n WebBrowserCoolDownResult,\n WebBrowserCustomTabsResults,\n WebBrowserMayInitWithUrlResult,\n WebBrowserOpenOptions,\n WebBrowserRedirectResult,\n WebBrowserResult,\n WebBrowserResultType,\n WebBrowserWarmUpResult,\n WebBrowserWindowFeatures,\n WebBrowserPresentationStyle,\n AuthSessionOpenOptions,\n};\n\nconst emptyCustomTabsPackages: WebBrowserCustomTabsResults = {\n defaultBrowserPackage: undefined,\n preferredBrowserPackage: undefined,\n browserPackages: [],\n servicePackages: [],\n};\n\n// @needsAudit\n/**\n * Returns a list of applications package names supporting Custom Tabs, Custom Tabs\n * service, user chosen and preferred one. This may not be fully reliable, since it uses\n * `PackageManager.getResolvingActivities` under the hood. (For example, some browsers might not be\n * present in browserPackages list once another browser is set to default.)\n *\n * @return The promise which fulfils with [`WebBrowserCustomTabsResults`](#webbrowsercustomtabsresults) object.\n * @platform android\n */\nexport async function getCustomTabsSupportingBrowsersAsync(): Promise {\n if (!ExponentWebBrowser.getCustomTabsSupportingBrowsersAsync) {\n throw new UnavailabilityError('WebBrowser', 'getCustomTabsSupportingBrowsersAsync');\n }\n if (Platform.OS !== 'android') {\n return emptyCustomTabsPackages;\n } else {\n return await ExponentWebBrowser.getCustomTabsSupportingBrowsersAsync();\n }\n}\n\n// @needsAudit\n/**\n * This method calls `warmUp` method on [CustomTabsClient](https://developer.android.com/reference/android/support/customtabs/CustomTabsClient.html#warmup(long))\n * for specified package.\n *\n * @param browserPackage Package of browser to be warmed up. If not set, preferred browser will be warmed.\n *\n * @return A promise which fulfils with `WebBrowserWarmUpResult` object.\n * @platform android\n */\nexport async function warmUpAsync(browserPackage?: string): Promise {\n if (!ExponentWebBrowser.warmUpAsync) {\n throw new UnavailabilityError('WebBrowser', 'warmUpAsync');\n }\n if (Platform.OS !== 'android') {\n return {};\n } else {\n return await ExponentWebBrowser.warmUpAsync(browserPackage);\n }\n}\n\n// @needsAudit\n/**\n * This method initiates (if needed) [CustomTabsSession](https://developer.android.com/reference/android/support/customtabs/CustomTabsSession.html#maylaunchurl)\n * and calls its `mayLaunchUrl` method for browser specified by the package.\n *\n * @param url The url of page that is likely to be loaded first when opening browser.\n * @param browserPackage Package of browser to be informed. If not set, preferred\n * browser will be used.\n *\n * @return A promise which fulfils with `WebBrowserMayInitWithUrlResult` object.\n * @platform android\n */\nexport async function mayInitWithUrlAsync(\n url: string,\n browserPackage?: string\n): Promise {\n if (!ExponentWebBrowser.mayInitWithUrlAsync) {\n throw new UnavailabilityError('WebBrowser', 'mayInitWithUrlAsync');\n }\n if (Platform.OS !== 'android') {\n return {};\n } else {\n return await ExponentWebBrowser.mayInitWithUrlAsync(url, browserPackage);\n }\n}\n\n// @needsAudit\n/**\n * This methods removes all bindings to services created by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage)\n * or [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage). You should call\n * this method once you don't need them to avoid potential memory leaks. However, those binding\n * would be cleared once your application is destroyed, which might be sufficient in most cases.\n *\n * @param browserPackage Package of browser to be cooled. If not set, preferred browser will be used.\n *\n * @return The promise which fulfils with ` WebBrowserCoolDownResult` when cooling is performed, or\n * an empty object when there was no connection to be dismissed.\n * @platform android\n */\nexport async function coolDownAsync(browserPackage?: string): Promise {\n if (!ExponentWebBrowser.coolDownAsync) {\n throw new UnavailabilityError('WebBrowser', 'coolDownAsync');\n }\n if (Platform.OS !== 'android') {\n return {};\n } else {\n return await ExponentWebBrowser.coolDownAsync(browserPackage);\n }\n}\n\nlet browserLocked = false;\n\n// @needsAudit\n/**\n * Opens the url with Safari in a modal on iOS using [`SFSafariViewController`](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller),\n * and Chrome in a new [custom tab](https://developer.chrome.com/multidevice/android/customtabs)\n * on Android. On iOS, the modal Safari will not share cookies with the system Safari. If you need\n * this, use [`openAuthSessionAsync`](#webbrowseropenauthsessionasyncurl-redirecturl-browserparams).\n *\n * @param url The url to open in the web browser.\n * @param browserParams A dictionary of key-value pairs.\n *\n * @return The promise behaves differently based on the platform.\n * On Android promise resolves with `{type: 'opened'}` if we were able to open browser.\n * On iOS:\n * - If the user closed the web browser, the Promise resolves with `{ type: 'cancel' }`.\n * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser), the Promise resolves with `{ type: 'dismiss' }`.\n */\nexport async function openBrowserAsync(\n url: string,\n browserParams: WebBrowserOpenOptions = {}\n): Promise {\n if (!ExponentWebBrowser.openBrowserAsync) {\n throw new UnavailabilityError('WebBrowser', 'openBrowserAsync');\n }\n\n if (browserLocked) {\n // Prevent multiple sessions from running at the same time, WebBrowser doesn't\n // support it this makes the behavior predictable.\n if (__DEV__) {\n console.warn(\n 'Attempted to call WebBrowser.openBrowserAsync multiple times while already active. Only one WebBrowser controller can be active at any given time.'\n );\n }\n\n return { type: WebBrowserResultType.LOCKED };\n }\n browserLocked = true;\n\n let result: WebBrowserResult;\n try {\n result = await ExponentWebBrowser.openBrowserAsync(url, _processOptions(browserParams));\n } finally {\n // WebBrowser session complete, unset lock\n browserLocked = false;\n }\n\n return result;\n}\n\n// @needsAudit\n/**\n * Dismisses the presented web browser.\n *\n * @return The `void` on successful attempt, or throws error, if dismiss functionality is not avaiable.\n * @platform ios\n */\nexport function dismissBrowser(): void {\n if (!ExponentWebBrowser.dismissBrowser) {\n throw new UnavailabilityError('WebBrowser', 'dismissBrowser');\n }\n ExponentWebBrowser.dismissBrowser();\n}\n\n// @needsAudit\n/**\n * # On iOS:\n * Opens the url with Safari in a modal using `ASWebAuthenticationSession`. The user will be asked\n * whether to allow the app to authenticate using the given url.\n * To handle redirection back to the mobile application, the redirect URI set in the authentication server\n * has to use the protocol provided as the scheme in **app.json** [`expo.scheme`](./../config/app/#scheme)\n * e.g. `demo://` not `https://` protocol.\n * Using `Linking.addEventListener` is not needed and can have side effects.\n *\n * # On Android:\n * This will be done using a \"custom Chrome tabs\" browser, [AppState](../react-native/appstate/),\n * and [Linking](./linking/) APIs.\n *\n * # On web:\n * > This API can only be used in a secure environment (`https`). You can use expo `start:web --https`\n * to test this. Otherwise, an error with code [`ERR_WEB_BROWSER_CRYPTO`](#errwebbrowsercrypto) will be thrown.\n * This will use the browser's [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) API.\n * - _Desktop_: This will create a new web popup window in the browser that can be closed later using `WebBrowser.maybeCompleteAuthSession()`.\n * - _Mobile_: This will open a new tab in the browser which can be closed using `WebBrowser.maybeCompleteAuthSession()`.\n *\n * How this works on web:\n * - A crypto state will be created for verifying the redirect.\n * - This means you need to run with `npx expo start --https`\n * - The state will be added to the window's `localstorage`. This ensures that auth cannot complete\n * unless it's done from a page running with the same origin as it was started.\n * Ex: if `openAuthSessionAsync` is invoked on `https://localhost:19006`, then `maybeCompleteAuthSession`\n * must be invoked on a page hosted from the origin `https://localhost:19006`. Using a different\n * website, or even a different host like `https://128.0.0.*:19006` for example will not work.\n * - A timer will be started to check for every 1000 milliseconds (1 second) to detect if the window\n * has been closed by the user. If this happens then a promise will resolve with `{ type: 'dismiss' }`.\n *\n * > On mobile web, Chrome and Safari will block any call to [`window.open()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open)\n * which takes too long to fire after a user interaction. This method must be invoked immediately\n * after a user interaction. If the event is blocked, an error with code [`ERR_WEB_BROWSER_BLOCKED`](#errwebbrowserblocked) will be thrown.\n *\n * @param url The url to open in the web browser. This should be a login page.\n * @param redirectUrl _Optional_ - The url to deep link back into your app.\n * On web, this defaults to the output of [`Linking.createURL(\"\")`](./linking/#linkingcreateurlpath-namedparameters).\n * @param options _Optional_ - An object extending the [`WebBrowserOpenOptions`](#webbrowseropenoptions).\n * If there is no native AuthSession implementation available (which is the case on Android)\n * these params will be used in the browser polyfill. If there is a native AuthSession implementation,\n * these params will be ignored.\n *\n * @return\n * - If the user does not permit the application to authenticate with the given url, the Promise fulfills with `{ type: 'cancel' }` object.\n * - If the user closed the web browser, the Promise fulfills with `{ type: 'cancel' }` object.\n * - If the browser is closed using [`dismissBrowser`](#webbrowserdismissbrowser),\n * the Promise fulfills with `{ type: 'dismiss' }` object.\n */\nexport async function openAuthSessionAsync(\n url: string,\n redirectUrl?: string | null,\n options: AuthSessionOpenOptions = {}\n): Promise {\n if (_authSessionIsNativelySupported()) {\n if (!ExponentWebBrowser.openAuthSessionAsync) {\n throw new UnavailabilityError('WebBrowser', 'openAuthSessionAsync');\n }\n if (['ios', 'web'].includes(Platform.OS)) {\n return ExponentWebBrowser.openAuthSessionAsync(url, redirectUrl, _processOptions(options));\n }\n return ExponentWebBrowser.openAuthSessionAsync(url, redirectUrl);\n } else {\n return _openAuthSessionPolyfillAsync(url, redirectUrl, options);\n }\n}\n\n// @docsMissing\nexport function dismissAuthSession(): void {\n if (_authSessionIsNativelySupported()) {\n if (!ExponentWebBrowser.dismissAuthSession) {\n throw new UnavailabilityError('WebBrowser', 'dismissAuthSession');\n }\n ExponentWebBrowser.dismissAuthSession();\n } else {\n if (!ExponentWebBrowser.dismissBrowser) {\n throw new UnavailabilityError('WebBrowser', 'dismissAuthSession');\n }\n ExponentWebBrowser.dismissBrowser();\n }\n}\n\n// @needsAudit\n/**\n * Possibly completes an authentication session on web in a window popup. The method\n * should be invoked on the page that the window redirects to.\n *\n * @param options\n *\n * @return Returns an object with message about why the redirect failed or succeeded:\n *\n * If `type` is set to `failed`, the reason depends on the message:\n * - `Not supported on this platform`: If the platform doesn't support this method (iOS, Android).\n * - `Cannot use expo-web-browser in a non-browser environment`: If the code was executed in an SSR\n * or node environment.\n * - `No auth session is currently in progress`: (the cached state wasn't found in local storage).\n * This can happen if the window redirects to an origin (website) that is different to the initial\n * website origin. If this happens in development, it may be because the auth started on localhost\n * and finished on your computer port (Ex: `128.0.0.*`). This is controlled by the `redirectUrl`\n * and `returnUrl`.\n * - `Current URL \"\" and original redirect URL \"\" do not match`: This can occur when the\n * redirect URL doesn't match what was initial defined as the `returnUrl`. You can skip this test\n * in development by passing `{ skipRedirectCheck: true }` to the function.\n *\n * If `type` is set to `success`, the parent window will attempt to close the child window immediately.\n *\n * If the error `ERR_WEB_BROWSER_REDIRECT` was thrown, it may mean that the parent window was\n * reloaded before the auth was completed. In this case you'll need to close the child window manually.\n *\n * @platform web\n */\nexport function maybeCompleteAuthSession(\n options: WebBrowserCompleteAuthSessionOptions = {}\n): WebBrowserCompleteAuthSessionResult {\n if (ExponentWebBrowser.maybeCompleteAuthSession) {\n return ExponentWebBrowser.maybeCompleteAuthSession(options);\n }\n return { type: 'failed', message: 'Not supported on this platform' };\n}\n\nfunction _processOptions(options: WebBrowserOpenOptions) {\n return {\n ...options,\n controlsColor: processColor(options.controlsColor),\n toolbarColor: processColor(options.toolbarColor),\n secondaryToolbarColor: processColor(options.secondaryToolbarColor),\n };\n}\n\n/* iOS <= 10 and Android polyfill for SFAuthenticationSession flow */\n\nfunction _authSessionIsNativelySupported(): boolean {\n if (Platform.OS === 'android') {\n return false;\n } else if (Platform.OS === 'web') {\n return true;\n }\n\n const versionNumber = parseInt(String(Platform.Version), 10);\n return versionNumber >= 11;\n}\n\nlet _redirectSubscription: EmitterSubscription | null = null;\n\n/*\n * openBrowserAsync on Android doesn't wait until closed, so we need to polyfill\n * it with AppState\n */\n\n// Store the `resolve` function from a Promise to fire when the AppState\n// returns to active\nlet _onWebBrowserCloseAndroid: null | (() => void) = null;\n\n// If the initial AppState.currentState is null, we assume that the first call to\n// AppState#change event is not actually triggered by a real change,\n// is triggered instead by the bridge capturing the current state\n// (https://reactnative.dev/docs/appstate#basic-usage)\nlet _isAppStateAvailable: boolean = AppState.currentState !== null;\nfunction _onAppStateChangeAndroid(state: AppStateStatus) {\n if (!_isAppStateAvailable) {\n _isAppStateAvailable = true;\n return;\n }\n\n if (state === 'active' && _onWebBrowserCloseAndroid) {\n _onWebBrowserCloseAndroid();\n }\n}\n\nasync function _openBrowserAndWaitAndroidAsync(\n startUrl: string,\n browserParams: WebBrowserOpenOptions = {}\n): Promise {\n const appStateChangedToActive = new Promise((resolve) => {\n _onWebBrowserCloseAndroid = resolve;\n });\n const stateChangeSubscription = AppState.addEventListener('change', _onAppStateChangeAndroid);\n\n let result: WebBrowserResult = { type: WebBrowserResultType.CANCEL };\n let type: string | null = null;\n\n try {\n ({ type } = await openBrowserAsync(startUrl, browserParams));\n } catch (e) {\n stateChangeSubscription.remove();\n _onWebBrowserCloseAndroid = null;\n throw e;\n }\n\n if (type === 'opened') {\n await appStateChangedToActive;\n result = { type: WebBrowserResultType.DISMISS };\n }\n\n stateChangeSubscription.remove();\n _onWebBrowserCloseAndroid = null;\n return result;\n}\n\nasync function _openAuthSessionPolyfillAsync(\n startUrl: string,\n returnUrl: string | null | undefined,\n browserParams: WebBrowserOpenOptions = {}\n): Promise {\n if (_redirectSubscription) {\n throw new Error(\n `The WebBrowser's auth session is in an invalid state with a redirect handler set when it should not be`\n );\n }\n\n if (_onWebBrowserCloseAndroid) {\n throw new Error(`WebBrowser is already open, only one can be open at a time`);\n }\n\n try {\n if (Platform.OS === 'android') {\n return await Promise.race([\n _openBrowserAndWaitAndroidAsync(startUrl, browserParams),\n _waitForRedirectAsync(returnUrl),\n ]);\n } else {\n return await Promise.race([\n openBrowserAsync(startUrl, browserParams),\n _waitForRedirectAsync(returnUrl),\n ]);\n }\n } finally {\n // We can't dismiss the browser on Android, only call this when it's available.\n // Users on Android need to manually press the 'x' button in Chrome Custom Tabs, sadly.\n if (ExponentWebBrowser.dismissBrowser) {\n ExponentWebBrowser.dismissBrowser();\n }\n\n _stopWaitingForRedirect();\n }\n}\n\nfunction _stopWaitingForRedirect() {\n if (!_redirectSubscription) {\n throw new Error(\n `The WebBrowser auth session is in an invalid state with no redirect handler when one should be set`\n );\n }\n\n _redirectSubscription.remove();\n _redirectSubscription = null;\n}\n\nfunction _waitForRedirectAsync(\n returnUrl: string | null | undefined\n): Promise {\n // Note that this Promise never resolves when `returnUrl` is nullish\n return new Promise((resolve) => {\n const redirectHandler = (event: RedirectEvent) => {\n if (returnUrl && event.url.startsWith(returnUrl)) {\n resolve({ url: event.url, type: 'success' });\n }\n };\n\n _redirectSubscription = Linking.addEventListener('url', redirectHandler);\n });\n}\n","export type RedirectEvent = {\n url: string;\n};\n\n// @needsAudit @docsMissing\nexport type WebBrowserWindowFeatures = Record;\n\n// @needsAudit\nexport type WebBrowserOpenOptions = {\n /**\n * Color of the toolbar. Supports React Native [color formats](https://reactnative.dev/docs/colors).\n */\n toolbarColor?: string;\n /**\n * Package name of a browser to be used to handle Custom Tabs. List of\n * available packages is to be queried by [`getCustomTabsSupportingBrowsers`](#webbrowsergetcustomtabssupportingbrowsersasync) method.\n * @platform android\n */\n browserPackage?: string;\n /**\n * A boolean determining whether the toolbar should be hiding when a user scrolls the website.\n */\n enableBarCollapsing?: boolean;\n /**\n * Color of the secondary toolbar. Supports React Native [color formats](https://reactnative.dev/docs/colors).\n * @platform android\n */\n secondaryToolbarColor?: string;\n /**\n * A boolean determining whether the browser should show the title of website on the toolbar.\n * @platform android\n */\n showTitle?: boolean;\n /**\n * A boolean determining whether a default share item should be added to the menu.\n * @platform android\n */\n enableDefaultShareMenuItem?: boolean;\n /**\n * A boolean determining whether browsed website should be shown as separate\n * entry in Android recents/multitasking view. Requires `createTask` to be `true` (default).\n * @default false\n * @platform android\n */\n showInRecents?: boolean;\n /**\n * A boolean determining whether the browser should open in a new task or in\n * the same task as your app.\n * @default true\n * @platform android\n */\n createTask?: boolean;\n /**\n * Tint color for controls in SKSafariViewController. Supports React Native [color formats](https://reactnative.dev/docs/colors).\n * @platform ios\n */\n controlsColor?: string;\n /**\n * The style of the dismiss button. Should be one of: `done`, `close`, or `cancel`.\n * @platform ios\n */\n dismissButtonStyle?: 'done' | 'close' | 'cancel';\n /**\n * A boolean determining whether Safari should enter Reader mode, if it is available.\n * @platform ios\n */\n readerMode?: boolean;\n /**\n * The [presentation style](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle)\n * of the browser window.\n * @default WebBrowser.WebBrowserPresentationStyle.OverFullScreen\n * @platform ios\n */\n presentationStyle?: WebBrowserPresentationStyle;\n /**\n * Name to assign to the popup window.\n * @platform web\n */\n windowName?: string;\n /**\n * Features to use with `window.open()`.\n * @platform web\n */\n windowFeatures?: string | WebBrowserWindowFeatures;\n};\n\n/**\n * If there is no native AuthSession implementation available (which is the case on Android) the params inherited from\n * [`WebBrowserOpenOptions`](#webbrowseropenoptions) will be used in the browser polyfill. Otherwise, the browser parameters will be ignored.\n */\nexport type AuthSessionOpenOptions = WebBrowserOpenOptions & {\n /**\n * Determines whether the session should ask the browser for a private authentication session.\n * Set this to `true` to request that the browser doesn’t share cookies or other browsing data between the authentication session and the user’s normal browser session.\n * Whether the request is honored depends on the user’s default web browser.\n *\n * @default false\n * @platform ios 13+\n */\n preferEphemeralSession?: boolean;\n};\n\nexport type WebBrowserAuthSessionResult = WebBrowserRedirectResult | WebBrowserResult;\n\n// @needsAudit\nexport type WebBrowserCustomTabsResults = {\n /**\n * Default package chosen by user, `null` if there is no such packages. Also `null` usually means,\n * that user will be prompted to choose from available packages.\n */\n defaultBrowserPackage?: string;\n /**\n * Package preferred by `CustomTabsClient` to be used to handle Custom Tabs. It favors browser\n * chosen by user as default, as long as it is present on both `browserPackages` and\n * `servicePackages` lists. Only such browsers are considered as fully supporting Custom Tabs.\n * It might be `null` when there is no such browser installed or when default browser is not in\n * `servicePackages` list.\n */\n preferredBrowserPackage?: string;\n /**\n * All packages recognized by `PackageManager` as capable of handling Custom Tabs. Empty array\n * means there is no supporting browsers on device.\n */\n browserPackages: string[];\n /**\n * All packages recognized by `PackageManager` as capable of handling Custom Tabs Service.\n * This service is used by [`warmUpAsync`](#webbrowserwarmupasyncbrowserpackage), [`mayInitWithUrlAsync`](#webbrowsermayinitwithurlasyncurl-browserpackage)\n * and [`coolDownAsync`](#webbrowsercooldownasyncbrowserpackage).\n */\n servicePackages: string[];\n};\n\n// @needsAudit @docsMissing\nexport enum WebBrowserResultType {\n /**\n * @platform ios\n */\n CANCEL = 'cancel',\n /**\n * @platform ios\n */\n DISMISS = 'dismiss',\n /**\n * @platform android\n */\n OPENED = 'opened',\n LOCKED = 'locked',\n}\n\n// @needsAudit\n/**\n * A browser presentation style. Its values are directly mapped to the [`UIModalPresentationStyle`](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621355-modalpresentationstyle).\n *\n * @platform ios\n */\nexport enum WebBrowserPresentationStyle {\n /**\n * A presentation style in which the presented browser covers the screen.\n */\n FULL_SCREEN = 'fullScreen',\n /**\n * A presentation style that partially covers the underlying content.\n */\n PAGE_SHEET = 'pageSheet',\n /**\n * A presentation style that displays the browser centered in the screen.\n */\n FORM_SHEET = 'formSheet',\n /**\n * A presentation style where the browser is displayed over the app's content.\n */\n CURRENT_CONTEXT = 'currentContext',\n /**\n * A presentation style in which the browser view covers the screen.\n */\n OVER_FULL_SCREEN = 'overFullScreen',\n /**\n * A presentation style where the browser is displayed over the app's content.\n */\n OVER_CURRENT_CONTEXT = 'overCurrentContext',\n /**\n * A presentation style where the browser is displayed in a popover view.\n */\n POPOVER = 'popover',\n /**\n * The default presentation style chosen by the system.\n * On older iOS versions, falls back to `WebBrowserPresentationStyle.FullScreen`.\n *\n * @platform ios 13+\n */\n AUTOMATIC = 'automatic',\n}\n\n// @needsAudit\nexport type WebBrowserResult = {\n /**\n * Type of the result.\n */\n type: WebBrowserResultType;\n};\n\n// @needsAudit @docsMissing\nexport type WebBrowserRedirectResult = {\n /**\n * Type of the result.\n */\n type: 'success';\n url: string;\n};\n\nexport type ServiceActionResult = {\n servicePackage?: string;\n};\n\nexport type WebBrowserMayInitWithUrlResult = ServiceActionResult;\nexport type WebBrowserWarmUpResult = ServiceActionResult;\nexport type WebBrowserCoolDownResult = ServiceActionResult;\n\n// @needsAudit\nexport type WebBrowserCompleteAuthSessionOptions = {\n /**\n * Attempt to close the window without checking to see if the auth redirect matches the cached redirect URL.\n */\n skipRedirectCheck?: boolean;\n};\n\n// @needsAudit\nexport type WebBrowserCompleteAuthSessionResult = {\n /**\n * Type of the result.\n */\n type: 'success' | 'failed';\n /**\n * Additional description or reasoning of the result.\n */\n message: string;\n};\n","// When users dangerously import a file inside of react-native, it breaks the web alias.\n// This is one of the most common, and cryptic web errors that users encounter.\n// This conditional side-effect provides a more helpful error message for debugging.\n// Use a wrapper `__DEV__` to remove this entire block in production.\nif (__DEV__) {\n if (\n // Skip mocking if someone is shimming this value out.\n !('__fbBatchedBridgeConfig' in global)\n ) {\n Object.defineProperty(global, '__fbBatchedBridgeConfig', {\n get() {\n throw new Error(\n \"Your web project is importing a module from 'react-native' instead of 'react-native-web'. Learn more: https://expo.fyi/fb-batched-bridge-config-web\"\n );\n },\n });\n }\n}\n","import { EventEmitter } from 'expo-modules-core';\nimport React, { useEffect, useState, useRef, useMemo } from 'react';\nimport { Animated, StyleSheet, Text, Platform, View } from 'react-native';\n\nimport DevLoadingViewNativeModule from './DevLoadingViewNativeModule';\nimport { getInitialSafeArea } from './getInitialSafeArea';\n\nexport default function DevLoadingView() {\n const [message, setMessage] = useState('Refreshing...');\n const [isDevLoading, setIsDevLoading] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const translateY = useRef(new Animated.Value(0)).current;\n const emitter = useMemo(() => {\n try {\n return new EventEmitter(DevLoadingViewNativeModule);\n } catch (error) {\n throw new Error(\n 'Failed to instantiate native emitter in `DevLoadingView` because the native module `DevLoadingView` is undefined: ' +\n error.message\n );\n }\n }, []);\n\n useEffect(() => {\n if (!emitter) return;\n\n function handleShowMessage(event: { message: string }) {\n setMessage(event.message);\n // TODO: if we show the refreshing banner and don't get a hide message\n // for 3 seconds, warn the user that it's taking a while and suggest\n // they reload\n\n translateY.setValue(0);\n setIsDevLoading(true);\n }\n\n function handleHide() {\n // TODO: if we showed the 'refreshing' banner less than 250ms ago, delay\n // switching to the 'finished' banner\n\n setIsAnimating(true);\n setIsDevLoading(false);\n Animated.timing(translateY, {\n toValue: 150,\n delay: 1000,\n duration: 350,\n useNativeDriver: Platform.OS !== 'web',\n }).start(({ finished }) => {\n if (finished) {\n setIsAnimating(false);\n translateY.setValue(0);\n }\n });\n }\n\n const showMessageSubscription = emitter.addListener(\n 'devLoadingView:showMessage',\n handleShowMessage\n );\n const hideSubscription = emitter.addListener('devLoadingView:hide', handleHide);\n\n return function cleanup() {\n showMessageSubscription.remove();\n hideSubscription.remove();\n };\n }, [translateY, emitter]);\n\n if (!isDevLoading && !isAnimating) {\n return null;\n }\n\n return (\n \n \n \n \n {message}\n \n\n \n \n {isDevLoading ? 'Using Fast Refresh' : \"Don't see your changes? Reload the app\"}\n \n \n \n \n \n );\n}\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n // @ts-expect-error: fixed is not a valid value for position in Yoga but it is on web.\n position: Platform.select({\n web: 'fixed',\n default: 'absolute',\n }),\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 42, // arbitrary\n },\n\n banner: {\n flex: 1,\n overflow: 'visible',\n backgroundColor: 'rgba(0,0,0,0.75)',\n paddingBottom: getInitialSafeArea().bottom,\n },\n contentContainer: {\n flex: 1,\n paddingTop: 10,\n paddingBottom: 5,\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n },\n text: {\n color: '#fff',\n fontSize: 15,\n },\n subtitle: {\n color: 'rgba(255,255,255,0.8)',\n },\n});\n","export default Object.freeze({\n name: 'DevLoadingView',\n startObserving() {},\n stopObserving() {},\n addListener() {},\n removeListeners() {},\n});\n","/**\n * Get the best estimate safe area before native modules have fully loaded,\n * this is the fallback file which assumes guessing cannot be done.\n */\nexport function getInitialSafeArea(): { top: number; bottom: number; left: number; right: number } {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n}\n","import 'expo/build/Expo.fx';\n\nimport * as React from 'react';\nimport { AppRegistry, Platform } from 'react-native';\n\nimport { createRoot } from './createRoot';\n\ntype InitialProps = {\n exp: {\n notification?: any;\n manifestString?: string;\n [key: string]: any;\n };\n shell?: boolean;\n shellManifestUrl?: string;\n [key: string]: any;\n};\n\nexport default function registerRootComponent

(\n component: React.ComponentType

\n): void {\n let qualifiedComponent = component;\n\n if (process.env.NODE_ENV !== 'production') {\n const { withDevTools } = require('./withDevTools') as typeof import('./withDevTools');\n qualifiedComponent = withDevTools(component);\n }\n\n if (Platform.OS !== 'web') {\n AppRegistry.registerComponent('main', () => qualifiedComponent);\n } else if (\n // Skip querying the DOM if we're in a Node.js environment.\n typeof document !== 'undefined'\n ) {\n let tag = document.getElementById('root');\n\n if (!tag) {\n tag = document.getElementById('main');\n if (process.env.NODE_ENV !== 'production') {\n // This block will be removed in production\n if (tag) {\n console.warn(\n 'Mounting the root React component to an HTML element with id \"main\" is deprecated. Use id \"root\" instead.'\n );\n }\n }\n }\n\n if (!tag) {\n throw new Error(\n 'Required HTML element with id \"root\" was not found in the document HTML. This is required for mounting the root React component.'\n );\n }\n\n const rootTag = createRoot(tag);\n rootTag.render(React.createElement(qualifiedComponent));\n }\n}\n","import Constants, { ExecutionEnvironment } from 'expo-constants';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\n\nimport DevLoadingView from '../environment/DevLoadingView';\n\n/**\n * Append the Expo Fast Refresh view and optionally\n * keep the screen awake if `expo-keep-awake` is installed.\n */\nexport function withDevTools>(\n AppRootComponent: TComponent\n): React.ComponentType> {\n // This hook can be optionally imported because __DEV__ never changes during runtime.\n // Using __DEV__ like this enables tree shaking to remove the hook in production.\n const useOptionalKeepAwake: (tag?: string) => void = (() => {\n if (Platform.OS !== 'web') {\n try {\n // Optionally import expo-keep-awake\n const { useKeepAwake, ExpoKeepAwakeTag } = require('expo-keep-awake');\n return () => useKeepAwake(ExpoKeepAwakeTag, { suppressDeactivateWarnings: true });\n } catch {}\n }\n\n return () => {};\n })();\n\n const shouldUseExpoFastRefreshView = Platform.select({\n web: true,\n ios: Constants.executionEnvironment !== ExecutionEnvironment.Bare,\n default: false,\n });\n\n function WithDevTools(props: React.ComponentProps) {\n useOptionalKeepAwake();\n\n if (shouldUseExpoFastRefreshView) {\n return (\n <>\n \n \n \n );\n }\n\n return ;\n }\n\n const name = AppRootComponent.displayName || AppRootComponent.name || 'Anonymous';\n WithDevTools.displayName = `withDevTools(${name})`;\n\n return WithDevTools;\n}\n","import {TextInput, View} from 'react-native';\nimport React, {forwardRef} from 'react';\nimport {getStyle, getSymbols} from './utils';\nimport {useFocusState} from './useFocusState';\nimport {styles} from './CodeField.styles';\nconst DEFAULT_CELL_COUNT = 4;\nfunction CodeFieldComponent(\n {\n rootStyle,\n textInputStyle,\n onBlur,\n onFocus,\n value,\n renderCell,\n cellCount = DEFAULT_CELL_COUNT,\n RootProps = {},\n RootComponent = View,\n InputComponent = TextInput,\n ...rest\n },\n ref,\n) {\n const focusState = useFocusState(onBlur, onFocus);\n const cells = getSymbols(value || '', cellCount).map(\n (symbol, index, symbols) => {\n const isFirstEmptySymbol = symbols.indexOf('') === index;\n return renderCell({\n index,\n symbol,\n isFocused: focusState.isFocused && isFirstEmptySymbol,\n });\n },\n );\n return (\n \n {cells}\n \n \n );\n}\nexport const CodeField = forwardRef(CodeFieldComponent);\n","import {Platform, StyleSheet} from 'react-native';\nexport const styles = StyleSheet.create({\n root: {\n justifyContent: 'space-between',\n flexDirection: 'row',\n },\n textInput: {\n // will be rendered above Cells\n ...StyleSheet.absoluteFillObject,\n // Hide to simulate that user will press into a cell\n opacity: 0.01,\n // Each user press into should always set the cursor on the end of a text value\n fontSize: 1,\n ...Platform.select({\n web: {\n width: '100%',\n // Fix iOS Safari aggressive zoom\n fontSize: 16,\n },\n }),\n },\n});\n","import {useState} from 'react';\nimport {useInterval} from './useTimer';\nexport const DEFAULT_BLINKING_SPEED = 500;\nexport const DEFAULT_CURSOR_SYMBOL = '|';\nexport function Cursor({\n cursorSymbol = DEFAULT_CURSOR_SYMBOL,\n delay = DEFAULT_BLINKING_SPEED,\n}) {\n const [visibleFlag, setFlag] = useState(true);\n useInterval(() => setFlag((flag) => !flag), delay);\n // @ts-expect-error `JSX.Element` is not a `ReactNode`\n return visibleFlag ? cursorSymbol : '';\n}\n","import {useEffect, useState} from 'react';\nimport {useTimeout} from './useTimer';\nexport const DEFAULT_BLINKING_SPEED = 500;\nexport function MaskSymbol({\n isLastFilledCell,\n children: symbol,\n maskSymbol,\n delay = DEFAULT_BLINKING_SPEED,\n}) {\n const [visibleFlag, setFlag] = useState(true);\n useTimeout(() => setFlag(false), delay);\n useEffect(() => {\n if (isLastFilledCell) {\n setFlag(false);\n }\n }, [isLastFilledCell]);\n // @ts-expect-error `JSX.Element` is not a `ReactNode`\n return visibleFlag ? symbol : maskSymbol;\n}\n","export {Cursor} from './Cursor';\nexport {CodeField} from './CodeField';\nexport {MaskSymbol} from './MaskSymbol';\nexport {useClearByFocusCell} from './useClearByFocusCell';\nexport {useBlurOnFulfill} from './useBlurOnFulfill';\nexport {isLastFilledCell} from './utils';\n","import {useRef, useEffect} from 'react';\nexport const useBlurOnFulfill = ({value, cellCount}) => {\n const inputRef = useRef(null);\n useEffect(() => {\n if (value && value.length === cellCount) {\n const inputInstance = inputRef.current;\n if (inputInstance) {\n inputInstance.blur();\n }\n }\n }, [value, cellCount]);\n return inputRef;\n};\n","import {useMemo, useRef} from 'react';\nimport {Platform} from 'react-native';\nconst findIndex = ({locationX, locationY}, map) => {\n for (const [index, {x, y, xEnd, yEnd}] of Object.entries(map)) {\n if (\n x < locationX &&\n locationX < xEnd &&\n y < locationY &&\n locationY < yEnd\n ) {\n return parseInt(index, 10);\n }\n }\n return -1;\n};\nexport const useClearByFocusCell = (options) => {\n const valueRef = useRef(options);\n const cellsLayouts = useRef({});\n valueRef.current = options;\n const clearCodeByCoords = (coords) => {\n const index = findIndex(coords, cellsLayouts.current);\n if (index !== -1) {\n const {value, setValue} = valueRef.current;\n const text = (value || '').slice(0, index);\n setValue(text);\n }\n };\n const getCellOnLayoutHandler = (index) => (event) => {\n const {width, height, x, y} = event.nativeEvent.layout;\n cellsLayouts.current[`${index}`] = {\n x,\n xEnd: x + width,\n y,\n yEnd: y + height,\n };\n };\n const onPressOut = (event) => clearCodeByCoords(event.nativeEvent);\n // For support react-native-web\n const onClick = (event) => {\n // @ts-expect-error: not types for getClientRects\n const [offset] = event.target.getClientRects();\n const locationX = event.clientX - offset.left;\n const locationY = event.clientY - offset.top;\n clearCodeByCoords({locationX, locationY});\n };\n return [\n // @ts-expect-error: for web support\n useMemo(() => Platform.select({web: {onClick}, default: {onPressOut}}), []),\n getCellOnLayoutHandler,\n ];\n};\n","import {useCallback} from 'react';\nexport const useEvent = (nativeEvent, customHandler) =>\n useCallback(\n (event) => {\n customHandler();\n if (typeof nativeEvent === 'function') {\n nativeEvent(event);\n }\n },\n [nativeEvent],\n );\n","import {useState} from 'react';\nimport {useEvent} from './useEvent';\nexport const useFocusState = (onBlur, onFocus) => {\n const [isFocused, setFocusFlag] = useState(false);\n return {\n isFocused,\n onBlur: useEvent(onBlur, () => setFocusFlag(false)),\n onFocus: useEvent(onFocus, () => setFocusFlag(true)),\n };\n};\n","import {useEffect, useRef} from 'react';\nconst creteUseTimer = (clear, runTimer) => (callback, delay) => {\n const timerRef = useRef();\n useEffect(() => {\n const stop = () => clear(timerRef.current);\n stop();\n timerRef.current = runTimer(callback, delay);\n return stop;\n }, [delay]);\n};\nexport const useInterval = creteUseTimer(\n // @ts-expect-error - I know better\n clearInterval,\n setInterval,\n);\nexport const useTimeout = creteUseTimer(\n // @ts-expect-error - I know better\n clearTimeout,\n setTimeout,\n);\n","const truncateString = (codeValue, codeLength) =>\n codeValue.substr(0, codeLength).split('');\nconst emptySymbols = (codeLength) => new Array(codeLength).fill('');\nexport const getSymbols = (codeValue, codeLength) =>\n new Array()\n .concat(truncateString(codeValue, codeLength))\n .concat(emptySymbols(codeLength))\n .slice(0, codeLength);\nexport const getStyle = (base, custom) => (custom ? [base, custom] : base);\nexport const isLastFilledCell = ({value, index}) =>\n Boolean(value && value.length - 2 === index);\n","import React from 'react'\nimport { NativeModules, requireNativeComponent, Platform } from 'react-native'\nimport { shouldCloseModal, shouldOpenModal } from './modal'\n\nfunction addMinutes(date, minutesToAdd) {\n return new Date(date.valueOf() + minutesToAdd * 60 * 1000)\n}\n\nconst NativeDatePicker =\n Platform.OS === 'android'\n ? requireNativeComponent(`DatePickerManager`, DatePickerAndroid, {\n nativeOnly: { onChange: true },\n })\n : null\n\nconst height = 180\nconst timeModeWidth = 240\nconst defaultWidth = 310\n\nclass DatePickerAndroid extends React.PureComponent {\n render() {\n const props = this.getProps()\n\n if (shouldOpenModal(props, this.previousProps)) {\n this.isClosing = false\n NativeModules.RNDatePicker.openPicker(\n props,\n this._onConfirm,\n this._onCancel\n )\n }\n if (shouldCloseModal(props, this.previousProps, this.isClosing)) {\n this.closing = true\n NativeModules.RNDatePicker.closePicker()\n }\n\n this.previousProps = props\n\n if (props.modal) return null\n\n return \n }\n\n getProps = () => ({\n ...this.props,\n date: this._date(),\n minimumDate: this._minimumDate(),\n maximumDate: this._maximumDate(),\n timezoneOffsetInMinutes: this._getTimezoneOffsetInMinutes(),\n style: this._getStyle(),\n })\n\n _getTimezoneOffsetInMinutes = () => {\n if (this.props.timeZoneOffsetInMinutes == undefined) return undefined\n return this.props.timeZoneOffsetInMinutes\n }\n\n _getStyle = () => {\n const width = this.props.mode === 'time' ? timeModeWidth : defaultWidth\n return [{ width, height }, this.props.style]\n }\n\n _onChange = (e) => {\n const jsDate = this._fromIsoWithTimeZoneOffset(e.nativeEvent.date)\n this.props.onDateChange && this.props.onDateChange(jsDate)\n if (this.props.onDateStringChange) {\n this.props.onDateStringChange(e.nativeEvent.dateString)\n }\n }\n\n _maximumDate = () =>\n this.props.maximumDate &&\n this._toIsoWithTimeZoneOffset(this.props.maximumDate)\n\n _minimumDate = () =>\n this.props.minimumDate &&\n this._toIsoWithTimeZoneOffset(this.props.minimumDate)\n\n _date = () => this._toIsoWithTimeZoneOffset(this.props.date)\n\n _fromIsoWithTimeZoneOffset = (timestamp) => {\n return new Date(timestamp)\n }\n\n _toIsoWithTimeZoneOffset = (date) => {\n return date.toISOString()\n }\n\n _onConfirm = (isoDate) => {\n this.isClosing = true\n this.props.onConfirm(this._fromIsoWithTimeZoneOffset(isoDate))\n }\n\n _onCancel = () => {\n this.isClosing = true\n this.props.onCancel()\n }\n}\n\nexport default DatePickerAndroid\n","import React from 'react'\nimport { StyleSheet, requireNativeComponent, NativeModules, Platform } from 'react-native'\nimport { shouldCloseModal, shouldOpenModal } from './modal'\n\nconst RCTDatePickerIOS =\n Platform.OS === 'ios' ? requireNativeComponent('RNDatePicker') : null\n\nexport default class DatePickerIOS extends React.Component {\n _picker = null\n\n componentDidUpdate() {\n if (this.props.date) {\n const propsTimeStamp = this.props.date.getTime()\n if (this._picker) {\n this._picker.setNativeProps({\n date: propsTimeStamp,\n })\n }\n }\n }\n\n _onChange = (event) => {\n const nativeTimeStamp = event.nativeEvent.timestamp\n this.props.onDateChange &&\n this.props.onDateChange(new Date(nativeTimeStamp))\n }\n\n _toIosProps = (props) => {\n return {\n ...props,\n style: [styles.datePickerIOS, props.style],\n date: props.date ? props.date.getTime() : undefined,\n locale: props.locale ? props.locale : undefined,\n maximumDate: props.maximumDate ? props.maximumDate.getTime() : undefined,\n minimumDate: props.minimumDate ? props.minimumDate.getTime() : undefined,\n theme: props.theme ? props.theme : 'auto',\n }\n }\n\n _onConfirm = ({ timestamp }) => {\n this.isClosing = true\n this.props.onConfirm(new Date(timestamp))\n }\n\n _onCancel = () => {\n this.isClosing = true\n this.props.onCancel()\n }\n\n render() {\n const props = this._toIosProps(this.props)\n\n if (shouldOpenModal(props, this.previousProps)) {\n this.isClosing = false\n NativeModules.RNDatePickerManager.openPicker(\n props,\n this._onConfirm,\n this._onCancel\n )\n }\n if (shouldCloseModal(props, this.previousProps, this.isClosing)) {\n this.isClosing = true\n NativeModules.RNDatePickerManager.closePicker()\n }\n\n this.previousProps = props\n\n if (props.modal) return null\n\n return (\n {\n this._picker = picker\n }}\n onChange={this._onChange}\n onStartShouldSetResponder={() => true}\n onResponderTerminationRequest={() => false}\n {...props}\n />\n )\n }\n}\n\nconst styles = StyleSheet.create({\n datePickerIOS: {\n height: 216,\n width: 310,\n },\n})\n","export function colorToHex(c) {\n if (c === undefined) return c\n if (c === 'none') return c\n if (c.includes('rgb')) return rgb2hex(parseRgb(c))\n if (c.includes('hsl')) return hsl2hex(parseHsl(c))\n if (c.includes('#')) {\n if (!isValidHex(c)) throw Error('Invalid color: ' + c)\n if (c.length === 4) return '#' + c[1] + c[1] + c[2] + c[2] + c[3] + c[3]\n if (c.length === 7) return c\n }\n const colorFromName = colourNameToHex(c)\n if (colorFromName) return colorFromName\n throw Error('Invalid color: ' + c)\n}\n\nfunction isValidHex(color) {\n return /^#([0-9A-Fa-f]{3}){1,2}$/i.test(color)\n}\n\nfunction parseRgb(rgb) {\n return rgb\n .match(\n /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i\n )\n .slice(1)\n}\n\nfunction rgb2hex(rgbArray) {\n if (rgbArray.length != 3) {\n return ''\n }\n return (\n '#' +\n parseInt(rgbArray[0]).toString(16).padStart(2, '0') +\n parseInt(rgbArray[1]).toString(16).padStart(2, '0') +\n parseInt(rgbArray[2]).toString(16).padStart(2, '0')\n )\n}\n\nfunction parseHsl(hsl) {\n const matches = hsl.match(\n /^hsla*\\((\\d{1,3})\\s*[, ]\\s*(\\d{1,3})%\\s*[, ]\\s*(\\d{1,3})%.*\\)/i\n )\n\n if (matches === null) {\n throw Error('Invalid color: ' + hsl)\n }\n\n const h = matches[1] / 360\n const s = matches[2] / 100\n const l = matches[3] / 100\n return [h, s, l]\n}\n\nfunction hsl2hex(hslArray) {\n if (hslArray.length != 3) {\n return ''\n }\n\n const [h, s, l] = hslArray\n\n var r, g, b\n\n if (s === 0) {\n r = g = b = l\n } else {\n const hue2rgb = (p, q, t) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n r = hue2rgb(p, q, h + 1 / 3)\n g = hue2rgb(p, q, h)\n b = hue2rgb(p, q, h - 1 / 3)\n }\n\n return rgb2hex([\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n ])\n}\n\nfunction colourNameToHex(color) {\n var colors = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgrey: '#d3d3d3',\n lightgreen: '#90ee90',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370d8',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#d87093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n }\n return colors[color.toLowerCase()]\n}\n","import React from 'react'\nimport { Platform, Appearance, Text } from 'react-native'\nimport DatePickerAndroid from './DatePickerAndroid'\nimport propTypes from './propTypes'\nimport { colorToHex } from './colorToHex'\nimport { throwIfInvalidProps } from './propChecker'\nimport DatePickerIOS from './DatePickerIOS'\n\nconst DatePicker = Platform.select({\n android: DatePickerAndroid,\n ios: DatePickerIOS,\n default: () => DatePicker is not supported on this platform.,\n})\n\nDatePicker.propTypes = propTypes\n\nconst DatePickerWrapper = (props) => {\n if (__DEV__) throwIfInvalidProps(props)\n return (\n \n )\n}\n\nconst getTheme = (props) => {\n if (props.theme) return props.theme\n if (!Appearance) return 'auto'\n return Appearance.getColorScheme()\n}\n\nconst getTextColor = (props) => {\n if (props.textColor) return props.textColor\n const darkTheme = getTheme(props) === 'dark'\n if (darkTheme) return 'white'\n return undefined\n}\n\nconst getAndroidVariant = (props) => {\n const { modal, androidVariant } = props\n if (androidVariant) return androidVariant\n return modal ? 'nativeAndroid' : 'iosClone'\n}\n\nconst getTitle = (props) => {\n const { title, mode } = props\n if (title === null) return ''\n if (title) return title\n if (mode === 'time') return 'Select time'\n return 'Select date'\n}\n\nexport default React.memo(DatePickerWrapper)\n","export const shouldOpenModal = (props, prevProps) => {\n if (!props.modal) return false\n if (!props.open) return false\n const currentlyOpen = prevProps?.open\n if (currentlyOpen) return false\n return true\n}\n\nexport const shouldCloseModal = (props, prevProps, isClosing) => {\n if (!props.modal) return false\n if (props.open) return false\n const currentlyOpen = prevProps?.open\n if (!currentlyOpen) return false\n if (isClosing) return false\n return true\n}\n","export function throwIfInvalidProps(props) {\n checks.forEach((check) => check.validate(props))\n}\n\nclass PropCheck {\n constructor(isInvalid, errorText) {\n this.isInvalid = isInvalid\n this.errorText = errorText\n }\n validate = (props) => {\n if (this.isInvalid(props)) {\n throw new Error(\n `${this.errorText} Check usage of react-native-date-picker.`\n )\n }\n }\n}\n\nconst dateCheck = new PropCheck(\n (props) => props && !(props.date instanceof Date),\n 'Invalid or missing Date prop. Must be a Date object.'\n)\n\nconst widthCheck = new PropCheck(\n (props) =>\n props &&\n props.style &&\n props.style.width &&\n typeof props.style.width !== 'number',\n 'Invalid style: width. Width needs to be a number. Percentages or other values are not supported.'\n)\n\nconst heightCheck = new PropCheck(\n (props) =>\n props &&\n props.style &&\n props.style.height &&\n typeof props.style.height !== 'number',\n 'Invalid style: height. Height needs to be a number. Percentages or other values are not supported.'\n)\n\nconst modeCheck = new PropCheck(\n (props) =>\n props && props.mode && !['datetime', 'date', 'time'].includes(props.mode),\n \"Invalid mode. Valid modes: 'datetime', 'date', 'time'\"\n)\n\nconst androidVariantCheck = new PropCheck(\n (props) =>\n props &&\n props.androidVariant &&\n !['nativeAndroid', 'iosClone'].includes(props.androidVariant),\n \"Invalid android variant. Valid modes: 'nativeAndroid', 'iosClone'\"\n)\n\nconst themeCheck = new PropCheck(\n (props) =>\n props && props.theme && !['light', 'dark', 'auto'].includes(props.theme),\n \"Invalid theme. Valid options: 'light', 'dark', 'auto'\"\n)\n\nconst checks = [\n dateCheck,\n widthCheck,\n heightCheck,\n modeCheck,\n androidVariantCheck,\n themeCheck,\n]\n","import { Platform } from 'react-native'\nimport PropTypes from 'prop-types'\n\nconst androidPropTypes = {\n fadeToColor: PropTypes.string,\n androidVariant: PropTypes.oneOf(['iosClone', 'nativeAndroid']),\n dividerHeight: PropTypes.number,\n is24hourSource: PropTypes.oneOf(['locale', 'device']),\n}\n\nconst iOSPropTypes = {\n theme: PropTypes.oneOf(['light', 'dark', 'auto']),\n}\n\nconst modalPropTypes = {\n modal: PropTypes.bool,\n open: PropTypes.bool,\n onConfirm: PropTypes.func,\n onCancel: PropTypes.func,\n confirmText: PropTypes.string,\n cancelText: PropTypes.string,\n title: PropTypes.string,\n}\n\nconst DateType = PropTypes.instanceOf(Date)\n\nexport default {\n ...(Platform === 'android' ? androidPropTypes : iOSPropTypes),\n date: DateType.isRequired,\n onChange: PropTypes.func,\n minimumDate: DateType,\n maximumDate: DateType,\n mode: PropTypes.oneOf(['date', 'time', 'datetime']),\n minuteInterval: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]),\n locale: PropTypes.string,\n textColor: PropTypes.string,\n timeZoneOffsetInMinutes: PropTypes.number,\n testID: PropTypes.string,\n style: PropTypes.any,\n ...modalPropTypes,\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { Dimensions, NativeEventEmitter, NativeModules, Platform } from 'react-native';\nimport { useOnEvent, useOnMount } from './internal/asyncHookWrappers';\nimport devicesWithDynamicIsland from \"./internal/devicesWithDynamicIsland\";\nimport devicesWithNotch from './internal/devicesWithNotch';\nimport RNDeviceInfo from './internal/nativeInterface';\nimport {\n getSupportedPlatformInfoAsync,\n getSupportedPlatformInfoFunctions,\n getSupportedPlatformInfoSync,\n} from './internal/supported-platform-info';\nimport { DeviceInfoModule } from './internal/privateTypes';\nimport type {\n AsyncHookResult,\n DeviceType,\n LocationProviderInfo,\n PowerState,\n} from './internal/types';\n\nexport const [getUniqueId, getUniqueIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'uniqueId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getUniqueId(),\n syncGetter: () => RNDeviceInfo.getUniqueIdSync(),\n defaultValue: 'unknown',\n});\n\nlet uniqueId: string;\nexport async function syncUniqueId() {\n if (Platform.OS === 'ios') {\n uniqueId = await RNDeviceInfo.syncUniqueId();\n } else {\n uniqueId = await getUniqueId();\n }\n return uniqueId;\n}\n\nexport const [getInstanceId, getInstanceIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'instanceId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getInstanceId(),\n syncGetter: () => RNDeviceInfo.getInstanceIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getSerialNumber, getSerialNumberSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'serialNumber',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getSerialNumber(),\n syncGetter: () => RNDeviceInfo.getSerialNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getAndroidId, getAndroidIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'androidId',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getAndroidId(),\n syncGetter: () => RNDeviceInfo.getAndroidIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIpAddress, getIpAddressSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getIpAddress(),\n syncGetter: () => RNDeviceInfo.getIpAddressSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isCameraPresent, isCameraPresentSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.isCameraPresent(),\n syncGetter: () => RNDeviceInfo.isCameraPresentSync(),\n defaultValue: false,\n});\n\nexport async function getMacAddress() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddress();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport function getMacAddressSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getMacAddressSync();\n } else if (Platform.OS === 'ios') {\n return '02:00:00:00:00:00';\n }\n return 'unknown';\n}\n\nexport const getDeviceId = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n memoKey: 'deviceId',\n getter: () => RNDeviceInfo.deviceId,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const [getManufacturer, getManufacturerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'manufacturer',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () =>\n Platform.OS == 'ios' ? Promise.resolve('Apple') : RNDeviceInfo.getSystemManufacturer(),\n syncGetter: () => (Platform.OS == 'ios' ? 'Apple' : RNDeviceInfo.getSystemManufacturerSync()),\n defaultValue: 'unknown',\n});\n\nexport const getModel = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'model',\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n getter: () => RNDeviceInfo.model,\n });\n\nexport const getBrand = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'brand',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.brand,\n });\n\nexport const getSystemName = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n supportedPlatforms: ['ios', 'android', 'windows'],\n memoKey: 'systemName',\n getter: () =>\n Platform.select({\n ios: RNDeviceInfo.systemName,\n android: 'Android',\n windows: 'Windows',\n default: 'unknown',\n }),\n });\n\nexport const getSystemVersion = () =>\n getSupportedPlatformInfoSync({\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.systemVersion,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'systemVersion',\n });\n\nexport const [getBuildId, getBuildIdSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'buildId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getBuildId(),\n syncGetter: () => RNDeviceInfo.getBuildIdSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getApiLevel, getApiLevelSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'apiLevel',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getApiLevel(),\n syncGetter: () => RNDeviceInfo.getApiLevelSync(),\n defaultValue: -1,\n});\n\nexport const getBundleId = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'bundleId',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.bundleId,\n });\n\nexport const [\n getInstallerPackageName,\n getInstallerPackageNameSync,\n] = getSupportedPlatformInfoFunctions({\n memoKey: 'installerPackageName',\n supportedPlatforms: ['android', 'windows', 'ios'],\n getter: () => RNDeviceInfo.getInstallerPackageName(),\n syncGetter: () => RNDeviceInfo.getInstallerPackageNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const getApplicationName = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'appName',\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.appName,\n supportedPlatforms: ['android', 'ios', 'windows'],\n });\n\nexport const getBuildNumber = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'buildNumber',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.buildNumber,\n defaultValue: 'unknown',\n });\n\nexport const getVersion = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'version',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.appVersion,\n });\n\nexport function getReadableVersion() {\n return getVersion() + '.' + getBuildNumber();\n}\n\nexport const [getDeviceName, getDeviceNameSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getDeviceName(),\n syncGetter: () => RNDeviceInfo.getDeviceNameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getUsedMemory, getUsedMemorySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getUsedMemory(),\n syncGetter: () => RNDeviceInfo.getUsedMemorySync(),\n defaultValue: -1,\n});\n\nexport const getUserAgent = () =>\n getSupportedPlatformInfoAsync({\n memoKey: 'userAgent',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.getUserAgent(),\n });\n\nexport const getUserAgentSync = () =>\n getSupportedPlatformInfoSync({\n memoKey: 'userAgentSync',\n defaultValue: 'unknown',\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.getUserAgentSync(),\n });\n\nexport const [getFontScale, getFontScaleSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFontScale(),\n syncGetter: () => RNDeviceInfo.getFontScaleSync(),\n defaultValue: -1,\n});\n\nexport const [getBootloader, getBootloaderSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'bootloader',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getBootloader(),\n syncGetter: () => RNDeviceInfo.getBootloaderSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getDevice, getDeviceSync] = getSupportedPlatformInfoFunctions({\n getter: () => RNDeviceInfo.getDevice(),\n syncGetter: () => RNDeviceInfo.getDeviceSync(),\n defaultValue: 'unknown',\n memoKey: 'device',\n supportedPlatforms: ['android'],\n});\n\nexport const [getDisplay, getDisplaySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'display',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getDisplay(),\n syncGetter: () => RNDeviceInfo.getDisplaySync(),\n defaultValue: 'unknown',\n});\n\nexport const [getFingerprint, getFingerprintSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'fingerprint',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getFingerprint(),\n syncGetter: () => RNDeviceInfo.getFingerprintSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHardware, getHardwareSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hardware',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getHardware(),\n syncGetter: () => RNDeviceInfo.getHardwareSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHost, getHostSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'host',\n supportedPlatforms: ['android', 'windows'],\n getter: () => RNDeviceInfo.getHost(),\n syncGetter: () => RNDeviceInfo.getHostSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getHostNames, getHostNamesSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'hostNames',\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.getHostNames(),\n syncGetter: () => RNDeviceInfo.getHostNamesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [getProduct, getProductSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'product',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getProduct(),\n syncGetter: () => RNDeviceInfo.getProductSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTags, getTagsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'tags',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getTags(),\n syncGetter: () => RNDeviceInfo.getTagsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getType, getTypeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'type',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getType(),\n syncGetter: () => RNDeviceInfo.getTypeSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getBaseOs, getBaseOsSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'baseOs',\n supportedPlatforms: ['android', 'web', 'windows'],\n getter: () => RNDeviceInfo.getBaseOs(),\n syncGetter: () => RNDeviceInfo.getBaseOsSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getPreviewSdkInt, getPreviewSdkIntSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'previewSdkInt',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPreviewSdkInt(),\n syncGetter: () => RNDeviceInfo.getPreviewSdkIntSync(),\n defaultValue: -1,\n});\n\nexport const [getSecurityPatch, getSecurityPatchSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'securityPatch',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSecurityPatch(),\n syncGetter: () => RNDeviceInfo.getSecurityPatchSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCodename, getCodenameSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'codeName',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getCodename(),\n syncGetter: () => RNDeviceInfo.getCodenameSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getIncremental, getIncrementalSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'incremental',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getIncremental(),\n syncGetter: () => RNDeviceInfo.getIncrementalSync(),\n defaultValue: 'unknown',\n});\n\nexport const [isEmulator, isEmulatorSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'emulator',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isEmulator(),\n syncGetter: () => RNDeviceInfo.isEmulatorSync(),\n defaultValue: false,\n});\n\nexport const isTablet = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['android', 'ios', 'windows'],\n memoKey: 'tablet',\n getter: () => RNDeviceInfo.isTablet,\n });\n\nexport const isDisplayZoomed = () =>\n getSupportedPlatformInfoSync({\n defaultValue: false,\n supportedPlatforms: ['ios'],\n memoKey: 'zoomed',\n getter: () => RNDeviceInfo.isDisplayZoomed,\n });\n\nexport const [isPinOrFingerprintSet, isPinOrFingerprintSetSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.isPinOrFingerprintSet(),\n syncGetter: () => RNDeviceInfo.isPinOrFingerprintSetSync(),\n defaultValue: false,\n }\n);\n\nlet notch: boolean;\nexport function hasNotch() {\n if (notch === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n notch =\n devicesWithNotch.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return notch;\n}\n\nlet dynamicIsland: boolean;\nexport function hasDynamicIsland() {\n if (dynamicIsland === undefined) {\n let _brand = getBrand();\n let _model = getModel();\n dynamicIsland =\n devicesWithDynamicIsland.findIndex(\n (item) =>\n item.brand.toLowerCase() === _brand.toLowerCase() &&\n item.model.toLowerCase() === _model.toLowerCase()\n ) !== -1;\n }\n return dynamicIsland;\n}\n\nexport const [hasGms, hasGmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasGms(),\n syncGetter: () => RNDeviceInfo.hasGmsSync(),\n defaultValue: false,\n});\n\nexport const [hasHms, hasHmsSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.hasHms(),\n syncGetter: () => RNDeviceInfo.hasHmsSync(),\n defaultValue: false,\n});\n\nexport const [getFirstInstallTime, getFirstInstallTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'firstInstallTime',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getFirstInstallTime(),\n syncGetter: () => RNDeviceInfo.getFirstInstallTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getInstallReferrer, getInstallReferrerSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'installReferrer',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getInstallReferrer(),\n syncGetter: () => RNDeviceInfo.getInstallReferrerSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getLastUpdateTime, getLastUpdateTimeSync] = getSupportedPlatformInfoFunctions({\n memoKey: 'lastUpdateTime',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getLastUpdateTime(),\n syncGetter: () => RNDeviceInfo.getLastUpdateTimeSync(),\n defaultValue: -1,\n});\n\nexport const [getPhoneNumber, getPhoneNumberSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getPhoneNumber(),\n syncGetter: () => RNDeviceInfo.getPhoneNumberSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getCarrier, getCarrierSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getCarrier(),\n syncGetter: () => RNDeviceInfo.getCarrierSync(),\n defaultValue: 'unknown',\n});\n\nexport const [getTotalMemory, getTotalMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'totalMemory',\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalMemory(),\n syncGetter: () => RNDeviceInfo.getTotalMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getMaxMemory, getMaxMemorySync] = getSupportedPlatformInfoFunctions({\n memoKey: 'maxMemory',\n supportedPlatforms: ['android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getMaxMemory(),\n syncGetter: () => RNDeviceInfo.getMaxMemorySync(),\n defaultValue: -1,\n});\n\nexport const [getTotalDiskCapacity, getTotalDiskCapacitySync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getTotalDiskCapacity(),\n syncGetter: () => RNDeviceInfo.getTotalDiskCapacitySync(),\n defaultValue: -1,\n});\n\nexport async function getTotalDiskCapacityOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacity();\n }\n\n return -1;\n}\n\nexport function getTotalDiskCapacityOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getTotalDiskCapacityOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getTotalDiskCapacitySync();\n }\n\n return -1;\n}\n\nexport const [getFreeDiskStorage, getFreeDiskStorageSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getFreeDiskStorage(),\n syncGetter: () => RNDeviceInfo.getFreeDiskStorageSync(),\n defaultValue: -1,\n});\n\nexport async function getFreeDiskStorageOld() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOld();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorage();\n }\n\n return -1;\n}\n\nexport function getFreeDiskStorageOldSync() {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.getFreeDiskStorageOldSync();\n }\n if (Platform.OS === 'ios' || Platform.OS === 'windows' || Platform.OS === 'web') {\n return getFreeDiskStorageSync();\n }\n\n return -1;\n}\n\nexport const [getBatteryLevel, getBatteryLevelSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.getBatteryLevel(),\n syncGetter: () => RNDeviceInfo.getBatteryLevelSync(),\n defaultValue: -1,\n});\n\nexport const [getPowerState, getPowerStateSync] = getSupportedPlatformInfoFunctions<\n Partial\n>({\n supportedPlatforms: ['ios', 'android', 'windows', 'web'],\n getter: () => RNDeviceInfo.getPowerState(),\n syncGetter: () => RNDeviceInfo.getPowerStateSync(),\n defaultValue: {},\n});\n\nexport const [isBatteryCharging, isBatteryChargingSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'windows', 'web'],\n getter: () => RNDeviceInfo.isBatteryCharging(),\n syncGetter: () => RNDeviceInfo.isBatteryChargingSync(),\n defaultValue: false,\n});\n\nexport async function isLandscape() {\n return Promise.resolve(isLandscapeSync());\n}\n\nexport function isLandscapeSync() {\n const { height, width } = Dimensions.get('window');\n return width >= height;\n}\n\nexport const [isAirplaneMode, isAirplaneModeSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'web'],\n getter: () => RNDeviceInfo.isAirplaneMode(),\n syncGetter: () => RNDeviceInfo.isAirplaneModeSync(),\n defaultValue: false,\n});\n\nexport const getDeviceType = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const getDeviceTypeSync = () => {\n return getSupportedPlatformInfoSync({\n memoKey: 'deviceType',\n supportedPlatforms: ['android', 'ios', 'windows'],\n defaultValue: 'unknown',\n getter: () => RNDeviceInfo.deviceType,\n });\n};\n\nexport const [supportedAbis, supportedAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supportedAbis',\n supportedPlatforms: ['android', 'ios', 'windows'],\n getter: () => RNDeviceInfo.getSupportedAbis(),\n syncGetter: () => RNDeviceInfo.getSupportedAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported32BitAbis, supported32BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported32BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported32BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported32BitAbisSync(),\n defaultValue: [] as string[],\n});\n\nexport const [supported64BitAbis, supported64BitAbisSync] = getSupportedPlatformInfoFunctions({\n memoKey: '_supported64BitAbis',\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSupported64BitAbis(),\n syncGetter: () => RNDeviceInfo.getSupported64BitAbisSync(),\n defaultValue: [],\n});\n\nexport async function hasSystemFeature(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeature(feature);\n }\n return false;\n}\n\nexport function hasSystemFeatureSync(feature: string) {\n if (Platform.OS === 'android') {\n return RNDeviceInfo.hasSystemFeatureSync(feature);\n }\n return false;\n}\n\nexport function isLowBatteryLevel(level: number): boolean {\n if (Platform.OS === 'android') {\n return level < 0.15;\n }\n return level < 0.2;\n}\n\nexport const [\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android'],\n getter: () => RNDeviceInfo.getSystemAvailableFeatures(),\n syncGetter: () => RNDeviceInfo.getSystemAvailableFeaturesSync(),\n defaultValue: [] as string[],\n});\n\nexport const [isLocationEnabled, isLocationEnabledSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios', 'web'],\n getter: () => RNDeviceInfo.isLocationEnabled(),\n syncGetter: () => RNDeviceInfo.isLocationEnabledSync(),\n defaultValue: false,\n});\n\nexport const [isHeadphonesConnected, isHeadphonesConnectedSync] = getSupportedPlatformInfoFunctions(\n {\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.isHeadphonesConnected(),\n syncGetter: () => RNDeviceInfo.isHeadphonesConnectedSync(),\n defaultValue: false,\n }\n);\n\nexport const [isMouseConnected, isMouseConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isMouseConnected(),\n syncGetter: () => RNDeviceInfo.isMouseConnectedSync(),\n defaultValue: false,\n});\n\nexport const [isKeyboardConnected, isKeyboardConnectedSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isKeyboardConnected(),\n syncGetter: () => RNDeviceInfo.isKeyboardConnectedSync(),\n defaultValue: false,\n});\n\nexport const isTabletMode = () =>\n getSupportedPlatformInfoAsync({\n supportedPlatforms: ['windows'],\n getter: () => RNDeviceInfo.isTabletMode(),\n defaultValue: false,\n });\n\nexport const [\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['android', 'ios'],\n getter: () => RNDeviceInfo.getAvailableLocationProviders(),\n syncGetter: () => RNDeviceInfo.getAvailableLocationProvidersSync(),\n defaultValue: {},\n});\n\nexport const [getBrightness, getBrightnessSync] = getSupportedPlatformInfoFunctions({\n supportedPlatforms: ['ios'],\n getter: () => RNDeviceInfo.getBrightness(),\n syncGetter: () => RNDeviceInfo.getBrightnessSync(),\n defaultValue: -1,\n});\n\nexport async function getDeviceToken() {\n if (Platform.OS === 'ios') {\n return RNDeviceInfo.getDeviceToken();\n }\n return 'unknown';\n}\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\nexport function useBatteryLevel(): number | null {\n const [batteryLevel, setBatteryLevel] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n setBatteryLevel(initialValue);\n };\n\n const onChange = (level: number) => {\n setBatteryLevel(level);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_batteryLevelDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevel;\n}\n\nexport function useBatteryLevelIsLow(): number | null {\n const [batteryLevelIsLow, setBatteryLevelIsLow] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBatteryLevel();\n isLowBatteryLevel(initialValue) && setBatteryLevelIsLow(initialValue);\n };\n\n setInitialValue();\n\n const onChange = (level: number) => {\n setBatteryLevelIsLow(level);\n };\n\n const subscription = deviceInfoEmitter.addListener('RNDeviceInfo_batteryLevelIsLow', onChange);\n\n return () => subscription.remove();\n }, []);\n\n return batteryLevelIsLow;\n}\n\nexport function usePowerState(): Partial {\n const [powerState, setPowerState] = useState>({});\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: Partial = await getPowerState();\n setPowerState(initialValue);\n };\n\n const onChange = (state: PowerState) => {\n setPowerState(state);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_powerStateDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return powerState;\n}\n\nexport function useIsHeadphonesConnected(): AsyncHookResult {\n return useOnEvent('RNDeviceInfo_headphoneConnectionDidChange', isHeadphonesConnected, false);\n}\n\nexport function useFirstInstallTime(): AsyncHookResult {\n return useOnMount(getFirstInstallTime, -1);\n}\n\nexport function useDeviceName(): AsyncHookResult {\n return useOnMount(getDeviceName, 'unknown');\n}\n\nexport function useHasSystemFeature(feature: string): AsyncHookResult {\n const asyncGetter = useCallback(() => hasSystemFeature(feature), [feature]);\n return useOnMount(asyncGetter, false);\n}\n\nexport function useIsEmulator(): AsyncHookResult {\n return useOnMount(isEmulator, false);\n}\n\nexport function useManufacturer(): AsyncHookResult {\n return useOnMount(getManufacturer, 'unknown');\n}\n\nexport function useBrightness(): number | null {\n const [brightness, setBrightness] = useState(null);\n\n useEffect(() => {\n const setInitialValue = async () => {\n const initialValue: number = await getBrightness();\n setBrightness(initialValue);\n };\n\n const onChange = (value: number) => {\n setBrightness(value);\n };\n\n setInitialValue();\n\n const subscription = deviceInfoEmitter.addListener(\n 'RNDeviceInfo_brightnessDidChange',\n onChange\n );\n\n return () => subscription.remove();\n }, []);\n\n return brightness;\n}\n\nexport type { AsyncHookResult, DeviceType, LocationProviderInfo, PowerState };\n\nconst DeviceInfo: DeviceInfoModule = {\n getAndroidId,\n getAndroidIdSync,\n getApiLevel,\n getApiLevelSync,\n getApplicationName,\n getAvailableLocationProviders,\n getAvailableLocationProvidersSync,\n getBaseOs,\n getBaseOsSync,\n getBatteryLevel,\n getBatteryLevelSync,\n getBootloader,\n getBootloaderSync,\n getBrand,\n getBuildId,\n getBuildIdSync,\n getBuildNumber,\n getBundleId,\n getCarrier,\n getCarrierSync,\n getCodename,\n getCodenameSync,\n getDevice,\n getDeviceId,\n getDeviceName,\n getDeviceNameSync,\n getDeviceSync,\n getDeviceToken,\n getDeviceType,\n getDisplay,\n getDisplaySync,\n getFingerprint,\n getFingerprintSync,\n getFirstInstallTime,\n getFirstInstallTimeSync,\n getFontScale,\n getFontScaleSync,\n getFreeDiskStorage,\n getFreeDiskStorageOld,\n getFreeDiskStorageSync,\n getFreeDiskStorageOldSync,\n getHardware,\n getHardwareSync,\n getHost,\n getHostSync,\n getHostNames,\n getHostNamesSync,\n getIncremental,\n getIncrementalSync,\n getInstallerPackageName,\n getInstallerPackageNameSync,\n getInstallReferrer,\n getInstallReferrerSync,\n getInstanceId,\n getInstanceIdSync,\n getIpAddress,\n getIpAddressSync,\n getLastUpdateTime,\n getLastUpdateTimeSync,\n getMacAddress,\n getMacAddressSync,\n getManufacturer,\n getManufacturerSync,\n getMaxMemory,\n getMaxMemorySync,\n getModel,\n getPhoneNumber,\n getPhoneNumberSync,\n getPowerState,\n getPowerStateSync,\n getPreviewSdkInt,\n getPreviewSdkIntSync,\n getProduct,\n getProductSync,\n getReadableVersion,\n getSecurityPatch,\n getSecurityPatchSync,\n getSerialNumber,\n getSerialNumberSync,\n getSystemAvailableFeatures,\n getSystemAvailableFeaturesSync,\n getSystemName,\n getSystemVersion,\n getTags,\n getTagsSync,\n getTotalDiskCapacity,\n getTotalDiskCapacityOld,\n getTotalDiskCapacitySync,\n getTotalDiskCapacityOldSync,\n getTotalMemory,\n getTotalMemorySync,\n getType,\n getTypeSync,\n getUniqueId,\n getUniqueIdSync,\n getUsedMemory,\n getUsedMemorySync,\n getUserAgent,\n getUserAgentSync,\n getVersion,\n getBrightness,\n getBrightnessSync,\n hasGms,\n hasGmsSync,\n hasHms,\n hasHmsSync,\n hasNotch,\n hasDynamicIsland,\n hasSystemFeature,\n hasSystemFeatureSync,\n isAirplaneMode,\n isAirplaneModeSync,\n isBatteryCharging,\n isBatteryChargingSync,\n isCameraPresent,\n isCameraPresentSync,\n isEmulator,\n isEmulatorSync,\n isHeadphonesConnected,\n isHeadphonesConnectedSync,\n isLandscape,\n isLandscapeSync,\n isLocationEnabled,\n isLocationEnabledSync,\n isPinOrFingerprintSet,\n isPinOrFingerprintSetSync,\n isMouseConnected,\n isMouseConnectedSync,\n isKeyboardConnected,\n isKeyboardConnectedSync,\n isTabletMode,\n isTablet,\n isDisplayZoomed,\n supported32BitAbis,\n supported32BitAbisSync,\n supported64BitAbis,\n supported64BitAbisSync,\n supportedAbis,\n supportedAbisSync,\n syncUniqueId,\n useBatteryLevel,\n useBatteryLevelIsLow,\n useDeviceName,\n useFirstInstallTime,\n useHasSystemFeature,\n useIsEmulator,\n usePowerState,\n useManufacturer,\n useIsHeadphonesConnected,\n useBrightness,\n};\n\nexport default DeviceInfo;\n","import { useState, useEffect } from 'react';\nimport { NativeEventEmitter, NativeModules } from 'react-native';\nimport type { AsyncHookResult } from './types';\n\n/**\n * simple hook wrapper for async functions for 'on-mount / componentDidMount' that only need to fired once\n * @param asyncGetter async function that 'gets' something\n * @param initialResult -1 | false | 'unknown'\n */\nexport function useOnMount(asyncGetter: () => Promise, initialResult: T): AsyncHookResult {\n const [response, setResponse] = useState>({\n loading: true,\n result: initialResult,\n });\n\n useEffect(() => {\n // async function cuz react complains if useEffect's effect param is an async function\n const getAsync = async () => {\n const result = await asyncGetter();\n setResponse({ loading: false, result });\n };\n\n getAsync();\n }, [asyncGetter]);\n\n return response;\n}\n\nexport const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\n/**\n * simple hook wrapper for handling events\n * @param eventName\n * @param initialValueAsyncGetter\n * @param defaultValue\n */\nexport function useOnEvent(\n eventName: string,\n initialValueAsyncGetter: () => Promise,\n defaultValue: T\n): AsyncHookResult {\n const { loading, result: initialResult } = useOnMount(initialValueAsyncGetter, defaultValue);\n const [result, setResult] = useState(defaultValue);\n\n // sets the result to what the intial value is on mount\n useEffect(() => {\n setResult(initialResult);\n }, [initialResult]);\n\n // - set up the event listener to set the result\n // - set up the clean up function to remove subscription on unmount\n useEffect(() => {\n const subscription = deviceInfoEmitter.addListener(eventName, setResult);\n return () => subscription.remove();\n }, [eventName]);\n\n // loading will only be true while getting the inital value. After that, it will always be false, but a new result may occur\n return { loading, result };\n}\n","import { NotchDevice } from './privateTypes';\n\nconst devicesWithDynamicIsland: NotchDevice[] = [\n {\n brand: 'Apple',\n model: 'iPhone 14 Pro',\n },\n {\n brand: 'Apple',\n model: 'iPhone 14 Pro Max',\n },\n];\n\nexport default devicesWithDynamicIsland;\n","import { NotchDevice } from './privateTypes';\n\nconst devicesWithNotch: NotchDevice[] = [\n {\n brand: 'Apple',\n model: 'iPhone 14',\n },\n {\n brand: 'Apple',\n model: 'iPhone 14 Plus',\n },\n {\n brand: 'Apple',\n model: 'iPhone 14 Pro',\n },\n {\n brand: 'Apple',\n model: 'iPhone 14 Pro Max',\n },\n {\n brand: 'Apple',\n model: 'iPhone 13 mini',\n },\n {\n brand: 'Apple',\n model: 'iPhone 13',\n },\n {\n brand: 'Apple',\n model: 'iPhone 13 Pro',\n },\n {\n brand: 'Apple',\n model: 'iPhone 13 Pro Max',\n },\n {\n brand: 'Apple',\n model: 'iPhone 12 mini',\n },\n {\n brand: 'Apple',\n model: 'iPhone 12',\n },\n {\n brand: 'Apple',\n model: 'iPhone 12 Pro',\n },\n {\n brand: 'Apple',\n model: 'iPhone 12 Pro Max',\n },\n {\n brand: 'Apple',\n model: 'iPhone 11',\n },\n {\n brand: 'Apple',\n model: 'iPhone 11 Pro',\n },\n {\n brand: 'Apple',\n model: 'iPhone 11 Pro Max',\n },\n {\n brand: 'Apple',\n model: 'iPhone X',\n },\n {\n brand: 'Apple',\n model: 'iPhone XS',\n },\n {\n brand: 'Apple',\n model: 'iPhone XS Max',\n },\n {\n brand: 'Apple',\n model: 'iPhone XR',\n },\n {\n brand: 'Asus',\n model: 'ZenFone 5',\n },\n {\n brand: 'Asus',\n model: 'ZenFone 5z',\n },\n {\n brand: 'google',\n model: 'Pixel 3 XL',\n },\n {\n brand: 'google',\n model: 'Pixel 4a',\n },\n {\n brand: 'Huawei',\n model: 'P20',\n },\n {\n brand: 'Huawei',\n model: 'P20 Plus',\n },\n {\n brand: 'Huawei',\n model: 'P20 Lite',\n },\n {\n brand: 'Huawei',\n model: 'ANE-LX1',\n },\n {\n brand: 'Huawei',\n model: 'INE-LX1',\n },\n {\n brand: 'Huawei',\n model: 'POT-LX1',\n },\n {\n brand: 'Huawei',\n model: 'Honor Play',\n },\n {\n brand: 'Huawei',\n model: 'Honor 10',\n },\n {\n brand: 'Huawei',\n model: 'Mate 20 Lite',\n },\n {\n brand: 'Huawei',\n model: 'Mate 20 Pro',\n },\n {\n brand: 'Huawei',\n model: 'ELE-L29', // P30\n },\n {\n brand: 'Huawei',\n model: 'P30 Lite',\n },\n {\n brand: 'Huawei',\n model: 'P30 Pro',\n },\n {\n brand: 'Huawei',\n model: 'JNY-LX1', // P40 Lite\n },\n {\n brand: 'Huawei',\n model: 'Nova 3',\n },\n {\n brand: 'Huawei',\n model: 'Nova 3i',\n },\n {\n brand: 'Leagoo',\n model: 'S9',\n },\n {\n brand: 'LG',\n model: 'G7',\n },\n {\n brand: 'LG',\n model: 'G7 ThinQ',\n },\n {\n brand: 'LG',\n model: 'G7+ ThinQ',\n },\n {\n brand: 'LG',\n model: 'LM-Q910', //G7 One\n },\n {\n brand: 'LG',\n model: 'LM-G710', //G7 ThinQ\n },\n {\n brand: 'LG',\n model: 'LM-V405', //V40 ThinQ\n },\n {\n brand: 'Motorola',\n model: 'Moto g7 Play',\n },\n {\n brand: 'Motorola',\n model: 'Moto g7 Power',\n },\n {\n brand: 'Motorola',\n model: 'One',\n },\n {\n brand: 'Motorola',\n model: 'Motorola One Vision',\n },\n {\n brand: 'Nokia',\n model: '5.1 Plus',\n },\n {\n brand: 'Nokia',\n model: 'Nokia 6.1 Plus',\n },\n {\n brand: 'Nokia',\n model: '7.1',\n },\n {\n brand: 'Nokia',\n model: '8.1',\n },\n {\n brand: 'OnePlus',\n model: '6',\n },\n {\n brand: 'OnePlus',\n model: 'A6003',\n },\n {\n brand: 'ONEPLUS',\n model: 'A6000',\n },\n {\n brand: 'OnePlus',\n model: 'OnePlus A6003',\n },\n {\n brand: 'OnePlus',\n model: 'ONEPLUS A6010',\n },\n {\n brand: 'OnePlus',\n model: 'ONEPLUS A6013',\n },\n {\n brand: 'OnePlus',\n model: 'ONEPLUS A6000',\n },\n {\n brand: 'Oppo',\n model: 'R15',\n },\n {\n brand: 'Oppo',\n model: 'R15 Pro',\n },\n {\n brand: 'Oppo',\n model: 'F7',\n },\n {\n brand: 'Oukitel',\n model: 'U18',\n },\n {\n brand: 'Redmi',\n model: 'M2004J19C',\n },\n {\n brand: 'Sharp',\n model: 'Aquos S3',\n },\n {\n brand: 'Vivo',\n model: 'V9',\n },\n {\n brand: 'Vivo',\n model: 'X21',\n },\n {\n brand: 'Vivo',\n model: 'X21 UD',\n },\n {\n brand: 'xiaomi',\n model: 'MI 8',\n },\n {\n brand: 'xiaomi',\n model: 'MI 8 Explorer Edition',\n },\n {\n brand: 'xiaomi',\n model: 'MI 8 SE',\n },\n {\n brand: 'xiaomi',\n model: 'MI 8 UD',\n },\n {\n brand: 'xiaomi',\n model: 'MI 8 Lite',\n },\n {\n brand: 'xiaomi',\n model: 'Mi 9',\n },\n {\n brand: 'xiaomi',\n model: 'POCO F1',\n },\n {\n brand: 'xiaomi',\n model: 'POCOPHONE F1',\n },\n {\n brand: 'xiaomi',\n model: 'Redmi 6 Pro',\n },\n {\n brand: 'xiaomi',\n model: 'Redmi Note 7',\n },\n {\n brand: 'xiaomi',\n model: 'Redmi 7',\n },\n {\n brand: 'xiaomi',\n model: 'Redmi Note 8',\n },\n {\n brand: 'xiaomi',\n model: 'Redmi Note 8 Pro',\n },\n {\n brand: 'xiaomi',\n model: 'Mi A2 Lite',\n },\n {\n brand: 'Blackview',\n model: 'A30',\n },\n {\n brand: 'Samsung',\n model: 'SM-A202F',\n },\n {\n brand: 'Samsung',\n model: 'SM-A217F',\n },\n {\n brand: 'Samsung',\n model: 'SM-A715F',\n },\n];\n\nexport default devicesWithNotch;\n","import { Platform, NativeModules } from 'react-native';\nimport { DeviceInfoNativeModule } from './privateTypes';\n\nlet RNDeviceInfo: DeviceInfoNativeModule | undefined = NativeModules.RNDeviceInfo;\n\n// @ts-ignore\nif (Platform.OS === 'web' || Platform.OS === 'dom') {\n RNDeviceInfo = require('../web');\n}\n\nif (!RNDeviceInfo) {\n // Produce an error if we don't have the native module\n if (\n Platform.OS === 'android' ||\n Platform.OS === 'ios' ||\n Platform.OS === 'web' ||\n // @ts-ignore\n Platform.OS === 'dom'\n ) {\n throw new Error(`react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n • For react-native <= 0.59: Run \\`react-native link react-native-device-info\\` in the project root.\n • Rebuild and re-run the app.\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info`);\n }\n}\n\nexport default RNDeviceInfo as DeviceInfoNativeModule;\n","import { Platform } from 'react-native';\n\nimport {\n PlatformArray,\n Getter,\n GetSupportedPlatformInfoAsyncParams,\n GetSupportedPlatformInfoSyncParams,\n GetSupportedPlatformInfoFunctionsParams,\n} from './privateTypes';\n\ntype MemoType = { [key: string]: any };\n// centralized memo object\nlet memo: MemoType = {};\n\nexport function clearMemo() {\n memo = {};\n}\n\n/**\n * function returns the proper getter based current platform X supported platforms\n * @param supportedPlatforms array of supported platforms (OS)\n * @param getter desired function used to get info\n * @param defaultGetter getter that returns a default value if desired getter is not supported by current platform\n */\nfunction getSupportedFunction(\n supportedPlatforms: PlatformArray,\n getter: Getter,\n defaultGetter: Getter\n): Getter {\n let supportedMap: any = {};\n supportedPlatforms\n .filter((key) => Platform.OS == key)\n .forEach((key) => (supportedMap[key] = getter));\n return Platform.select({\n ...supportedMap,\n default: defaultGetter,\n });\n}\n\n/**\n * function used to get desired info synchronously — with optional memoization\n * @param param0\n */\nexport function getSupportedPlatformInfoSync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoSyncParams): T {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = getSupportedFunction(supportedPlatforms, getter, () => defaultValue)();\n if (memoKey) {\n memo[memoKey] = output;\n }\n return output;\n }\n}\n\n/**\n * function used to get desired info asynchronously — with optional memoization\n * @param param0\n */\nexport async function getSupportedPlatformInfoAsync({\n getter,\n supportedPlatforms,\n defaultValue,\n memoKey,\n}: GetSupportedPlatformInfoAsyncParams): Promise {\n if (memoKey && memo[memoKey] != undefined) {\n return memo[memoKey];\n } else {\n const output = await getSupportedFunction(supportedPlatforms, getter, () =>\n Promise.resolve(defaultValue)\n )();\n if (memoKey) {\n memo[memoKey] = output;\n }\n\n return output;\n }\n}\n\n/**\n * function that returns array of getter functions [async, sync]\n * @param param0\n */\nexport function getSupportedPlatformInfoFunctions({\n syncGetter,\n ...asyncParams\n}: GetSupportedPlatformInfoFunctionsParams): [Getter>, Getter] {\n return [\n () => getSupportedPlatformInfoAsync(asyncParams),\n () => getSupportedPlatformInfoSync({ ...asyncParams, getter: syncGetter }),\n ];\n}\n","import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);\n\nlet batteryCharging = false,\n batteryLevel = -1,\n powerState = {};\n\nconst _readPowerState = (battery) => {\n const { level, charging, chargingtime, dischargingtime } = battery;\n\n return {\n batteryLevel: level,\n lowPowerMode: false,\n batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',\n chargingtime,\n dischargingtime,\n };\n};\n\nexport const getMaxMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.jsHeapSizeLimit;\n }\n return -1;\n};\n\nexport const getInstallReferrerSync = () => {\n return document.referrer;\n};\n\nexport const isAirplaneModeSync = () => {\n return !!navigator.onLine;\n};\n\nexport const getUserAgentSync = () => {\n return window.navigator.userAgent;\n};\n\nexport const isLocationEnabledSync = () => {\n return !!navigator.geolocation;\n};\n\nexport const getTotalMemorySync = () => {\n if (navigator.deviceMemory) {\n return navigator.deviceMemory * 1000000000;\n }\n return -1;\n};\n\nexport const getUsedMemorySync = () => {\n if (window.performance && window.performance.memory) {\n return window.performance.memory.usedJSHeapSize;\n }\n return -1;\n};\n\nconst init = () => {\n if (typeof navigator === 'undefined' || !navigator.getBattery) return;\n\n navigator.getBattery().then((battery) => {\n batteryCharging = battery.charging;\n\n battery.addEventListener('chargingchange', () => {\n const { charging } = battery;\n\n batteryCharging = charging;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);\n });\n\n battery.addEventListener('levelchange', () => {\n const { level } = battery;\n\n batteryLevel = level;\n powerState = _readPowerState(battery);\n\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);\n if (level < 0.2) {\n deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);\n }\n });\n });\n};\n\nconst getBaseOsSync = () => {\n const userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\n iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n\n let os = platform;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n};\n\ninit();\n/**\n * react-native-web empty polyfill.\n */\n\nexport const getInstallReferrer = async () => {\n return getInstallReferrerSync();\n};\n\nexport const getUserAgent = async () => {\n return getUserAgentSync();\n};\n\nexport const isBatteryCharging = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.charging);\n }\n return false;\n};\n\nexport const isBatteryChargingSync = () => {\n return batteryCharging;\n};\n\nexport const isCameraPresent = async () => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(devices => {\n return !!devices.find((d) => d.kind === 'videoinput');\n });\n }\n return false;\n};\n\nexport const isCameraPresentSync = () => {\n console.log(\n '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'\n );\n return false;\n};\n\nexport const getBatteryLevel = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then(battery => battery.level);\n }\n return -1;\n};\n\nexport const getBatteryLevelSync = () => {\n return batteryLevel;\n};\n\nexport const isLocationEnabled = async () => {\n return isLocationEnabledSync();\n};\n\nexport const isAirplaneMode = async () => {\n return isAirplaneModeSync();\n};\n\nexport const getBaseOs = async () => {\n return getBaseOsSync();\n};\n\nexport const getTotalDiskCapacity = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota }) => quota)\n }\n return -1;\n};\n\nexport const getTotalDiskCapacitySync = () => {\n console.log(\n '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'\n );\n return -1;\n};\n\nexport const getFreeDiskStorage = async () => {\n if (navigator.storage && navigator.storage.estimate) {\n return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)\n }\n return -1;\n};\n\nexport const getFreeDiskStorageSync = () => {\n console.log(\n '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'\n );\n return -1;\n};\n\nexport const getMaxMemory = async () => {\n return getMaxMemorySync();\n};\n\nexport const getUsedMemory = async () => {\n return getUsedMemorySync();\n};\n\nexport const getTotalMemory = async () => {\n return getTotalMemorySync();\n};\n\nexport const getPowerState = async () => {\n if (navigator.getBattery) {\n return navigator.getBattery().then((battery) => _readPowerState(battery))\n }\n return {};\n};\n\nexport const getPowerStateSync = () => {\n return powerState;\n};\n","import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport Animated, {\n interpolate,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\nimport { useDraggableFlatListContext } from \"../context/draggableFlatListContext\";\nexport { useOnCellActiveAnimation } from \"../hooks/useOnCellActiveAnimation\";\nimport { useOnCellActiveAnimation } from \"../hooks/useOnCellActiveAnimation\";\n\ntype ScaleProps = {\n activeScale?: number;\n children: React.ReactNode;\n};\n\nexport const ScaleDecorator = ({ activeScale = 1.1, children }: ScaleProps) => {\n const { isActive, onActiveAnim } = useOnCellActiveAnimation({\n animationConfig: { mass: 0.1, restDisplacementThreshold: 0.0001 },\n });\n const { horizontal } = useDraggableFlatListContext();\n\n const style = useAnimatedStyle(() => {\n const animScale = interpolate(onActiveAnim.value, [0, 1], [1, activeScale]);\n const scale = isActive ? animScale : 1;\n return {\n transform: [{ scaleX: scale }, { scaleY: scale }],\n };\n }, [isActive]);\n\n return (\n \n {children}\n \n );\n};\n\ntype ShadowProps = {\n children: React.ReactNode;\n elevation?: number;\n radius?: number;\n color?: string;\n opacity?: number;\n};\n\nexport const ShadowDecorator = ({\n elevation = 10,\n color = \"black\",\n opacity = 0.25,\n radius = 5,\n children,\n}: ShadowProps) => {\n const { isActive, onActiveAnim } = useOnCellActiveAnimation();\n const { horizontal } = useDraggableFlatListContext();\n\n const style = useAnimatedStyle(() => {\n const shadowOpacity = onActiveAnim.value * opacity;\n return {\n elevation: isActive ? elevation : 0,\n shadowRadius: isActive ? radius : 0,\n shadowColor: isActive ? color : \"transparent\",\n shadowOpacity: isActive ? shadowOpacity : 0,\n };\n }, [isActive, onActiveAnim]);\n\n return (\n \n {children}\n \n );\n};\n\ntype OpacityProps = {\n activeOpacity?: number;\n children: React.ReactNode;\n};\n\nexport const OpacityDecorator = ({\n activeOpacity = 0.25,\n children,\n}: OpacityProps) => {\n const { isActive, onActiveAnim } = useOnCellActiveAnimation();\n const { horizontal } = useDraggableFlatListContext();\n const style = useAnimatedStyle(() => {\n const opacity = interpolate(onActiveAnim.value, [0, 1], [1, activeOpacity]);\n return {\n opacity: isActive ? opacity : 1,\n };\n }, [isActive]);\n\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n horizontal: {\n flexDirection: \"row\",\n flex: 1,\n },\n});\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport {\n findNodeHandle,\n LayoutChangeEvent,\n MeasureLayoutOnSuccessCallback,\n StyleProp,\n StyleSheet,\n ViewStyle,\n} from \"react-native\";\nimport Animated, {\n runOnUI,\n useAnimatedStyle,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { useDraggableFlatListContext } from \"../context/draggableFlatListContext\";\nimport { isWeb } from \"../constants\";\nimport { useCellTranslate } from \"../hooks/useCellTranslate\";\nimport { typedMemo } from \"../utils\";\nimport { useRefs } from \"../context/refContext\";\nimport { useAnimatedValues } from \"../context/animatedValueContext\";\nimport CellProvider from \"../context/cellContext\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\n\ntype Props = {\n item: T;\n index: number;\n children: React.ReactNode;\n onLayout?: (e: LayoutChangeEvent) => void;\n style?: StyleProp;\n};\n\nfunction CellRendererComponent(props: Props) {\n const { item, index, onLayout, children, ...rest } = props;\n\n const viewRef = useRef(null);\n const { cellDataRef, propsRef, containerRef } = useRefs();\n\n const { horizontalAnim, scrollOffset } = useAnimatedValues();\n const {\n activeKey,\n keyExtractor,\n horizontal,\n layoutAnimationDisabled,\n } = useDraggableFlatListContext();\n\n const key = keyExtractor(item, index);\n const offset = useSharedValue(-1);\n const size = useSharedValue(-1);\n const heldTanslate = useSharedValue(0);\n\n const translate = useCellTranslate({\n cellOffset: offset,\n cellSize: size,\n cellIndex: index,\n });\n\n const isActive = activeKey === key;\n\n const animStyle = useAnimatedStyle(() => {\n // When activeKey becomes null at the end of a drag and the list reorders,\n // the animated style may apply before the next paint, causing a flicker.\n // Solution is to hold over the last animated value until the next onLayout.\n // (Not required in web)\n if (translate.value && !isWeb) {\n heldTanslate.value = translate.value;\n }\n const t = activeKey ? translate.value : heldTanslate.value;\n return {\n transform: [horizontalAnim.value ? { translateX: t } : { translateY: t }],\n };\n }, [translate, activeKey]);\n\n const updateCellMeasurements = useStableCallback(() => {\n const onSuccess: MeasureLayoutOnSuccessCallback = (x, y, w, h) => {\n if (isWeb && horizontal) x += scrollOffset.value;\n const cellOffset = horizontal ? x : y;\n const cellSize = horizontal ? w : h;\n cellDataRef.current.set(key, {\n measurements: { size: cellSize, offset: cellOffset },\n });\n\n size.value = cellSize;\n offset.value = cellOffset;\n };\n\n const onFail = () => {\n if (propsRef.current?.debug) {\n console.log(`## on measure fail, index: ${index}`);\n }\n };\n\n const containerNode = containerRef.current;\n const viewNode = viewRef.current;\n const nodeHandle = containerNode;\n\n if (viewNode && nodeHandle) {\n //@ts-ignore\n viewNode.measureLayout(nodeHandle, onSuccess, onFail);\n }\n });\n\n const onCellLayout = useStableCallback((e?: LayoutChangeEvent) => {\n heldTanslate.value = 0;\n updateCellMeasurements();\n if (onLayout && e) onLayout(e);\n });\n\n useEffect(() => {\n if (isWeb) {\n // onLayout isn't called on web when the cell index changes, so we manually re-measure\n requestAnimationFrame(() => {\n onCellLayout();\n });\n }\n }, [index, onCellLayout]);\n\n const baseStyle = useMemo(() => {\n return {\n elevation: isActive ? 1 : 0,\n zIndex: isActive ? 999 : 0,\n flexDirection: horizontal ? (\"row\" as const) : (\"column\" as const),\n };\n }, [isActive, horizontal]);\n\n const {\n itemEnteringAnimation,\n itemExitingAnimation,\n itemLayoutAnimation,\n } = propsRef.current;\n\n useEffect(() => {\n // NOTE: Keep an eye on reanimated LayoutAnimation refactor:\n // https://github.com/software-mansion/react-native-reanimated/pull/3332/files\n // We might have to change the way we register/unregister LayouAnimations:\n // - get native module: https://github.com/software-mansion/react-native-reanimated/blob/cf59766460d05eb30357913455318d8a95909468/src/reanimated2/NativeReanimated/NativeReanimated.ts#L18\n // - register layout animation for tag: https://github.com/software-mansion/react-native-reanimated/blob/cf59766460d05eb30357913455318d8a95909468/src/reanimated2/NativeReanimated/NativeReanimated.ts#L99\n if (!propsRef.current.enableLayoutAnimationExperimental) return;\n const tag = findNodeHandle(viewRef.current);\n\n runOnUI((t: number | null, _layoutDisabled) => {\n \"worklet\";\n if (!t) return;\n const config = global.LayoutAnimationRepository.configs[t];\n if (config) stashConfig(t, config);\n const stashedConfig = getStashedConfig(t);\n if (_layoutDisabled) {\n global.LayoutAnimationRepository.removeConfig(t);\n } else if (stashedConfig) {\n global.LayoutAnimationRepository.registerConfig(t, stashedConfig);\n }\n })(tag, layoutAnimationDisabled);\n }, [layoutAnimationDisabled]);\n\n return (\n \n {children}\n \n );\n}\n\nexport default typedMemo(CellRendererComponent);\n\nconst styles = StyleSheet.create({\n zeroTranslate: {\n transform: [{ translateX: 0 }, { translateY: 0 }],\n },\n});\n\ndeclare global {\n namespace NodeJS {\n interface Global {\n RNDFLLayoutAnimationConfigStash: Record;\n }\n }\n}\n\nrunOnUI(() => {\n \"worklet\";\n global.RNDFLLayoutAnimationConfigStash = {};\n})();\n\nfunction stashConfig(tag: number, config: unknown) {\n \"worklet\";\n if (!global.RNDFLLayoutAnimationConfigStash)\n global.RNDFLLayoutAnimationConfigStash = {};\n global.RNDFLLayoutAnimationConfigStash[tag] = config;\n}\n\nfunction getStashedConfig(tag: number) {\n \"worklet\";\n if (!global.RNDFLLayoutAnimationConfigStash) return null;\n return global.RNDFLLayoutAnimationConfigStash[tag] as Record;\n}\n","import React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ListRenderItem, FlatListProps, LayoutChangeEvent } from \"react-native\";\nimport {\n FlatList,\n Gesture,\n GestureDetector,\n} from \"react-native-gesture-handler\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedScrollHandler,\n useSharedValue,\n withSpring,\n} from \"react-native-reanimated\";\nimport CellRendererComponent from \"./CellRendererComponent\";\nimport { DEFAULT_PROPS, isWeb } from \"../constants\";\nimport PlaceholderItem from \"./PlaceholderItem\";\nimport RowItem from \"./RowItem\";\nimport { DraggableFlatListProps } from \"../types\";\nimport PropsProvider from \"../context/propsContext\";\nimport AnimatedValueProvider, {\n useAnimatedValues,\n} from \"../context/animatedValueContext\";\nimport RefProvider, { useRefs } from \"../context/refContext\";\nimport DraggableFlatListProvider from \"../context/draggableFlatListContext\";\nimport { useAutoScroll } from \"../hooks/useAutoScroll\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport ScrollOffsetListener from \"./ScrollOffsetListener\";\nimport { typedMemo } from \"../utils\";\n\ntype RNGHFlatListProps = Animated.AnimateProps<\n FlatListProps & {\n ref: React.Ref>;\n simultaneousHandlers?: React.Ref | React.Ref[];\n }\n>;\n\ntype OnViewableItemsChangedCallback = Exclude<\n FlatListProps[\"onViewableItemsChanged\"],\n undefined | null\n>;\n\nconst AnimatedFlatList = (Animated.createAnimatedComponent(\n FlatList\n) as unknown) as (props: RNGHFlatListProps) => React.ReactElement;\n\nfunction DraggableFlatListInner(props: DraggableFlatListProps) {\n const {\n cellDataRef,\n containerRef,\n flatlistRef,\n keyToIndexRef,\n propsRef,\n animationConfigRef,\n } = useRefs();\n const {\n activeCellOffset,\n activeCellSize,\n activeIndexAnim,\n containerSize,\n scrollOffset,\n scrollViewSize,\n spacerIndexAnim,\n horizontalAnim,\n placeholderOffset,\n touchTranslate,\n autoScrollDistance,\n panGestureState,\n isTouchActiveNative,\n viewableIndexMin,\n viewableIndexMax,\n disabled,\n } = useAnimatedValues();\n\n const reset = useStableCallback(() => {\n activeIndexAnim.value = -1;\n spacerIndexAnim.value = -1;\n touchTranslate.value = 0;\n activeCellSize.value = -1;\n activeCellOffset.value = -1;\n setActiveKey(null);\n });\n\n const {\n dragHitSlop = DEFAULT_PROPS.dragHitSlop,\n scrollEnabled = DEFAULT_PROPS.scrollEnabled,\n activationDistance: activationDistanceProp = DEFAULT_PROPS.activationDistance,\n } = props;\n\n let [activeKey, setActiveKey] = useState(null);\n const [layoutAnimationDisabled, setLayoutAnimationDisabled] = useState(\n !propsRef.current.enableLayoutAnimationExperimental\n );\n\n const keyExtractor = useStableCallback((item: T, index: number) => {\n if (!props.keyExtractor) {\n throw new Error(\"You must provide a keyExtractor to DraggableFlatList\");\n }\n return props.keyExtractor(item, index);\n });\n\n const dataRef = useRef(props.data);\n const dataHasChanged =\n dataRef.current.map(keyExtractor).join(\"\") !==\n props.data.map(keyExtractor).join(\"\");\n dataRef.current = props.data;\n if (dataHasChanged) {\n // When data changes make sure `activeKey` is nulled out in the same render pass\n activeKey = null;\n }\n\n useEffect(() => {\n if (!propsRef.current.enableLayoutAnimationExperimental) return;\n if (activeKey) {\n setLayoutAnimationDisabled(true);\n } else {\n // setTimeout result of trial-and-error to determine how long to wait before\n // re-enabling layout animations so that a drag reorder does not trigger it.\n setTimeout(() => {\n setLayoutAnimationDisabled(false);\n }, 100);\n }\n }, [activeKey]);\n\n useLayoutEffect(() => {\n props.data.forEach((d, i) => {\n const key = keyExtractor(d, i);\n keyToIndexRef.current.set(key, i);\n });\n }, [props.data, keyExtractor, keyToIndexRef]);\n\n const drag = useStableCallback((activeKey: string) => {\n if (disabled.value) return;\n const index = keyToIndexRef.current.get(activeKey);\n const cellData = cellDataRef.current.get(activeKey);\n if (cellData) {\n activeCellOffset.value = cellData.measurements.offset;\n activeCellSize.value = cellData.measurements.size;\n }\n\n const { onDragBegin } = propsRef.current;\n if (index !== undefined) {\n spacerIndexAnim.value = index;\n activeIndexAnim.value = index;\n setActiveKey(activeKey);\n onDragBegin?.(index);\n }\n });\n\n const onContainerLayout = ({\n nativeEvent: { layout },\n }: LayoutChangeEvent) => {\n const { width, height } = layout;\n containerSize.value = props.horizontal ? width : height;\n props.onContainerLayout?.({ layout, containerRef });\n };\n\n const onListContentSizeChange = (w: number, h: number) => {\n scrollViewSize.value = props.horizontal ? w : h;\n props.onContentSizeChange?.(w, h);\n };\n\n const onContainerTouchStart = () => {\n if (!disabled.value) {\n isTouchActiveNative.value = true;\n }\n return false;\n };\n\n const onContainerTouchEnd = () => {\n isTouchActiveNative.value = false;\n };\n\n const extraData = useMemo(\n () => ({\n activeKey,\n extraData: props.extraData,\n }),\n [activeKey, props.extraData]\n );\n\n const renderItem: ListRenderItem = useCallback(\n ({ item, index }) => {\n const key = keyExtractor(item, index);\n if (index !== keyToIndexRef.current.get(key)) {\n keyToIndexRef.current.set(key, index);\n }\n\n return (\n \n );\n },\n [props.renderItem, props.extraData, drag, keyExtractor]\n );\n\n const onRelease = useStableCallback((index: number) => {\n props.onRelease?.(index);\n });\n\n const onDragEnd = useStableCallback(\n ({ from, to }: { from: number; to: number }) => {\n const { onDragEnd, data } = props;\n\n const newData = [...data];\n if (from !== to) {\n newData.splice(from, 1);\n newData.splice(to, 0, data[from]);\n }\n\n onDragEnd?.({ from, to, data: newData });\n reset();\n }\n );\n\n const onPlaceholderIndexChange = useStableCallback((index: number) => {\n props.onPlaceholderIndexChange?.(index);\n });\n\n // Handle case where user ends drag without moving their finger.\n useAnimatedReaction(\n () => {\n return isTouchActiveNative.value;\n },\n (cur, prev) => {\n if (cur !== prev && !cur) {\n const hasMoved = !!touchTranslate.value;\n if (!hasMoved && activeIndexAnim.value >= 0 && !disabled.value) {\n runOnJS(onRelease)(activeIndexAnim.value);\n runOnJS(onDragEnd)({\n from: activeIndexAnim.value,\n to: spacerIndexAnim.value,\n });\n }\n }\n },\n [isTouchActiveNative, onDragEnd, onRelease]\n );\n\n useAnimatedReaction(\n () => {\n return spacerIndexAnim.value;\n },\n (cur, prev) => {\n if (prev !== null && cur !== prev && cur >= 0 && prev >= 0) {\n runOnJS(onPlaceholderIndexChange)(cur);\n }\n },\n [spacerIndexAnim]\n );\n\n const gestureDisabled = useSharedValue(false);\n\n const panGesture = Gesture.Pan()\n .onBegin((evt) => {\n gestureDisabled.value = disabled.value;\n if (gestureDisabled.value) return;\n panGestureState.value = evt.state;\n })\n .onUpdate((evt) => {\n if (gestureDisabled.value) return;\n panGestureState.value = evt.state;\n const translation = horizontalAnim.value\n ? evt.translationX\n : evt.translationY;\n touchTranslate.value = translation;\n })\n .onEnd((evt) => {\n if (gestureDisabled.value) return;\n // Set touch val to current translate val\n isTouchActiveNative.value = false;\n const translation = horizontalAnim.value\n ? evt.translationX\n : evt.translationY;\n\n touchTranslate.value = translation + autoScrollDistance.value;\n panGestureState.value = evt.state;\n\n // Only call onDragEnd if actually dragging a cell\n if (activeIndexAnim.value === -1 || disabled.value) return;\n disabled.value = true;\n runOnJS(onRelease)(activeIndexAnim.value);\n const springTo = placeholderOffset.value - activeCellOffset.value;\n touchTranslate.value = withSpring(\n springTo,\n animationConfigRef.current,\n () => {\n runOnJS(onDragEnd)({\n from: activeIndexAnim.value,\n to: spacerIndexAnim.value,\n });\n disabled.value = false;\n }\n );\n })\n .onTouchesDown(() => {\n runOnJS(onContainerTouchStart)();\n })\n .onTouchesUp(() => {\n // Turning this into a worklet causes timing issues. We want it to run\n // just after the finger lifts.\n runOnJS(onContainerTouchEnd)();\n });\n\n if (dragHitSlop) panGesture.hitSlop(dragHitSlop);\n if (activationDistanceProp) {\n const activeOffset = [-activationDistanceProp, activationDistanceProp];\n if (props.horizontal) {\n panGesture.activeOffsetX(activeOffset);\n } else {\n panGesture.activeOffsetY(activeOffset);\n }\n }\n\n const onScroll = useStableCallback((scrollOffset: number) => {\n props.onScrollOffsetChange?.(scrollOffset);\n });\n\n const scrollHandler = useAnimatedScrollHandler(\n {\n onScroll: (evt) => {\n scrollOffset.value = horizontalAnim.value\n ? evt.contentOffset.x\n : evt.contentOffset.y;\n runOnJS(onScroll)(scrollOffset.value);\n },\n },\n [horizontalAnim]\n );\n\n useAutoScroll();\n\n const onViewableItemsChanged = useStableCallback<\n OnViewableItemsChangedCallback\n >((info) => {\n const viewableIndices = info.viewableItems\n .filter((item) => item.isViewable)\n .map((item) => item.index)\n .filter((index): index is number => typeof index === \"number\");\n\n const min = Math.min(...viewableIndices);\n const max = Math.max(...viewableIndices);\n viewableIndexMin.value = min;\n viewableIndexMax.value = max;\n props.onViewableItemsChanged?.(info);\n });\n\n return (\n \n \n \n {props.renderPlaceholder && (\n \n )}\n \n {!!props.onScrollOffsetChange && (\n \n )}\n \n \n \n );\n}\n\nfunction DraggableFlatList(\n props: DraggableFlatListProps,\n ref?: React.ForwardedRef> | null\n) {\n return (\n \n \n \n \n \n \n \n );\n}\n\nconst MemoizedInner = typedMemo(DraggableFlatListInner);\n\n// Generic forwarded ref type assertion taken from:\n// https://fettblog.eu/typescript-react-generic-forward-refs/#option-1%3A-type-assertion\nexport default React.forwardRef(DraggableFlatList) as (\n props: DraggableFlatListProps & { ref?: React.ForwardedRef> }\n) => ReturnType;\n","import React, { useRef, useState } from \"react\";\nimport { findNodeHandle, LogBox } from \"react-native\";\nimport Animated, {\n useDerivedValue,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { DraggableFlatListProps } from \"../types\";\nimport DraggableFlatList from \"../components/DraggableFlatList\";\nimport { useSafeNestableScrollContainerContext } from \"../context/nestableScrollContainerContext\";\nimport { useNestedAutoScroll } from \"../hooks/useNestedAutoScroll\";\nimport { typedMemo } from \"../utils\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport { FlatList } from \"react-native-gesture-handler\";\n\nfunction NestableDraggableFlatListInner(\n props: DraggableFlatListProps,\n ref?: React.ForwardedRef>\n) {\n const hasSuppressedWarnings = useRef(false);\n\n if (!hasSuppressedWarnings.current) {\n LogBox.ignoreLogs([\n \"VirtualizedLists should never be nested inside plain ScrollViews with the same orientation because it can break windowing\",\n ]); // Ignore log notification by message\n //@ts-ignore\n console.reportErrorsAsExceptions = false;\n hasSuppressedWarnings.current = true;\n }\n\n const {\n scrollableRef,\n outerScrollOffset,\n setOuterScrollEnabled,\n } = useSafeNestableScrollContainerContext();\n\n const listVerticalOffset = useSharedValue(0);\n const [animVals, setAnimVals] = useState({});\n const defaultHoverOffset = useSharedValue(0);\n const [listHoverOffset, setListHoverOffset] = useState(defaultHoverOffset);\n\n const hoverOffset = useDerivedValue(() => {\n return listHoverOffset.value + listVerticalOffset.value;\n }, [listHoverOffset]);\n\n useNestedAutoScroll({\n ...animVals,\n hoverOffset,\n });\n\n const onListContainerLayout = useStableCallback(async ({ containerRef }) => {\n const nodeHandle = findNodeHandle(scrollableRef.current);\n\n const onSuccess = (_x: number, y: number) => {\n listVerticalOffset.value = y;\n };\n const onFail = () => {\n console.log(\"## nested draggable list measure fail\");\n };\n //@ts-ignore\n containerRef.current.measureLayout(nodeHandle, onSuccess, onFail);\n });\n\n const onDragBegin: DraggableFlatListProps[\"onDragBegin\"] = useStableCallback(\n (params) => {\n setOuterScrollEnabled(false);\n props.onDragBegin?.(params);\n }\n );\n\n const onDragEnd: DraggableFlatListProps[\"onDragEnd\"] = useStableCallback(\n (params) => {\n setOuterScrollEnabled(true);\n props.onDragEnd?.(params);\n }\n );\n\n const onAnimValInit: DraggableFlatListProps[\"onAnimValInit\"] = useStableCallback(\n (params) => {\n setListHoverOffset(params.hoverOffset);\n setAnimVals({\n ...params,\n hoverOffset,\n });\n props.onAnimValInit?.(params);\n }\n );\n\n return (\n \n );\n}\n\n// Generic forwarded ref type assertion taken from:\n// https://fettblog.eu/typescript-react-generic-forward-refs/#option-1%3A-type-assertion\nexport const NestableDraggableFlatList = React.forwardRef(\n NestableDraggableFlatListInner\n) as (\n props: DraggableFlatListProps & { ref?: React.ForwardedRef> }\n) => ReturnType;\n","import React from \"react\";\nimport { LayoutChangeEvent, ScrollViewProps } from \"react-native\";\nimport { ScrollView } from \"react-native-gesture-handler\";\nimport Animated, { useAnimatedScrollHandler } from \"react-native-reanimated\";\nimport {\n NestableScrollContainerProvider,\n useSafeNestableScrollContainerContext,\n} from \"../context/nestableScrollContainerContext\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\n\nconst AnimatedScrollView = Animated.createAnimatedComponent(ScrollView);\n\nfunction NestableScrollContainerInner(props: ScrollViewProps) {\n const {\n outerScrollOffset,\n containerSize,\n scrollViewSize,\n scrollableRef,\n outerScrollEnabled,\n } = useSafeNestableScrollContainerContext();\n\n const onScroll = useAnimatedScrollHandler({\n onScroll: ({ contentOffset }) => {\n outerScrollOffset.value = contentOffset.y;\n },\n });\n\n const onLayout = useStableCallback((event: LayoutChangeEvent) => {\n const {\n nativeEvent: { layout },\n } = event;\n containerSize.value = layout.height;\n });\n\n const onContentSizeChange = useStableCallback((w: number, h: number) => {\n scrollViewSize.value = h;\n props.onContentSizeChange?.(w, h);\n });\n\n return (\n \n );\n}\n\nexport const NestableScrollContainer = React.forwardRef(\n (props: ScrollViewProps, forwardedRef?: React.ForwardedRef) => {\n return (\n ) || undefined\n }\n >\n \n \n );\n }\n);\n","import React, { useMemo, useState } from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\nimport { useAnimatedValues } from \"../context/animatedValueContext\";\nimport { useDraggableFlatListContext } from \"../context/draggableFlatListContext\";\nimport { useRefs } from \"../context/refContext\";\nimport { RenderPlaceholder } from \"../types\";\nimport { typedMemo } from \"../utils\";\n\ntype Props = {\n renderPlaceholder?: RenderPlaceholder;\n};\n\nfunction PlaceholderItem({ renderPlaceholder }: Props) {\n const [size, setSize] = useState(0);\n const {\n activeCellSize,\n placeholderOffset,\n spacerIndexAnim,\n horizontalAnim,\n scrollOffset,\n } = useAnimatedValues();\n const { keyToIndexRef, propsRef } = useRefs();\n const { activeKey, horizontal } = useDraggableFlatListContext();\n\n // Size does not seem to be respected when it is an animated style\n useAnimatedReaction(\n () => {\n return activeCellSize.value;\n },\n (cur, prev) => {\n if (cur !== prev) {\n runOnJS(setSize)(cur);\n }\n }\n );\n\n const activeIndex = activeKey\n ? keyToIndexRef.current.get(activeKey)\n : undefined;\n const activeItem =\n activeIndex === undefined ? null : propsRef.current?.data[activeIndex];\n\n const animStyle = useAnimatedStyle(() => {\n const offset = placeholderOffset.value - scrollOffset.value\n return {\n opacity: size >= 0 ? 1 : 0,\n overflow: 'hidden',\n transform: [\n horizontalAnim.value\n ? { translateX: offset }\n : { translateY: offset },\n ],\n };\n\n }, [spacerIndexAnim, placeholderOffset, horizontalAnim, scrollOffset, size]);\n\n const extraStyle = useMemo(() => {\n return horizontal ? { width: size } : { height: size };\n }, [horizontal, size])\n\n return (\n \n {!activeItem || activeIndex === undefined\n ? null\n : renderPlaceholder?.({ item: activeItem, index: activeIndex })}\n \n );\n}\n\nexport default typedMemo(PlaceholderItem);\n","import React, { useRef } from \"react\";\nimport { useDraggableFlatListContext } from \"../context/draggableFlatListContext\";\nimport { useRefs } from \"../context/refContext\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport { RenderItem } from \"../types\";\nimport { typedMemo } from \"../utils\";\n\ntype Props = {\n extraData?: any;\n drag: (itemKey: string) => void;\n item: T;\n renderItem: RenderItem;\n itemKey: string;\n debug?: boolean;\n};\n\nfunction RowItem(props: Props) {\n const propsRef = useRef(props);\n propsRef.current = props;\n\n const { activeKey } = useDraggableFlatListContext();\n const activeKeyRef = useRef(activeKey);\n activeKeyRef.current = activeKey;\n const { keyToIndexRef } = useRefs();\n\n const drag = useStableCallback(() => {\n const { drag, itemKey, debug } = propsRef.current;\n if (activeKeyRef.current) {\n // already dragging an item, noop\n if (debug)\n console.log(\n \"## attempt to drag item while another item is already active, noop\"\n );\n }\n drag(itemKey);\n });\n\n const { renderItem, item, itemKey, extraData } = props;\n\n const getIndex = useStableCallback(() => {\n return keyToIndexRef.current.get(itemKey);\n });\n\n return (\n \n );\n}\n\nexport default typedMemo(RowItem);\n\ntype InnerProps = {\n isActive: boolean;\n item: T;\n getIndex: () => number | undefined;\n drag: () => void;\n renderItem: RenderItem;\n extraData?: any;\n};\n\nfunction Inner({ renderItem, extraData, ...rest }: InnerProps) {\n return renderItem({ ...rest }) as JSX.Element;\n}\n\nconst MemoizedInner = typedMemo(Inner);\n","import Animated, { runOnJS, useAnimatedReaction } from \"react-native-reanimated\";\nimport { typedMemo } from \"../utils\";\n\ntype Props = {\n scrollOffset: Animated.SharedValue;\n onScrollOffsetChange: (offset: number) => void;\n};\n\nconst ScrollOffsetListener = ({\n scrollOffset,\n onScrollOffsetChange,\n}: Props) => {\n\n useAnimatedReaction(() => {\n return scrollOffset.value\n }, (cur, prev) => {\n if (cur !== prev) {\n runOnJS(onScrollOffsetChange)(cur)\n }\n }, [scrollOffset])\n\n return null;\n};\n\nexport default typedMemo(ScrollOffsetListener);\n","import { Platform } from \"react-native\";\nimport { PanGestureHandlerProperties } from \"react-native-gesture-handler\";\nimport Animated, {\n useSharedValue,\n WithSpringConfig,\n} from \"react-native-reanimated\";\n\n// Fire onScrollComplete when within this many px of target offset\nexport const SCROLL_POSITION_TOLERANCE = 2;\nexport const DEFAULT_ANIMATION_CONFIG: WithSpringConfig = {\n damping: 20,\n mass: 0.2,\n stiffness: 100,\n overshootClamping: false,\n restSpeedThreshold: 0.2,\n restDisplacementThreshold: 0.2,\n};\n\nexport const DEFAULT_PROPS = {\n autoscrollThreshold: 30,\n autoscrollSpeed: 100,\n animationConfig: DEFAULT_ANIMATION_CONFIG,\n scrollEnabled: true,\n dragHitSlop: 0 as PanGestureHandlerProperties[\"hitSlop\"],\n activationDistance: 0,\n dragItemOverflow: false,\n};\n\nexport const isIOS = Platform.OS === \"ios\";\nexport const isAndroid = Platform.OS === \"android\";\nexport const isWeb = Platform.OS === \"web\";\n\n// Is there a better way to check for v2?\nexport const isReanimatedV2 = !!useSharedValue;\n\nif (!isReanimatedV2) {\n throw new Error(\n \"Your version of react-native-reanimated is too old for react-native-draggable-flatlist!\"\n );\n}\n","import React, { useMemo, useEffect, useCallback, useContext } from \"react\";\nimport {\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { State as GestureState } from \"react-native-gesture-handler\";\nimport { useProps } from \"./propsContext\";\n\nconst AnimatedValueContext = React.createContext<\n ReturnType | undefined\n>(undefined);\n\nexport default function AnimatedValueProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const value = useSetupAnimatedValues();\n return (\n \n {children}\n \n );\n}\n\nexport function useAnimatedValues() {\n const value = useContext(AnimatedValueContext);\n if (!value) {\n throw new Error(\n \"useAnimatedValues must be called from within AnimatedValueProvider!\"\n );\n }\n return value;\n}\n\nfunction useSetupAnimatedValues() {\n const props = useProps();\n\n const DEFAULT_VAL = useSharedValue(0);\n\n const containerSize = useSharedValue(0);\n const scrollViewSize = useSharedValue(0);\n\n const panGestureState = useSharedValue(\n GestureState.UNDETERMINED\n );\n const touchTranslate = useSharedValue(0);\n\n const isTouchActiveNative = useSharedValue(false);\n\n const hasMoved = useSharedValue(0);\n const disabled = useSharedValue(false);\n\n const horizontalAnim = useSharedValue(!!props.horizontal);\n\n const activeIndexAnim = useSharedValue(-1); // Index of hovering cell\n const spacerIndexAnim = useSharedValue(-1); // Index of hovered-over cell\n\n const activeCellSize = useSharedValue(0); // Height or width of acctive cell\n const activeCellOffset = useSharedValue(0); // Distance between active cell and edge of container\n\n const scrollOffset = useSharedValue(0);\n const scrollInit = useSharedValue(0);\n\n const viewableIndexMin = useSharedValue(0);\n const viewableIndexMax = useSharedValue(0);\n\n // If list is nested there may be an outer scrollview\n const outerScrollOffset = props.outerScrollOffset || DEFAULT_VAL;\n const outerScrollInit = useSharedValue(0);\n\n useAnimatedReaction(\n () => {\n return activeIndexAnim.value;\n },\n (cur, prev) => {\n if (cur !== prev && cur >= 0) {\n scrollInit.value = scrollOffset.value;\n outerScrollInit.value = outerScrollOffset.value;\n }\n },\n [outerScrollOffset]\n );\n\n const placeholderOffset = useSharedValue(0);\n\n const isDraggingCell = useDerivedValue(() => {\n return isTouchActiveNative.value && activeIndexAnim.value >= 0;\n }, []);\n\n const autoScrollDistance = useDerivedValue(() => {\n if (!isDraggingCell.value) return 0;\n const innerScrollDiff = scrollOffset.value - scrollInit.value;\n // If list is nested there may be an outer scroll diff\n const outerScrollDiff = outerScrollOffset.value - outerScrollInit.value;\n const scrollDiff = innerScrollDiff + outerScrollDiff;\n return scrollDiff;\n }, []);\n\n const touchPositionDiff = useDerivedValue(() => {\n const extraTranslate = isTouchActiveNative.value\n ? autoScrollDistance.value\n : 0;\n return touchTranslate.value + extraTranslate;\n }, []);\n\n const touchPositionDiffConstrained = useDerivedValue(() => {\n const containerMinusActiveCell =\n containerSize.value - activeCellSize.value + scrollOffset.value;\n\n const offsetRelativeToScrollTop =\n touchPositionDiff.value + activeCellOffset.value;\n const constrained = Math.min(\n containerMinusActiveCell,\n Math.max(scrollOffset.value, offsetRelativeToScrollTop)\n );\n\n const maxTranslateNegative = -activeCellOffset.value;\n const maxTranslatePositive =\n scrollViewSize.value - (activeCellOffset.value + activeCellSize.value);\n\n // Only constrain the touch position while the finger is on the screen. This allows the active cell\n // to snap above/below the fold once let go, if the drag ends at the top/bottom of the screen.\n const constrainedBase = isTouchActiveNative.value\n ? constrained - activeCellOffset.value\n : touchPositionDiff.value;\n\n // Make sure item is constrained to the boundaries of the scrollview\n return Math.min(\n Math.max(constrainedBase, maxTranslateNegative),\n maxTranslatePositive\n );\n }, []);\n\n const hoverAnim = useDerivedValue(() => {\n if (activeIndexAnim.value < 0) return 0;\n return props.dragItemOverflow\n ? touchPositionDiff.value\n : touchPositionDiffConstrained.value;\n }, []);\n\n const hoverOffset = useDerivedValue(() => {\n return hoverAnim.value + activeCellOffset.value;\n }, [hoverAnim, activeCellOffset]);\n\n useDerivedValue(() => {\n // Reset spacer index when we stop hovering\n const isHovering = activeIndexAnim.value >= 0;\n if (!isHovering && spacerIndexAnim.value >= 0) {\n spacerIndexAnim.value = -1;\n }\n }, []);\n\n // Note: this could use a refactor as it combines touch state + cell animation\n const resetTouchedCell = useCallback(() => {\n activeCellOffset.value = 0;\n hasMoved.value = 0;\n }, []);\n\n const value = useMemo(\n () => ({\n activeCellOffset,\n activeCellSize,\n activeIndexAnim,\n containerSize,\n disabled,\n horizontalAnim,\n hoverAnim,\n hoverOffset,\n isDraggingCell,\n isTouchActiveNative,\n panGestureState,\n placeholderOffset,\n resetTouchedCell,\n scrollOffset,\n scrollViewSize,\n spacerIndexAnim,\n touchPositionDiff,\n touchTranslate,\n autoScrollDistance,\n viewableIndexMin,\n viewableIndexMax,\n }),\n [\n activeCellOffset,\n activeCellSize,\n activeIndexAnim,\n containerSize,\n disabled,\n horizontalAnim,\n hoverAnim,\n hoverOffset,\n isDraggingCell,\n isTouchActiveNative,\n panGestureState,\n placeholderOffset,\n resetTouchedCell,\n scrollOffset,\n scrollViewSize,\n spacerIndexAnim,\n touchPositionDiff,\n touchTranslate,\n autoScrollDistance,\n viewableIndexMin,\n viewableIndexMax,\n ]\n );\n\n useEffect(() => {\n props.onAnimValInit?.(value);\n }, [value]);\n\n return value;\n}\n","import React, { useContext, useMemo } from \"react\";\nimport { typedMemo } from \"../utils\";\n\ntype CellContextValue = {\n isActive: boolean;\n};\n\nconst CellContext = React.createContext(\n undefined\n);\n\ntype Props = {\n isActive: boolean;\n children: React.ReactNode;\n};\n\nexport function CellProvider({ isActive, children }: Props) {\n const value = useMemo(\n () => ({\n isActive,\n }),\n [isActive]\n );\n return {children};\n}\n\nexport default typedMemo(CellProvider);\n\nexport function useIsActive() {\n const value = useContext(CellContext);\n if (!value) {\n throw new Error(\"useIsActive must be called from within CellProvider!\");\n }\n return value.isActive;\n}\n","import React, { useContext, useMemo } from \"react\";\n\ntype Props = {\n activeKey: string | null;\n keyExtractor: (item: T, index: number) => string;\n horizontal: boolean;\n layoutAnimationDisabled: boolean;\n children: React.ReactNode;\n};\n\ntype DraggableFlatListContextValue = Omit, \"children\">;\n\nconst DraggableFlatListContext = React.createContext<\n DraggableFlatListContextValue | undefined\n>(undefined);\n\nexport default function DraggableFlatListProvider({\n activeKey,\n keyExtractor,\n horizontal,\n layoutAnimationDisabled,\n children,\n}: Props) {\n const value = useMemo(\n () => ({\n activeKey,\n keyExtractor,\n horizontal,\n layoutAnimationDisabled,\n }),\n [activeKey, keyExtractor, horizontal, layoutAnimationDisabled]\n );\n\n return (\n \n {children}\n \n );\n}\n\nexport function useDraggableFlatListContext() {\n const value = useContext(DraggableFlatListContext);\n if (!value) {\n throw new Error(\n \"useDraggableFlatListContext must be called within DraggableFlatListProvider\"\n );\n }\n return value as DraggableFlatListContextValue;\n}\n","import React, { useContext, useMemo, useRef, useState } from \"react\";\nimport { ScrollView } from \"react-native-gesture-handler\";\nimport Animated, { useSharedValue } from \"react-native-reanimated\";\n\ntype NestableScrollContainerContextVal = ReturnType<\n typeof useSetupNestableScrollContextValue\n>;\nconst NestableScrollContainerContext = React.createContext<\n NestableScrollContainerContextVal | undefined\n>(undefined);\n\nfunction useSetupNestableScrollContextValue({\n forwardedRef,\n}: {\n forwardedRef?: React.MutableRefObject;\n}) {\n const [outerScrollEnabled, setOuterScrollEnabled] = useState(true);\n const scrollViewSize = useSharedValue(0);\n const scrollableRefInner = useRef(null);\n const scrollableRef = forwardedRef || scrollableRefInner;\n const outerScrollOffset = useSharedValue(0);\n const containerSize = useSharedValue(0);\n\n const contextVal = useMemo(\n () => ({\n outerScrollEnabled,\n setOuterScrollEnabled,\n outerScrollOffset,\n scrollViewSize,\n scrollableRef,\n containerSize,\n }),\n [outerScrollEnabled]\n );\n\n return contextVal;\n}\n\nexport function NestableScrollContainerProvider({\n children,\n forwardedRef,\n}: {\n children: React.ReactNode;\n forwardedRef?: React.MutableRefObject;\n}) {\n const contextVal = useSetupNestableScrollContextValue({ forwardedRef });\n return (\n \n {children}\n \n );\n}\n\nexport function useNestableScrollContainerContext() {\n const value = useContext(NestableScrollContainerContext);\n return value;\n}\n\nexport function useSafeNestableScrollContainerContext() {\n const value = useNestableScrollContainerContext();\n if (!value) {\n throw new Error(\n \"useSafeNestableScrollContainerContext must be called within a NestableScrollContainerContext.Provider\"\n );\n }\n return value;\n}\n","import React, { useContext } from \"react\";\nimport { DraggableFlatListProps } from \"../types\";\n\nconst PropsContext = React.createContext<\n DraggableFlatListProps | undefined\n>(undefined);\n\ntype Props = DraggableFlatListProps & { children: React.ReactNode };\n\nexport default function PropsProvider({ children, ...props }: Props) {\n return (\n {children}\n );\n}\n\nexport function useProps() {\n const value = useContext(PropsContext) as\n | DraggableFlatListProps\n | undefined;\n if (!value) {\n throw new Error(\"useProps must be called from within PropsProvider!\");\n }\n return value;\n}\n","import React, { useContext } from \"react\";\nimport { useMemo, useRef } from \"react\";\nimport { FlatList } from \"react-native-gesture-handler\";\nimport Animated, { WithSpringConfig } from \"react-native-reanimated\";\nimport { DEFAULT_PROPS } from \"../constants\";\nimport { useProps } from \"./propsContext\";\nimport { CellData, DraggableFlatListProps } from \"../types\";\n\ntype RefContextValue = {\n propsRef: React.MutableRefObject>;\n animationConfigRef: React.MutableRefObject;\n cellDataRef: React.MutableRefObject>;\n keyToIndexRef: React.MutableRefObject>;\n containerRef: React.RefObject;\n flatlistRef: React.RefObject> | React.ForwardedRef>;\n scrollViewRef: React.RefObject;\n};\nconst RefContext = React.createContext | undefined>(\n undefined\n);\n\nexport default function RefProvider({\n children,\n flatListRef,\n}: {\n children: React.ReactNode;\n flatListRef?: React.ForwardedRef> | null;\n}) {\n const value = useSetupRefs({ flatListRef });\n return {children};\n}\n\nexport function useRefs() {\n const value = useContext(RefContext);\n if (!value) {\n throw new Error(\n \"useRefs must be called from within a RefContext.Provider!\"\n );\n }\n return value as RefContextValue;\n}\n\nfunction useSetupRefs({\n flatListRef: flatListRefProp,\n}: {\n flatListRef?: React.ForwardedRef> | null;\n}) {\n const props = useProps();\n const { animationConfig = DEFAULT_PROPS.animationConfig } = props;\n\n const propsRef = useRef(props);\n propsRef.current = props;\n const animConfig = {\n ...DEFAULT_PROPS.animationConfig,\n ...animationConfig,\n } as WithSpringConfig;\n const animationConfigRef = useRef(animConfig);\n animationConfigRef.current = animConfig;\n\n const cellDataRef = useRef(new Map());\n const keyToIndexRef = useRef(new Map());\n const containerRef = useRef(null);\n const flatlistRefInternal = useRef>(null);\n const flatlistRef = flatListRefProp || flatlistRefInternal;\n const scrollViewRef = useRef(null);\n\n // useEffect(() => {\n // // This is a workaround for the fact that RN does not respect refs passed in\n // // to renderScrollViewComponent underlying ScrollView (currently not used but\n // // may need to add if we want to use reanimated scrollTo in the future)\n // //@ts-ignore\n // const scrollRef = flatlistRef.current?.getNativeScrollRef();\n // if (!scrollViewRef.current) {\n // //@ts-ignore\n // scrollViewRef(scrollRef);\n // }\n // }, []);\n\n const refs = useMemo(\n () => ({\n animationConfigRef,\n cellDataRef,\n containerRef,\n flatlistRef,\n keyToIndexRef,\n propsRef,\n scrollViewRef,\n }),\n []\n );\n\n return refs;\n}\n","import {\n runOnJS,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { DEFAULT_PROPS, SCROLL_POSITION_TOLERANCE } from \"../constants\";\nimport { useProps } from \"../context/propsContext\";\nimport { useAnimatedValues } from \"../context/animatedValueContext\";\nimport { useRefs } from \"../context/refContext\";\n\nexport function useAutoScroll() {\n const { flatlistRef } = useRefs();\n\n const {\n autoscrollThreshold = DEFAULT_PROPS.autoscrollThreshold,\n autoscrollSpeed = DEFAULT_PROPS.autoscrollSpeed,\n } = useProps();\n\n const {\n scrollOffset,\n scrollViewSize,\n containerSize,\n activeCellSize,\n hoverOffset,\n activeIndexAnim,\n } = useAnimatedValues();\n\n const hoverScreenOffset = useDerivedValue(() => {\n return hoverOffset.value - scrollOffset.value;\n }, []);\n\n const isScrolledUp = useDerivedValue(() => {\n return scrollOffset.value - SCROLL_POSITION_TOLERANCE <= 0;\n }, []);\n\n const isScrolledDown = useDerivedValue(() => {\n return (\n scrollOffset.value + containerSize.value + SCROLL_POSITION_TOLERANCE >=\n scrollViewSize.value\n );\n }, []);\n\n const distToTopEdge = useDerivedValue(() => {\n return Math.max(0, hoverScreenOffset.value);\n }, []);\n\n const distToBottomEdge = useDerivedValue(() => {\n const hoverPlusActiveCell = hoverScreenOffset.value + activeCellSize.value;\n return Math.max(0, containerSize.value - hoverPlusActiveCell);\n }, []);\n\n const isAtTopEdge = useDerivedValue(() => {\n return distToTopEdge.value <= autoscrollThreshold;\n });\n\n const isAtBottomEdge = useDerivedValue(() => {\n return distToBottomEdge.value <= autoscrollThreshold;\n }, []);\n\n const scrollTarget = useSharedValue(0);\n const dragIsActive = useDerivedValue(() => {\n return activeIndexAnim.value >= 0;\n }, []);\n\n useAnimatedReaction(\n () => {\n return dragIsActive.value;\n },\n (cur, prev) => {\n if (cur && !prev) {\n scrollTarget.value = scrollOffset.value;\n }\n }\n );\n\n const shouldAutoScroll = useDerivedValue(() => {\n const scrollTargetDiff = Math.abs(scrollTarget.value - scrollOffset.value);\n const hasScrolledToTarget = scrollTargetDiff < SCROLL_POSITION_TOLERANCE;\n\n const isAtEdge = isAtTopEdge.value || isAtBottomEdge.value;\n const topDisabled = isAtTopEdge.value && isScrolledUp.value;\n const bottomDisabled = isAtBottomEdge.value && isScrolledDown.value;\n const isEdgeDisabled = topDisabled || bottomDisabled;\n\n const cellIsActive = activeIndexAnim.value >= 0;\n\n return hasScrolledToTarget && isAtEdge && !isEdgeDisabled && cellIsActive;\n }, []);\n\n function scrollToInternal(offset: number) {\n if (flatlistRef && \"current\" in flatlistRef) {\n flatlistRef.current?.scrollToOffset({ offset, animated: true });\n }\n }\n\n useDerivedValue(() => {\n if (!shouldAutoScroll.value) return;\n\n const distFromEdge = isAtTopEdge.value\n ? distToTopEdge.value\n : distToBottomEdge.value;\n const speedPct = 1 - distFromEdge / autoscrollThreshold!;\n const offset = speedPct * autoscrollSpeed;\n const targetOffset = isAtTopEdge.value\n ? Math.max(0, scrollOffset.value - offset)\n : Math.min(\n scrollOffset.value + offset,\n scrollViewSize.value - containerSize.value\n );\n\n scrollTarget.value = targetOffset;\n // Reanimated scrollTo is crashing on android. use 'regular' scrollTo until figured out.\n // scrollTo(scrollViewRef, targetX, targetY, true);\n runOnJS(scrollToInternal)(targetOffset);\n }, []);\n\n return null;\n}\n","import Animated, { useDerivedValue, withSpring } from \"react-native-reanimated\";\nimport { useAnimatedValues } from \"../context/animatedValueContext\";\nimport { useDraggableFlatListContext } from \"../context/draggableFlatListContext\";\nimport { useRefs } from \"../context/refContext\";\n\ntype Params = {\n cellIndex: number;\n cellSize: Animated.SharedValue;\n cellOffset: Animated.SharedValue;\n};\n\nexport function useCellTranslate({ cellIndex, cellSize, cellOffset }: Params) {\n const {\n activeIndexAnim,\n activeCellSize,\n hoverOffset,\n spacerIndexAnim,\n placeholderOffset,\n hoverAnim,\n viewableIndexMin,\n viewableIndexMax,\n } = useAnimatedValues();\n\n const { activeKey } = useDraggableFlatListContext();\n\n const { animationConfigRef } = useRefs();\n\n const translate = useDerivedValue(() => {\n const isActiveCell = cellIndex === activeIndexAnim.value;\n const isOutsideViewableRange =\n !isActiveCell &&\n (cellIndex < viewableIndexMin.value ||\n cellIndex > viewableIndexMax.value);\n if (!activeKey || activeIndexAnim.value < 0 || isOutsideViewableRange) {\n return 0;\n }\n\n // Determining spacer index is hard to visualize. See diagram: https://i.imgur.com/jRPf5t3.jpg\n const isBeforeActive = cellIndex < activeIndexAnim.value;\n const isAfterActive = cellIndex > activeIndexAnim.value;\n\n const hoverPlusActiveSize = hoverOffset.value + activeCellSize.value;\n const offsetPlusHalfSize = cellOffset.value + cellSize.value / 2;\n const offsetPlusSize = cellOffset.value + cellSize.value;\n let result = -1;\n\n if (isAfterActive) {\n if (\n hoverPlusActiveSize >= cellOffset.value &&\n hoverPlusActiveSize < offsetPlusHalfSize\n ) {\n // bottom edge of active cell overlaps top half of current cell\n result = cellIndex - 1;\n } else if (\n hoverPlusActiveSize >= offsetPlusHalfSize &&\n hoverPlusActiveSize < offsetPlusSize\n ) {\n // bottom edge of active cell overlaps bottom half of current cell\n result = cellIndex;\n }\n } else if (isBeforeActive) {\n if (\n hoverOffset.value < offsetPlusSize &&\n hoverOffset.value >= offsetPlusHalfSize\n ) {\n // top edge of active cell overlaps bottom half of current cell\n result = cellIndex + 1;\n } else if (\n hoverOffset.value >= cellOffset.value &&\n hoverOffset.value < offsetPlusHalfSize\n ) {\n // top edge of active cell overlaps top half of current cell\n result = cellIndex;\n }\n }\n\n if (result !== -1 && result !== spacerIndexAnim.value) {\n spacerIndexAnim.value = result;\n }\n\n if (spacerIndexAnim.value === cellIndex) {\n const newPlaceholderOffset = isAfterActive\n ? cellSize.value + (cellOffset.value - activeCellSize.value)\n : cellOffset.value;\n placeholderOffset.value = newPlaceholderOffset;\n }\n\n // Active cell follows touch\n if (isActiveCell) {\n return hoverAnim.value;\n }\n\n // Translate cell down if it is before active index and active cell has passed it.\n // Translate cell up if it is after the active index and active cell has passed it.\n\n const shouldTranslate = isAfterActive\n ? cellIndex <= spacerIndexAnim.value\n : cellIndex >= spacerIndexAnim.value;\n\n const translationAmt = shouldTranslate\n ? activeCellSize.value * (isAfterActive ? -1 : 1)\n : 0;\n\n return withSpring(translationAmt, animationConfigRef.current);\n }, [activeKey, cellIndex]);\n\n return translate;\n}\n","import Animated, {\n runOnJS,\n useAnimatedReaction,\n useDerivedValue,\n useSharedValue,\n} from \"react-native-reanimated\";\nimport { State as GestureState } from \"react-native-gesture-handler\";\nimport { useSafeNestableScrollContainerContext } from \"../context/nestableScrollContainerContext\";\nimport { SCROLL_POSITION_TOLERANCE } from \"../constants\";\n\n// This is mostly copied over from the main react-native-draggable-flatlist\n// useAutoScroll hook with a few notable exceptions:\n// - Since animated values are now coming in via a callback,\n// we won't guarantee they exist (and default them if not).\n// - Outer scrollable is a ScrollView, not a FlatList\n// TODO: see if we can combine into a single shared `useAutoScroll()` hook\n\nexport function useNestedAutoScroll(params: {\n activeCellSize?: Animated.SharedValue;\n autoscrollSpeed?: number;\n autoscrollThreshold?: number;\n hoverOffset?: Animated.SharedValue;\n isDraggingCell?: Animated.SharedValue;\n isTouchActiveNative?: Animated.SharedValue;\n panGestureState?: Animated.SharedValue;\n}) {\n const {\n outerScrollOffset,\n containerSize,\n scrollableRef,\n scrollViewSize,\n } = useSafeNestableScrollContainerContext();\n\n const DUMMY_VAL = useSharedValue(0);\n\n const {\n hoverOffset = DUMMY_VAL,\n activeCellSize = DUMMY_VAL,\n autoscrollSpeed = 100,\n autoscrollThreshold = 30,\n isDraggingCell = DUMMY_VAL,\n isTouchActiveNative = DUMMY_VAL,\n } = params;\n\n const hoverScreenOffset = useDerivedValue(() => {\n return hoverOffset.value - outerScrollOffset.value;\n }, []);\n\n const isScrolledUp = useDerivedValue(() => {\n return outerScrollOffset.value - SCROLL_POSITION_TOLERANCE <= 0;\n }, []);\n\n const isScrolledDown = useDerivedValue(() => {\n return (\n outerScrollOffset.value + containerSize.value + SCROLL_POSITION_TOLERANCE >=\n scrollViewSize.value\n );\n }, []);\n\n const distToTopEdge = useDerivedValue(() => {\n return Math.max(0, hoverScreenOffset.value);\n }, [hoverScreenOffset]);\n\n const distToBottomEdge = useDerivedValue(() => {\n const dist = containerSize.value - (hoverScreenOffset.value + activeCellSize.value)\n return Math.max(0, dist);\n }, [hoverScreenOffset, activeCellSize, containerSize]);\n\n const isAtTopEdge = useDerivedValue(() => {\n return distToTopEdge.value <= autoscrollThreshold;\n }, []);\n\n const isAtBottomEdge = useDerivedValue(() => {\n return distToBottomEdge.value <= autoscrollThreshold;\n });\n\n const scrollTarget = useSharedValue(0);\n\n useAnimatedReaction(\n () => {\n return isDraggingCell.value;\n },\n (cur, prev) => {\n if (cur && !prev) {\n scrollTarget.value = outerScrollOffset.value;\n }\n },\n [activeCellSize]\n );\n\n function scrollToInternal(y: number) {\n scrollableRef.current?.scrollTo({ y, animated: true });\n }\n\n useDerivedValue(() => {\n const isAtEdge = isAtTopEdge.value || isAtBottomEdge.value;\n const topDisabled = isAtTopEdge.value && isScrolledUp.value;\n const bottomDisabled = isAtBottomEdge.value && isScrolledDown.value;\n const isEdgeDisabled = topDisabled || bottomDisabled;\n\n const scrollTargetDiff = Math.abs(scrollTarget.value - outerScrollOffset.value);\n const scrollInProgress = scrollTargetDiff > SCROLL_POSITION_TOLERANCE;\n\n const shouldScroll =\n isAtEdge &&\n !isEdgeDisabled &&\n isDraggingCell.value &&\n isTouchActiveNative.value &&\n !scrollInProgress;\n\n const distFromEdge = isAtTopEdge.value\n ? distToTopEdge.value\n : distToBottomEdge.value;\n const speedPct = 1 - distFromEdge / autoscrollThreshold;\n const offset = speedPct * autoscrollSpeed;\n const targetOffset = isAtTopEdge.value\n ? Math.max(0, outerScrollOffset.value - offset)\n : outerScrollOffset.value + offset;\n if (shouldScroll) {\n scrollTarget.value = targetOffset;\n // Reanimated scrollTo is crashing on android. use 'regular' scrollTo until figured out.\n // scrollTo(scrollViewRef, 0, scrollTarget.value, true)\n runOnJS(scrollToInternal)(targetOffset);\n }\n }, [autoscrollSpeed, autoscrollThreshold, isDraggingCell]);\n\n return null;\n}\n","import { useRef } from \"react\";\nimport Animated, {\n useDerivedValue,\n withSpring,\n WithSpringConfig,\n} from \"react-native-reanimated\";\nimport { DEFAULT_ANIMATION_CONFIG } from \"../constants\";\nimport { useAnimatedValues } from \"../context/animatedValueContext\";\nimport { useIsActive } from \"../context/cellContext\";\n\ntype Params = {\n animationConfig: Partial;\n};\n\nexport function useOnCellActiveAnimation(\n { animationConfig }: Params = { animationConfig: {} }\n) {\n const animationConfigRef = useRef(animationConfig);\n animationConfigRef.current = animationConfig;\n\n const isActive = useIsActive();\n\n const { isTouchActiveNative } = useAnimatedValues();\n\n const onActiveAnim = useDerivedValue(() => {\n const toVal = isActive && isTouchActiveNative.value ? 1 : 0;\n return withSpring(toVal, {\n ...DEFAULT_ANIMATION_CONFIG,\n ...animationConfigRef.current,\n });\n }, [isActive]);\n\n return {\n isActive,\n onActiveAnim,\n };\n}\n","import { useRef, useCallback } from \"react\";\n\n// Utility hook that returns a function that never has stale dependencies, but\n// without changing identity, as a useCallback with dep array would.\n// Useful for functions that depend on external state, but\n// should not trigger effects when that external state changes.\n\nexport function useStableCallback<\n T extends (arg1?: any, arg2?: any, arg3?: any) => any\n>(cb: T) {\n const cbRef = useRef(cb);\n cbRef.current = cb;\n const identityRetainingCb = useCallback(\n (...args: Parameters) => cbRef.current(...args),\n []\n );\n return identityRetainingCb as T;\n}\n","import DraggableFlatList from \"./components/DraggableFlatList\";\nexport * from \"./components/CellDecorators\";\nexport * from \"./components/NestableDraggableFlatList\";\nexport * from \"./components/NestableScrollContainer\";\nexport * from \"./types\";\nexport default DraggableFlatList;\n","import React from \"react\";\nimport {\n FlatListProps,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from \"react-native\";\nimport { useAnimatedValues } from \"./context/animatedValueContext\";\nimport { FlatList } from \"react-native-gesture-handler\";\nimport Animated, {\n AnimateProps,\n WithSpringConfig,\n} from \"react-native-reanimated\";\nimport { DEFAULT_PROPS } from \"./constants\";\n\nexport type DragEndParams = {\n data: T[];\n from: number;\n to: number;\n};\ntype Modify = Omit & R;\n\ntype DefaultProps = Readonly;\n\nexport type DraggableFlatListProps = Modify<\n FlatListProps,\n {\n data: T[];\n activationDistance?: number;\n animationConfig?: Partial;\n autoscrollSpeed?: number;\n autoscrollThreshold?: number;\n containerStyle?: StyleProp;\n debug?: boolean;\n dragItemOverflow?: boolean;\n keyExtractor: (item: T, index: number) => string;\n onDragBegin?: (index: number) => void;\n onDragEnd?: (params: DragEndParams) => void;\n onPlaceholderIndexChange?: (placeholderIndex: number) => void;\n onRelease?: (index: number) => void;\n onScrollOffsetChange?: (scrollOffset: number) => void;\n renderItem: RenderItem;\n renderPlaceholder?: RenderPlaceholder;\n simultaneousHandlers?: React.Ref | React.Ref[];\n outerScrollOffset?: Animated.SharedValue;\n onAnimValInit?: (animVals: ReturnType) => void;\n itemEnteringAnimation?: AnimateProps[\"entering\"];\n itemExitingAnimation?: AnimateProps[\"exiting\"];\n itemLayoutAnimation?: AnimateProps[\"layout\"];\n enableLayoutAnimationExperimental?: boolean;\n onContainerLayout?: (params: {\n layout: LayoutChangeEvent[\"nativeEvent\"][\"layout\"];\n containerRef: React.RefObject;\n }) => void;\n } & Partial\n>;\n\nexport type RenderPlaceholder = (params: {\n item: T;\n index: number;\n}) => JSX.Element;\n\nexport type RenderItemParams = {\n item: T;\n getIndex: () => number | undefined; // This is technically a \"last known index\" since cells don't necessarily rerender when their index changes\n drag: () => void;\n isActive: boolean;\n};\n\nexport type RenderItem = (params: RenderItemParams) => React.ReactNode;\n\nexport type AnimatedFlatListType = (\n props: Animated.AnimateProps<\n FlatListProps & {\n ref: React.Ref>;\n simultaneousHandlers?: React.Ref | React.Ref[];\n }\n >\n) => React.ReactElement;\n\nexport type CellData = {\n measurements: {\n size: number;\n offset: number;\n };\n};\n","import React from \"react\";\n\n// Fixes bug with useMemo + generic types:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-542793243\nexport const typedMemo: (c: T) => T = React.memo;\n","export const ActionType = {\n REANIMATED_WORKLET: 1,\n NATIVE_ANIMATED_EVENT: 2,\n JS_FUNCTION_OLD_API: 3,\n JS_FUNCTION_NEW_API: 4,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type ActionType = typeof ActionType[keyof typeof ActionType];\n","export const Directions = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type Directions = typeof Directions[keyof typeof Directions];\n","import { Platform } from 'react-native';\n\nlet useNewWebImplementation = true;\nlet getWasCalled = false;\n\nexport function enableExperimentalWebImplementation(\n _shouldEnable = true\n): void {\n // NO-OP since the new implementation is now the default\n}\n\nexport function enableLegacyWebImplementation(\n shouldUseLegacyImplementation = true\n): void {\n if (\n Platform.OS !== 'web' ||\n useNewWebImplementation === !shouldUseLegacyImplementation\n ) {\n return;\n }\n\n if (getWasCalled) {\n console.error(\n 'Some parts of this application have already started using the new gesture handler implementation. No changes will be applied. You can try enabling legacy implementation earlier.'\n );\n return;\n }\n\n useNewWebImplementation = !shouldUseLegacyImplementation;\n}\n\nexport function isNewWebImplementationEnabled(): boolean {\n getWasCalled = true;\n return useNewWebImplementation;\n}\n","import React from 'react';\n\nexport default React.createContext(false);\n","export default {\n get forceTouchAvailable() {\n return false;\n },\n};\n","import React from 'react';\n\nimport { ActionType } from './ActionType';\nimport { isNewWebImplementationEnabled } from './EnableNewWebImplementation';\n\n//GestureHandlers\nimport InteractionManager from './web/tools/InteractionManager';\nimport NodeManager from './web/tools/NodeManager';\nimport PanGestureHandler from './web/handlers/PanGestureHandler';\nimport TapGestureHandler from './web/handlers/TapGestureHandler';\nimport LongPressGestureHandler from './web/handlers/LongPressGestureHandler';\nimport PinchGestureHandler from './web/handlers/PinchGestureHandler';\nimport RotationGestureHandler from './web/handlers/RotationGestureHandler';\nimport FlingGestureHandler from './web/handlers/FlingGestureHandler';\nimport NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';\nimport ManualGestureHandler from './web/handlers/ManualGestureHandler';\n\n//Hammer Handlers\nimport * as HammerNodeManager from './web_hammer/NodeManager';\nimport HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';\nimport HammerPanGestureHandler from './web_hammer/PanGestureHandler';\nimport HammerTapGestureHandler from './web_hammer/TapGestureHandler';\nimport HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';\nimport HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';\nimport HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';\nimport HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';\nimport { Config } from './web/interfaces';\n\nexport const Gestures = {\n NativeViewGestureHandler,\n PanGestureHandler,\n TapGestureHandler,\n LongPressGestureHandler,\n PinchGestureHandler,\n RotationGestureHandler,\n FlingGestureHandler,\n ManualGestureHandler,\n};\n\nexport const HammerGestures = {\n NativeViewGestureHandler: HammerNativeViewGestureHandler,\n PanGestureHandler: HammerPanGestureHandler,\n TapGestureHandler: HammerTapGestureHandler,\n LongPressGestureHandler: HammerLongPressGestureHandler,\n PinchGestureHandler: HammerPinchGestureHandler,\n RotationGestureHandler: HammerRotationGestureHandler,\n FlingGestureHandler: HammerFlingGestureHandler,\n};\n\nexport default {\n handleSetJSResponder(tag: number, blockNativeResponder: boolean) {\n console.warn('handleSetJSResponder: ', tag, blockNativeResponder);\n },\n handleClearJSResponder() {\n console.warn('handleClearJSResponder: ');\n },\n createGestureHandler(\n handlerName: keyof typeof Gestures,\n handlerTag: number,\n config: T\n ) {\n if (isNewWebImplementationEnabled()) {\n if (!(handlerName in Gestures)) {\n throw new Error(\n `react-native-gesture-handler: ${handlerName} is not supported on web.`\n );\n }\n\n const GestureClass = Gestures[handlerName];\n NodeManager.createGestureHandler(handlerTag, new GestureClass());\n InteractionManager.getInstance().configureInteractions(\n NodeManager.getHandler(handlerTag),\n config as unknown as Config\n );\n } else {\n if (!(handlerName in HammerGestures)) {\n throw new Error(\n `react-native-gesture-handler: ${handlerName} is not supported on web.`\n );\n }\n\n // @ts-ignore If it doesn't exist, the error is thrown\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const GestureClass = HammerGestures[handlerName];\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());\n }\n\n this.updateGestureHandler(handlerTag, config as unknown as Config);\n },\n attachGestureHandler(\n handlerTag: number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newView: any,\n _actionType: ActionType,\n propsRef: React.RefObject\n ) {\n if (\n !(newView instanceof HTMLElement || newView instanceof React.Component)\n ) {\n return;\n }\n\n if (isNewWebImplementationEnabled()) {\n //@ts-ignore Types should be HTMLElement or React.Component\n NodeManager.getHandler(handlerTag).init(newView, propsRef);\n } else {\n //@ts-ignore Types should be HTMLElement or React.Component\n HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);\n }\n },\n updateGestureHandler(handlerTag: number, newConfig: Config) {\n if (isNewWebImplementationEnabled()) {\n NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);\n\n InteractionManager.getInstance().configureInteractions(\n NodeManager.getHandler(handlerTag),\n newConfig\n );\n } else {\n HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);\n }\n },\n getGestureHandlerNode(handlerTag: number) {\n if (isNewWebImplementationEnabled()) {\n return NodeManager.getHandler(handlerTag);\n } else {\n return HammerNodeManager.getHandler(handlerTag);\n }\n },\n dropGestureHandler(handlerTag: number) {\n if (isNewWebImplementationEnabled()) {\n NodeManager.dropGestureHandler(handlerTag);\n } else {\n HammerNodeManager.dropGestureHandler(handlerTag);\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n flushOperations() {},\n};\n","export const RNRenderer = {\n findHostInstance_DEPRECATED: (_ref: any) => null,\n};\n","// TODO use State from RNModule\n\nexport const State = {\n UNDETERMINED: 0,\n FAILED: 1,\n BEGAN: 2,\n CANCELLED: 3,\n ACTIVE: 4,\n END: 5,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type State = typeof State[keyof typeof State];\n","export const TouchEventType = {\n UNDETERMINED: 0,\n TOUCHES_DOWN: 1,\n TOUCHES_MOVE: 2,\n TOUCHES_UP: 3,\n TOUCHES_CANCELLED: 4,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type TouchEventType = typeof TouchEventType[keyof typeof TouchEventType];\n","// This component is based on RN's DrawerLayoutAndroid API\n//\n// It perhaps deserves to be put in a separate repo, but since it relies on\n// react-native-gesture-handler library which isn't very popular at the moment I\n// decided to keep it here for the time being. It will allow us to move faster\n// and fix issues that may arise in gesture handler library that could be found\n// when using the drawer component\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport invariant from 'invariant';\nimport {\n Animated,\n StyleSheet,\n View,\n Keyboard,\n StatusBar,\n I18nManager,\n StatusBarAnimation,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n NativeSyntheticEvent,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n UserSelect,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n} from '../handlers/PanGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\nconst IDLE: DrawerState = 'Idle';\nconst DRAGGING: DrawerState = 'Dragging';\nconst SETTLING: DrawerState = 'Settling';\n\nexport type DrawerPosition = 'left' | 'right';\n\nexport type DrawerState = 'Idle' | 'Dragging' | 'Settling';\n\nexport type DrawerType = 'front' | 'back' | 'slide';\n\nexport type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open';\n\nexport type DrawerKeyboardDismissMode = 'none' | 'on-drag';\n\n// Animated.AnimatedInterpolation has been converted to a generic type\n// in @types/react-native 0.70. This way we can maintain compatibility\n// with all versions of @types/react-native`\ntype AnimatedInterpolation = ReturnType;\nexport interface DrawerLayoutProps {\n /**\n * This attribute is present in the standard implementation already and is one\n * of the required params. Gesture handler version of DrawerLayout make it\n * possible for the function passed as `renderNavigationView` to take an\n * Animated value as a parameter that indicates the progress of drawer\n * opening/closing animation (progress value is 0 when closed and 1 when\n * opened). This can be used by the drawer component to animated its children\n * while the drawer is opening or closing.\n */\n renderNavigationView: (\n progressAnimatedValue: Animated.Value\n ) => React.ReactNode;\n\n drawerPosition?: DrawerPosition;\n\n drawerWidth?: number;\n\n drawerBackgroundColor?: string;\n\n drawerLockMode?: DrawerLockMode;\n\n keyboardDismissMode?: DrawerKeyboardDismissMode;\n\n /**\n * Called when the drawer is closed.\n */\n onDrawerClose?: () => void;\n\n /**\n * Called when the drawer is opened.\n */\n onDrawerOpen?: () => void;\n\n /**\n * Called when the status of the drawer changes.\n */\n onDrawerStateChanged?: (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => void;\n useNativeAnimations?: boolean;\n\n drawerType?: DrawerType;\n\n /**\n * Defines how far from the edge of the content view the gesture should\n * activate.\n */\n edgeWidth?: number;\n\n minSwipeDistance?: number;\n\n /**\n * When set to true Drawer component will use\n * {@link https://reactnative.dev/docs/statusbar StatusBar} API to hide the OS\n * status bar whenever the drawer is pulled or when its in an \"open\" state.\n */\n hideStatusBar?: boolean;\n\n /**\n * @default 'slide'\n *\n * Can be used when hideStatusBar is set to true and will select the animation\n * used for hiding/showing the status bar. See\n * {@link https://reactnative.dev/docs/statusbar StatusBar} documentation for\n * more details\n */\n statusBarAnimation?: StatusBarAnimation;\n\n /**\n * @default black\n *\n * Color of a semi-transparent overlay to be displayed on top of the content\n * view when drawer gets open. A solid color should be used as the opacity is\n * added by the Drawer itself and the opacity of the overlay is animated (from\n * 0% to 70%).\n */\n overlayColor?: string;\n\n contentContainerStyle?: StyleProp;\n\n drawerContainerStyle?: StyleProp;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n onDrawerSlide?: (position: number) => void;\n\n onGestureRef?: (ref: PanGestureHandler) => void;\n\n // implicit `children` prop has been removed in @types/react^18.0.0\n children?:\n | React.ReactNode\n | ((openValue?: AnimatedInterpolation) => React.ReactNode);\n\n /**\n * @default 'none'\n * Defines which userSelect property should be used.\n * Values: 'none'|'text'|'auto'\n */\n userSelect?: UserSelect;\n}\n\nexport type DrawerLayoutState = {\n dragX: Animated.Value;\n touchX: Animated.Value;\n drawerTranslation: Animated.Value;\n containerWidth: number;\n drawerState: DrawerState;\n drawerOpened: boolean;\n};\n\nexport type DrawerMovementOption = {\n velocity?: number;\n speed?: number;\n};\nexport default class DrawerLayout extends Component<\n DrawerLayoutProps,\n DrawerLayoutState\n> {\n static defaultProps = {\n drawerWidth: 200,\n drawerPosition: 'left',\n useNativeAnimations: true,\n drawerType: 'front',\n edgeWidth: 20,\n minSwipeDistance: 3,\n overlayColor: 'rgba(0, 0, 0, 0.7)',\n drawerLockMode: 'unlocked',\n enableTrackpadTwoFingerGesture: false,\n };\n\n constructor(props: DrawerLayoutProps) {\n super(props);\n\n const dragX = new Animated.Value(0);\n const touchX = new Animated.Value(0);\n const drawerTranslation = new Animated.Value(0);\n\n this.state = {\n dragX,\n touchX,\n drawerTranslation,\n containerWidth: 0,\n drawerState: IDLE,\n drawerOpened: false,\n };\n\n this.updateAnimatedEvent(props, this.state);\n }\n\n shouldComponentUpdate(props: DrawerLayoutProps, state: DrawerLayoutState) {\n if (\n this.props.drawerPosition !== props.drawerPosition ||\n this.props.drawerWidth !== props.drawerWidth ||\n this.props.drawerType !== props.drawerType ||\n this.state.containerWidth !== state.containerWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n\n return true;\n }\n\n private openValue?: AnimatedInterpolation;\n private onGestureEvent?: (\n event: GestureEvent\n ) => void;\n private accessibilityIsModalView = React.createRef();\n private pointerEventsView = React.createRef();\n private panGestureHandler = React.createRef();\n private drawerShown = false;\n\n static positions = {\n Left: 'left',\n Right: 'right',\n };\n\n private updateAnimatedEvent = (\n props: DrawerLayoutProps,\n state: DrawerLayoutState\n ) => {\n // Event definition is based on\n const { drawerPosition, drawerWidth, drawerType } = props;\n const {\n dragX: dragXValue,\n touchX: touchXValue,\n drawerTranslation,\n containerWidth,\n } = state;\n\n let dragX = dragXValue;\n let touchX = touchXValue;\n\n if (drawerPosition !== 'left') {\n // Most of the code is written in a way to handle left-side drawer. In\n // order to handle right-side drawer the only thing we need to do is to\n // reverse events coming from gesture handler in a way they emulate\n // left-side drawer gestures. E.g. dragX is simply -dragX, and touchX is\n // calulcated by subtracing real touchX from the width of the container\n // (such that when touch happens at the right edge the value is simply 0)\n dragX = Animated.multiply(\n new Animated.Value(-1),\n dragXValue\n ) as Animated.Value; // TODO(TS): (for all \"as\" in this file) make sure we can map this\n touchX = Animated.add(\n new Animated.Value(containerWidth),\n Animated.multiply(new Animated.Value(-1), touchXValue)\n ) as Animated.Value; // TODO(TS): make sure we can map this;\n touchXValue.setValue(containerWidth);\n } else {\n touchXValue.setValue(0);\n }\n\n // While closing the drawer when user starts gesture outside of its area (in greyed\n // out part of the window), we want the drawer to follow only once finger reaches the\n // edge of the drawer.\n // E.g. on the diagram below drawer is illustrate by X signs and the greyed out area by\n // dots. The touch gesture starts at '*' and moves left, touch path is indicated by\n // an arrow pointing left\n // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n //\n // For the above to work properly we define animated value that will keep\n // start position of the gesture. Then we use that value to calculate how\n // much we need to subtract from the dragX. If the gesture started on the\n // greyed out area we take the distance from the edge of the drawer to the\n // start position. Otherwise we don't subtract at all and the drawer be\n // pulled back as soon as you start the pan.\n //\n // This is used only when drawerType is \"front\"\n //\n let translationX = dragX;\n if (drawerType === 'front') {\n const startPositionX = Animated.add(\n touchX,\n Animated.multiply(new Animated.Value(-1), dragX)\n );\n\n const dragOffsetFromOnStartPosition = startPositionX.interpolate({\n inputRange: [drawerWidth! - 1, drawerWidth!, drawerWidth! + 1],\n outputRange: [0, 0, 1],\n });\n translationX = Animated.add(\n dragX,\n dragOffsetFromOnStartPosition\n ) as Animated.Value; // TODO: as above\n }\n\n this.openValue = Animated.add(translationX, drawerTranslation).interpolate({\n inputRange: [0, drawerWidth!],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n });\n\n const gestureOptions: {\n useNativeDriver: boolean;\n // TODO: make sure it is correct\n listener?: (\n ev: NativeSyntheticEvent\n ) => void;\n } = {\n useNativeDriver: props.useNativeAnimations!,\n };\n\n if (this.props.onDrawerSlide) {\n gestureOptions.listener = (ev) => {\n const translationX = Math.floor(Math.abs(ev.nativeEvent.translationX));\n const position = translationX / this.state.containerWidth;\n\n this.props.onDrawerSlide?.(position);\n };\n }\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragXValue, x: touchXValue } }],\n gestureOptions\n );\n };\n\n private handleContainerLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ containerWidth: nativeEvent.layout.width });\n };\n\n private emitStateChanged = (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => {\n this.props.onDrawerStateChanged?.(newState, drawerWillShow);\n };\n\n private openingHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease({ nativeEvent });\n } else if (nativeEvent.state === State.ACTIVE) {\n this.emitStateChanged(DRAGGING, false);\n this.setState({ drawerState: DRAGGING });\n if (this.props.keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n if (this.props.hideStatusBar) {\n StatusBar.setHidden(true, this.props.statusBarAnimation || 'slide');\n }\n }\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (\n this.drawerShown &&\n nativeEvent.oldState === State.ACTIVE &&\n this.props.drawerLockMode !== 'locked-open'\n ) {\n this.closeDrawer();\n }\n };\n\n private handleRelease = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { drawerWidth, drawerPosition, drawerType } = this.props;\n const { containerWidth } = this.state;\n let { translationX: dragX, velocityX, x: touchX } = nativeEvent;\n\n if (drawerPosition !== 'left') {\n // See description in _updateAnimatedEvent about why events are flipped\n // for right-side drawer\n dragX = -dragX;\n touchX = containerWidth - touchX;\n velocityX = -velocityX;\n }\n\n const gestureStartX = touchX - dragX;\n let dragOffsetBasedOnStart = 0;\n\n if (drawerType === 'front') {\n dragOffsetBasedOnStart =\n gestureStartX > drawerWidth! ? gestureStartX - drawerWidth! : 0;\n }\n\n const startOffsetX =\n dragX + dragOffsetBasedOnStart + (this.drawerShown ? drawerWidth! : 0);\n const projOffsetX = startOffsetX + DRAG_TOSS * velocityX;\n\n const shouldOpen = projOffsetX > drawerWidth! / 2;\n\n if (shouldOpen) {\n this.animateDrawer(startOffsetX, drawerWidth!, velocityX);\n } else {\n this.animateDrawer(startOffsetX, 0, velocityX);\n }\n };\n\n private updateShowing = (showing: boolean) => {\n this.drawerShown = showing;\n this.accessibilityIsModalView.current?.setNativeProps({\n accessibilityViewIsModal: showing,\n });\n this.pointerEventsView.current?.setNativeProps({\n pointerEvents: showing ? 'auto' : 'none',\n });\n const { drawerPosition, minSwipeDistance, edgeWidth } = this.props;\n const fromLeft = drawerPosition === 'left';\n // gestureOrientation is 1 if the expected gesture is from left to right and\n // -1 otherwise e.g. when drawer is on the left and is closed we expect left\n // to right gesture, thus orientation will be 1.\n const gestureOrientation =\n (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);\n // When drawer is closed we want the hitSlop to be horizontally shorter than\n // the container size by the value of SLOP. This will make it only activate\n // when gesture happens not further than SLOP away from the edge\n const hitSlop = fromLeft\n ? { left: 0, width: showing ? undefined : edgeWidth }\n : { right: 0, width: showing ? undefined : edgeWidth };\n // @ts-ignore internal API, maybe could be fixed in handler types\n this.panGestureHandler.current?.setNativeProps({\n hitSlop,\n activeOffsetX: gestureOrientation * minSwipeDistance!,\n });\n };\n\n private animateDrawer = (\n fromValue: number | null | undefined,\n toValue: number,\n velocity: number,\n speed?: number\n ) => {\n this.state.dragX.setValue(0);\n this.state.touchX.setValue(\n this.props.drawerPosition === 'left' ? 0 : this.state.containerWidth\n );\n\n if (fromValue != null) {\n let nextFramePosition = fromValue;\n if (this.props.useNativeAnimations) {\n // When using native driver, we predict the next position of the\n // animation because it takes one frame of a roundtrip to pass RELEASE\n // event from native driver to JS before we can start animating. Without\n // it, it is more noticable that the frame is dropped.\n if (fromValue < toValue && velocity > 0) {\n nextFramePosition = Math.min(fromValue + velocity / 60.0, toValue);\n } else if (fromValue > toValue && velocity < 0) {\n nextFramePosition = Math.max(fromValue + velocity / 60.0, toValue);\n }\n }\n this.state.drawerTranslation.setValue(nextFramePosition);\n }\n\n const willShow = toValue !== 0;\n this.updateShowing(willShow);\n this.emitStateChanged(SETTLING, willShow);\n this.setState({ drawerState: SETTLING });\n if (this.props.hideStatusBar) {\n StatusBar.setHidden(willShow, this.props.statusBarAnimation || 'slide');\n }\n Animated.spring(this.state.drawerTranslation, {\n velocity,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n speed: speed ?? undefined,\n }).start(({ finished }) => {\n if (finished) {\n this.emitStateChanged(IDLE, willShow);\n this.setState({ drawerOpened: willShow });\n if (this.state.drawerState !== DRAGGING) {\n // it's possilbe that user started drag while the drawer\n // was settling, don't override state in this case\n this.setState({ drawerState: IDLE });\n }\n if (willShow) {\n this.props.onDrawerOpen?.();\n } else {\n this.props.onDrawerClose?.();\n }\n }\n });\n };\n\n openDrawer = (options: DrawerMovementOption = {}) => {\n this.animateDrawer(\n // TODO: decide if it should be null or undefined is the proper value\n undefined,\n this.props.drawerWidth!,\n options.velocity ? options.velocity : 0,\n options.speed\n );\n\n // We need to force the update, otherwise the overlay is not rerendered and\n // it would not be clickable\n this.forceUpdate();\n };\n\n closeDrawer = (options: DrawerMovementOption = {}) => {\n // TODO: decide if it should be null or undefined is the proper value\n this.animateDrawer(\n undefined,\n 0,\n options.velocity ? options.velocity : 0,\n options.speed\n );\n\n // We need to force the update, otherwise the overlay is not rerendered and\n // it would be still clickable\n this.forceUpdate();\n };\n\n private renderOverlay = () => {\n /* Overlay styles */\n invariant(this.openValue, 'should be set');\n let overlayOpacity;\n\n if (this.state.drawerState !== IDLE) {\n overlayOpacity = this.openValue;\n } else {\n overlayOpacity = this.state.drawerOpened ? 1 : 0;\n }\n\n const dynamicOverlayStyles = {\n opacity: overlayOpacity,\n backgroundColor: this.props.overlayColor,\n };\n\n return (\n \n \n \n );\n };\n\n private renderDrawer = () => {\n const {\n drawerBackgroundColor,\n drawerWidth,\n drawerPosition,\n drawerType,\n drawerContainerStyle,\n contentContainerStyle,\n } = this.props;\n\n const fromLeft = drawerPosition === 'left';\n const drawerSlide = drawerType !== 'back';\n const containerSlide = drawerType !== 'front';\n\n // we rely on row and row-reverse flex directions to position the drawer\n // properly. Apparently for RTL these are flipped which requires us to use\n // the opposite setting for the drawer to appear from left or right\n // according to the drawerPosition prop\n const reverseContentDirection = I18nManager.isRTL ? fromLeft : !fromLeft;\n\n const dynamicDrawerStyles = {\n backgroundColor: drawerBackgroundColor,\n width: drawerWidth,\n };\n const openValue = this.openValue;\n invariant(openValue, 'should be set');\n\n let containerStyles;\n if (containerSlide) {\n const containerTranslateX = openValue.interpolate({\n inputRange: [0, 1],\n outputRange: fromLeft ? [0, drawerWidth!] : [0, -drawerWidth!],\n extrapolate: 'clamp',\n });\n containerStyles = {\n transform: [{ translateX: containerTranslateX }],\n };\n }\n\n let drawerTranslateX: number | AnimatedInterpolation = 0;\n if (drawerSlide) {\n const closedDrawerOffset = fromLeft ? -drawerWidth! : drawerWidth!;\n if (this.state.drawerState !== IDLE) {\n drawerTranslateX = openValue.interpolate({\n inputRange: [0, 1],\n outputRange: [closedDrawerOffset, 0],\n extrapolate: 'clamp',\n });\n } else {\n drawerTranslateX = this.state.drawerOpened ? 0 : closedDrawerOffset;\n }\n }\n const drawerStyles: {\n transform: { translateX: number | AnimatedInterpolation }[];\n flexDirection: 'row-reverse' | 'row';\n } = {\n transform: [{ translateX: drawerTranslateX }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n\n return (\n \n \n {typeof this.props.children === 'function'\n ? this.props.children(this.openValue)\n : this.props.children}\n {this.renderOverlay()}\n \n \n \n {this.props.renderNavigationView(this.openValue as Animated.Value)}\n \n \n \n );\n };\n\n private setPanGestureRef = (ref: PanGestureHandler) => {\n // TODO(TS): make sure it is OK taken from\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-596081842\n (\n this.panGestureHandler as React.MutableRefObject\n ).current = ref;\n this.props.onGestureRef?.(ref);\n };\n\n render() {\n const { drawerPosition, drawerLockMode, edgeWidth, minSwipeDistance } =\n this.props;\n\n const fromLeft = drawerPosition === 'left';\n\n // gestureOrientation is 1 if the expected gesture is from left to right and\n // -1 otherwise e.g. when drawer is on the left and is closed we expect left\n // to right gesture, thus orientation will be 1.\n const gestureOrientation =\n (fromLeft ? 1 : -1) * (this.drawerShown ? -1 : 1);\n\n // When drawer is closed we want the hitSlop to be horizontally shorter than\n // the container size by the value of SLOP. This will make it only activate\n // when gesture happens not further than SLOP away from the edge\n const hitSlop = fromLeft\n ? { left: 0, width: this.drawerShown ? undefined : edgeWidth }\n : { right: 0, width: this.drawerShown ? undefined : edgeWidth };\n\n return (\n \n {this.renderDrawer()}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n drawerContainer: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1001,\n flexDirection: 'row',\n },\n containerInFront: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1002,\n },\n containerOnBack: {\n ...StyleSheet.absoluteFillObject,\n },\n main: {\n flex: 1,\n zIndex: 0,\n overflow: 'hidden',\n },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n },\n});\n","import * as React from 'react';\nimport {\n Animated,\n Platform,\n processColor,\n StyleSheet,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\nimport GestureHandlerButton from './GestureHandlerButton';\nimport { State } from '../State';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from '../handlers/NativeViewGestureHandler';\n\nexport interface RawButtonProps extends NativeViewGestureHandlerProps {\n /**\n * Defines if more than one button could be pressed simultaneously. By default\n * set true.\n */\n exclusive?: boolean;\n // TODO: we should transform props in `createNativeWrapper`\n\n /**\n * Android only.\n *\n * Defines color of native ripple animation used since API level 21.\n */\n rippleColor?: any; // it was present in BaseButtonProps before but is used here in code\n\n /**\n * Android only.\n *\n * Defines radius of native ripple animation used since API level 21.\n */\n rippleRadius?: number | null;\n\n /**\n * Android only.\n *\n * Set this to true if you want the ripple animation to render outside the view bounds.\n */\n borderless?: boolean;\n\n /**\n * Android only.\n *\n * Defines whether the ripple animation should be drawn on the foreground of the view.\n */\n foreground?: boolean;\n\n /**\n * Android only.\n *\n * Set this to true if you don't want the system to play sound when the button is pressed.\n */\n touchSoundDisabled?: boolean;\n}\n\nexport interface BaseButtonProps extends RawButtonProps {\n /**\n * Called when the button gets pressed (analogous to `onPress` in\n * `TouchableHighlight` from RN core).\n */\n onPress?: (pointerInside: boolean) => void;\n\n /**\n * Called when the button gets pressed and is held for `delayLongPress`\n * milliseconds.\n */\n onLongPress?: () => void;\n\n /**\n * Called when button changes from inactive to active and vice versa. It\n * passes active state as a boolean variable as a first parameter for that\n * method.\n */\n onActiveStateChange?: (active: boolean) => void;\n style?: StyleProp;\n testID?: string;\n\n /**\n * Delay, in milliseconds, after which the `onLongPress` callback gets called.\n * Defaults to 600.\n */\n delayLongPress?: number;\n}\n\nexport interface RectButtonProps extends BaseButtonProps {\n /**\n * Background color that will be dimmed when button is in active state.\n */\n underlayColor?: string;\n\n /**\n * iOS only.\n *\n * Opacity applied to the underlay when button is in active state.\n */\n activeOpacity?: number;\n}\n\nexport interface BorderlessButtonProps extends BaseButtonProps {\n /**\n * iOS only.\n *\n * Opacity applied to the button when it is in an active state.\n */\n activeOpacity?: number;\n}\n\nexport const RawButton = createNativeWrapper(GestureHandlerButton, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: false,\n});\n\nexport class BaseButton extends React.Component {\n static defaultProps = {\n delayLongPress: 600,\n };\n\n private lastActive: boolean;\n private longPressTimeout: ReturnType | undefined;\n private longPressDetected: boolean;\n\n constructor(props: BaseButtonProps) {\n super(props);\n this.lastActive = false;\n this.longPressDetected = false;\n }\n\n private handleEvent = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { state, oldState, pointerInside } = nativeEvent;\n const active = pointerInside && state === State.ACTIVE;\n\n if (active !== this.lastActive && this.props.onActiveStateChange) {\n this.props.onActiveStateChange(active);\n }\n\n if (\n !this.longPressDetected &&\n oldState === State.ACTIVE &&\n state !== State.CANCELLED &&\n this.lastActive &&\n this.props.onPress\n ) {\n this.props.onPress(active);\n }\n\n if (\n !this.lastActive &&\n // NativeViewGestureHandler sends different events based on platform\n state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&\n pointerInside\n ) {\n this.longPressDetected = false;\n if (this.props.onLongPress) {\n this.longPressTimeout = setTimeout(\n this.onLongPress,\n this.props.delayLongPress\n );\n }\n } else if (\n // cancel longpress timeout if it's set and the finger moved out of the view\n state === State.ACTIVE &&\n !pointerInside &&\n this.longPressTimeout !== undefined\n ) {\n clearTimeout(this.longPressTimeout);\n this.longPressTimeout = undefined;\n } else if (\n // cancel longpress timeout if it's set and the gesture has finished\n this.longPressTimeout !== undefined &&\n (state === State.END ||\n state === State.CANCELLED ||\n state === State.FAILED)\n ) {\n clearTimeout(this.longPressTimeout);\n this.longPressTimeout = undefined;\n }\n\n this.lastActive = active;\n };\n\n private onLongPress = () => {\n this.longPressDetected = true;\n this.props.onLongPress?.();\n };\n\n // Normally, the parent would execute it's handler first, then forward the\n // event to listeners. However, here our handler is virtually only forwarding\n // events to listeners, so we reverse the order to keep the proper order of\n // the callbacks (from \"raw\" ones to \"processed\").\n private onHandlerStateChange = (\n e: HandlerStateChangeEvent\n ) => {\n this.props.onHandlerStateChange?.(e);\n this.handleEvent(e);\n };\n\n private onGestureEvent = (\n e: GestureEvent\n ) => {\n this.props.onGestureEvent?.(e);\n this.handleEvent(\n e as HandlerStateChangeEvent\n ); // TODO: maybe it is not correct\n };\n\n render() {\n const { rippleColor, ...rest } = this.props;\n\n return (\n \n );\n }\n}\n\nconst AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);\n\nconst btnStyles = StyleSheet.create({\n underlay: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n top: 0,\n },\n});\n\nexport class RectButton extends React.Component {\n static defaultProps = {\n activeOpacity: 0.105,\n underlayColor: 'black',\n };\n\n private opacity: Animated.Value;\n\n constructor(props: RectButtonProps) {\n super(props);\n this.opacity = new Animated.Value(0);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 0);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n const resolvedStyle = StyleSheet.flatten(style ?? {});\n\n return (\n \n \n {children}\n \n );\n }\n}\n\nexport class BorderlessButton extends React.Component {\n static defaultProps = {\n activeOpacity: 0.3,\n borderless: true,\n };\n\n private opacity: Animated.Value;\n\n constructor(props: BorderlessButtonProps) {\n super(props);\n this.opacity = new Animated.Value(1);\n }\n\n private onActiveStateChange = (active: boolean) => {\n if (Platform.OS !== 'android') {\n this.opacity.setValue(active ? this.props.activeOpacity! : 1);\n }\n\n this.props.onActiveStateChange?.(active);\n };\n\n render() {\n const { children, style, ...rest } = this.props;\n\n return (\n \n {children}\n \n );\n }\n}\n\nexport { default as PureNativeButton } from './GestureHandlerButton';\n","import * as React from 'react';\nimport {\n FlatList as RNFlatList,\n Switch as RNSwitch,\n TextInput as RNTextInput,\n ScrollView as RNScrollView,\n FlatListProps,\n View,\n} from 'react-native';\n\nimport createNativeWrapper from '../handlers/createNativeWrapper';\n\nexport const ScrollView = createNativeWrapper(RNScrollView, {\n disallowInterruption: false,\n});\n\nexport const Switch = createNativeWrapper(RNSwitch, {\n shouldCancelWhenOutside: false,\n shouldActivateOnStart: true,\n disallowInterruption: true,\n});\nexport const TextInput = createNativeWrapper(RNTextInput);\nexport const DrawerLayoutAndroid = () => {\n console.warn('DrawerLayoutAndroid is not supported on web!');\n return ;\n};\n\n// RefreshControl is implemented as a functional component, rendering a View\n// NativeViewGestureHandler needs to set a ref on its child, which cannot be done\n// on functional components\nexport const RefreshControl = createNativeWrapper(View);\n\nexport const FlatList = React.forwardRef(\n (props: FlatListProps, ref: any) => (\n }\n />\n )\n);\n","import * as React from 'react';\nimport { View } from 'react-native';\n\nexport default React.forwardRef((props, ref) => (\n \n));\n","import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport { View, ViewProps } from 'react-native';\nimport GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';\n\nexport interface GestureHandlerRootViewProps\n extends PropsWithChildren {}\n\nexport default function GestureHandlerRootView(\n props: GestureHandlerRootViewProps\n) {\n return (\n \n \n \n );\n}\n","// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n PanGestureHandlerProps,\n} from '../handlers/PanGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\n// Animated.AnimatedInterpolation has been converted to a generic type\n// in @types/react-native 0.70. This way we can maintain compatibility\n// with all versions of @types/react-native\ntype AnimatedInterpolation = ReturnType;\n\nexport interface SwipeableProps\n extends Pick {\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when left action panel gets open.\n */\n onSwipeableLeftOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when right action panel gets open.\n */\n onSwipeableRightOpen?: () => void;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (direction: 'left' | 'right', swipeable: Swipeable) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: 'left' | 'right',\n swipeable: Swipeable\n ) => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when left action panel starts animating on open.\n */\n onSwipeableLeftWillOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when right action panel starts animating on open.\n */\n onSwipeableRightWillOpen?: () => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (direction: 'left' | 'right') => void;\n\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n\n useNativeAnimations?: boolean;\n\n animationOptions?: Record;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp;\n}\n\ntype SwipeableState = {\n dragX: Animated.Value;\n rowTranslation: Animated.Value;\n rowState: number;\n leftWidth?: number;\n rightOffset?: number;\n rowWidth?: number;\n};\n\nexport default class Swipeable extends Component<\n SwipeableProps,\n SwipeableState\n> {\n static defaultProps = {\n friction: 1,\n overshootFriction: 1,\n useNativeAnimations: true,\n };\n\n constructor(props: SwipeableProps) {\n super(props);\n const dragX = new Animated.Value(0);\n this.state = {\n dragX,\n rowTranslation: new Animated.Value(0),\n rowState: 0,\n leftWidth: undefined,\n rightOffset: undefined,\n rowWidth: undefined,\n };\n this.updateAnimatedEvent(props, this.state);\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragX } }],\n { useNativeDriver: props.useNativeAnimations! }\n );\n }\n\n shouldComponentUpdate(props: SwipeableProps, state: SwipeableState) {\n if (\n this.props.friction !== props.friction ||\n this.props.overshootLeft !== props.overshootLeft ||\n this.props.overshootRight !== props.overshootRight ||\n this.props.overshootFriction !== props.overshootFriction ||\n this.state.leftWidth !== state.leftWidth ||\n this.state.rightOffset !== state.rightOffset ||\n this.state.rowWidth !== state.rowWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n\n return true;\n }\n\n private onGestureEvent?: (\n event: GestureEvent\n ) => void;\n private transX?: AnimatedInterpolation;\n private showLeftAction?: AnimatedInterpolation | Animated.Value;\n private leftActionTranslate?: AnimatedInterpolation;\n private showRightAction?: AnimatedInterpolation | Animated.Value;\n private rightActionTranslate?: AnimatedInterpolation;\n\n private updateAnimatedEvent = (\n props: SwipeableProps,\n state: SwipeableState\n ) => {\n const { friction, overshootFriction } = props;\n const { dragX, rowTranslation, leftWidth = 0, rowWidth = 0 } = state;\n const { rightOffset = rowWidth } = state;\n const rightWidth = Math.max(0, rowWidth - rightOffset);\n\n const { overshootLeft = leftWidth > 0, overshootRight = rightWidth > 0 } =\n props;\n\n const transX = Animated.add(\n rowTranslation,\n dragX.interpolate({\n inputRange: [0, friction!],\n outputRange: [0, 1],\n })\n ).interpolate({\n inputRange: [-rightWidth - 1, -rightWidth, leftWidth, leftWidth + 1],\n outputRange: [\n -rightWidth - (overshootRight ? 1 / overshootFriction! : 0),\n -rightWidth,\n leftWidth,\n leftWidth + (overshootLeft ? 1 / overshootFriction! : 0),\n ],\n });\n this.transX = transX;\n this.showLeftAction =\n leftWidth > 0\n ? transX.interpolate({\n inputRange: [-1, 0, leftWidth],\n outputRange: [0, 0, 1],\n })\n : new Animated.Value(0);\n this.leftActionTranslate = this.showLeftAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n this.showRightAction =\n rightWidth > 0\n ? transX.interpolate({\n inputRange: [-rightWidth, 0, 1],\n outputRange: [1, 0, 0],\n })\n : new Animated.Value(0);\n this.rightActionTranslate = this.showRightAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.close();\n }\n };\n\n private onHandlerStateChange = (\n ev: HandlerStateChangeEvent\n ) => {\n if (ev.nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease(ev);\n }\n };\n\n private handleRelease = (\n ev: HandlerStateChangeEvent\n ) => {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n const {\n friction,\n leftThreshold = leftWidth / 2,\n rightThreshold = rightWidth / 2,\n } = this.props;\n\n const startOffsetX = this.currentOffset() + dragX / friction!;\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n let toValue = 0;\n if (rowState === 0) {\n if (translationX > leftThreshold) {\n toValue = leftWidth;\n } else if (translationX < -rightThreshold) {\n toValue = -rightWidth;\n }\n } else if (rowState === 1) {\n // swiped to left\n if (translationX > -leftThreshold) {\n toValue = leftWidth;\n }\n } else {\n // swiped to right\n if (translationX < rightThreshold) {\n toValue = -rightWidth;\n }\n }\n\n this.animateRow(startOffsetX, toValue, velocityX / friction!);\n };\n\n private animateRow = (\n fromValue: number,\n toValue: number,\n velocityX?:\n | number\n | {\n x: number;\n y: number;\n }\n ) => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(fromValue);\n\n this.setState({ rowState: Math.sign(toValue) });\n Animated.spring(rowTranslation, {\n restSpeedThreshold: 1.7,\n restDisplacementThreshold: 0.4,\n velocity: velocityX,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n ...this.props.animationOptions,\n }).start(({ finished }) => {\n if (finished) {\n if (toValue > 0) {\n this.props.onSwipeableLeftOpen?.();\n this.props.onSwipeableOpen?.('left', this);\n } else if (toValue < 0) {\n this.props.onSwipeableRightOpen?.();\n this.props.onSwipeableOpen?.('right', this);\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableClose?.(closingDirection, this);\n }\n }\n });\n if (toValue > 0) {\n this.props.onSwipeableLeftWillOpen?.();\n this.props.onSwipeableWillOpen?.('left');\n } else if (toValue < 0) {\n this.props.onSwipeableRightWillOpen?.();\n this.props.onSwipeableWillOpen?.('right');\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableWillClose?.(closingDirection);\n }\n };\n\n private onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ rowWidth: nativeEvent.layout.width });\n };\n\n private currentOffset = () => {\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n if (rowState === 1) {\n return leftWidth;\n } else if (rowState === -1) {\n return -rightWidth;\n }\n return 0;\n };\n\n close = () => {\n this.animateRow(this.currentOffset(), 0);\n };\n\n openLeft = () => {\n const { leftWidth = 0 } = this.state;\n this.animateRow(this.currentOffset(), leftWidth);\n };\n\n openRight = () => {\n const { rowWidth = 0 } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n this.animateRow(this.currentOffset(), -rightWidth);\n };\n\n reset = () => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(0);\n this.setState({ rowState: 0 });\n };\n\n render() {\n const { rowState } = this.state;\n const {\n children,\n renderLeftActions,\n renderRightActions,\n dragOffsetFromLeftEdge = 10,\n dragOffsetFromRightEdge = 10,\n } = this.props;\n\n const left = renderLeftActions && (\n \n {renderLeftActions(this.showLeftAction!, this.transX!, this)}\n \n this.setState({ leftWidth: nativeEvent.layout.x })\n }\n />\n \n );\n\n const right = renderRightActions && (\n \n {renderRightActions(this.showRightAction!, this.transX!, this)}\n \n this.setState({ rightOffset: nativeEvent.layout.x })\n }\n />\n \n );\n\n return (\n \n \n {left}\n {right}\n \n \n {children}\n \n \n \n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n","import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC<\n P extends Record\n>(\n Component: React.ComponentType

,\n containerStyles?: StyleProp\n): React.ComponentType

{\n function Wrapper(props: P) {\n return (\n \n \n \n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n // @ts-ignore - hoistNonReactStatics uses old version of @types/react\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n","import * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n ViewStyle,\n TouchableWithoutFeedbackProps,\n} from 'react-native';\n\nimport { State } from '../../State';\nimport { BaseButton } from '../GestureButtons';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../../handlers/gestureHandlerCommon';\nimport { NativeViewGestureHandlerPayload } from '../../handlers/NativeViewGestureHandler';\nimport { TouchableNativeFeedbackExtraProps } from './TouchableNativeFeedback.android';\n\n/**\n * Each touchable is a states' machine which preforms transitions.\n * On very beginning (and on the very end or recognition) touchable is\n * UNDETERMINED. Then it moves to BEGAN. If touchable recognizes that finger\n * travel outside it transits to special MOVED_OUTSIDE state. Gesture recognition\n * finishes in UNDETERMINED state.\n */\nexport const TOUCHABLE_STATE = {\n UNDETERMINED: 0,\n BEGAN: 1,\n MOVED_OUTSIDE: 2,\n} as const;\n\ntype TouchableState = typeof TOUCHABLE_STATE[keyof typeof TOUCHABLE_STATE];\n\nexport interface GenericTouchableProps extends TouchableWithoutFeedbackProps {\n // Decided to drop not used fields from RN's implementation.\n // e.g. onBlur and onFocus as well as deprecated props. - TODO: this comment may be unuseful in this moment\n\n // TODO: in RN these events get native event parameter, which prolly could be used in our implementation too\n onPress?: () => void;\n onPressIn?: () => void;\n onPressOut?: () => void;\n onLongPress?: () => void;\n\n nativeID?: string;\n shouldActivateOnStart?: boolean;\n disallowInterruption?: boolean;\n\n containerStyle?: StyleProp;\n}\n\ninterface InternalProps {\n extraButtonProps: TouchableNativeFeedbackExtraProps;\n onStateChange?: (oldState: TouchableState, newState: TouchableState) => void;\n}\n\n// TODO: maybe can be better\n// TODO: all clearTimeout have ! added, maybe they shouldn't ?\ntype Timeout = ReturnType | null | undefined;\n\n/**\n * GenericTouchable is not intented to be used as it is.\n * Should be treated as a source for the rest of touchables\n */\n\nexport default class GenericTouchable extends Component<\n GenericTouchableProps & InternalProps\n> {\n static defaultProps = {\n delayLongPress: 600,\n extraButtonProps: {\n rippleColor: 'transparent',\n exclusive: true,\n },\n };\n\n // timeout handlers\n pressInTimeout: Timeout;\n pressOutTimeout: Timeout;\n longPressTimeout: Timeout;\n\n // This flag is required since recognition of longPress implies not-invoking onPress\n longPressDetected = false;\n\n pointerInside = true;\n\n // State of touchable\n STATE: TouchableState = TOUCHABLE_STATE.UNDETERMINED;\n\n // handlePressIn in called on first touch on traveling inside component.\n // Handles state transition with delay.\n handlePressIn() {\n if (this.props.delayPressIn) {\n this.pressInTimeout = setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n this.pressInTimeout = null;\n }, this.props.delayPressIn);\n } else {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n if (this.props.onLongPress) {\n const time =\n (this.props.delayPressIn || 0) + (this.props.delayLongPress || 0);\n this.longPressTimeout = setTimeout(this.onLongPressDetected, time);\n }\n }\n // handleMoveOutside in called on traveling outside component.\n // Handles state transition with delay.\n handleMoveOutside() {\n if (this.props.delayPressOut) {\n this.pressOutTimeout =\n this.pressOutTimeout ||\n setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n }\n }\n\n // handleGoToUndetermined transits to UNDETERMINED state with proper delay\n handleGoToUndetermined() {\n clearTimeout(this.pressOutTimeout!); // TODO: maybe it can be undefined\n if (this.props.delayPressOut) {\n this.pressOutTimeout = setTimeout(() => {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n }\n }\n\n componentDidMount() {\n this.reset();\n }\n // reset timeout to prevent memory leaks.\n reset() {\n this.longPressDetected = false;\n this.pointerInside = true;\n clearTimeout(this.pressInTimeout!);\n clearTimeout(this.pressOutTimeout!);\n clearTimeout(this.longPressTimeout!);\n this.pressOutTimeout = null;\n this.longPressTimeout = null;\n this.pressInTimeout = null;\n }\n\n // All states' transitions are defined here.\n moveToState(newState: TouchableState) {\n if (newState === this.STATE) {\n // Ignore dummy transitions\n return;\n }\n if (newState === TOUCHABLE_STATE.BEGAN) {\n // First touch and moving inside\n this.props.onPressIn?.();\n } else if (newState === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // Moving outside\n this.props.onPressOut?.();\n } else if (newState === TOUCHABLE_STATE.UNDETERMINED) {\n // Need to reset each time on transition to UNDETERMINED\n this.reset();\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n // ... and if it happens inside button.\n this.props.onPressOut?.();\n }\n }\n // Finally call lister (used by subclasses)\n this.props.onStateChange?.(this.STATE, newState);\n // ... and make transition.\n this.STATE = newState;\n }\n\n onGestureEvent = ({\n nativeEvent: { pointerInside },\n }: GestureEvent) => {\n if (this.pointerInside !== pointerInside) {\n if (pointerInside) {\n this.onMoveIn();\n } else {\n this.onMoveOut();\n }\n }\n this.pointerInside = pointerInside;\n };\n\n onHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent) => {\n const { state } = nativeEvent;\n if (state === State.CANCELLED || state === State.FAILED) {\n // Need to handle case with external cancellation (e.g. by ScrollView)\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n } else if (\n // This platform check is an implication of slightly different behavior of handlers on different platform.\n // And Android \"Active\" state is achieving on first move of a finger, not on press in.\n // On iOS event on \"Began\" is not delivered.\n state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&\n this.STATE === TOUCHABLE_STATE.UNDETERMINED\n ) {\n // Moving inside requires\n this.handlePressIn();\n } else if (state === State.END) {\n const shouldCallOnPress =\n !this.longPressDetected &&\n this.STATE !== TOUCHABLE_STATE.MOVED_OUTSIDE &&\n this.pressOutTimeout === null;\n this.handleGoToUndetermined();\n if (shouldCallOnPress) {\n // Calls only inside component whether no long press was called previously\n this.props.onPress?.();\n }\n }\n };\n\n onLongPressDetected = () => {\n this.longPressDetected = true;\n // checked for in the caller of `onLongPressDetected`, but better to check twice\n this.props.onLongPress?.();\n };\n\n componentWillUnmount() {\n // to prevent memory leaks\n this.reset();\n }\n\n onMoveIn() {\n if (this.STATE === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // This call is not throttled with delays (like in RN's implementation).\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n }\n\n onMoveOut() {\n // long press should no longer be detected\n clearTimeout(this.longPressTimeout!);\n this.longPressTimeout = null;\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n this.handleMoveOutside();\n }\n }\n\n render() {\n const hitSlop =\n (typeof this.props.hitSlop === 'number'\n ? {\n top: this.props.hitSlop,\n left: this.props.hitSlop,\n bottom: this.props.hitSlop,\n right: this.props.hitSlop,\n }\n : this.props.hitSlop) ?? undefined;\n\n const coreProps = {\n accessible: this.props.accessible !== false,\n accessibilityLabel: this.props.accessibilityLabel,\n accessibilityHint: this.props.accessibilityHint,\n accessibilityRole: this.props.accessibilityRole,\n // TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`,\n // would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016\n accessibilityState: this.props.accessibilityState,\n accessibilityActions: this.props.accessibilityActions,\n onAccessibilityAction: this.props.onAccessibilityAction,\n nativeID: this.props.nativeID,\n onLayout: this.props.onLayout,\n hitSlop: hitSlop as\n | Animated.WithAnimatedObject\n | undefined,\n };\n\n return (\n \n \n {this.props.children}\n \n \n );\n }\n}\n","import * as React from 'react';\nimport { Component } from 'react';\nimport GenericTouchable, {\n GenericTouchableProps,\n TOUCHABLE_STATE,\n} from './GenericTouchable';\nimport {\n StyleSheet,\n View,\n TouchableHighlightProps,\n ColorValue,\n ViewProps,\n} from 'react-native';\n\ninterface State {\n extraChildStyle: null | {\n opacity?: number;\n };\n extraUnderlayStyle: null | {\n backgroundColor?: ColorValue;\n };\n}\n\n/**\n * TouchableHighlight follows RN's implementation\n */\nexport default class TouchableHighlight extends Component<\n TouchableHighlightProps & GenericTouchableProps,\n State\n> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n activeOpacity: 0.85,\n delayPressOut: 100,\n underlayColor: 'black',\n };\n\n constructor(props: TouchableHighlightProps & GenericTouchableProps) {\n super(props);\n this.state = {\n extraChildStyle: null,\n extraUnderlayStyle: null,\n };\n }\n\n // Copied from RN\n showUnderlay = () => {\n if (!this.hasPressHandler()) {\n return;\n }\n this.setState({\n extraChildStyle: {\n opacity: this.props.activeOpacity,\n },\n extraUnderlayStyle: {\n backgroundColor: this.props.underlayColor,\n },\n });\n this.props.onShowUnderlay?.();\n };\n\n hasPressHandler = () =>\n this.props.onPress ||\n this.props.onPressIn ||\n this.props.onPressOut ||\n this.props.onLongPress;\n\n hideUnderlay = () => {\n this.setState({\n extraChildStyle: null,\n extraUnderlayStyle: null,\n });\n this.props.onHideUnderlay?.();\n };\n\n renderChildren() {\n if (!this.props.children) {\n return ;\n }\n\n const child = React.Children.only(\n this.props.children\n ) as React.ReactElement; // TODO: not sure if OK but fixes error\n return React.cloneElement(child, {\n style: StyleSheet.compose(child.props.style, this.state.extraChildStyle),\n });\n }\n\n onStateChange = (_from: number, to: number) => {\n if (to === TOUCHABLE_STATE.BEGAN) {\n this.showUnderlay();\n } else if (\n to === TOUCHABLE_STATE.UNDETERMINED ||\n to === TOUCHABLE_STATE.MOVED_OUTSIDE\n ) {\n this.hideUnderlay();\n }\n };\n\n render() {\n const { style = {}, ...rest } = this.props;\n const { extraUnderlayStyle } = this.state;\n return (\n \n {this.renderChildren()}\n \n );\n }\n}\n","import { TouchableNativeFeedback } from 'react-native';\n\nexport default TouchableNativeFeedback;\n","import {\n Animated,\n Easing,\n StyleSheet,\n View,\n TouchableOpacityProps,\n} from 'react-native';\nimport GenericTouchable, {\n TOUCHABLE_STATE,\n GenericTouchableProps,\n} from './GenericTouchable';\nimport * as React from 'react';\nimport { Component } from 'react';\n\ninterface GHTouchableOpacityProps {\n useNativeAnimations?: boolean;\n}\n\n/**\n * TouchableOpacity bases on timing animation which has been used in RN's core\n */\nexport default class TouchableOpacity extends Component<\n TouchableOpacityProps & GenericTouchableProps & GHTouchableOpacityProps\n> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n activeOpacity: 0.2,\n };\n\n // opacity is 1 one by default but could be overwritten\n getChildStyleOpacityWithDefault = () => {\n const childStyle = StyleSheet.flatten(this.props.style) || {};\n return childStyle.opacity == null\n ? 1\n : (childStyle.opacity.valueOf() as number);\n };\n\n opacity = new Animated.Value(this.getChildStyleOpacityWithDefault());\n\n setOpacityTo = (value: number, duration: number) => {\n Animated.timing(this.opacity, {\n toValue: value,\n duration: duration,\n easing: Easing.inOut(Easing.quad),\n useNativeDriver: this.props.useNativeAnimations ?? true,\n }).start();\n };\n\n onStateChange = (_from: number, to: number) => {\n if (to === TOUCHABLE_STATE.BEGAN) {\n this.setOpacityTo(this.props.activeOpacity!, 0);\n } else if (\n to === TOUCHABLE_STATE.UNDETERMINED ||\n to === TOUCHABLE_STATE.MOVED_OUTSIDE\n ) {\n this.setOpacityTo(this.getChildStyleOpacityWithDefault(), 150);\n }\n };\n\n render() {\n const { style = {}, ...rest } = this.props;\n return (\n \n {this.props.children ? this.props.children : }\n \n );\n }\n}\n","import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nconst TouchableWithoutFeedback = React.forwardRef<\n GenericTouchable,\n PropsWithChildren\n>((props, ref) => );\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n","export { default as TouchableNativeFeedback } from './TouchableNativeFeedback';\nexport { default as TouchableWithoutFeedback } from './TouchableWithoutFeedback';\nexport { default as TouchableOpacity } from './TouchableOpacity';\nexport { default as TouchableHighlight } from './TouchableHighlight';\n","// Used by GestureDetector (unsupported on web at the moment) to check whether the\n// attached view may get flattened on Fabric. Original implementation causes errors\n// on web due to the static resolution of `require` statements by webpack breaking\n// the conditional importing.\nexport function getShadowNodeFromRef(_ref: any) {\n return null;\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const flingGestureHandlerProps = [\n 'numberOfPointers',\n 'direction',\n] as const;\n\nexport type FlingGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\nexport interface FlingGestureConfig {\n /**\n * Expressed allowed direction of movement. It's possible to pass one or many\n * directions in one parameter:\n *\n * ```js\n * direction={Directions.RIGHT | Directions.LEFT}\n * ```\n *\n * or\n *\n * ```js\n * direction={Directions.DOWN}\n * ```\n */\n direction?: number;\n\n /**\n * Determine exact number of points required to handle the fling gesture.\n */\n numberOfPointers?: number;\n}\n\nexport interface FlingGestureHandlerProps\n extends BaseGestureHandlerProps,\n FlingGestureConfig {}\n\nexport const flingHandlerName = 'FlingGestureHandler';\n\nexport type FlingGestureHandler = typeof FlingGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const FlingGestureHandler = createHandler<\n FlingGestureHandlerProps,\n FlingGestureHandlerEventPayload\n>({\n name: flingHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...flingGestureHandlerProps,\n ] as const,\n config: {},\n});\n","import React, { PropsWithChildren } from 'react';\nimport { tagMessage } from '../utils';\nimport PlatformConstants from '../PlatformConstants';\nimport createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const forceTouchGestureHandlerProps = [\n 'minForce',\n 'maxForce',\n 'feedbackOnActivation',\n] as const;\n\n// implicit `children` prop has been removed in @types/react^18.0.0\nclass ForceTouchFallback extends React.Component> {\n static forceTouchAvailable = false;\n componentDidMount() {\n console.warn(\n tagMessage(\n 'ForceTouchGestureHandler is not available on this platform. Please use ForceTouchGestureHandler.forceTouchAvailable to conditionally render other components that would provide a fallback behavior specific to your usecase'\n )\n );\n }\n render() {\n return this.props.children;\n }\n}\n\nexport type ForceTouchGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n\n /**\n * The pressure of a touch.\n */\n force: number;\n};\n\nexport interface ForceTouchGestureConfig {\n /**\n *\n * A minimal pressure that is required before handler can activate. Should be a\n * value from range `[0.0, 1.0]`. Default is `0.2`.\n */\n minForce?: number;\n\n /**\n * A maximal pressure that could be applied for handler. If the pressure is\n * greater, handler fails. Should be a value from range `[0.0, 1.0]`.\n */\n maxForce?: number;\n\n /**\n * Boolean value defining if haptic feedback has to be performed on\n * activation.\n */\n feedbackOnActivation?: boolean;\n}\n\nexport interface ForceTouchGestureHandlerProps\n extends BaseGestureHandlerProps,\n ForceTouchGestureConfig {}\n\nexport type ForceTouchGestureHandler = typeof ForceTouchGestureHandler & {\n forceTouchAvailable: boolean;\n};\n\nexport const forceTouchHandlerName = 'ForceTouchGestureHandler';\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const ForceTouchGestureHandler = PlatformConstants?.forceTouchAvailable\n ? createHandler<\n ForceTouchGestureHandlerProps,\n ForceTouchGestureHandlerEventPayload\n >({\n name: forceTouchHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ] as const,\n config: {},\n })\n : ForceTouchFallback;\n\n(ForceTouchGestureHandler as ForceTouchGestureHandler).forceTouchAvailable =\n PlatformConstants?.forceTouchAvailable || false;\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const longPressGestureHandlerProps = [\n 'minDurationMs',\n 'maxDist',\n] as const;\n\nexport type LongPressGestureHandlerEventPayload = {\n /**\n * X coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the view attached to the handler.\n */\n x: number;\n\n /**\n * Y coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the view attached to the handler.\n */\n y: number;\n\n /**\n * X coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the window. It is recommended to use `absoluteX` instead of\n * `x` in cases when the view attached to the handler can be transformed as an\n * effect of the gesture.\n */\n absoluteX: number;\n\n /**\n * Y coordinate, expressed in points, of the current position of the pointer\n * (finger or a leading pointer when there are multiple fingers placed)\n * relative to the window. It is recommended to use `absoluteY` instead of\n * `y` in cases when the view attached to the handler can be transformed as an\n * effect of the gesture.\n */\n absoluteY: number;\n\n /**\n * Duration of the long press (time since the start of the event), expressed\n * in milliseconds.\n */\n duration: number;\n};\n\nexport interface LongPressGestureConfig {\n /**\n * Minimum time, expressed in milliseconds, that a finger must remain pressed on\n * the corresponding view. The default value is 500.\n */\n minDurationMs?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel during a long press gesture. If the finger travels\n * further than the defined distance and the handler hasn't yet activated, it\n * will fail to recognize the gesture. The default value is 10.\n */\n maxDist?: number;\n}\n\nexport interface LongPressGestureHandlerProps\n extends BaseGestureHandlerProps,\n LongPressGestureConfig {}\n\nexport const longPressHandlerName = 'LongPressGestureHandler';\n\nexport type LongPressGestureHandler = typeof LongPressGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const LongPressGestureHandler = createHandler<\n LongPressGestureHandlerProps,\n LongPressGestureHandlerEventPayload\n>({\n name: longPressHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...longPressGestureHandlerProps,\n ] as const,\n config: {\n shouldCancelWhenOutside: true,\n },\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const nativeViewGestureHandlerProps = [\n 'shouldActivateOnStart',\n 'disallowInterruption',\n] as const;\n\nexport interface NativeViewGestureConfig {\n /**\n * Android only.\n *\n * Determines whether the handler should check for an existing touch event on\n * instantiation.\n */\n shouldActivateOnStart?: boolean;\n\n /**\n * When `true`, cancels all other gesture handlers when this\n * `NativeViewGestureHandler` receives an `ACTIVE` state event.\n */\n disallowInterruption?: boolean;\n}\n\nexport interface NativeViewGestureHandlerProps\n extends BaseGestureHandlerProps,\n NativeViewGestureConfig {}\n\nexport type NativeViewGestureHandlerPayload = {\n /**\n * True if gesture was performed inside of containing view, false otherwise.\n */\n pointerInside: boolean;\n};\n\nexport const nativeViewProps = [\n ...baseGestureHandlerProps,\n ...nativeViewGestureHandlerProps,\n] as const;\n\nexport const nativeViewHandlerName = 'NativeViewGestureHandler';\n\nexport type NativeViewGestureHandler = typeof NativeViewGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const NativeViewGestureHandler = createHandler<\n NativeViewGestureHandlerProps,\n NativeViewGestureHandlerPayload\n>({\n name: nativeViewHandlerName,\n allowedProps: nativeViewProps,\n config: {},\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const panGestureHandlerProps = [\n 'activeOffsetY',\n 'activeOffsetX',\n 'failOffsetY',\n 'failOffsetX',\n 'minDist',\n 'minVelocity',\n 'minVelocityX',\n 'minVelocityY',\n 'minPointers',\n 'maxPointers',\n 'avgTouches',\n 'enableTrackpadTwoFingerGesture',\n 'activateAfterLongPress',\n] as const;\n\nexport const panGestureHandlerCustomNativeProps = [\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'failOffsetYStart',\n 'failOffsetYEnd',\n 'failOffsetXStart',\n 'failOffsetXEnd',\n] as const;\n\nexport type PanGestureHandlerEventPayload = {\n /**\n * X coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the view\n * attached to the handler. Expressed in point units.\n */\n x: number;\n\n /**\n * Y coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the view\n * attached to the handler. Expressed in point units.\n */\n y: number;\n\n /**\n * X coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the window.\n * The value is expressed in point units. It is recommended to use it instead\n * of `x` in cases when the original view can be transformed as an effect of\n * the gesture.\n */\n absoluteX: number;\n\n /**\n * Y coordinate of the current position of the pointer (finger or a leading\n * pointer when there are multiple fingers placed) relative to the window.\n * The value is expressed in point units. It is recommended to use it instead\n * of `y` in cases when the original view can be transformed as an\n * effect of the gesture.\n */\n absoluteY: number;\n\n /**\n * Translation of the pan gesture along X axis accumulated over the time of\n * the gesture. The value is expressed in the point units.\n */\n translationX: number;\n\n /**\n * Translation of the pan gesture along Y axis accumulated over the time of\n * the gesture. The value is expressed in the point units.\n */\n translationY: number;\n\n /**\n * Velocity of the pan gesture along the X axis in the current moment. The\n * value is expressed in point units per second.\n */\n velocityX: number;\n\n /**\n * Velocity of the pan gesture along the Y axis in the current moment. The\n * value is expressed in point units per second.\n */\n velocityY: number;\n};\n\ninterface CommonPanProperties {\n /**\n * Minimum distance the finger (or multiple finger) need to travel before the\n * handler activates. Expressed in points.\n */\n minDist?: number;\n\n /**\n * Android only.\n */\n avgTouches?: boolean;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * enableTrackpadTwoFingerGesture swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * A number of fingers that is required to be placed before handler can\n * activate. Should be a higher or equal to 0 integer.\n */\n minPointers?: number;\n\n /**\n * When the given number of fingers is placed on the screen and handler hasn't\n * yet activated it will fail recognizing the gesture. Should be a higher or\n * equal to 0 integer.\n */\n maxPointers?: number;\n\n minVelocity?: number;\n minVelocityX?: number;\n minVelocityY?: number;\n activateAfterLongPress?: number;\n}\n\nexport interface PanGestureConfig extends CommonPanProperties {\n activeOffsetYStart?: number;\n activeOffsetYEnd?: number;\n activeOffsetXStart?: number;\n activeOffsetXEnd?: number;\n failOffsetYStart?: number;\n failOffsetYEnd?: number;\n failOffsetXStart?: number;\n failOffsetXEnd?: number;\n}\n\nexport interface PanGestureHandlerProps\n extends BaseGestureHandlerProps,\n CommonPanProperties {\n /**\n * Range along X axis (in points) where fingers travels without activation of\n * handler. Moving outside of this range implies activation of handler. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n activeOffsetY?: number | number[];\n\n /**\n * Range along X axis (in points) where fingers travels without activation of\n * handler. Moving outside of this range implies activation of handler. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n activeOffsetX?: number | number[];\n\n /**\n * When the finger moves outside this range (in points) along Y axis and\n * handler hasn't yet activated it will fail recognizing the gesture. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n failOffsetY?: number | number[];\n\n /**\n * When the finger moves outside this range (in points) along X axis and\n * handler hasn't yet activated it will fail recognizing the gesture. Range\n * can be given as an array or a single number. If range is set as an array,\n * first value must be lower or equal to 0, a the second one higher or equal\n * to 0. If only one number `p` is given a range of `(-inf, p)` will be used\n * if `p` is higher or equal to 0 and `(-p, inf)` otherwise.\n */\n failOffsetX?: number | number[];\n}\n\nexport const panHandlerName = 'PanGestureHandler';\n\nexport type PanGestureHandler = typeof PanGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const PanGestureHandler = createHandler<\n PanGestureHandlerProps,\n PanGestureHandlerEventPayload\n>({\n name: panHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...panGestureHandlerProps,\n ] as const,\n config: {},\n transformProps: managePanProps,\n customNativeProps: panGestureHandlerCustomNativeProps,\n});\n\nfunction validatePanGestureHandlerProps(props: PanGestureHandlerProps) {\n if (\n Array.isArray(props.activeOffsetX) &&\n (props.activeOffsetX[0] > 0 || props.activeOffsetX[1] < 0)\n ) {\n throw new Error(\n `First element of activeOffsetX should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.activeOffsetY) &&\n (props.activeOffsetY[0] > 0 || props.activeOffsetY[1] < 0)\n ) {\n throw new Error(\n `First element of activeOffsetY should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.failOffsetX) &&\n (props.failOffsetX[0] > 0 || props.failOffsetX[1] < 0)\n ) {\n throw new Error(\n `First element of failOffsetX should be negative, a the second one should be positive`\n );\n }\n\n if (\n Array.isArray(props.failOffsetY) &&\n (props.failOffsetY[0] > 0 || props.failOffsetY[1] < 0)\n ) {\n throw new Error(\n `First element of failOffsetY should be negative, a the second one should be positive`\n );\n }\n\n if (props.minDist && (props.failOffsetX || props.failOffsetY)) {\n throw new Error(\n `It is not supported to use minDist with failOffsetX or failOffsetY, use activeOffsetX and activeOffsetY instead`\n );\n }\n\n if (props.minDist && (props.activeOffsetX || props.activeOffsetY)) {\n throw new Error(\n `It is not supported to use minDist with activeOffsetX or activeOffsetY`\n );\n }\n}\n\nfunction transformPanGestureHandlerProps(props: PanGestureHandlerProps) {\n type InternalPanGHKeys =\n | 'activeOffsetXStart'\n | 'activeOffsetXEnd'\n | 'failOffsetXStart'\n | 'failOffsetXEnd'\n | 'activeOffsetYStart'\n | 'activeOffsetYEnd'\n | 'failOffsetYStart'\n | 'failOffsetYEnd';\n type PanGestureHandlerInternalProps = PanGestureHandlerProps &\n Partial>;\n\n const res: PanGestureHandlerInternalProps = { ...props };\n\n if (props.activeOffsetX !== undefined) {\n delete res.activeOffsetX;\n if (Array.isArray(props.activeOffsetX)) {\n res.activeOffsetXStart = props.activeOffsetX[0];\n res.activeOffsetXEnd = props.activeOffsetX[1];\n } else if (props.activeOffsetX < 0) {\n res.activeOffsetXStart = props.activeOffsetX;\n } else {\n res.activeOffsetXEnd = props.activeOffsetX;\n }\n }\n\n if (props.activeOffsetY !== undefined) {\n delete res.activeOffsetY;\n if (Array.isArray(props.activeOffsetY)) {\n res.activeOffsetYStart = props.activeOffsetY[0];\n res.activeOffsetYEnd = props.activeOffsetY[1];\n } else if (props.activeOffsetY < 0) {\n res.activeOffsetYStart = props.activeOffsetY;\n } else {\n res.activeOffsetYEnd = props.activeOffsetY;\n }\n }\n\n if (props.failOffsetX !== undefined) {\n delete res.failOffsetX;\n if (Array.isArray(props.failOffsetX)) {\n res.failOffsetXStart = props.failOffsetX[0];\n res.failOffsetXEnd = props.failOffsetX[1];\n } else if (props.failOffsetX < 0) {\n res.failOffsetXStart = props.failOffsetX;\n } else {\n res.failOffsetXEnd = props.failOffsetX;\n }\n }\n\n if (props.failOffsetY !== undefined) {\n delete res.failOffsetY;\n if (Array.isArray(props.failOffsetY)) {\n res.failOffsetYStart = props.failOffsetY[0];\n res.failOffsetYEnd = props.failOffsetY[1];\n } else if (props.failOffsetY < 0) {\n res.failOffsetYStart = props.failOffsetY;\n } else {\n res.failOffsetYEnd = props.failOffsetY;\n }\n }\n\n return res;\n}\n\nexport function managePanProps(props: PanGestureHandlerProps) {\n if (__DEV__) {\n validatePanGestureHandlerProps(props);\n }\n return transformPanGestureHandlerProps(props);\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport type PinchGestureHandlerEventPayload = {\n /**\n * The scale factor relative to the points of the two touches in screen\n * coordinates.\n */\n scale: number;\n\n /**\n * Position expressed in points along X axis of center anchor point of\n * gesture.\n */\n focalX: number;\n\n /**\n * Position expressed in points along Y axis of center anchor point of\n * gesture.\n */\n focalY: number;\n\n /**\n *\n * Velocity of the pan gesture the current moment. The value is expressed in\n * point units per second.\n */\n velocity: number;\n};\n\nexport interface PinchGestureHandlerProps\n extends BaseGestureHandlerProps {}\n\nexport const pinchHandlerName = 'PinchGestureHandler';\n\nexport type PinchGestureHandler = typeof PinchGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const PinchGestureHandler = createHandler<\n PinchGestureHandlerProps,\n PinchGestureHandlerEventPayload\n>({\n name: pinchHandlerName,\n allowedProps: baseGestureHandlerProps,\n config: {},\n});\n","// PressabilityDebugView is not implemented in react-native-web\nexport function PressabilityDebugView() {\n return null;\n}\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport type RotationGestureHandlerEventPayload = {\n /**\n * Amount rotated, expressed in radians, from the gesture's focal point\n * (anchor).\n */\n rotation: number;\n\n /**\n * X coordinate, expressed in points, of the gesture's central focal point\n * (anchor).\n */\n anchorX: number;\n\n /**\n * Y coordinate, expressed in points, of the gesture's central focal point\n * (anchor).\n */\n anchorY: number;\n\n /**\n *\n * Instantaneous velocity, expressed in point units per second, of the\n * gesture.\n */\n velocity: number;\n};\n\nexport interface RotationGestureHandlerProps\n extends BaseGestureHandlerProps {}\n\nexport const rotationHandlerName = 'RotationGestureHandler';\n\nexport type RotationGestureHandler = typeof RotationGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const RotationGestureHandler = createHandler<\n RotationGestureHandlerProps,\n RotationGestureHandlerEventPayload\n>({\n name: rotationHandlerName,\n allowedProps: baseGestureHandlerProps,\n config: {},\n});\n","import createHandler from './createHandler';\nimport {\n BaseGestureHandlerProps,\n baseGestureHandlerProps,\n} from './gestureHandlerCommon';\n\nexport const tapGestureHandlerProps = [\n 'maxDurationMs',\n 'maxDelayMs',\n 'numberOfTaps',\n 'maxDeltaX',\n 'maxDeltaY',\n 'maxDist',\n 'minPointers',\n] as const;\n\nexport type TapGestureHandlerEventPayload = {\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\nexport interface TapGestureConfig {\n /**\n * Minimum number of pointers (fingers) required to be placed before the\n * handler activates. Should be a positive integer.\n * The default value is 1.\n */\n minPointers?: number;\n\n /**\n * Maximum time, expressed in milliseconds, that defines how fast a finger\n * must be released after a touch. The default value is 500.\n */\n maxDurationMs?: number;\n\n /**\n * Maximum time, expressed in milliseconds, that can pass before the next tap\n * if many taps are required. The default value is 500.\n */\n maxDelayMs?: number;\n\n /**\n * Number of tap gestures required to activate the handler. The default value\n * is 1.\n */\n numberOfTaps?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel along the X axis during a tap gesture. If the finger\n * travels further than the defined distance along the X axis and the handler\n * hasn't yet activated, it will fail to recognize the gesture.\n */\n maxDeltaX?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel along the Y axis during a tap gesture. If the finger\n * travels further than the defined distance along the Y axis and the handler\n * hasn't yet activated, it will fail to recognize the gesture.\n */\n maxDeltaY?: number;\n\n /**\n * Maximum distance, expressed in points, that defines how far the finger is\n * allowed to travel during a tap gesture. If the finger travels further than\n * the defined distance and the handler hasn't yet\n * activated, it will fail to recognize the gesture.\n */\n maxDist?: number;\n}\n\nexport interface TapGestureHandlerProps\n extends BaseGestureHandlerProps,\n TapGestureConfig {}\n\nexport const tapHandlerName = 'TapGestureHandler';\n\nexport type TapGestureHandler = typeof TapGestureHandler;\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; see description on the top of gestureHandlerCommon.ts file\nexport const TapGestureHandler = createHandler<\n TapGestureHandlerProps,\n TapGestureHandlerEventPayload\n>({\n name: tapHandlerName,\n allowedProps: [\n ...baseGestureHandlerProps,\n ...tapGestureHandlerProps,\n ] as const,\n config: {\n shouldCancelWhenOutside: true,\n },\n});\n","import * as React from 'react';\nimport {\n Platform,\n UIManager,\n DeviceEventEmitter,\n EmitterSubscription,\n} from 'react-native';\n// @ts-ignore - it isn't typed by TS & don't have definitelyTyped types\nimport deepEqual from 'lodash/isEqual';\nimport RNGestureHandlerModule from '../RNGestureHandlerModule';\nimport type RNGestureHandlerModuleWeb from '../RNGestureHandlerModule.web';\nimport { State } from '../State';\nimport {\n handlerIDToTag,\n getNextHandlerTag,\n registerOldGestureHandler,\n} from './handlersRegistry';\n\nimport {\n BaseGestureHandlerProps,\n filterConfig,\n GestureEvent,\n HandlerStateChangeEvent,\n findNodeHandle,\n scheduleFlushOperations,\n} from './gestureHandlerCommon';\nimport { ValueOf } from '../typeUtils';\nimport { isFabric, isJestEnv, tagMessage } from '../utils';\nimport { ActionType } from '../ActionType';\nimport { PressabilityDebugView } from './PressabilityDebugView';\nimport GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';\n\nconst UIManagerAny = UIManager as any;\n\nconst customGHEventsConfigFabricAndroid = {\n topOnGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n topOnGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n};\n\nconst customGHEventsConfig = {\n onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n onGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n\n // When using React Native Gesture Handler for Animated.event with useNativeDriver: true\n // on Android with Fabric enabled, the native part still sends the native events to JS\n // but prefixed with \"top\". We cannot simply rename the events above so they are prefixed\n // with \"top\" instead of \"on\" because in such case Animated.events would not be registered.\n // That's why we need to register another pair of event names.\n // The incoming events will be queued but never handled.\n // Without this piece of code below, you'll get the following JS error:\n // Unsupported top level event type \"topOnGestureHandlerEvent\" dispatched\n ...(isFabric() &&\n Platform.OS === 'android' &&\n customGHEventsConfigFabricAndroid),\n};\n\n// Add gesture specific events to genericDirectEventTypes object exported from UIManager\n// native module.\n// Once new event types are registered with react it is possible to dispatch these\n// events to all kind of native views.\nUIManagerAny.genericDirectEventTypes = {\n ...UIManagerAny.genericDirectEventTypes,\n ...customGHEventsConfig,\n};\n// In newer versions of RN the `genericDirectEventTypes` is located in the object\n// returned by UIManager.getViewManagerConfig('getConstants') or in older RN UIManager.getConstants(), we need to add it there as well to make\n// it compatible with RN 61+\nconst UIManagerConstants =\n UIManagerAny.getViewManagerConfig?.('getConstants') ??\n UIManagerAny.getConstants?.();\n\nif (UIManagerConstants) {\n UIManagerConstants.genericDirectEventTypes = {\n ...UIManagerConstants.genericDirectEventTypes,\n ...customGHEventsConfig,\n };\n}\n\n// Wrap JS responder calls and notify gesture handler manager\nconst {\n setJSResponder: oldSetJSResponder = () => {\n //no operation\n },\n clearJSResponder: oldClearJSResponder = () => {\n //no operation\n },\n} = UIManagerAny;\nUIManagerAny.setJSResponder = (tag: number, blockNativeResponder: boolean) => {\n RNGestureHandlerModule.handleSetJSResponder(tag, blockNativeResponder);\n oldSetJSResponder(tag, blockNativeResponder);\n};\nUIManagerAny.clearJSResponder = () => {\n RNGestureHandlerModule.handleClearJSResponder();\n oldClearJSResponder();\n};\n\nlet allowTouches = true;\nconst DEV_ON_ANDROID = __DEV__ && Platform.OS === 'android';\n// Toggled inspector blocks touch events in order to allow inspecting on Android\n// This needs to be a global variable in order to set initial state for `allowTouches` property in Handler component\nif (DEV_ON_ANDROID) {\n DeviceEventEmitter.addListener('toggleElementInspector', () => {\n allowTouches = !allowTouches;\n });\n}\n\ntype HandlerProps> = Readonly<\n React.PropsWithChildren>\n>;\nfunction hasUnresolvedRefs>(\n props: HandlerProps\n) {\n // TODO(TS) - add type for extract arg\n const extract = (refs: any | any[]) => {\n if (!Array.isArray(refs)) {\n return refs && refs.current === null;\n }\n return refs.some((r) => r && r.current === null);\n };\n return extract(props['simultaneousHandlers']) || extract(props['waitFor']);\n}\n\nconst stateToPropMappings = {\n [State.UNDETERMINED]: undefined,\n [State.BEGAN]: 'onBegan',\n [State.FAILED]: 'onFailed',\n [State.CANCELLED]: 'onCancelled',\n [State.ACTIVE]: 'onActivated',\n [State.END]: 'onEnded',\n} as const;\n\ntype CreateHandlerArgs> =\n Readonly<{\n name: string;\n allowedProps: Readonly[]>;\n config: Readonly>;\n transformProps?: (props: HandlerPropsT) => HandlerPropsT;\n customNativeProps?: Readonly;\n }>;\n\n// TODO(TS) fix event types\ntype InternalEventHandlers = {\n onGestureHandlerEvent?: (event: any) => void;\n onGestureHandlerStateChange?: (event: any) => void;\n};\n\nconst UNRESOLVED_REFS_RETRY_LIMIT = 1;\n\n// TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.\nexport default function createHandler<\n T extends BaseGestureHandlerProps,\n U extends Record\n>({\n name,\n allowedProps = [],\n config = {},\n transformProps,\n customNativeProps = [],\n}: CreateHandlerArgs): React.ComponentType> {\n interface HandlerState {\n allowTouches: boolean;\n }\n class Handler extends React.Component<\n T & InternalEventHandlers,\n HandlerState\n > {\n static displayName = name;\n static contextType = GestureHandlerRootViewContext;\n\n private handlerTag: number;\n private config: Record;\n private propsRef: React.MutableRefObject;\n private isMountedRef: React.MutableRefObject;\n private viewNode: any;\n private viewTag?: number;\n private inspectorToggleListener?: EmitterSubscription;\n\n constructor(props: T & InternalEventHandlers) {\n super(props);\n this.handlerTag = getNextHandlerTag();\n this.config = {};\n this.propsRef = React.createRef();\n this.isMountedRef = React.createRef();\n this.state = { allowTouches };\n if (props.id) {\n if (handlerIDToTag[props.id] !== undefined) {\n throw new Error(`Handler with ID \"${props.id}\" already registered`);\n }\n handlerIDToTag[props.id] = this.handlerTag;\n }\n }\n\n componentDidMount() {\n const props: HandlerProps = this.props;\n this.isMountedRef.current = true;\n\n if (DEV_ON_ANDROID) {\n this.inspectorToggleListener = DeviceEventEmitter.addListener(\n 'toggleElementInspector',\n () => {\n this.setState((_) => ({ allowTouches }));\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n );\n }\n if (hasUnresolvedRefs(props)) {\n // If there are unresolved refs (e.g. \".current\" has not yet been set)\n // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to\n // _update method that will try to update native handler props using\n // queueMicrotask. This makes it so update() function gets called after all\n // react components are mounted and we expect the missing ref object to\n // be resolved by then.\n queueMicrotask(() => {\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n });\n }\n\n this.createGestureHandler(\n filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n )\n );\n\n this.attachGestureHandler(findNodeHandle(this.viewNode) as number); // TODO(TS) - check if this can be null\n }\n\n componentDidUpdate() {\n const viewTag = findNodeHandle(this.viewNode);\n if (this.viewTag !== viewTag) {\n this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle\n }\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n\n componentWillUnmount() {\n this.inspectorToggleListener?.remove();\n this.isMountedRef.current = false;\n RNGestureHandlerModule.dropGestureHandler(this.handlerTag);\n scheduleFlushOperations();\n // We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context\n const handlerID: string | undefined = this.props.id;\n if (handlerID) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete handlerIDToTag[handlerID];\n }\n }\n\n private onGestureHandlerEvent = (event: GestureEvent) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onGestureEvent === 'function') {\n this.props.onGestureEvent?.(event);\n }\n } else {\n this.props.onGestureHandlerEvent?.(event);\n }\n };\n\n // TODO(TS) - make sure this is right type for event\n private onGestureHandlerStateChange = (\n event: HandlerStateChangeEvent\n ) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onHandlerStateChange === 'function') {\n this.props.onHandlerStateChange?.(event);\n }\n\n const state: ValueOf = event.nativeEvent.state;\n const stateEventName = stateToPropMappings[state];\n const eventHandler = stateEventName && this.props[stateEventName];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler(event);\n }\n } else {\n this.props.onGestureHandlerStateChange?.(event);\n }\n };\n\n private refHandler = (node: any) => {\n this.viewNode = node;\n\n const child = React.Children.only(this.props.children);\n // TODO(TS) fix ref type\n const { ref }: any = child;\n if (ref !== null) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n };\n\n private createGestureHandler = (\n newConfig: Readonly>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.createGestureHandler(\n name,\n this.handlerTag,\n newConfig\n );\n };\n\n private attachGestureHandler = (newViewTag: number) => {\n this.viewTag = newViewTag;\n\n if (Platform.OS === 'web') {\n // typecast due to dynamic resolution, attachGestureHandler should have web version signature in this branch\n (\n RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler\n )(\n this.handlerTag,\n newViewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n this.propsRef\n );\n } else {\n registerOldGestureHandler(this.handlerTag, {\n onGestureEvent: this.onGestureHandlerEvent,\n onGestureStateChange: this.onGestureHandlerStateChange,\n });\n\n const actionType = (() => {\n if (\n this.props?.onGestureEvent &&\n 'current' in this.props.onGestureEvent\n ) {\n // Reanimated worklet\n return ActionType.REANIMATED_WORKLET;\n } else if (\n this.props?.onGestureEvent &&\n '__isNative' in this.props.onGestureEvent\n ) {\n // Animated.event with useNativeDriver: true\n return ActionType.NATIVE_ANIMATED_EVENT;\n } else {\n // JS callback or Animated.event with useNativeDriver: false\n return ActionType.JS_FUNCTION_OLD_API;\n }\n })();\n\n RNGestureHandlerModule.attachGestureHandler(\n this.handlerTag,\n newViewTag,\n actionType\n );\n }\n\n scheduleFlushOperations();\n };\n\n private updateGestureHandler = (\n newConfig: Readonly>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.updateGestureHandler(this.handlerTag, newConfig);\n scheduleFlushOperations();\n };\n\n private update(remainingTries: number) {\n if (!this.isMountedRef.current) {\n return;\n }\n\n const props: HandlerProps = this.props;\n\n // When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of\n // `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying\n // again is easy enough fix.\n if (hasUnresolvedRefs(props) && remainingTries > 0) {\n queueMicrotask(() => {\n this.update(remainingTries - 1);\n });\n } else {\n const newConfig = filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n );\n if (!deepEqual(this.config, newConfig)) {\n this.updateGestureHandler(newConfig);\n }\n }\n }\n\n setNativeProps(updates: any) {\n const mergedProps = { ...this.props, ...updates };\n const newConfig = filterConfig(\n transformProps ? transformProps(mergedProps) : mergedProps,\n [...allowedProps, ...customNativeProps],\n config\n );\n this.updateGestureHandler(newConfig);\n }\n\n render() {\n if (__DEV__ && !this.context && !isJestEnv() && Platform.OS !== 'web') {\n throw new Error(\n name +\n ' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'\n );\n }\n\n let gestureEventHandler = this.onGestureHandlerEvent;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureEventHandlers = {\n onGestureEvent?: BaseGestureHandlerProps['onGestureEvent'];\n onGestureHandlerEvent?: InternalEventHandlers['onGestureHandlerEvent'];\n };\n const { onGestureEvent, onGestureHandlerEvent }: OnGestureEventHandlers =\n this.props;\n if (onGestureEvent && typeof onGestureEvent !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerEvent) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureEventHandler = onGestureEvent;\n } else {\n if (\n onGestureHandlerEvent &&\n typeof onGestureHandlerEvent !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n\n let gestureStateEventHandler = this.onGestureHandlerStateChange;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureStateChangeHandlers = {\n onHandlerStateChange?: BaseGestureHandlerProps['onHandlerStateChange'];\n onGestureHandlerStateChange?: InternalEventHandlers['onGestureHandlerStateChange'];\n };\n const {\n onHandlerStateChange,\n onGestureHandlerStateChange,\n }: OnGestureStateChangeHandlers = this.props;\n if (onHandlerStateChange && typeof onHandlerStateChange !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerStateChange) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureStateEventHandler = onHandlerStateChange;\n } else {\n if (\n onGestureHandlerStateChange &&\n typeof onGestureHandlerStateChange !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n const events = {\n onGestureHandlerEvent: this.state.allowTouches\n ? gestureEventHandler\n : undefined,\n onGestureHandlerStateChange: this.state.allowTouches\n ? gestureStateEventHandler\n : undefined,\n };\n\n this.propsRef.current = events;\n\n let child: any = null;\n try {\n child = React.Children.only(this.props.children);\n } catch (e) {\n throw new Error(\n tagMessage(\n `${name} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n\n let grandChildren = child.props.children;\n if (\n __DEV__ &&\n child.type &&\n (child.type === 'RNGestureHandlerButton' ||\n child.type.name === 'View' ||\n child.type.displayName === 'View')\n ) {\n grandChildren = React.Children.toArray(grandChildren);\n grandChildren.push(\n \n );\n }\n\n return React.cloneElement(\n child,\n {\n ref: this.refHandler,\n collapsable: false,\n ...(isJestEnv()\n ? {\n handlerType: name,\n handlerTag: this.handlerTag,\n }\n : {}),\n testID: this.props.testID ?? child.props.testID,\n ...events,\n },\n grandChildren\n );\n }\n }\n return Handler;\n}\n","import * as React from 'react';\nimport { useImperativeHandle, useRef } from 'react';\n\nimport {\n NativeViewGestureHandler,\n NativeViewGestureHandlerProps,\n nativeViewProps,\n} from './NativeViewGestureHandler';\n\n/*\n * This array should consist of:\n * - All keys in propTypes from NativeGestureHandler\n * (and all keys in GestureHandlerPropTypes)\n * - 'onGestureHandlerEvent'\n * - 'onGestureHandlerStateChange'\n */\nconst NATIVE_WRAPPER_PROPS_FILTER = [\n ...nativeViewProps,\n 'onGestureHandlerEvent',\n 'onGestureHandlerStateChange',\n] as const;\n\nexport default function createNativeWrapper

(\n Component: React.ComponentType

,\n config: Readonly = {}\n) {\n const ComponentWrapper = React.forwardRef<\n React.ComponentType,\n P & NativeViewGestureHandlerProps\n >((props, ref) => {\n // filter out props that should be passed to gesture handler wrapper\n const gestureHandlerProps = Object.keys(props).reduce(\n (res, key) => {\n // TS being overly protective with it's types, see https://github.com/microsoft/TypeScript/issues/26255#issuecomment-458013731 for more info\n const allowedKeys: readonly string[] = NATIVE_WRAPPER_PROPS_FILTER;\n if (allowedKeys.includes(key)) {\n // @ts-ignore FIXME(TS)\n res[key] = props[key];\n }\n return res;\n },\n { ...config } // watch out not to modify config\n );\n const _ref = useRef>();\n const _gestureHandlerRef = useRef>();\n useImperativeHandle(\n ref,\n // @ts-ignore TODO(TS) decide how nulls work in this context\n () => {\n const node = _gestureHandlerRef.current;\n // add handlerTag for relations config\n if (_ref.current && node) {\n // @ts-ignore FIXME(TS) think about createHandler return type\n _ref.current.handlerTag = node.handlerTag;\n return _ref.current;\n }\n return null;\n },\n [_ref, _gestureHandlerRef]\n );\n return (\n \n \n \n );\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n ComponentWrapper.displayName =\n Component?.displayName ||\n // @ts-ignore if render doesn't exist it will return undefined and go further\n Component?.render?.name ||\n (typeof Component === 'string' && Component) ||\n 'ComponentWrapper';\n\n return ComponentWrapper;\n}\n","// Previous types exported gesture handlers as classes which creates an interface and variable, both named the same as class.\n// Without those types, we'd introduce breaking change, forcing users to prefix every handler type specification with typeof\n// e.g. React.createRef -> React.createRef.\n// See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.\nimport * as React from 'react';\nimport { Platform, findNodeHandle as findNodeHandleRN } from 'react-native';\n\nimport { State } from '../State';\nimport { TouchEventType } from '../TouchEventType';\nimport { ValueOf } from '../typeUtils';\nimport { handlerIDToTag } from './handlersRegistry';\nimport { toArray } from '../utils';\nimport RNGestureHandlerModule from '../RNGestureHandlerModule';\n\nconst commonProps = [\n 'id',\n 'enabled',\n 'shouldCancelWhenOutside',\n 'hitSlop',\n 'cancelsTouchesInView',\n 'userSelect',\n] as const;\n\nconst componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;\n\nexport const baseGestureHandlerProps = [\n ...commonProps,\n ...componentInteractionProps,\n 'onBegan',\n 'onFailed',\n 'onCancelled',\n 'onActivated',\n 'onEnded',\n 'onGestureEvent',\n 'onHandlerStateChange',\n] as const;\n\nexport const baseGestureHandlerWithMonitorProps = [\n ...commonProps,\n 'needsPointerData',\n 'manualActivation',\n];\n\nexport interface GestureEventPayload {\n handlerTag: number;\n numberOfPointers: number;\n state: ValueOf;\n}\nexport interface HandlerStateChangeEventPayload extends GestureEventPayload {\n oldState: ValueOf;\n}\n\nexport type HitSlop =\n | number\n | Partial<\n Record<\n 'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal',\n number\n >\n >\n | Record<'width' | 'left', number>\n | Record<'width' | 'right', number>\n | Record<'height' | 'top', number>\n | Record<'height' | 'bottom', number>;\n\nexport type UserSelect = 'none' | 'auto' | 'text';\n\n//TODO(TS) events in handlers\n\nexport interface GestureEvent> {\n nativeEvent: Readonly;\n}\nexport interface HandlerStateChangeEvent<\n ExtraEventPayloadT = Record\n> {\n nativeEvent: Readonly;\n}\n\nexport type TouchData = {\n id: number;\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n};\n\nexport type GestureTouchEvent = {\n handlerTag: number;\n numberOfTouches: number;\n state: ValueOf;\n eventType: TouchEventType;\n allTouches: TouchData[];\n changedTouches: TouchData[];\n};\n\nexport type GestureUpdateEvent> =\n GestureEventPayload & GestureEventPayloadT;\n\nexport type GestureStateChangeEvent<\n GestureStateChangeEventPayloadT = Record\n> = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT;\n\nexport type CommonGestureConfig = {\n enabled?: boolean;\n shouldCancelWhenOutside?: boolean;\n hitSlop?: HitSlop;\n userSelect?: UserSelect;\n};\n\n// Events payloads are types instead of interfaces due to TS limitation.\n// See https://github.com/microsoft/TypeScript/issues/15300 for more info.\nexport type BaseGestureHandlerProps<\n ExtraEventPayloadT extends Record = Record\n> = CommonGestureConfig & {\n id?: string;\n waitFor?: React.Ref | React.Ref[];\n simultaneousHandlers?: React.Ref | React.Ref[];\n testID?: string;\n cancelsTouchesInView?: boolean;\n // TODO(TS) - fix event types\n onBegan?: (event: HandlerStateChangeEvent) => void;\n onFailed?: (event: HandlerStateChangeEvent) => void;\n onCancelled?: (event: HandlerStateChangeEvent) => void;\n onActivated?: (event: HandlerStateChangeEvent) => void;\n onEnded?: (event: HandlerStateChangeEvent) => void;\n\n //TODO(TS) consider using NativeSyntheticEvent\n onGestureEvent?: (event: GestureEvent) => void;\n onHandlerStateChange?: (\n event: HandlerStateChangeEvent\n ) => void;\n // implicit `children` prop has been removed in @types/react^18.0.0\n children?: React.ReactNode;\n};\n\nfunction isConfigParam(param: unknown, name: string) {\n // param !== Object(param) returns false if `param` is a function\n // or an object and returns true if `param` is null\n return (\n param !== undefined &&\n (param !== Object(param) ||\n !('__isNative' in (param as Record))) &&\n name !== 'onHandlerStateChange' &&\n name !== 'onGestureEvent'\n );\n}\n\nexport function filterConfig(\n props: Record,\n validProps: string[],\n defaults: Record = {}\n) {\n const filteredConfig = { ...defaults };\n for (const key of validProps) {\n let value = props[key];\n if (isConfigParam(value, key)) {\n if (key === 'simultaneousHandlers' || key === 'waitFor') {\n value = transformIntoHandlerTags(props[key]);\n } else if (key === 'hitSlop' && typeof value !== 'object') {\n value = { top: value, left: value, bottom: value, right: value };\n }\n filteredConfig[key] = value;\n }\n }\n return filteredConfig;\n}\n\nfunction transformIntoHandlerTags(handlerIDs: any) {\n handlerIDs = toArray(handlerIDs);\n\n if (Platform.OS === 'web') {\n return handlerIDs\n .map(({ current }: { current: any }) => current)\n .filter((handle: any) => handle);\n }\n // converts handler string IDs into their numeric tags\n return handlerIDs\n .map(\n (handlerID: any) =>\n handlerIDToTag[handlerID] || handlerID.current?.handlerTag || -1\n )\n .filter((handlerTag: number) => handlerTag > 0);\n}\n\nexport function findNodeHandle(\n node: null | number | React.Component | React.ComponentClass\n): null | number | React.Component | React.ComponentClass {\n if (Platform.OS === 'web') {\n return node;\n }\n return findNodeHandleRN(node);\n}\n\nlet flushOperationsScheduled = false;\n\nexport function scheduleFlushOperations() {\n if (!flushOperationsScheduled) {\n flushOperationsScheduled = true;\n queueMicrotask(() => {\n RNGestureHandlerModule.flushOperations();\n\n flushOperationsScheduled = false;\n });\n }\n}\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n HandlerStateChangeEvent,\n scheduleFlushOperations,\n UserSelect,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { TouchEventType } from '../../TouchEventType';\nimport { ComposedGesture } from './gestureComposition';\nimport { ActionType } from '../../ActionType';\nimport {\n isFabric,\n isJestEnv,\n REACT_NATIVE_VERSION,\n tagMessage,\n} from '../../utils';\nimport { getShadowNodeFromRef } from '../../getShadowNodeFromRef';\nimport { Platform } from 'react-native';\nimport type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';\nimport { onGestureHandlerEvent } from './eventReceiver';\nimport { RNRenderer } from '../../RNRenderer';\nimport { isNewWebImplementationEnabled } from '../../EnableNewWebImplementation';\nimport { nativeViewGestureHandlerProps } from '../NativeViewGestureHandler';\nimport GestureHandlerRootViewContext from '../../GestureHandlerRootViewContext';\n\ndeclare const global: {\n isFormsStackingContext: (node: unknown) => boolean | null; // JSI function\n};\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n ...nativeViewGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks>[] | null\n > | null;\n firstExecution: boolean;\n useReanimatedHook: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag, handler.config.testId);\n }\n\n scheduleFlushOperations();\n}\n\nfunction checkGestureCallbacksForWorklets(gesture: GestureType) {\n // if a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // if some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n}\n\ninterface WebEventHandler {\n onGestureHandlerEvent: (event: HandlerStateChangeEvent) => void;\n onGestureHandlerStateChange?: (\n event: HandlerStateChangeEvent\n ) => void;\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType;\n gesture: GestureType[];\n viewTag: number;\n webEventHandlersRef: React.RefObject;\n mountedRef: React.RefObject;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n webEventHandlersRef,\n mountedRef,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use queueMicrotask to extract handlerTags, because all refs should be initialized\n // when it's ran\n queueMicrotask(() => {\n if (!mountedRef.current) {\n return;\n }\n gestureConfig.prepare();\n });\n\n for (const handler of gesture) {\n checkGestureCallbacksForWorklets(handler);\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n // use queueMicrotask to extract handlerTags, because all refs should be initialized\n // when it's ran\n queueMicrotask(() => {\n if (!mountedRef.current) {\n return;\n }\n for (const handler of gesture) {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n }\n\n scheduleFlushOperations();\n });\n\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n const actionType = gesture.shouldUseReanimated\n ? ActionType.REANIMATED_WORKLET\n : ActionType.JS_FUNCTION_NEW_API;\n\n if (Platform.OS === 'web') {\n (\n RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler\n )(\n gesture.handlerTag,\n viewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n webEventHandlersRef\n );\n } else {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n actionType\n );\n }\n }\n\n if (preparedGesture.animatedHandlers) {\n const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;\n\n preparedGesture.animatedHandlers.value = gesture\n .filter(isAnimatedGesture)\n .map((g) => g.handlers) as unknown as HandlerCallbacks<\n Record\n >[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType,\n gesture: GestureType[],\n mountedRef: React.RefObject\n) {\n gestureConfig.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n checkGestureCallbacksForWorklets(handler);\n\n // only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (gesture[i].handlerTag !== handler.handlerTag) {\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n }\n\n // use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n queueMicrotask(() => {\n if (!mountedRef.current) {\n return;\n }\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers) {\n const previousHandlersValue =\n preparedGesture.animatedHandlers.value ?? [];\n const newHandlersValue = preparedGesture.config\n .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown as HandlerCallbacks<\n Record\n >[];\n\n // if amount of gesture configs changes, we need to update the callbacks in shared value\n let shouldUpdateSharedValue =\n previousHandlersValue.length !== newHandlersValue.length;\n\n if (!shouldUpdateSharedValue) {\n // if the amount is the same, we need to check if any of the configs inside has changed\n for (let i = 0; i < newHandlersValue.length; i++) {\n if (\n // we can use the `gestureId` prop as it's unique for every config instance\n newHandlersValue[i].gestureId !== previousHandlersValue[i].gestureId\n ) {\n shouldUpdateSharedValue = true;\n break;\n }\n }\n }\n\n if (shouldUpdateSharedValue) {\n preparedGesture.animatedHandlers.value = newHandlersValue;\n }\n }\n\n scheduleFlushOperations();\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (\n gesture[i].handlerName !== preparedGesture.config[i].handlerName ||\n gesture[i].shouldUseReanimated !==\n preparedGesture.config[i].shouldUseReanimated\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n}\n\nfunction getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks>\n) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.CHANGE:\n return gesture.onChange;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n}\n\nfunction touchEventTypeToCallbackType(\n eventType: TouchEventType\n): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case TouchEventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case TouchEventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case TouchEventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case TouchEventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n}\n\nfunction runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn(tagMessage('Animated gesture callback must be a worklet'));\n }\n}\n\nfunction useAnimatedGesture(\n preparedGesture: GestureConfigReference,\n needsRebuild: boolean\n) {\n if (!Reanimated) {\n return;\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks>[] | null\n >(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const lastUpdateEvent = Reanimated.useSharedValue<\n (GestureUpdateEvent | undefined)[]\n >([]);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n lastUpdateEvent.value[gesture.handlerTag] = undefined;\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== TouchEventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n\n if (gesture.onChange && gesture.changeEventCalculator) {\n runWorklet(\n CALLBACK_TYPE.CHANGE,\n gesture,\n gesture.changeEventCalculator?.(\n event,\n lastUpdateEvent.value[gesture.handlerTag]\n )\n );\n\n lastUpdateEvent.value[gesture.handlerTag] = event;\n }\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n needsRebuild\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction validateDetectorChildren(ref: any) {\n // finds the first native view under the Wrap component and traverses the fiber tree upwards\n // to check whether there is more than one native view as a pseudo-direct child of GestureDetector\n // i.e. this is not ok:\n // Wrap\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n //\n // but this is fine:\n // Wrap\n // |\n // NativeView\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n if (__DEV__ && Platform.OS !== 'web') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const wrapType =\n REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0\n ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ref._reactInternals.elementType\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ref._reactInternalFiber.elementType;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n let instance =\n RNRenderer.findHostInstance_DEPRECATED(\n ref\n )._internalFiberInstanceHandleDEV;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n while (instance && instance.elementType !== wrapType) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (instance.sibling) {\n throw new Error(\n 'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a or .'\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n instance = instance.return;\n }\n }\n}\n\nconst applyUserSelectProp = (\n userSelect: UserSelect,\n gesture: ComposedGesture | GestureType\n): void => {\n for (const g of gesture.toGestureArray()) {\n g.config.userSelect = userSelect;\n }\n};\n\ninterface GestureDetectorProps {\n gesture: ComposedGesture | GestureType;\n userSelect?: UserSelect;\n children?: React.ReactNode;\n}\ninterface GestureDetectorState {\n firstRender: boolean;\n viewRef: React.Component | null;\n previousViewTag: number;\n forceReattach: boolean;\n}\nexport const GestureDetector = (props: GestureDetectorProps) => {\n const rootViewContext = useContext(GestureHandlerRootViewContext);\n if (__DEV__ && !rootViewContext && !isJestEnv() && Platform.OS !== 'web') {\n throw new Error(\n 'GestureDetector must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'\n );\n }\n\n const gestureConfig = props.gesture;\n\n if (props.userSelect) {\n applyUserSelectProp(props.userSelect, gestureConfig);\n }\n\n const gesture = gestureConfig.toGestureArray();\n const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);\n\n // store state in ref to prevent unnecessary renders\n const state = useRef({\n firstRender: true,\n viewRef: null,\n previousViewTag: -1,\n forceReattach: false,\n }).current;\n const mountedRef = useRef(false);\n const webEventHandlersRef = useRef({\n onGestureHandlerEvent: (e: HandlerStateChangeEvent) => {\n onGestureHandlerEvent(e.nativeEvent);\n },\n onGestureHandlerStateChange: isNewWebImplementationEnabled()\n ? (e: HandlerStateChangeEvent) => {\n onGestureHandlerEvent(e.nativeEvent);\n }\n : undefined,\n });\n\n const [renderState, setRenderState] = useState(false);\n function forceRender() {\n setRenderState(!renderState);\n }\n\n const preparedGesture = React.useRef({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useReanimatedHook: useReanimatedHook,\n }).current;\n\n if (useReanimatedHook !== preparedGesture.useReanimatedHook) {\n throw new Error(\n tagMessage(\n 'You cannot change the thread the callbacks are ran on while the app is running'\n )\n );\n }\n\n function onHandlersUpdate(skipConfigUpdate?: boolean) {\n // if the underlying view has changed we need to reattach handlers to the new view\n const viewTag = findNodeHandle(state.viewRef) as number;\n const forceReattach = viewTag !== state.previousViewTag;\n\n if (forceReattach || needsToReattach(preparedGesture, gesture)) {\n validateDetectorChildren(state.viewRef);\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n webEventHandlersRef,\n viewTag,\n mountedRef,\n });\n\n state.previousViewTag = viewTag;\n state.forceReattach = forceReattach;\n if (forceReattach) {\n forceRender();\n }\n } else if (!skipConfigUpdate) {\n updateHandlers(preparedGesture, gestureConfig, gesture, mountedRef);\n }\n }\n\n // Reanimated event should be rebuilt only when gestures are reattached, otherwise\n // config update will be enough as all necessary items are stored in shared values anyway\n const needsToRebuildReanimatedEvent =\n preparedGesture.firstExecution ||\n needsToReattach(preparedGesture, gesture) ||\n state.forceReattach;\n\n state.forceReattach = false;\n\n if (preparedGesture.firstExecution) {\n gestureConfig.initialize();\n }\n\n if (useReanimatedHook) {\n // Whether animatedGesture or gesture is used shouldn't change while the app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);\n }\n\n useEffect(() => {\n const viewTag = findNodeHandle(state.viewRef) as number;\n state.firstRender = true;\n mountedRef.current = true;\n\n validateDetectorChildren(state.viewRef);\n\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n webEventHandlersRef,\n viewTag,\n mountedRef,\n });\n\n return () => {\n mountedRef.current = false;\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!state.firstRender) {\n onHandlersUpdate();\n } else {\n state.firstRender = false;\n }\n }, [props]);\n\n const refFunction = (ref: unknown) => {\n if (ref !== null) {\n // @ts-ignore Just setting the view ref\n state.viewRef = ref;\n\n // if it's the first render, also set the previousViewTag to prevent reattaching gestures when not needed\n if (state.previousViewTag === -1) {\n state.previousViewTag = findNodeHandle(state.viewRef) as number;\n }\n\n // pass true as `skipConfigUpdate`, here we only want to trigger the eventual reattaching of handlers\n // in case the view has changed, while config update would be handled be the `useEffect` above\n onHandlersUpdate(true);\n\n if (isFabric()) {\n const node = getShadowNodeFromRef(ref);\n if (global.isFormsStackingContext(node) === false) {\n console.error(\n tagMessage(\n 'GestureDetector has received a child that may get view-flattened. ' +\n '\\nTo prevent it from misbehaving you need to wrap the child with a ``.'\n )\n );\n }\n }\n }\n };\n\n if (useReanimatedHook) {\n return (\n \n {props.children}\n \n );\n } else {\n return {props.children};\n }\n};\n\nclass Wrap extends React.Component<{\n onGestureHandlerEvent?: unknown;\n // implicit `children` prop has been removed in @types/react^18.0.0\n children?: React.ReactNode;\n}> {\n render() {\n try {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n } catch (e) {\n throw new Error(\n tagMessage(\n `GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n","import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { TouchEventType } from '../../TouchEventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { findHandler, findOldGestureHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null =\n null;\n\nconst gestureStateManagers: Map = new Map<\n number,\n GestureStateManagerType\n>();\n\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nexport function onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n gestureStateManagers.delete(event.handlerTag);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n }\n } else if (isTouchEvent(event)) {\n if (!gestureStateManagers.has(event.handlerTag)) {\n gestureStateManagers.set(\n event.handlerTag,\n GestureStateManager.create(event.handlerTag)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const manager = gestureStateManagers.get(event.handlerTag)!;\n\n switch (event.eventType) {\n case TouchEventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, manager);\n break;\n case TouchEventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, manager);\n break;\n case TouchEventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, manager);\n break;\n case TouchEventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, manager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n\n if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\n }\n } else {\n const oldHandler = findOldGestureHandler(event.handlerTag);\n if (oldHandler) {\n const nativeEvent = { nativeEvent: event };\n if (isStateChangeEvent(event)) {\n oldHandler.onGestureStateChange(nativeEvent);\n } else {\n oldHandler.onGestureEvent(nativeEvent);\n }\n return;\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n gestureHandlerEventSubscription.remove();\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n gestureHandlerStateChangeEventSubscription.remove();\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n","import { BaseGesture, BaseGestureConfig } from './gesture';\nimport {\n FlingGestureConfig,\n FlingGestureHandlerEventPayload,\n} from '../FlingGestureHandler';\n\nexport class FlingGesture extends BaseGesture {\n public config: BaseGestureConfig & FlingGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'FlingGestureHandler';\n }\n\n numberOfPointers(pointers: number) {\n this.config.numberOfPointers = pointers;\n return this;\n }\n\n direction(direction: number) {\n this.config.direction = direction;\n return this;\n }\n}\n\nexport type FlingGestureType = InstanceType;\n","import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\nexport type ForceTouchGestureChangeEventPayload = {\n forceChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: ForceTouchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n forceChange: current.force,\n };\n } else {\n changePayload = {\n forceChange: current.force - previous.force,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class ForceTouchGesture extends ContinousBaseGesture<\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & ForceTouchGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'ForceTouchGestureHandler';\n }\n\n minForce(force: number) {\n this.config.minForce = force;\n return this;\n }\n\n maxForce(force: number) {\n this.config.maxForce = force;\n return this;\n }\n\n feedbackOnActivation(value: boolean) {\n this.config.feedbackOnActivation = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n GestureUpdateEvent<\n ForceTouchGestureHandlerEventPayload &\n ForceTouchGestureChangeEventPayload\n >\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, ForceTouchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ForceTouchGestureType = InstanceType;\n","import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\nimport { isRemoteDebuggingEnabled } from '../../utils';\n\nexport type GestureType =\n | BaseGesture>\n | BaseGesture>\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture\n | BaseGesture;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject\n | React.RefObject; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record {\n ref?: React.MutableRefObject;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n runOnJS?: boolean;\n testId?: string;\n cancelsTouchesInView?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks> = {\n gestureId: number;\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent) => void;\n onStart?: (event: GestureStateChangeEvent) => void;\n onEnd?: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent) => void;\n onChange?: (event: any) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n changeEventCalculator?: (\n current: GestureUpdateEvent>,\n previous?: GestureUpdateEvent>\n ) => GestureUpdateEvent>;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n CHANGE: 4,\n END: 5,\n FINALIZE: 6,\n TOUCHES_DOWN: 7,\n TOUCHES_MOVE: 8,\n TOUCHES_UP: 9,\n TOUCHES_CANCELLED: 10,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nlet nextGestureId = 0;\nexport abstract class BaseGesture<\n EventPayloadT extends Record\n> extends Gesture {\n private gestureId = -1;\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks = {\n gestureId: -1,\n handlerTag: -1,\n isWorklet: [],\n };\n\n constructor() {\n super();\n\n // Used to check whether the gesture config has been updated when wrapping it\n // with `useMemo`. Since every config will have a unique id, when the dependencies\n // don't change, the config won't be recreated and the id will stay the same.\n // If the id is different, it means that the config has changed and the gesture\n // needs to be updated.\n this.gestureId = nextGestureId++;\n this.handlers.gestureId = this.gestureId;\n }\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject) {\n this.config.ref = ref;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n protected isWorklet(callback: Function) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] =\n this.isWorklet(callback);\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] =\n this.isWorklet(callback);\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] =\n this.isWorklet(callback);\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] =\n this.isWorklet(callback);\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n runOnJS(runOnJS: boolean) {\n this.config.runOnJS = runOnJS;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n withTestId(id: string) {\n this.config.testId = id;\n return this;\n }\n\n cancelsTouchesInView(value: boolean) {\n this.config.cancelsTouchesInView = value;\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n\n get shouldUseReanimated(): boolean {\n // use Reanimated when runOnJS isn't set explicitly,\n // and all defined callbacks are worklets,\n // and remote debugging is disabled\n return (\n this.config.runOnJS !== true &&\n !this.handlers.isWorklet.includes(false) &&\n !isRemoteDebuggingEnabled()\n );\n }\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record,\n EventChangePayloadT extends Record\n> extends BaseGesture {\n onUpdate(callback: (event: GestureUpdateEvent) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent\n ) => void\n ) {\n this.handlers.onChange = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.CHANGE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n","import { BaseGesture, Gesture, GestureRef, GestureType } from './gesture';\n\nfunction extendRelation(\n currentRelation: GestureRef[] | undefined,\n extendWith: GestureType[]\n) {\n if (currentRelation === undefined) {\n return [...extendWith];\n } else {\n return [...currentRelation, ...extendWith];\n }\n}\n\nexport class ComposedGesture extends Gesture {\n protected gestures: Gesture[] = [];\n protected simultaneousGestures: GestureType[] = [];\n protected requireGesturesToFail: GestureType[] = [];\n\n constructor(...gestures: Gesture[]) {\n super();\n this.gestures = gestures;\n }\n\n protected prepareSingleGesture(\n gesture: Gesture,\n simultaneousGestures: GestureType[],\n requireGesturesToFail: GestureType[]\n ) {\n if (gesture instanceof BaseGesture) {\n const newConfig = { ...gesture.config };\n\n newConfig.simultaneousWith = extendRelation(\n newConfig.simultaneousWith,\n simultaneousGestures\n );\n newConfig.requireToFail = extendRelation(\n newConfig.requireToFail,\n requireGesturesToFail\n );\n\n gesture.config = newConfig;\n } else if (gesture instanceof ComposedGesture) {\n gesture.simultaneousGestures = simultaneousGestures;\n gesture.requireGesturesToFail = requireGesturesToFail;\n gesture.prepare();\n }\n }\n\n prepare() {\n for (const gesture of this.gestures) {\n this.prepareSingleGesture(\n gesture,\n this.simultaneousGestures,\n this.requireGesturesToFail\n );\n }\n }\n\n initialize() {\n for (const gesture of this.gestures) {\n gesture.initialize();\n }\n }\n\n toGestureArray(): GestureType[] {\n return this.gestures.flatMap((gesture) => gesture.toGestureArray());\n }\n}\n\nexport class SimultaneousGesture extends ComposedGesture {\n prepare() {\n // this piece of magic works something like this:\n // for every gesture in the array\n const simultaneousArrays = this.gestures.map((gesture) =>\n // we take the array it's in\n this.gestures\n // and make a copy without it\n .filter((x) => x !== gesture)\n // then we flatmap the result to get list of raw (not composed) gestures\n // this way we don't make the gestures simultaneous with themselves, which is\n // important when the gesture is `ExclusiveGesture` - we don't want to make\n // exclusive gestures simultaneous\n .flatMap((x) => x.toGestureArray())\n );\n\n for (let i = 0; i < this.gestures.length; i++) {\n this.prepareSingleGesture(\n this.gestures[i],\n simultaneousArrays[i],\n this.requireGesturesToFail\n );\n }\n }\n}\n\nexport class ExclusiveGesture extends ComposedGesture {\n prepare() {\n // transforms the array of gestures into array of grouped raw (not composed) gestures\n // i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]\n const gestureArrays = this.gestures.map((gesture) =>\n gesture.toGestureArray()\n );\n\n let requireToFail: GestureType[] = [];\n\n for (let i = 0; i < this.gestures.length; i++) {\n this.prepareSingleGesture(\n this.gestures[i],\n this.simultaneousGestures,\n this.requireGesturesToFail.concat(requireToFail)\n );\n\n // every group gets to wait for all groups before it\n requireToFail = requireToFail.concat(gestureArrays[i]);\n }\n }\n}\n\nexport type ComposedGestureType = InstanceType;\nexport type RaceGestureType = ComposedGestureType;\nexport type SimultaneousGestureType = InstanceType;\nexport type ExclusiveGestureType = InstanceType;\n","import { FlingGesture } from './flingGesture';\nimport { ForceTouchGesture } from './forceTouchGesture';\nimport { Gesture } from './gesture';\nimport {\n ComposedGesture,\n ExclusiveGesture,\n SimultaneousGesture,\n} from './gestureComposition';\nimport { LongPressGesture } from './longPressGesture';\nimport { PanGesture } from './panGesture';\nimport { PinchGesture } from './pinchGesture';\nimport { RotationGesture } from './rotationGesture';\nimport { TapGesture } from './tapGesture';\nimport { NativeGesture } from './nativeGesture';\nimport { ManualGesture } from './manualGesture';\n\nexport const GestureObjects = {\n Tap: () => {\n return new TapGesture();\n },\n\n Pan: () => {\n return new PanGesture();\n },\n\n Pinch: () => {\n return new PinchGesture();\n },\n\n Rotation: () => {\n return new RotationGesture();\n },\n\n Fling: () => {\n return new FlingGesture();\n },\n\n LongPress: () => {\n return new LongPressGesture();\n },\n\n ForceTouch: () => {\n return new ForceTouchGesture();\n },\n\n Native: () => {\n return new NativeGesture();\n },\n\n Manual: () => {\n return new ManualGesture();\n },\n\n /**\n * Builds a composed gesture consisting of gestures provided as parameters.\n * The first one that becomes active cancels the rest of gestures.\n */\n Race: (...gestures: Gesture[]) => {\n return new ComposedGesture(...gestures);\n },\n\n /**\n * Builds a composed gesture that allows all base gestures to run simultaneously.\n */\n Simultaneous(...gestures: Gesture[]) {\n return new SimultaneousGesture(...gestures);\n },\n\n /**\n * Builds a composed gesture where only one of the provided gestures can become active.\n * Priority is decided through the order of gestures: the first one has higher priority\n * than the second one, second one has higher priority than the third one, and so on.\n * For example, to make a gesture that recognizes both single and double tap you need\n * to call Exclusive(doubleTap, singleTap).\n */\n Exclusive(...gestures: Gesture[]) {\n return new ExclusiveGesture(...gestures);\n },\n};\n","import NodeManager from '../../web/tools/NodeManager';\nimport { GestureStateManagerType } from './gestureStateManager';\n\nexport const GestureStateManager = {\n create(handlerTag: number): GestureStateManagerType {\n return {\n begin: () => {\n NodeManager.getHandler(handlerTag).begin();\n },\n\n activate: () => {\n NodeManager.getHandler(handlerTag).activate();\n },\n\n fail: () => {\n NodeManager.getHandler(handlerTag).fail();\n },\n\n end: () => {\n NodeManager.getHandler(handlerTag).end();\n },\n };\n },\n};\n","import { BaseGesture, BaseGestureConfig } from './gesture';\nimport {\n LongPressGestureConfig,\n LongPressGestureHandlerEventPayload,\n} from '../LongPressGestureHandler';\n\nexport class LongPressGesture extends BaseGesture {\n public config: BaseGestureConfig & LongPressGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'LongPressGestureHandler';\n this.shouldCancelWhenOutside(true);\n }\n\n minDuration(duration: number) {\n this.config.minDurationMs = duration;\n return this;\n }\n\n maxDistance(distance: number) {\n this.config.maxDist = distance;\n return this;\n }\n}\n\nexport type LongPressGestureType = InstanceType;\n","import { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport { ContinousBaseGesture } from './gesture';\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent>,\n _previous?: GestureUpdateEvent>\n) {\n 'worklet';\n return current;\n}\n\nexport class ManualGesture extends ContinousBaseGesture<\n Record,\n Record\n> {\n constructor() {\n super();\n\n this.handlerName = 'ManualGestureHandler';\n }\n\n onChange(\n callback: (event: GestureUpdateEvent>) => void\n ) {\n // @ts-ignore TS being overprotective, Record is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ManualGestureType = InstanceType;\n","import { BaseGestureConfig, BaseGesture } from './gesture';\nimport {\n NativeViewGestureConfig,\n NativeViewGestureHandlerPayload,\n} from '../NativeViewGestureHandler';\n\nexport class NativeGesture extends BaseGesture {\n public config: BaseGestureConfig & NativeViewGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'NativeViewGestureHandler';\n }\n\n shouldActivateOnStart(value: boolean) {\n this.config.shouldActivateOnStart = value;\n return this;\n }\n\n disallowInterruption(value: boolean) {\n this.config.disallowInterruption = value;\n return this;\n }\n}\n\nexport type NativeGestureType = InstanceType;\n","import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport {\n PanGestureConfig,\n PanGestureHandlerEventPayload,\n} from '../PanGestureHandler';\n\nexport type PanGestureChangeEventPayload = {\n changeX: number;\n changeY: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: PanGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n changeX: current.translationX,\n changeY: current.translationY,\n };\n } else {\n changePayload = {\n changeX: current.translationX - previous.translationX,\n changeY: current.translationY - previous.translationY,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PanGesture extends ContinousBaseGesture<\n PanGestureHandlerEventPayload,\n PanGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & PanGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'PanGestureHandler';\n }\n\n activeOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetYStart = offset[0];\n this.config.activeOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetYStart = offset;\n } else {\n this.config.activeOffsetYEnd = offset;\n }\n return this;\n }\n\n activeOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetXStart = offset[0];\n this.config.activeOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetXStart = offset;\n } else {\n this.config.activeOffsetXEnd = offset;\n }\n return this;\n }\n\n failOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetYStart = offset[0];\n this.config.failOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetYStart = offset;\n } else {\n this.config.failOffsetYEnd = offset;\n }\n return this;\n }\n\n failOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetXStart = offset[0];\n this.config.failOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetXStart = offset;\n } else {\n this.config.failOffsetXEnd = offset;\n }\n return this;\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n maxPointers(maxPointers: number) {\n this.config.maxPointers = maxPointers;\n return this;\n }\n\n minDistance(distance: number) {\n this.config.minDist = distance;\n return this;\n }\n\n minVelocity(velocity: number) {\n this.config.minVelocity = velocity;\n return this;\n }\n\n minVelocityX(velocity: number) {\n this.config.minVelocityX = velocity;\n return this;\n }\n\n minVelocityY(velocity: number) {\n this.config.minVelocityY = velocity;\n return this;\n }\n\n averageTouches(value: boolean) {\n this.config.avgTouches = value;\n return this;\n }\n\n enableTrackpadTwoFingerGesture(value: boolean) {\n this.config.enableTrackpadTwoFingerGesture = value;\n return this;\n }\n\n activateAfterLongPress(duration: number) {\n this.config.activateAfterLongPress = duration;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PanGestureHandlerEventPayload & PanGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PanGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PanGestureType = InstanceType;\n","import { ContinousBaseGesture } from './gesture';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\nexport type PinchGestureChangeEventPayload = {\n scaleChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: PinchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n scaleChange: current.scale,\n };\n } else {\n changePayload = {\n scaleChange: current.scale / previous.scale,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PinchGesture extends ContinousBaseGesture<\n PinchGestureHandlerEventPayload,\n PinchGestureChangeEventPayload\n> {\n constructor() {\n super();\n\n this.handlerName = 'PinchGestureHandler';\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PinchGestureHandlerEventPayload & PinchGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PinchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PinchGestureType = InstanceType;\n","import { ComponentClass } from 'react';\nimport {\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { tagMessage } from '../../utils';\n\nexport interface SharedValue {\n value: T;\n}\n\nlet Reanimated: {\n default: {\n // Slightly modified definition copied from 'react-native-reanimated'\n // eslint-disable-next-line @typescript-eslint/ban-types\n createAnimatedComponent

(\n component: ComponentClass

,\n options?: unknown\n ): ComponentClass

;\n };\n useEvent: (\n callback: (event: GestureUpdateEvent | GestureStateChangeEvent) => void,\n events: string[],\n rebuild: boolean\n ) => unknown;\n useSharedValue: (value: T) => SharedValue;\n setGestureState: (handlerTag: number, newState: number) => void;\n};\n\ntry {\n Reanimated = require('react-native-reanimated');\n} catch (e) {\n // When 'react-native-reanimated' is not available we want to quietly continue\n // @ts-ignore TS demands the variable to be initialized\n Reanimated = undefined;\n}\n\nif (!Reanimated?.useSharedValue) {\n // @ts-ignore Make sure the loaded module is actually Reanimated, if it's not\n // reset the module to undefined so we can fallback to the default implementation\n Reanimated = undefined;\n}\n\nif (Reanimated !== undefined && !Reanimated.setGestureState) {\n // The loaded module is Reanimated but it doesn't have the setGestureState defined\n Reanimated.setGestureState = () => {\n 'worklet';\n console.warn(\n tagMessage(\n 'Please use newer version of react-native-reanimated in order to control state of the gestures.'\n )\n );\n };\n}\n\nexport { Reanimated };\n","import { ContinousBaseGesture } from './gesture';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\ntype RotationGestureChangeEventPayload = {\n rotationChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent,\n previous?: GestureUpdateEvent\n) {\n 'worklet';\n let changePayload: RotationGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n rotationChange: current.rotation,\n };\n } else {\n changePayload = {\n rotationChange: current.rotation - previous.rotation,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class RotationGesture extends ContinousBaseGesture<\n RotationGestureHandlerEventPayload,\n RotationGestureChangeEventPayload\n> {\n constructor() {\n super();\n\n this.handlerName = 'RotationGestureHandler';\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n RotationGestureHandlerEventPayload & RotationGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, RotationGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type RotationGestureType = InstanceType;\n","import { BaseGestureConfig, BaseGesture } from './gesture';\nimport {\n TapGestureConfig,\n TapGestureHandlerEventPayload,\n} from '../TapGestureHandler';\n\nexport class TapGesture extends BaseGesture {\n public config: BaseGestureConfig & TapGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'TapGestureHandler';\n this.shouldCancelWhenOutside(true);\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n numberOfTaps(count: number) {\n this.config.numberOfTaps = count;\n return this;\n }\n\n maxDistance(maxDist: number) {\n this.config.maxDist = maxDist;\n return this;\n }\n\n maxDuration(duration: number) {\n this.config.maxDurationMs = duration;\n return this;\n }\n\n maxDelay(delay: number) {\n this.config.maxDelayMs = delay;\n return this;\n }\n\n maxDeltaX(delta: number) {\n this.config.maxDeltaX = delta;\n return this;\n }\n\n maxDeltaY(delta: number) {\n this.config.maxDeltaY = delta;\n return this;\n }\n}\n\nexport type TapGestureType = InstanceType;\n","import { isJestEnv } from '../utils';\nimport { GestureType } from './gestures/gesture';\nimport { GestureEvent, HandlerStateChangeEvent } from './gestureHandlerCommon';\n\nexport const handlerIDToTag: Record = {};\nconst gestures = new Map();\nconst oldHandlers = new Map();\nconst testIDs = new Map();\n\nlet handlerTag = 1;\n\nexport function getNextHandlerTag(): number {\n return handlerTag++;\n}\n\nexport function registerHandler(\n handlerTag: number,\n handler: GestureType,\n testID?: string\n) {\n gestures.set(handlerTag, handler);\n if (isJestEnv() && testID) {\n testIDs.set(testID, handlerTag);\n }\n}\n\nexport function registerOldGestureHandler(\n handlerTag: number,\n handler: GestureHandlerCallbacks\n) {\n oldHandlers.set(handlerTag, handler);\n}\n\nexport function unregisterHandler(handlerTag: number, testID?: string) {\n gestures.delete(handlerTag);\n if (isJestEnv() && testID) {\n testIDs.delete(testID);\n }\n}\n\nexport function findHandler(handlerTag: number) {\n return gestures.get(handlerTag);\n}\n\nexport function findOldGestureHandler(handlerTag: number) {\n return oldHandlers.get(handlerTag);\n}\n\nexport function findHandlerByTestID(testID: string) {\n const handlerTag = testIDs.get(testID);\n if (handlerTag !== undefined) {\n return findHandler(handlerTag) ?? null;\n }\n return null;\n}\n\nexport interface GestureHandlerCallbacks {\n onGestureEvent: (event: GestureEvent) => void;\n onGestureStateChange: (event: HandlerStateChangeEvent) => void;\n}\n","import { initialize } from './init';\n\nexport { Directions } from './Directions';\nexport { State } from './State';\nexport { default as gestureHandlerRootHOC } from './components/gestureHandlerRootHOC';\nexport { default as GestureHandlerRootView } from './components/GestureHandlerRootView';\nexport type {\n // event types\n GestureEvent,\n HandlerStateChangeEvent,\n // event payloads types\n GestureEventPayload,\n HandlerStateChangeEventPayload,\n // pointer events\n GestureTouchEvent,\n TouchData,\n // new api event types\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from './handlers/gestureHandlerCommon';\nexport type { GestureType } from './handlers/gestures/gesture';\nexport type {\n TapGestureHandlerEventPayload,\n TapGestureHandlerProps,\n} from './handlers/TapGestureHandler';\nexport type {\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureHandlerProps,\n} from './handlers/ForceTouchGestureHandler';\nexport type { ForceTouchGestureChangeEventPayload } from './handlers/gestures/forceTouchGesture';\nexport type {\n LongPressGestureHandlerEventPayload,\n LongPressGestureHandlerProps,\n} from './handlers/LongPressGestureHandler';\nexport type {\n PanGestureHandlerEventPayload,\n PanGestureHandlerProps,\n} from './handlers/PanGestureHandler';\nexport type { PanGestureChangeEventPayload } from './handlers/gestures/panGesture';\nexport type {\n PinchGestureHandlerEventPayload,\n PinchGestureHandlerProps,\n} from './handlers/PinchGestureHandler';\nexport type { PinchGestureChangeEventPayload } from './handlers/gestures/pinchGesture';\nexport type {\n RotationGestureHandlerEventPayload,\n RotationGestureHandlerProps,\n} from './handlers/RotationGestureHandler';\nexport type {\n FlingGestureHandlerEventPayload,\n FlingGestureHandlerProps,\n} from './handlers/FlingGestureHandler';\nexport { TapGestureHandler } from './handlers/TapGestureHandler';\nexport { ForceTouchGestureHandler } from './handlers/ForceTouchGestureHandler';\nexport { LongPressGestureHandler } from './handlers/LongPressGestureHandler';\nexport { PanGestureHandler } from './handlers/PanGestureHandler';\nexport { PinchGestureHandler } from './handlers/PinchGestureHandler';\nexport { RotationGestureHandler } from './handlers/RotationGestureHandler';\nexport { FlingGestureHandler } from './handlers/FlingGestureHandler';\nexport { default as createNativeWrapper } from './handlers/createNativeWrapper';\nexport type {\n NativeViewGestureHandlerPayload,\n NativeViewGestureHandlerProps,\n} from './handlers/NativeViewGestureHandler';\nexport { GestureDetector } from './handlers/gestures/GestureDetector';\nexport { GestureObjects as Gesture } from './handlers/gestures/gestureObjects';\nexport type { TapGestureType as TapGesture } from './handlers/gestures/tapGesture';\nexport type { PanGestureType as PanGesture } from './handlers/gestures/panGesture';\nexport type { FlingGestureType as FlingGesture } from './handlers/gestures/flingGesture';\nexport type { LongPressGestureType as LongPressGesture } from './handlers/gestures/longPressGesture';\nexport type { PinchGestureType as PinchGesture } from './handlers/gestures/pinchGesture';\nexport type { RotationGestureType as RotationGesture } from './handlers/gestures/rotationGesture';\nexport type { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';\nexport type { NativeGestureType as NativeGesture } from './handlers/gestures/nativeGesture';\nexport type { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';\nexport type {\n ComposedGestureType as ComposedGesture,\n RaceGestureType as RaceGesture,\n SimultaneousGestureType as SimultaneousGesture,\n ExclusiveGestureType as ExclusiveGesture,\n} from './handlers/gestures/gestureComposition';\nexport type { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';\nexport { NativeViewGestureHandler } from './handlers/NativeViewGestureHandler';\nexport type {\n RawButtonProps,\n BaseButtonProps,\n RectButtonProps,\n BorderlessButtonProps,\n} from './components/GestureButtons';\nexport {\n RawButton,\n BaseButton,\n RectButton,\n BorderlessButton,\n PureNativeButton,\n} from './components/GestureButtons';\nexport {\n TouchableHighlight,\n TouchableNativeFeedback,\n TouchableOpacity,\n TouchableWithoutFeedback,\n} from './components/touchables';\nexport {\n ScrollView,\n Switch,\n TextInput,\n DrawerLayoutAndroid,\n FlatList,\n RefreshControl,\n} from './components/GestureComponents';\nexport type {\n //events\n GestureHandlerGestureEvent,\n GestureHandlerStateChangeEvent,\n //event payloads\n GestureHandlerGestureEventNativeEvent,\n GestureHandlerStateChangeNativeEvent,\n NativeViewGestureHandlerGestureEvent,\n NativeViewGestureHandlerStateChangeEvent,\n TapGestureHandlerGestureEvent,\n TapGestureHandlerStateChangeEvent,\n ForceTouchGestureHandlerGestureEvent,\n ForceTouchGestureHandlerStateChangeEvent,\n LongPressGestureHandlerGestureEvent,\n LongPressGestureHandlerStateChangeEvent,\n PanGestureHandlerGestureEvent,\n PanGestureHandlerStateChangeEvent,\n PinchGestureHandlerGestureEvent,\n PinchGestureHandlerStateChangeEvent,\n RotationGestureHandlerGestureEvent,\n RotationGestureHandlerStateChangeEvent,\n FlingGestureHandlerGestureEvent,\n FlingGestureHandlerStateChangeEvent,\n // handlers props\n NativeViewGestureHandlerProperties,\n TapGestureHandlerProperties,\n LongPressGestureHandlerProperties,\n PanGestureHandlerProperties,\n PinchGestureHandlerProperties,\n RotationGestureHandlerProperties,\n FlingGestureHandlerProperties,\n ForceTouchGestureHandlerProperties,\n // buttons props\n RawButtonProperties,\n BaseButtonProperties,\n RectButtonProperties,\n BorderlessButtonProperties,\n} from './handlers/gestureHandlerTypesCompat';\n\nexport { default as Swipeable } from './components/Swipeable';\nexport type {\n DrawerLayoutProps,\n DrawerPosition,\n DrawerState,\n DrawerType,\n DrawerLockMode,\n DrawerKeyboardDismissMode,\n} from './components/DrawerLayout';\nexport { default as DrawerLayout } from './components/DrawerLayout';\n\nexport {\n enableExperimentalWebImplementation,\n enableLegacyWebImplementation,\n} from './EnableNewWebImplementation';\n\ninitialize();\n","import { startListening } from './handlers/gestures/eventReceiver';\nimport RNGestureHandlerModule from './RNGestureHandlerModule';\nimport { isFabric } from './utils';\n\nlet fabricInitialized = false;\n\nexport function initialize() {\n startListening();\n}\n\n// since isFabric() may give wrong results before the first render, we call this\n// method during render of GestureHandlerRootView\nexport function maybeInitializeFabric() {\n if (isFabric() && !fabricInitialized) {\n RNGestureHandlerModule.install();\n fabricInitialized = true;\n }\n}\n","import pack from 'react-native/package.json';\n\nconst [majorStr, minorStr] = pack.version.split('.');\nexport const REACT_NATIVE_VERSION = {\n major: parseInt(majorStr, 10),\n minor: parseInt(minorStr, 10),\n};\n\nexport function toArray(object: T | T[]): T[] {\n if (!Array.isArray(object)) {\n return [object];\n }\n\n return object;\n}\n\nexport type withPrevAndCurrentMapFn = (\n previous: Transformed | null,\n current: T\n) => Transformed;\nexport function withPrevAndCurrent(\n array: T[],\n mapFn: withPrevAndCurrentMapFn\n): Transformed[] {\n const previousArr: (null | Transformed)[] = [null];\n const currentArr = [...array];\n const transformedArr: Transformed[] = [];\n currentArr.forEach((current, i) => {\n const previous = previousArr[i];\n const transformed = mapFn(previous, current);\n previousArr.push(transformed);\n transformedArr.push(transformed);\n });\n return transformedArr;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function hasProperty(object: object, key: string) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nexport function isJestEnv(): boolean {\n // @ts-ignore Do not use `@types/node` because it will prioritise Node types over RN types which breaks the types (ex. setTimeout) in React Native projects.\n return hasProperty(global, 'process') && !!process.env.JEST_WORKER_ID;\n}\n\nexport function tagMessage(msg: string) {\n return `[react-native-gesture-handler] ${msg}`;\n}\n\n// helper method to check whether Fabric is enabled, however global.nativeFabricUIManager\n// may not be initialized before the first render\nexport function isFabric(): boolean {\n // @ts-expect-error nativeFabricUIManager is not yet included in the RN types\n return !!global?.nativeFabricUIManager;\n}\n\nexport function isRemoteDebuggingEnabled(): boolean {\n // react-native-reanimated checks if in remote debugging in the same way\n // @ts-ignore global is available but node types are not included\n return !(global as any).nativeCallSyncHook || (global as any).__REMOTEDEV__;\n}\n","export const DEFAULT_TOUCH_SLOP = 15;\n\nexport const Direction = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n};\n","import { AdaptedEvent, EventTypes } from '../interfaces';\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface RotationGestureListener {\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (detector: RotationGestureDetector) => boolean;\n onRotationEnd: (detector: RotationGestureDetector) => void;\n}\n\nexport default class RotationGestureDetector\n implements RotationGestureListener\n{\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (detector: RotationGestureDetector) => boolean;\n onRotationEnd: (detector: RotationGestureDetector) => void;\n\n private currentTime = 0;\n private previousTime = 0;\n\n private previousAngle = 0;\n private rotation = 0;\n\n private anchorX = 0;\n private anchorY = 0;\n\n private isInProgress = false;\n\n private keyPointers: number[] = [NaN, NaN];\n\n constructor(callbacks: RotationGestureListener) {\n this.onRotationBegin = callbacks.onRotationBegin;\n this.onRotation = callbacks.onRotation;\n this.onRotationEnd = callbacks.onRotationEnd;\n }\n\n private updateCurrent(event: AdaptedEvent, tracker: PointerTracker): void {\n this.previousTime = this.currentTime;\n this.currentTime = event.time;\n\n const [firstPointerID, secondPointerID] = this.keyPointers;\n\n const firstPointerX: number = tracker.getLastX(firstPointerID);\n const firstPointerY: number = tracker.getLastY(firstPointerID);\n const secondPointerX: number = tracker.getLastX(secondPointerID);\n const secondPointerY: number = tracker.getLastY(secondPointerID);\n\n const vectorX: number = secondPointerX - firstPointerX;\n const vectorY: number = secondPointerY - firstPointerY;\n\n this.anchorX = (firstPointerX + secondPointerX) / 2;\n this.anchorY = (firstPointerY + secondPointerY) / 2;\n\n //Angle diff should be positive when rotating in clockwise direction\n const angle: number = -Math.atan2(vectorY, vectorX);\n\n this.rotation = Number.isNaN(this.previousAngle)\n ? 0\n : this.previousAngle - angle;\n\n this.previousAngle = angle;\n\n if (this.rotation > Math.PI) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI) {\n this.rotation += Math.PI;\n }\n\n if (this.rotation > Math.PI / 2) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI / 2) {\n this.rotation += Math.PI;\n }\n }\n\n private finish(): void {\n if (!this.isInProgress) {\n return;\n }\n\n this.isInProgress = false;\n this.keyPointers = [NaN, NaN];\n this.onRotationEnd(this);\n }\n\n private setKeyPointers(tracker: PointerTracker): void {\n if (this.keyPointers[0] && this.keyPointers[1]) {\n return;\n }\n\n const pointerIDs: IterableIterator = tracker.getData().keys();\n\n this.keyPointers[0] = pointerIDs.next().value as number;\n this.keyPointers[1] = pointerIDs.next().value as number;\n }\n\n public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {\n switch (event.eventType) {\n case EventTypes.DOWN:\n this.isInProgress = false;\n break;\n\n case EventTypes.ADDITIONAL_POINTER_DOWN:\n if (this.isInProgress) {\n break;\n }\n this.isInProgress = true;\n\n this.previousTime = event.time;\n this.previousAngle = NaN;\n\n this.setKeyPointers(tracker);\n\n this.updateCurrent(event, tracker);\n this.onRotationBegin(this);\n break;\n\n case EventTypes.MOVE:\n if (!this.isInProgress) {\n break;\n }\n\n this.updateCurrent(event, tracker);\n this.onRotation(this);\n\n break;\n\n case EventTypes.ADDITIONAL_POINTER_UP:\n if (!this.isInProgress) {\n break;\n }\n\n if (this.keyPointers.indexOf(event.pointerId) >= 0) {\n this.finish();\n }\n\n break;\n\n case EventTypes.UP:\n if (this.isInProgress) {\n this.finish();\n }\n break;\n }\n\n return true;\n }\n\n public getTimeDelta(): number {\n return this.currentTime + this.previousTime;\n }\n\n public getAnchorX(): number {\n return this.anchorX;\n }\n\n public getAnchorY(): number {\n return this.anchorY;\n }\n\n public getRotation(): number {\n return this.rotation;\n }\n\n public reset(): void {\n this.keyPointers = [NaN, NaN];\n this.isInProgress = false;\n }\n}\n","import { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedEvent, EventTypes } from '../interfaces';\n\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface ScaleGestureListener {\n onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n onScale: (detector: ScaleGestureDetector) => boolean;\n onScaleEnd: (detector: ScaleGestureDetector) => void;\n}\n\nexport default class ScaleGestureDetector implements ScaleGestureListener {\n public onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n public onScale: (detector: ScaleGestureDetector) => boolean;\n public onScaleEnd: (detector: ScaleGestureDetector) => void;\n\n private focusX!: number;\n private focusY!: number;\n\n private currentSpan!: number;\n private prevSpan!: number;\n private initialSpan!: number;\n\n private currentTime!: number;\n private prevTime!: number;\n\n private inProgress = false;\n\n private spanSlop: number;\n private minSpan: number;\n\n public constructor(callbacks: ScaleGestureListener) {\n this.onScaleBegin = callbacks.onScaleBegin;\n this.onScale = callbacks.onScale;\n this.onScaleEnd = callbacks.onScaleEnd;\n\n this.spanSlop = DEFAULT_TOUCH_SLOP * 2;\n this.minSpan = 0;\n }\n\n public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {\n this.currentTime = event.time;\n\n const action: EventTypes = event.eventType;\n const numOfPointers = tracker.getTrackedPointersCount();\n\n const streamComplete: boolean =\n action === EventTypes.UP ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.CANCEL;\n\n if (action === EventTypes.DOWN || streamComplete) {\n if (this.inProgress) {\n this.onScaleEnd(this);\n this.inProgress = false;\n this.initialSpan = 0;\n }\n\n if (streamComplete) {\n return true;\n }\n }\n\n const configChanged: boolean =\n action === EventTypes.DOWN ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.ADDITIONAL_POINTER_DOWN;\n\n const pointerUp = action === EventTypes.ADDITIONAL_POINTER_UP;\n\n const ignoredPointer: number | undefined = pointerUp\n ? event.pointerId\n : undefined;\n\n //Determine focal point\n\n const div: number = pointerUp ? numOfPointers - 1 : numOfPointers;\n\n const sumX = tracker.getSumX(ignoredPointer);\n const sumY = tracker.getSumY(ignoredPointer);\n\n const focusX = sumX / div;\n const focusY = sumY / div;\n\n //Determine average deviation from focal point\n\n let devSumX = 0;\n let devSumY = 0;\n\n tracker.getData().forEach((value, key) => {\n if (key === ignoredPointer) {\n return;\n }\n\n devSumX += Math.abs(value.lastX - focusX);\n devSumY += Math.abs(value.lastY - focusY);\n });\n\n const devX: number = devSumX / div;\n const devY: number = devSumY / div;\n\n const spanX: number = devX * 2;\n const spanY: number = devY * 2;\n\n const span = Math.hypot(spanX, spanY);\n\n //Begin/end events\n const wasInProgress: boolean = this.inProgress;\n this.focusX = focusX;\n this.focusY = focusY;\n\n if (this.inProgress && (span < this.minSpan || configChanged)) {\n this.onScaleEnd(this);\n this.inProgress = false;\n this.initialSpan = span;\n }\n\n if (configChanged) {\n this.initialSpan = this.prevSpan = this.currentSpan = span;\n }\n\n if (\n !this.inProgress &&\n span >= this.minSpan &&\n (wasInProgress || Math.abs(span - this.initialSpan) > this.spanSlop)\n ) {\n this.prevSpan = this.currentSpan = span;\n this.prevTime = this.currentTime;\n this.inProgress = this.onScaleBegin(this);\n }\n\n //Handle motion\n if (action !== EventTypes.MOVE) {\n return true;\n }\n\n this.currentSpan = span;\n\n if (this.inProgress && !this.onScale(this)) {\n return true;\n }\n\n this.prevSpan = this.currentSpan;\n this.prevTime = this.currentTime;\n\n return true;\n }\n\n public getCurrentSpan(): number {\n return this.currentSpan;\n }\n\n public getFocusX(): number {\n return this.focusX;\n }\n\n public getFocusY(): number {\n return this.focusY;\n }\n\n public getTimeDelta(): number {\n return this.currentTime - this.prevTime;\n }\n\n public getScaleFactor(numOfPointers: number): number {\n if (numOfPointers < 2) {\n return 1;\n }\n\n return this.prevSpan > 0 ? this.currentSpan / this.prevSpan : 1;\n }\n}\n","import { State } from '../../State';\nimport { Direction } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 800;\nconst DEFAULT_MIN_ACCEPTABLE_DELTA = 160;\nconst DEFAULT_DIRECTION = Direction.RIGHT;\nconst DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;\n\nexport default class FlingGestureHandler extends GestureHandler {\n private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n private direction = DEFAULT_DIRECTION;\n\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;\n private delayTimeout!: number;\n\n private startX = 0;\n private startY = 0;\n\n private maxNumberOfPointersSimultaneously = 0;\n private keyPointer = NaN;\n\n public init(ref: number, propsRef: React.RefObject): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.direction) {\n this.direction = this.config.direction;\n }\n\n if (this.config.numberOfPointers) {\n this.numberOfPointersRequired = this.config.numberOfPointers;\n }\n }\n\n protected transformNativeEvent() {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return {\n x: this.tracker.getLastAvgX() - rect.left,\n y: this.tracker.getLastAvgY() - rect.top,\n absoluteX: this.tracker.getLastAvgX(),\n absoluteY: this.tracker.getLastAvgY(),\n };\n }\n\n private startFling(): void {\n this.startX = this.tracker.getLastX(this.keyPointer);\n this.startY = this.tracker.getLastY(this.keyPointer);\n\n this.begin();\n\n this.maxNumberOfPointersSimultaneously = 1;\n\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private tryEndFling(): boolean {\n if (\n this.maxNumberOfPointersSimultaneously ===\n this.numberOfPointersRequired &&\n ((this.direction & Direction.RIGHT &&\n this.tracker.getLastX(this.keyPointer) - this.startX >\n this.minAcceptableDelta) ||\n (this.direction & Direction.LEFT &&\n this.startX - this.tracker.getLastX(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.UP &&\n this.startY - this.tracker.getLastY(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.DOWN &&\n this.tracker.getLastY(this.keyPointer) - this.startY >\n this.minAcceptableDelta))\n ) {\n clearTimeout(this.delayTimeout);\n this.activate();\n\n return true;\n }\n\n return false;\n }\n\n private endFling() {\n if (!this.tryEndFling()) {\n this.fail();\n }\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n this.keyPointer = event.pointerId;\n\n super.onPointerDown(event);\n this.newPointerAction();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.newPointerAction();\n }\n\n private newPointerAction(): void {\n if (this.currentState === State.UNDETERMINED) {\n this.startFling();\n }\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n if (\n this.tracker.getTrackedPointersCount() >\n this.maxNumberOfPointersSimultaneously\n ) {\n this.maxNumberOfPointersSimultaneously =\n this.tracker.getTrackedPointersCount();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n super.onPointerMove(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.onUp(event);\n\n this.keyPointer = NaN;\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.onUp(event);\n }\n\n private onUp(event: AdaptedEvent): void {\n this.tracker.removeFromTracker(event.pointerId);\n if (this.currentState !== State.BEGAN) {\n return;\n }\n this.endFling();\n }\n\n public activate(force?: boolean): void {\n super.activate(force);\n this.end();\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n this.direction = DEFAULT_DIRECTION;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { findNodeHandle } from 'react-native';\nimport { State } from '../../State';\nimport {\n Config,\n AdaptedEvent,\n PropsRef,\n ResultEvent,\n PointerData,\n ResultTouchEvent,\n PointerType,\n TouchEventType,\n EventTypes,\n} from '../interfaces';\nimport EventManager from '../tools/EventManager';\nimport GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';\nimport InteractionManager from '../tools/InteractionManager';\nimport PointerEventManager from '../tools/PointerEventManager';\nimport PointerTracker, { TrackerElement } from '../tools/PointerTracker';\nimport TouchEventManager from '../tools/TouchEventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default abstract class GestureHandler {\n private lastSentState: State | null = null;\n protected currentState: State = State.UNDETERMINED;\n\n protected shouldCancellWhenOutside = false;\n protected hasCustomActivationCriteria: boolean;\n protected enabled = false;\n\n private ref!: number;\n private propsRef!: React.RefObject;\n private handlerTag!: number;\n protected config: Config = { enabled: false };\n protected view!: HTMLElement;\n\n protected eventManagers: EventManager[] = [];\n protected tracker: PointerTracker = new PointerTracker();\n\n // Orchestrator properties\n protected activationIndex = 0;\n protected awaiting = false;\n protected active = false;\n protected shouldResetProgress = false;\n protected pointerType: PointerType = PointerType.NONE;\n\n public constructor() {\n this.hasCustomActivationCriteria = false;\n }\n\n //\n // Initializing handler\n //\n\n protected init(ref: number, propsRef: React.RefObject) {\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.currentState = State.UNDETERMINED;\n\n this.setView();\n this.addEventManager(new PointerEventManager(this.view));\n this.addEventManager(new TouchEventManager(this.view));\n }\n\n private setView() {\n if (!this.ref) {\n throw new Error(\n `Cannot find HTML Element for handler ${this.handlerTag}`\n );\n }\n\n this.view = findNodeHandle(this.ref) as unknown as HTMLElement;\n this.view.style['touchAction'] = 'none';\n //@ts-ignore This one disables default events on Safari\n this.view.style['WebkitTouchCallout'] = 'none';\n\n if (!this.config.userSelect) {\n this.view.style['webkitUserSelect'] = 'none';\n this.view.style['userSelect'] = 'none';\n } else {\n this.view.style['webkitUserSelect'] = this.config.userSelect;\n this.view.style['userSelect'] = this.config.userSelect;\n }\n }\n\n private addEventManager(manager: EventManager): void {\n manager.setOnPointerDown(this.onPointerDown.bind(this));\n manager.setOnPointerAdd(this.onPointerAdd.bind(this));\n manager.setOnPointerUp(this.onPointerUp.bind(this));\n manager.setOnPointerRemove(this.onPointerRemove.bind(this));\n manager.setOnPointerMove(this.onPointerMove.bind(this));\n manager.setOnPointerEnter(this.onPointerEnter.bind(this));\n manager.setOnPointerOut(this.onPointerOut.bind(this));\n manager.setOnPointerCancel(this.onPointerCancel.bind(this));\n manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));\n manager.setListeners();\n\n this.eventManagers.push(manager);\n }\n\n //\n // Resetting handler\n //\n\n protected onCancel(): void {}\n protected onReset(): void {}\n protected resetProgress(): void {}\n\n public reset(): void {\n this.tracker.resetTracker();\n this.onReset();\n this.resetProgress();\n this.eventManagers.forEach((manager: EventManager) =>\n manager.resetManager()\n );\n this.currentState = State.UNDETERMINED;\n }\n\n //\n // State logic\n //\n\n public moveToState(newState: State, sendIfDisabled?: boolean) {\n if (this.currentState === newState) {\n return;\n }\n\n const oldState = this.currentState;\n this.currentState = newState;\n\n if (\n this.tracker.getTrackedPointersCount() > 0 &&\n this.config.needsPointerData &&\n this.isFinished()\n ) {\n this.cancelTouches();\n }\n\n GestureHandlerOrchestrator.getInstance().onHandlerStateChange(\n this,\n newState,\n oldState,\n sendIfDisabled\n );\n\n this.onStateChange(newState, oldState);\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {}\n\n public begin(): void {\n if (!this.checkHitSlop()) {\n return;\n }\n\n if (this.currentState === State.UNDETERMINED) {\n this.moveToState(State.BEGAN);\n }\n }\n\n /**\n * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event\n */\n public fail(sendIfDisabled?: boolean): void {\n if (\n this.currentState === State.ACTIVE ||\n this.currentState === State.BEGAN\n ) {\n this.moveToState(State.FAILED, sendIfDisabled);\n this.view.style.cursor = 'auto';\n }\n\n this.resetProgress();\n }\n\n /**\n * @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event\n */\n public cancel(sendIfDisabled?: boolean): void {\n if (\n this.currentState === State.ACTIVE ||\n this.currentState === State.UNDETERMINED ||\n this.currentState === State.BEGAN\n ) {\n this.onCancel();\n this.moveToState(State.CANCELLED, sendIfDisabled);\n this.view.style.cursor = 'auto';\n }\n }\n\n public activate(_force = false) {\n if (\n this.currentState === State.UNDETERMINED ||\n this.currentState === State.BEGAN\n ) {\n this.moveToState(State.ACTIVE);\n this.view.style.cursor = 'grab';\n }\n }\n\n public end() {\n if (\n this.currentState === State.BEGAN ||\n this.currentState === State.ACTIVE\n ) {\n this.moveToState(State.END);\n this.view.style.cursor = 'auto';\n }\n\n this.resetProgress();\n }\n\n //\n // Methods for orchestrator\n //\n\n public isAwaiting(): boolean {\n return this.awaiting;\n }\n public setAwaiting(value: boolean): void {\n this.awaiting = value;\n }\n\n public isActive(): boolean {\n return this.active;\n }\n public setActive(value: boolean): void {\n this.active = value;\n }\n\n public getShouldResetProgress(): boolean {\n return this.shouldResetProgress;\n }\n public setShouldResetProgress(value: boolean): void {\n this.shouldResetProgress = value;\n }\n\n public getActivationIndex(): number {\n return this.activationIndex;\n }\n public setActivationIndex(value: number): void {\n this.activationIndex = value;\n }\n\n public shouldWaitForHandlerFailure(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return InteractionManager.getInstance().shouldWaitForHandlerFailure(\n this,\n handler\n );\n }\n\n public shouldRequireToWaitForFailure(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(\n this,\n handler\n );\n }\n\n public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {\n if (handler === this) {\n return true;\n }\n\n return InteractionManager.getInstance().shouldRecognizeSimultaneously(\n this,\n handler\n );\n }\n\n public shouldBeCancelledByOther(handler: GestureHandler): boolean {\n if (handler === this) {\n return false;\n }\n\n return InteractionManager.getInstance().shouldHandlerBeCancelledBy(\n this,\n handler\n );\n }\n\n //\n // Event actions\n //\n\n protected onPointerDown(event: AdaptedEvent): void {\n GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);\n this.pointerType = event.pointerType;\n\n if (this.pointerType === PointerType.TOUCH) {\n GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);\n }\n\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n // Adding another pointer to existing ones\n protected onPointerAdd(event: AdaptedEvent): void {\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n protected onPointerUp(event: AdaptedEvent): void {\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n // Removing pointer, when there is more than one pointers\n protected onPointerRemove(event: AdaptedEvent): void {\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n protected onPointerMove(event: AdaptedEvent): void {\n this.tryToSendMoveEvent(false);\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n protected onPointerOut(event: AdaptedEvent): void {\n if (this.shouldCancellWhenOutside) {\n switch (this.currentState) {\n case State.ACTIVE:\n this.cancel();\n break;\n case State.BEGAN:\n this.fail();\n break;\n }\n return;\n }\n\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n protected onPointerEnter(event: AdaptedEvent): void {\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n protected onPointerCancel(event: AdaptedEvent): void {\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n\n this.cancel();\n this.reset();\n }\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n this.tryToSendMoveEvent(true);\n if (this.config.needsPointerData) {\n this.sendTouchEvent(event);\n }\n }\n private tryToSendMoveEvent(out: boolean): void {\n if (\n this.enabled &&\n this.active &&\n (!out || (out && !this.shouldCancellWhenOutside))\n ) {\n this.sendEvent(this.currentState, this.currentState);\n }\n }\n\n public sendTouchEvent(event: AdaptedEvent): void {\n if (!this.enabled) {\n return;\n }\n\n const { onGestureHandlerEvent }: PropsRef = this.propsRef\n .current as PropsRef;\n\n const touchEvent: ResultTouchEvent | undefined =\n this.transformTouchEvent(event);\n\n if (touchEvent) {\n invokeNullableMethod(onGestureHandlerEvent, touchEvent);\n }\n }\n\n //\n // Events Sending\n //\n\n public sendEvent = (newState: State, oldState: State): void => {\n const { onGestureHandlerEvent, onGestureHandlerStateChange }: PropsRef =\n this.propsRef.current as PropsRef;\n\n const resultEvent: ResultEvent = this.transformEventData(\n newState,\n oldState\n );\n\n // In the new API oldState field has to be undefined, unless we send event state changed\n // Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back\n // Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once\n // However, this may cause trouble in the future (but for now we don't know that)\n\n if (this.lastSentState !== newState) {\n this.lastSentState = newState;\n invokeNullableMethod(onGestureHandlerStateChange, resultEvent);\n }\n if (this.currentState === State.ACTIVE) {\n resultEvent.nativeEvent.oldState = undefined;\n invokeNullableMethod(onGestureHandlerEvent, resultEvent);\n }\n };\n\n private transformEventData(newState: State, oldState: State): ResultEvent {\n return {\n nativeEvent: {\n numberOfPointers: this.tracker.getTrackedPointersCount(),\n state: newState,\n pointerInside: isPointerInBounds(this.view, {\n x: this.tracker.getLastAvgX(),\n y: this.tracker.getLastAvgY(),\n }),\n ...this.transformNativeEvent(),\n handlerTag: this.handlerTag,\n target: this.ref,\n oldState: newState !== oldState ? oldState : undefined,\n },\n timeStamp: Date.now(),\n };\n }\n\n private transformTouchEvent(\n event: AdaptedEvent\n ): ResultTouchEvent | undefined {\n const rect = this.view.getBoundingClientRect();\n\n const all: PointerData[] = [];\n const changed: PointerData[] = [];\n\n const trackerData = this.tracker.getData();\n\n // This if handles edge case where all pointers have been cancelled\n // When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled\n // The problem is, that handler will receive another pointercancel event from the rest of the pointers\n // To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset\n if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {\n return;\n }\n\n trackerData.forEach((element: TrackerElement, key: number): void => {\n const id: number = this.tracker.getMappedTouchEventId(key);\n\n all.push({\n id: id,\n x: element.lastX - rect.left,\n y: element.lastY - rect.top,\n absoluteX: element.lastX,\n absoluteY: element.lastY,\n });\n });\n\n // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.\n // However, if the event is cancel, we want to cancel all pointers to avoid crashes\n if (event.eventType !== EventTypes.CANCEL) {\n changed.push({\n id: this.tracker.getMappedTouchEventId(event.pointerId),\n x: event.x - rect.left,\n y: event.y - rect.top,\n absoluteX: event.x,\n absoluteY: event.y,\n });\n } else {\n trackerData.forEach((element: TrackerElement, key: number): void => {\n const id: number = this.tracker.getMappedTouchEventId(key);\n\n changed.push({\n id: id,\n x: element.lastX - rect.left,\n y: element.lastY - rect.top,\n absoluteX: element.lastX,\n absoluteY: element.lastY,\n });\n });\n }\n\n let eventType: TouchEventType = TouchEventType.UNDETERMINED;\n\n switch (event.eventType) {\n case EventTypes.DOWN:\n case EventTypes.ADDITIONAL_POINTER_DOWN:\n eventType = TouchEventType.DOWN;\n break;\n case EventTypes.UP:\n case EventTypes.ADDITIONAL_POINTER_UP:\n eventType = TouchEventType.UP;\n break;\n case EventTypes.MOVE:\n eventType = TouchEventType.MOVE;\n break;\n case EventTypes.CANCEL:\n eventType = TouchEventType.CANCELLED;\n break;\n }\n\n // Here, when we receive up event, we want to decrease number of touches\n // That's because we want handler to send information that there's one pointer less\n // However, we still want this pointer to be present in allTouches array, so that its data can be accessed\n let numberOfTouches: number = all.length;\n\n if (\n event.eventType === EventTypes.UP ||\n event.eventType === EventTypes.ADDITIONAL_POINTER_UP\n ) {\n --numberOfTouches;\n }\n\n return {\n nativeEvent: {\n handlerTag: this.handlerTag,\n state: this.currentState,\n eventType: event.touchEventType ?? eventType,\n changedTouches: changed,\n allTouches: all,\n numberOfTouches: numberOfTouches,\n },\n timeStamp: Date.now(),\n };\n }\n\n private cancelTouches(): void {\n const rect = this.view.getBoundingClientRect();\n\n const all: PointerData[] = [];\n const changed: PointerData[] = [];\n\n const trackerData = this.tracker.getData();\n\n if (trackerData.size === 0) {\n return;\n }\n\n trackerData.forEach((element: TrackerElement, key: number): void => {\n const id: number = this.tracker.getMappedTouchEventId(key);\n\n all.push({\n id: id,\n x: element.lastX - rect.left,\n y: element.lastY - rect.top,\n absoluteX: element.lastX,\n absoluteY: element.lastY,\n });\n\n changed.push({\n id: id,\n x: element.lastX - rect.left,\n y: element.lastY - rect.top,\n absoluteX: element.lastX,\n absoluteY: element.lastY,\n });\n });\n\n const cancelEvent: ResultTouchEvent = {\n nativeEvent: {\n handlerTag: this.handlerTag,\n state: this.currentState,\n eventType: TouchEventType.CANCELLED,\n changedTouches: changed,\n allTouches: all,\n numberOfTouches: all.length,\n },\n timeStamp: Date.now(),\n };\n\n const { onGestureHandlerEvent }: PropsRef = this.propsRef\n .current as PropsRef;\n\n invokeNullableMethod(onGestureHandlerEvent, cancelEvent);\n }\n\n protected transformNativeEvent() {\n return {};\n }\n\n //\n // Handling config\n //\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n this.config = { enabled: enabled, ...props };\n this.enabled = enabled;\n\n if (this.config.shouldCancelWhenOutside !== undefined) {\n this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);\n }\n\n this.validateHitSlops();\n\n if (this.enabled) {\n return;\n }\n\n switch (this.currentState) {\n case State.ACTIVE:\n this.fail(true);\n break;\n case State.UNDETERMINED:\n GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(\n this\n );\n break;\n default:\n this.cancel(true);\n break;\n }\n }\n\n protected checkCustomActivationCriteria(criterias: string[]): void {\n for (const key in this.config) {\n if (criterias.indexOf(key) >= 0) {\n this.hasCustomActivationCriteria = true;\n }\n }\n }\n\n private validateHitSlops(): void {\n if (!this.config.hitSlop) {\n return;\n }\n\n if (\n this.config.hitSlop.left !== undefined &&\n this.config.hitSlop.right !== undefined &&\n this.config.hitSlop.width !== undefined\n ) {\n throw new Error(\n 'HitSlop Error: Cannot define left, right and width at the same time'\n );\n }\n\n if (\n this.config.hitSlop.width !== undefined &&\n this.config.hitSlop.left === undefined &&\n this.config.hitSlop.right === undefined\n ) {\n throw new Error(\n 'HitSlop Error: When width is defined, either left or right has to be defined'\n );\n }\n\n if (\n this.config.hitSlop.height !== undefined &&\n this.config.hitSlop.top !== undefined &&\n this.config.hitSlop.bottom !== undefined\n ) {\n throw new Error(\n 'HitSlop Error: Cannot define top, bottom and height at the same time'\n );\n }\n\n if (\n this.config.hitSlop.height !== undefined &&\n this.config.hitSlop.top === undefined &&\n this.config.hitSlop.bottom === undefined\n ) {\n throw new Error(\n 'HitSlop Error: When height is defined, either top or bottom has to be defined'\n );\n }\n }\n\n private checkHitSlop(): boolean {\n if (!this.config.hitSlop) {\n return true;\n }\n\n const width = this.view.getBoundingClientRect().width;\n const height = this.view.getBoundingClientRect().height;\n\n let left = 0;\n let top = 0;\n let right: number = width;\n let bottom: number = height;\n\n if (this.config.hitSlop.horizontal !== undefined) {\n left -= this.config.hitSlop.horizontal;\n right += this.config.hitSlop.horizontal;\n }\n\n if (this.config.hitSlop.vertical !== undefined) {\n top -= this.config.hitSlop.vertical;\n bottom += this.config.hitSlop.vertical;\n }\n\n if (this.config.hitSlop.left !== undefined) {\n left = -this.config.hitSlop.left;\n }\n\n if (this.config.hitSlop.right !== undefined) {\n right = width + this.config.hitSlop.right;\n }\n\n if (this.config.hitSlop.top !== undefined) {\n top = -this.config.hitSlop.top;\n }\n\n if (this.config.hitSlop.bottom !== undefined) {\n bottom = width + this.config.hitSlop.bottom;\n }\n if (this.config.hitSlop.width !== undefined) {\n if (this.config.hitSlop.left !== undefined) {\n right = left + this.config.hitSlop.width;\n } else if (this.config.hitSlop.right !== undefined) {\n left = right - this.config.hitSlop.width;\n }\n }\n\n if (this.config.hitSlop.height !== undefined) {\n if (this.config.hitSlop.top !== undefined) {\n bottom = top + this.config.hitSlop.height;\n } else if (this.config.hitSlop.bottom !== undefined) {\n top = bottom - this.config.hitSlop.height;\n }\n }\n\n const rect: DOMRect = this.view.getBoundingClientRect();\n const offsetX: number = this.tracker.getLastX() - rect.left;\n const offsetY: number = this.tracker.getLastY() - rect.top;\n\n if (\n offsetX >= left &&\n offsetX <= right &&\n offsetY >= top &&\n offsetY <= bottom\n ) {\n return true;\n }\n return false;\n }\n\n public isPointerInBounds({ x, y }: { x: number; y: number }): boolean {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return (\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n );\n }\n\n protected resetConfig(): void {}\n\n //\n // Getters and setters\n //\n\n public getTag(): number {\n return this.handlerTag;\n }\n public setTag(tag: number): void {\n this.handlerTag = tag;\n }\n\n protected getConfig() {\n return this.config;\n }\n\n public getShouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n public getView(): HTMLElement {\n return this.view;\n }\n\n public getEventManagers(): EventManager[] {\n return this.eventManagers;\n }\n\n public getTracker(): PointerTracker {\n return this.tracker;\n }\n\n public getTrackedPointersID(): number[] {\n return this.tracker.getTrackedPointersID();\n }\n\n public getState(): State {\n return this.currentState;\n }\n\n public isEnabled(): boolean {\n return this.enabled;\n }\n\n private isFinished(): boolean {\n return (\n this.currentState === State.END ||\n this.currentState === State.FAILED ||\n this.currentState === State.CANCELLED\n );\n }\n\n protected setShouldCancelWhenOutside(shouldCancel: boolean) {\n this.shouldCancellWhenOutside = shouldCancel;\n }\n protected getShouldCancelWhenOutside(): boolean {\n return this.shouldCancellWhenOutside;\n }\n\n public getPointerType(): PointerType {\n return this.pointerType;\n }\n}\n\nfunction invokeNullableMethod(\n method:\n | ((event: ResultEvent | ResultTouchEvent) => void)\n | { __getHandler: () => (event: ResultEvent | ResultTouchEvent) => void }\n | { __nodeConfig: { argMapping: unknown[] } },\n event: ResultEvent | ResultTouchEvent\n): void {\n if (!method) {\n return;\n }\n\n if (typeof method === 'function') {\n method(event);\n return;\n }\n\n if ('__getHandler' in method && typeof method.__getHandler === 'function') {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n return;\n }\n\n if (!('__nodeConfig' in method)) {\n return;\n }\n\n const { argMapping } = method.__nodeConfig;\n if (!Array.isArray(argMapping)) {\n return;\n }\n\n for (const [index, [key, value]] of argMapping.entries()) {\n if (!(key in event.nativeEvent)) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const nativeValue = event.nativeEvent[key];\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (value?.setValue) {\n //Reanimated API\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n value.setValue(nativeValue);\n } else {\n //RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n\n return;\n}\n","import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject) {\n super.init(ref, propsRef);\n\n this.view.oncontextmenu = () => false;\n }\n\n protected transformNativeEvent() {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return {\n x: this.tracker.getLastAvgX() - rect.left,\n y: this.tracker.getLastAvgY() - rect.top,\n absoluteX: this.tracker.getLastAvgX(),\n absoluteY: this.tracker.getLastAvgY(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n this.tryBegin(event);\n this.tryActivate();\n this.checkDistanceFail(event);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n private tryBegin(event: AdaptedEvent): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n\n this.startX = event.x;\n this.startY = event.y;\n }\n\n private tryActivate(): void {\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(event: AdaptedEvent): void {\n const dx = event.x - this.startX;\n const dy = event.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n","import { AdaptedEvent, Config } from '../interfaces';\nimport GestureHandler from './GestureHandler';\n\nexport default class ManualGestureHandler extends GestureHandler {\n public init(ref: number, propsRef: React.RefObject) {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n this.begin();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n this.tracker.track(event);\n super.onPointerOutOfBounds(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n }\n}\n","import { State } from '../../State';\nimport { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\nexport default class NativeViewGestureHandler extends GestureHandler {\n private buttonRole!: boolean;\n\n //TODO: Implement logic for activation on start\n //@ts-ignore Logic yet to be implemented\n private shouldActivateOnStart = false;\n private disallowInterruption = false;\n\n private startX = 0;\n private startY = 0;\n private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;\n\n public init(ref: number, propsRef: React.RefObject): void {\n super.init(ref, propsRef);\n\n this.setShouldCancelWhenOutside(true);\n\n this.view.style['touchAction'] = 'auto';\n\n //@ts-ignore Turns on defualt touch behavior on Safari\n this.view.style['WebkitTouchCallout'] = 'auto';\n\n if (this.view.hasAttribute('role')) {\n this.buttonRole = true;\n } else {\n this.buttonRole = false;\n }\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.shouldActivateOnStart !== undefined) {\n this.shouldActivateOnStart = this.config.shouldActivateOnStart;\n }\n if (this.config.disallowInterruption !== undefined) {\n this.disallowInterruption = this.config.disallowInterruption;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n this.newPointerAction();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.newPointerAction();\n }\n\n private newPointerAction(): void {\n this.startX = this.tracker.getLastAvgX();\n this.startY = this.tracker.getLastAvgY();\n\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.begin();\n if (this.buttonRole) {\n this.activate();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n const dx = this.startX - this.tracker.getLastAvgX();\n const dy = this.startY - this.tracker.getLastAvgY();\n const distSq = dx * dx + dy * dy;\n\n if (distSq >= this.minDistSq) {\n if (this.buttonRole && this.currentState === State.ACTIVE) {\n this.cancel();\n } else if (!this.buttonRole && this.currentState === State.BEGAN) {\n this.activate();\n }\n }\n }\n\n protected onPointerOut(): void {\n if (\n this.currentState === State.BEGAN ||\n this.currentState === State.ACTIVE\n ) {\n this.cancel();\n }\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.onUp(event);\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.onUp(event);\n }\n\n private onUp(event: AdaptedEvent): void {\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.tracker.getTrackedPointersCount() === 0) {\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n }\n\n public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {\n if (super.shouldRecognizeSimultaneously(handler)) {\n return true;\n }\n\n if (\n handler instanceof NativeViewGestureHandler &&\n handler.getState() === State.ACTIVE &&\n handler.disallowsInterruption()\n ) {\n return false;\n }\n\n const canBeInterrupted = !this.disallowInterruption;\n\n if (\n this.currentState === State.ACTIVE &&\n handler.getState() === State.ACTIVE &&\n canBeInterrupted\n ) {\n return false;\n }\n\n return (\n this.currentState === State.ACTIVE &&\n canBeInterrupted &&\n handler.getTag() > 0\n );\n }\n\n public shouldBeCancelledByOther(_handler: GestureHandler): boolean {\n return !this.disallowInterruption;\n }\n\n public disallowsInterruption(): boolean {\n return this.disallowInterruption;\n }\n}\n","import { State } from '../../State';\nimport { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_POINTERS = 1;\nconst DEFAULT_MAX_POINTERS = 10;\nconst DEFAULT_MIN_DIST_SQ = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;\n\nexport default class PanGestureHandler extends GestureHandler {\n private readonly customActivationProperties: string[] = [\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'failOffsetXStart',\n 'failOffsetXEnd',\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n 'failOffsetYStart',\n 'failOffsetYEnd',\n 'minVelocityX',\n 'minVelocityY',\n ];\n\n public velocityX = 0;\n public velocityY = 0;\n\n private minDistSq = DEFAULT_MIN_DIST_SQ;\n\n private activeOffsetXStart = -Number.MAX_SAFE_INTEGER;\n private activeOffsetXEnd = Number.MIN_SAFE_INTEGER;\n private failOffsetXStart = Number.MIN_SAFE_INTEGER;\n private failOffsetXEnd = Number.MAX_SAFE_INTEGER;\n\n private activeOffsetYStart = Number.MAX_SAFE_INTEGER;\n private activeOffsetYEnd = Number.MIN_SAFE_INTEGER;\n private failOffsetYStart = Number.MIN_SAFE_INTEGER;\n private failOffsetYEnd = Number.MAX_SAFE_INTEGER;\n\n private minVelocityX = Number.MAX_SAFE_INTEGER;\n private minVelocityY = Number.MAX_SAFE_INTEGER;\n private minVelocitySq = Number.MAX_SAFE_INTEGER;\n\n private minPointers = DEFAULT_MIN_POINTERS;\n private maxPointers = DEFAULT_MAX_POINTERS;\n\n private startX = 0;\n private startY = 0;\n private offsetX = 0;\n private offsetY = 0;\n private lastX = 0;\n private lastY = 0;\n\n private activateAfterLongPress = 0;\n private activationTimeout = 0;\n\n public init(ref: number, propsRef: React.RefObject): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n this.resetConfig();\n\n super.updateGestureConfig({ enabled: enabled, ...props });\n this.checkCustomActivationCriteria(this.customActivationProperties);\n\n if (this.config.minDist !== undefined) {\n this.minDistSq = this.config.minDist * this.config.minDist;\n } else if (this.hasCustomActivationCriteria) {\n this.minDistSq = Number.MAX_SAFE_INTEGER;\n }\n\n if (this.config.minPointers !== undefined) {\n this.minPointers = this.config.minPointers;\n }\n\n if (this.config.maxPointers !== undefined) {\n this.maxPointers = this.config.maxPointers;\n }\n\n if (this.config.minVelocity !== undefined) {\n this.minVelocityX = this.config.minVelocity;\n this.minVelocityY = this.config.minVelocity;\n }\n\n if (this.config.minVelocityX !== undefined) {\n this.minVelocityX = this.config.minVelocityX;\n }\n\n if (this.config.minVelocityY !== undefined) {\n this.minVelocityY = this.config.minVelocityY;\n }\n\n if (this.config.activateAfterLongPress !== undefined) {\n this.activateAfterLongPress = this.config.activateAfterLongPress;\n }\n\n if (this.config.activeOffsetXStart !== undefined) {\n this.activeOffsetXStart = this.config.activeOffsetXStart;\n\n if (this.config.activeOffsetXEnd === undefined) {\n this.activeOffsetXEnd = Number.MAX_SAFE_INTEGER;\n }\n }\n\n if (this.config.activeOffsetXEnd !== undefined) {\n this.activeOffsetXEnd = this.config.activeOffsetXEnd;\n\n if (this.config.activeOffsetXStart === undefined) {\n this.activeOffsetXStart = Number.MIN_SAFE_INTEGER;\n }\n }\n\n if (this.config.failOffsetXStart !== undefined) {\n this.failOffsetXStart = this.config.failOffsetXStart;\n\n if (this.config.failOffsetXEnd === undefined) {\n this.failOffsetXEnd = Number.MAX_SAFE_INTEGER;\n }\n }\n\n if (this.config.failOffsetXEnd !== undefined) {\n this.failOffsetXEnd = this.config.failOffsetXEnd;\n\n if (this.config.failOffsetXStart === undefined) {\n this.failOffsetXStart = Number.MIN_SAFE_INTEGER;\n }\n }\n\n if (this.config.activeOffsetYStart !== undefined) {\n this.activeOffsetYStart = this.config.activeOffsetYStart;\n\n if (this.config.activeOffsetYEnd === undefined) {\n this.activeOffsetYEnd = Number.MAX_SAFE_INTEGER;\n }\n }\n\n if (this.config.activeOffsetYEnd !== undefined) {\n this.activeOffsetYEnd = this.config.activeOffsetYEnd;\n\n if (this.config.activeOffsetYStart === undefined) {\n this.activeOffsetYStart = Number.MIN_SAFE_INTEGER;\n }\n }\n\n if (this.config.failOffsetYStart !== undefined) {\n this.failOffsetYStart = this.config.failOffsetYStart;\n\n if (this.config.failOffsetYEnd === undefined) {\n this.failOffsetYEnd = Number.MAX_SAFE_INTEGER;\n }\n }\n\n if (this.config.failOffsetYEnd !== undefined) {\n this.failOffsetYEnd = this.config.failOffsetYEnd;\n\n if (this.config.failOffsetYStart === undefined) {\n this.failOffsetYStart = Number.MIN_SAFE_INTEGER;\n }\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n\n this.activeOffsetXStart = -Number.MAX_SAFE_INTEGER;\n this.activeOffsetXEnd = Number.MIN_SAFE_INTEGER;\n this.failOffsetXStart = Number.MIN_SAFE_INTEGER;\n this.failOffsetXEnd = Number.MAX_SAFE_INTEGER;\n\n this.activeOffsetYStart = Number.MAX_SAFE_INTEGER;\n this.activeOffsetYEnd = Number.MIN_SAFE_INTEGER;\n this.failOffsetYStart = Number.MIN_SAFE_INTEGER;\n this.failOffsetYEnd = Number.MAX_SAFE_INTEGER;\n\n this.minVelocityX = Number.MAX_SAFE_INTEGER;\n this.minVelocityY = Number.MAX_SAFE_INTEGER;\n this.minVelocitySq = Number.MAX_SAFE_INTEGER;\n\n this.minDistSq = DEFAULT_MIN_DIST_SQ;\n\n this.minPointers = DEFAULT_MIN_POINTERS;\n this.maxPointers = DEFAULT_MAX_POINTERS;\n\n this.activateAfterLongPress = 0;\n }\n\n protected transformNativeEvent() {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n const translationX: number = this.getTranslationX();\n const translationY: number = this.getTranslationY();\n\n return {\n translationX: isNaN(translationX) ? 0 : translationX,\n translationY: isNaN(translationY) ? 0 : translationY,\n absoluteX: this.tracker.getLastAvgX(),\n absoluteY: this.tracker.getLastAvgY(),\n velocityX: this.velocityX,\n velocityY: this.velocityY,\n x: this.tracker.getLastAvgX() - rect.left,\n y: this.tracker.getLastAvgY() - rect.top,\n };\n }\n\n private getTranslationX(): number {\n return this.lastX - this.startX + this.offsetX;\n }\n private getTranslationY(): number {\n return this.lastY - this.startY + this.offsetY;\n }\n\n private clearActivationTimeout(): void {\n clearTimeout(this.activationTimeout);\n }\n\n //EventsHandling\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.tryBegin(event);\n this.checkBegan();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.tryBegin(event);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY - this.startY;\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n\n if (this.tracker.getTrackedPointersCount() > this.maxPointers) {\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n } else {\n this.checkBegan();\n }\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n\n if (this.currentState === State.ACTIVE) {\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n }\n\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.resetProgress();\n this.fail();\n }\n }\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY - this.startY;\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n\n if (\n !(\n this.currentState === State.ACTIVE &&\n this.tracker.getTrackedPointersCount() < this.minPointers\n )\n ) {\n this.checkBegan();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n this.velocityX = this.tracker.getVelocityX(event.pointerId);\n this.velocityY = this.tracker.getVelocityY(event.pointerId);\n\n this.checkBegan();\n\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n if (this.getShouldCancelWhenOutside()) {\n return;\n }\n\n this.tracker.track(event);\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n this.velocityX = this.tracker.getVelocityX(event.pointerId);\n this.velocityY = this.tracker.getVelocityY(event.pointerId);\n\n this.checkBegan();\n\n if (this.currentState === State.ACTIVE) {\n super.onPointerOutOfBounds(event);\n }\n }\n\n private shouldActivate(): boolean {\n const dx: number = this.getTranslationX();\n\n if (\n this.activeOffsetXStart !== Number.MAX_SAFE_INTEGER &&\n dx < this.activeOffsetXStart\n ) {\n return true;\n }\n\n if (\n this.activeOffsetXEnd !== Number.MIN_SAFE_INTEGER &&\n dx > this.activeOffsetXEnd\n ) {\n return true;\n }\n\n const dy: number = this.getTranslationY();\n\n if (\n this.activeOffsetYStart !== Number.MAX_SAFE_INTEGER &&\n dy < this.activeOffsetYStart\n ) {\n return true;\n }\n\n if (\n this.activeOffsetYEnd !== Number.MIN_SAFE_INTEGER &&\n dy > this.activeOffsetYEnd\n ) {\n return true;\n }\n\n const distanceSq: number = dx * dx + dy * dy;\n\n if (\n this.minDistSq !== Number.MAX_SAFE_INTEGER &&\n distanceSq >= this.minDistSq\n ) {\n return true;\n }\n\n const vx: number = this.velocityX;\n\n if (\n this.minVelocityX !== Number.MAX_SAFE_INTEGER &&\n ((this.minVelocityX < 0 && vx <= this.minVelocityX) ||\n (this.minVelocityX >= 0 && this.minVelocityX <= vx))\n ) {\n return true;\n }\n\n const vy: number = this.velocityY;\n if (\n this.minVelocityY !== Number.MAX_SAFE_INTEGER &&\n ((this.minVelocityY < 0 && vy <= this.minVelocityY) ||\n (this.minVelocityY >= 0 && this.minVelocityY <= vy))\n ) {\n return true;\n }\n\n const velocitySq: number = vx * vx + vy * vy;\n\n return (\n this.minVelocitySq !== Number.MAX_SAFE_INTEGER &&\n velocitySq >= this.minVelocitySq\n );\n }\n\n private shouldFail(): boolean {\n const dx: number = this.getTranslationX();\n const dy: number = this.getTranslationY();\n const distanceSq = dx * dx + dy * dy;\n\n if (this.activateAfterLongPress > 0 && distanceSq > DEFAULT_MIN_DIST_SQ) {\n this.clearActivationTimeout();\n return true;\n }\n\n if (\n this.failOffsetXStart !== Number.MIN_SAFE_INTEGER &&\n dx < this.failOffsetXStart\n ) {\n return true;\n }\n\n if (\n this.failOffsetXEnd !== Number.MAX_SAFE_INTEGER &&\n dx > this.failOffsetXEnd\n ) {\n return true;\n }\n\n if (\n this.failOffsetYStart !== Number.MIN_SAFE_INTEGER &&\n dy < this.failOffsetYStart\n ) {\n return true;\n }\n\n return (\n this.failOffsetYEnd !== Number.MAX_SAFE_INTEGER &&\n dy > this.failOffsetYEnd\n );\n }\n\n private tryBegin(event: AdaptedEvent): void {\n if (\n this.currentState === State.UNDETERMINED &&\n this.tracker.getTrackedPointersCount() >= this.minPointers\n ) {\n this.resetProgress();\n this.offsetX = 0;\n this.offsetY = 0;\n this.velocityX = 0;\n this.velocityY = 0;\n\n this.begin();\n\n if (this.activateAfterLongPress > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.activateAfterLongPress);\n }\n } else {\n this.velocityX = this.tracker.getVelocityX(event.pointerId);\n this.velocityY = this.tracker.getVelocityY(event.pointerId);\n }\n }\n\n private checkBegan(): void {\n if (this.currentState === State.BEGAN) {\n if (this.shouldFail()) {\n this.fail();\n } else if (this.shouldActivate()) {\n this.activate();\n }\n }\n }\n\n public activate(force = false): void {\n if (this.currentState !== State.ACTIVE) {\n this.resetProgress();\n }\n\n super.activate(force);\n }\n\n protected onCancel(): void {\n this.clearActivationTimeout();\n }\n\n protected onReset(): void {\n this.clearActivationTimeout();\n }\n\n protected resetProgress(): void {\n if (this.currentState === State.ACTIVE) {\n return;\n }\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n }\n}\n","import { State } from '../../State';\nimport { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\nimport ScaleGestureDetector, {\n ScaleGestureListener,\n} from '../detectors/ScaleGestureDetector';\n\nexport default class PinchGestureHandler extends GestureHandler {\n private scale = 1;\n private velocity = 0;\n\n private startingSpan = 0;\n private spanSlop = DEFAULT_TOUCH_SLOP;\n\n private scaleDetectorListener: ScaleGestureListener = {\n onScaleBegin: (detector: ScaleGestureDetector): boolean => {\n this.startingSpan = detector.getCurrentSpan();\n return true;\n },\n onScale: (detector: ScaleGestureDetector): boolean => {\n const prevScaleFactor: number = this.scale;\n this.scale *= detector.getScaleFactor(\n this.tracker.getTrackedPointersCount()\n );\n\n const delta = detector.getTimeDelta();\n if (delta > 0) {\n this.velocity = (this.scale - prevScaleFactor) / delta;\n }\n\n if (\n Math.abs(this.startingSpan - detector.getCurrentSpan()) >=\n this.spanSlop &&\n this.currentState === State.BEGAN\n ) {\n this.activate();\n }\n return true;\n },\n onScaleEnd: (\n _detector: ScaleGestureDetector\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n ): void => {},\n };\n\n private scaleGestureDetector: ScaleGestureDetector = new ScaleGestureDetector(\n this.scaleDetectorListener\n );\n\n public init(ref: number, propsRef: React.RefObject) {\n super.init(ref, propsRef);\n\n this.setShouldCancelWhenOutside(false);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n }\n\n protected transformNativeEvent() {\n return {\n focalX: this.scaleGestureDetector.getFocusX(),\n focalY: this.scaleGestureDetector.getFocusY(),\n velocity: this.velocity,\n scale: this.scale,\n };\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.tryBegin();\n this.scaleGestureDetector.onTouchEvent(event, this.tracker);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n if (this.currentState !== State.ACTIVE) {\n return;\n }\n this.scaleGestureDetector.onTouchEvent(event, this.tracker);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.scaleGestureDetector.onTouchEvent(event, this.tracker);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.currentState === State.ACTIVE &&\n this.tracker.getTrackedPointersCount() < 2\n ) {\n this.end();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n if (this.tracker.getTrackedPointersCount() < 2) {\n return;\n }\n this.tracker.track(event);\n\n this.scaleGestureDetector.onTouchEvent(event, this.tracker);\n super.onPointerMove(event);\n }\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n if (this.tracker.getTrackedPointersCount() < 2) {\n return;\n }\n this.tracker.track(event);\n\n this.scaleGestureDetector.onTouchEvent(event, this.tracker);\n super.onPointerOutOfBounds(event);\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.resetProgress();\n this.begin();\n }\n\n public activate(force?: boolean): void {\n if (this.currentState !== State.ACTIVE) {\n this.resetProgress();\n }\n\n super.activate(force);\n }\n\n protected onReset(): void {\n this.resetProgress();\n }\n\n protected resetProgress(): void {\n if (this.currentState === State.ACTIVE) {\n return;\n }\n this.velocity = 0;\n this.scale = 1;\n }\n}\n","import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\nimport RotationGestureDetector, {\n RotationGestureListener,\n} from '../detectors/RotationGestureDetector';\n\nconst ROTATION_RECOGNITION_THRESHOLD = Math.PI / 36;\n\nexport default class RotationGestureHandler extends GestureHandler {\n private rotation = 0;\n private velocity = 0;\n\n private cachedAnchorX = 0;\n private cachedAnchorY = 0;\n\n private rotationGestureListener: RotationGestureListener = {\n onRotationBegin: (_detector: RotationGestureDetector): boolean => true,\n onRotation: (detector: RotationGestureDetector): boolean => {\n const previousRotation: number = this.rotation;\n this.rotation += detector.getRotation();\n\n const delta = detector.getTimeDelta();\n\n if (delta > 0) {\n this.velocity = (this.rotation - previousRotation) / delta;\n }\n\n if (\n Math.abs(this.rotation) >= ROTATION_RECOGNITION_THRESHOLD &&\n this.currentState === State.BEGAN\n ) {\n this.activate();\n }\n\n return true;\n },\n onRotationEnd: (_detector: RotationGestureDetector): void => {\n this.end();\n },\n };\n\n private rotationGestureDetector: RotationGestureDetector =\n new RotationGestureDetector(this.rotationGestureListener);\n\n public init(ref: number, propsRef: React.RefObject): void {\n super.init(ref, propsRef);\n\n this.setShouldCancelWhenOutside(false);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n }\n\n protected transformNativeEvent() {\n return {\n rotation: this.rotation ? this.rotation : 0,\n anchorX: this.getAnchorX(),\n anchorY: this.getAnchorY(),\n velocity: this.velocity ? this.velocity : 0,\n };\n }\n\n public getAnchorX(): number {\n const anchorX = this.rotationGestureDetector.getAnchorX();\n\n return anchorX ? anchorX : this.cachedAnchorX;\n }\n\n public getAnchorY(): number {\n const anchorY = this.rotationGestureDetector.getAnchorY();\n\n return anchorY ? anchorY : this.cachedAnchorY;\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n\n this.tryBegin();\n this.rotationGestureDetector.onTouchEvent(event, this.tracker);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n if (this.tracker.getTrackedPointersCount() < 2) {\n return;\n }\n\n if (this.getAnchorX()) {\n this.cachedAnchorX = this.getAnchorX();\n }\n if (this.getAnchorY()) {\n this.cachedAnchorY = this.getAnchorY();\n }\n\n this.tracker.track(event);\n\n this.rotationGestureDetector.onTouchEvent(event, this.tracker);\n\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n if (this.tracker.getTrackedPointersCount() < 2) {\n return;\n }\n\n if (this.getAnchorX()) {\n this.cachedAnchorX = this.getAnchorX();\n }\n if (this.getAnchorY()) {\n this.cachedAnchorY = this.getAnchorY();\n }\n\n this.tracker.track(event);\n\n this.rotationGestureDetector.onTouchEvent(event, this.tracker);\n\n super.onPointerOutOfBounds(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n this.rotationGestureDetector.onTouchEvent(event, this.tracker);\n\n if (this.currentState !== State.ACTIVE) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.rotationGestureDetector.onTouchEvent(event, this.tracker);\n this.tracker.removeFromTracker(event.pointerId);\n }\n\n protected tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.begin();\n }\n\n public activate(_force?: boolean): void {\n super.activate();\n }\n\n protected onReset(): void {\n if (this.currentState === State.ACTIVE) {\n return;\n }\n\n this.rotation = 0;\n this.velocity = 0;\n this.rotationGestureDetector.reset();\n }\n}\n","import { State } from '../../State';\nimport { AdaptedEvent, Config, EventTypes } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 500;\nconst DEFAULT_MAX_DELAY_MS = 500;\nconst DEFAULT_NUMBER_OF_TAPS = 1;\nconst DEFAULT_MIN_NUMBER_OF_POINTERS = 1;\n\nexport default class TapGestureHandler extends GestureHandler {\n private maxDeltaX = Number.MIN_SAFE_INTEGER;\n private maxDeltaY = Number.MIN_SAFE_INTEGER;\n private maxDistSq = Number.MIN_SAFE_INTEGER;\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private maxDelayMs = DEFAULT_MAX_DELAY_MS;\n\n private numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n private minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n private currentMaxNumberOfPointers = 1;\n\n private startX = 0;\n private startY = 0;\n private offsetX = 0;\n private offsetY = 0;\n private lastX = 0;\n private lastY = 0;\n\n private waitTimeout: number | undefined;\n private delayTimeout: number | undefined;\n\n private tapsSoFar = 0;\n\n public init(ref: number, propsRef: React.RefObject): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.numberOfTaps !== undefined) {\n this.numberOfTaps = this.config.numberOfTaps;\n }\n\n if (this.config.maxDurationMs !== undefined) {\n this.maxDurationMs = this.config.maxDurationMs;\n }\n\n if (this.config.maxDelayMs !== undefined) {\n this.maxDelayMs = this.config.maxDelayMs;\n }\n\n if (this.config.maxDeltaX !== undefined) {\n this.maxDeltaX = this.config.maxDeltaX;\n }\n\n if (this.config.maxDeltaY !== undefined) {\n this.maxDeltaY = this.config.maxDeltaY;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.minPointers !== undefined) {\n this.minNumberOfPointers = this.config.minPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n\n this.maxDeltaX = Number.MIN_SAFE_INTEGER;\n this.maxDeltaY = Number.MIN_SAFE_INTEGER;\n this.maxDistSq = Number.MIN_SAFE_INTEGER;\n this.maxDurationMs = DEFAULT_MAX_DURATION_MS;\n this.maxDelayMs = DEFAULT_MAX_DELAY_MS;\n this.numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n this.minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n }\n\n protected transformNativeEvent() {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return {\n x: this.tracker.getLastAvgX() - rect.left,\n y: this.tracker.getLastAvgY() - rect.top,\n absoluteX: this.tracker.getLastAvgX(),\n absoluteY: this.tracker.getLastAvgY(),\n };\n }\n\n private clearTimeouts(): void {\n clearTimeout(this.waitTimeout);\n clearTimeout(this.delayTimeout);\n }\n\n private startTap(): void {\n this.clearTimeouts();\n\n this.waitTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private endTap(): void {\n this.clearTimeouts();\n\n if (\n ++this.tapsSoFar === this.numberOfTaps &&\n this.currentMaxNumberOfPointers >= this.minNumberOfPointers\n ) {\n this.activate();\n } else {\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDelayMs);\n }\n }\n\n //Handling Events\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.trySettingPosition(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.lastX = event.x;\n this.lastY = event.y;\n\n this.updateState(event);\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n this.trySettingPosition(event);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY - this.startY;\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.startX = this.tracker.getLastAvgX();\n this.startY = this.tracker.getLastAvgY();\n\n this.updateState(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.tracker.removeFromTracker(event.pointerId);\n\n this.updateState(event);\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY = this.startY;\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n\n this.updateState(event);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.updateState(event);\n\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n this.lastX = this.tracker.getLastAvgX();\n this.lastY = this.tracker.getLastAvgY();\n\n this.updateState(event);\n\n super.onPointerOutOfBounds(event);\n }\n\n private updateState(event: AdaptedEvent): void {\n if (\n this.currentMaxNumberOfPointers < this.tracker.getTrackedPointersCount()\n ) {\n this.currentMaxNumberOfPointers = this.tracker.getTrackedPointersCount();\n }\n\n if (this.shouldFail()) {\n this.fail();\n return;\n }\n\n switch (this.currentState) {\n case State.UNDETERMINED:\n if (event.eventType === EventTypes.DOWN) {\n this.begin();\n }\n this.startTap();\n break;\n case State.BEGAN:\n if (event.eventType === EventTypes.UP) {\n this.endTap();\n }\n if (event.eventType === EventTypes.DOWN) {\n this.startTap();\n }\n break;\n default:\n break;\n }\n }\n\n private trySettingPosition(event: AdaptedEvent): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.offsetX = 0;\n this.offsetY = 0;\n this.startX = event.x;\n this.startY = event.y;\n }\n\n private shouldFail(): boolean {\n const dx = this.lastX - this.startX + this.offsetX;\n\n if (\n this.maxDeltaX !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dx) > this.maxDeltaX\n ) {\n return true;\n }\n\n const dy = this.lastY - this.startY + this.offsetY;\n if (\n this.maxDeltaY !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dy) > this.maxDeltaY\n ) {\n return true;\n }\n\n const distSq = dy * dy + dx * dx;\n\n return (\n this.maxDistSq !== Number.MIN_SAFE_INTEGER && distSq > this.maxDistSq\n );\n }\n\n public activate(): void {\n super.activate();\n\n this.end();\n }\n\n protected onCancel(): void {\n this.resetProgress();\n this.clearTimeouts();\n }\n\n protected resetProgress(): void {\n this.clearTimeouts();\n this.tapsSoFar = 0;\n this.currentMaxNumberOfPointers = 0;\n }\n}\n","import { UserSelect } from '../handlers/gestureHandlerCommon';\nimport { Directions } from '../Directions';\nimport { State } from '../State';\n\nexport interface HitSlop {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n horizontal?: number;\n vertical?: number;\n width?: number;\n height?: number;\n}\n\nexport interface Handler {\n handlerTag: number;\n}\n\ntype ConfigArgs =\n | number\n | boolean\n | HitSlop\n | UserSelect\n | Directions\n | Handler[]\n | null\n | undefined;\n\nexport interface Config extends Record {\n enabled?: boolean;\n simultaneousHandlers?: Handler[] | null;\n waitFor?: Handler[] | null;\n hitSlop?: HitSlop;\n shouldCancelWhenOutside?: boolean;\n userSelect?: UserSelect;\n\n activateAfterLongPress?: number;\n failOffsetXStart?: number;\n failOffsetYStart?: number;\n failOffsetXEnd?: number;\n failOffsetYEnd?: number;\n activeOffsetXStart?: number;\n activeOffsetXEnd?: number;\n activeOffsetYStart?: number;\n activeOffsetYEnd?: number;\n minPointers?: number;\n maxPointers?: number;\n minDist?: number;\n minDistSq?: number;\n minVelocity?: number;\n minVelocityX?: number;\n minVelocityY?: number;\n minVelocitySq?: number;\n maxDist?: number;\n maxDistSq?: number;\n numberOfPointers?: number;\n minDurationMs?: number;\n numberOfTaps?: number;\n maxDurationMs?: number;\n maxDelayMs?: number;\n maxDeltaX?: number;\n maxDeltaY?: number;\n shouldActivateOnStart?: boolean;\n disallowInterruption?: boolean;\n direction?: Directions;\n}\n\ntype NativeEventArgs = number | State | boolean | undefined;\ninterface NativeEvent extends Record {\n numberOfPointers: number;\n state: State;\n pointerInside: boolean | undefined;\n handlerTag: number;\n target: number;\n oldState?: State;\n}\n\nexport interface PointerData {\n id: number;\n x: number;\n y: number;\n absoluteX: number;\n absoluteY: number;\n}\n\ntype TouchNativeArgs = number | State | TouchEventType | PointerData[];\n\ninterface NativeTouchEvent extends Record {\n handlerTag: number;\n state: State;\n eventType: TouchEventType;\n changedTouches: PointerData[];\n allTouches: PointerData[];\n numberOfTouches: number;\n}\n\nexport interface ResultEvent extends Record {\n nativeEvent: NativeEvent;\n timeStamp: number;\n}\n\nexport interface ResultTouchEvent\n extends Record {\n nativeEvent: NativeTouchEvent;\n timeStamp: number;\n}\n\nexport interface PropsRef {\n onGestureHandlerEvent: () => void;\n onGestureHandlerStateChange: () => void;\n}\n\nexport interface AdaptedEvent {\n x: number;\n y: number;\n offsetX: number;\n offsetY: number;\n pointerId: number;\n eventType: EventTypes;\n pointerType: PointerType;\n buttons: number;\n time: number;\n allTouches?: TouchList;\n changedTouches?: TouchList;\n touchEventType?: TouchEventType;\n}\n\nexport enum MouseButtons {\n NONE,\n LEFT,\n RIGHT,\n LEFT_RIGHT,\n SCROLL,\n SCROLL_LEFT,\n SCROLL_RIGHT,\n SCROLL_LEFT_RIGHT,\n}\n\nexport enum EventTypes {\n DOWN,\n ADDITIONAL_POINTER_DOWN,\n UP,\n ADDITIONAL_POINTER_UP,\n MOVE,\n ENTER,\n OUT,\n CANCEL,\n}\n\nexport enum TouchEventType {\n UNDETERMINED,\n DOWN,\n MOVE,\n UP,\n CANCELLED,\n}\n\nexport enum PointerType {\n NONE = 'none',\n MOUSE = 'mouse',\n TOUCH = 'touch',\n PEN = 'pen',\n}\n","export default class CircularBuffer {\n private bufferSize: number;\n private buffer: T[];\n private index: number;\n private actualSize: number;\n\n constructor(size: number) {\n this.bufferSize = size;\n this.buffer = new Array(size);\n this.index = 0;\n this.actualSize = 0;\n }\n\n public get size(): number {\n return this.actualSize;\n }\n\n public push(element: T): void {\n this.buffer[this.index] = element;\n this.index = (this.index + 1) % this.bufferSize;\n this.actualSize = Math.min(this.actualSize + 1, this.bufferSize);\n }\n\n public get(at: number): T {\n if (this.actualSize === this.bufferSize) {\n let index = (this.index + at) % this.bufferSize;\n if (index < 0) {\n index += this.bufferSize;\n }\n\n return this.buffer[index];\n } else {\n return this.buffer[at];\n }\n }\n\n public clear(): void {\n this.buffer = new Array(this.bufferSize);\n this.index = 0;\n this.actualSize = 0;\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\n\nexport default abstract class EventManager {\n protected readonly view: HTMLElement;\n protected pointersInBounds: number[] = [];\n protected activePointersCounter: number;\n\n constructor(view: HTMLElement) {\n this.view = view;\n this.activePointersCounter = 0;\n }\n\n public abstract setListeners(): void;\n protected abstract mapEvent(\n event: Event,\n eventType: EventTypes,\n index?: number,\n touchEventType?: TouchEventType\n ): AdaptedEvent;\n\n protected onPointerDown(_event: AdaptedEvent): void {}\n protected onPointerAdd(_event: AdaptedEvent): void {}\n protected onPointerUp(_event: AdaptedEvent): void {}\n protected onPointerRemove(_event: AdaptedEvent): void {}\n protected onPointerMove(_event: AdaptedEvent): void {}\n protected onPointerOut(_event: AdaptedEvent): void {}\n protected onPointerEnter(_event: AdaptedEvent): void {}\n protected onPointerCancel(_event: AdaptedEvent): void {\n // When pointer cancel is triggered and there are more pointers on the view, only one pointer is cancelled\n // Because we want all pointers to be cancelled by that event, we are doing it manually by reseting handler and changing activePointersCounter to 0\n // Events that correspond to removing the pointer (pointerup, touchend) have condition, that they don't perform any action when activePointersCounter\n // is equal to 0. This prevents counter from going to negative values, when pointers are removed from view after one of them has been cancelled\n }\n protected onPointerOutOfBounds(_event: AdaptedEvent): void {}\n\n public setOnPointerDown(callback: (event: AdaptedEvent) => void): void {\n this.onPointerDown = callback;\n }\n public setOnPointerAdd(callback: (event: AdaptedEvent) => void): void {\n this.onPointerAdd = callback;\n }\n public setOnPointerUp(callback: (event: AdaptedEvent) => void): void {\n this.onPointerUp = callback;\n }\n public setOnPointerRemove(callback: (event: AdaptedEvent) => void): void {\n this.onPointerRemove = callback;\n }\n public setOnPointerMove(callback: (event: AdaptedEvent) => void): void {\n this.onPointerMove = callback;\n }\n public setOnPointerOut(callback: (event: AdaptedEvent) => void): void {\n this.onPointerOut = callback;\n }\n public setOnPointerEnter(callback: (event: AdaptedEvent) => void): void {\n this.onPointerEnter = callback;\n }\n public setOnPointerCancel(callback: (event: AdaptedEvent) => void): void {\n this.onPointerCancel = callback;\n }\n public setOnPointerOutOfBounds(\n callback: (event: AdaptedEvent) => void\n ): void {\n this.onPointerOutOfBounds = callback;\n }\n\n protected markAsInBounds(pointerId: number): void {\n if (this.pointersInBounds.indexOf(pointerId) >= 0) {\n return;\n }\n\n this.pointersInBounds.push(pointerId);\n }\n\n protected markAsOutOfBounds(pointerId: number): void {\n const index: number = this.pointersInBounds.indexOf(pointerId);\n\n if (index < 0) {\n return;\n }\n\n this.pointersInBounds.splice(index, 1);\n }\n\n public resetManager(): void {\n // Reseting activePointersCounter is necessary to make gestures such as pinch work properly\n // There are gestures that end when there is still one active pointer (like pinch/rotation)\n // When these gestures end, they are reset, but they still receive events from pointer that is active\n // This causes trouble, since only onPointerDown registers gesture in orchestrator, and while gestures receive\n // Events from active pointer after they finished, next pointerdown event will be registered as additional pointer, not the first one\n // This casues trouble like gestures getting stuck in END state, even though they should have gone to UNDETERMINED\n\n this.activePointersCounter = 0;\n this.pointersInBounds = [];\n }\n}\n","import { State } from '../../State';\nimport { PointerType } from '../interfaces';\n\nimport GestureHandler from '../handlers/GestureHandler';\nimport PointerTracker from './PointerTracker';\nimport { isPointerInBounds } from '../utils';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: GestureHandler[] = [];\n private awaitingHandlers: GestureHandler[] = [];\n private handlersToCancel: GestureHandler[] = [];\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: GestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: GestureHandler): void {\n this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);\n this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);\n this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);\n }\n\n private cleanupFinishedHandlers(): void {\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (!handler) {\n continue;\n }\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.gestureHandlers.splice(i, 1);\n\n this.cleanHandler(handler);\n }\n }\n }\n\n private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {\n let hasToWait = false;\n this.gestureHandlers.forEach((otherHandler) => {\n if (\n otherHandler &&\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n ) {\n hasToWait = true;\n return;\n }\n });\n\n return hasToWait;\n }\n\n private tryActivate(handler: GestureHandler): void {\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n } else if (\n handler.getState() !== State.CANCELLED &&\n handler.getState() !== State.FAILED\n ) {\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n } else {\n switch (handler.getState()) {\n case State.ACTIVE:\n handler.fail();\n break;\n case State.BEGAN:\n handler.cancel();\n }\n }\n }\n }\n\n private shouldActivate(handler: GestureHandler): boolean {\n for (const otherHandler of this.gestureHandlers) {\n if (this.shouldHandlerBeCancelledBy(handler, otherHandler)) {\n return false;\n }\n }\n\n return true;\n }\n\n private cleanupAwaitingHandlers(handler: GestureHandler): void {\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (\n !this.awaitingHandlers[i].isAwaiting() &&\n this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)\n ) {\n this.cleanHandler(this.awaitingHandlers[i]);\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n public onHandlerStateChange(\n handler: GestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerWaitForOther(otherHandler, handler)) {\n if (newState === State.END) {\n otherHandler?.cancel();\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n otherHandler?.setAwaiting(false);\n } else {\n this.tryActivate(otherHandler);\n }\n }\n });\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (this.awaitingHandlers.indexOf(handler) < 0) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: GestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n this.gestureHandlers.forEach((otherHandler) => {\n // Order of arguments is correct - we check whether current handler should cancel existing handlers\n\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n this.handlersToCancel.push(otherHandler);\n }\n });\n\n for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {\n this.handlersToCancel[i]?.cancel();\n }\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler?.cancel();\n otherHandler?.setAwaiting(true);\n }\n });\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (handler.isAwaiting()) {\n handler.setAwaiting(false);\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (this.awaitingHandlers[i] === handler) {\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n this.handlersToCancel = [];\n }\n\n private addAwaitingHandler(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.gestureHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: GestureHandler,\n gh2: GestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (\n handler !== otherHandler &&\n (handler.isAwaiting() || handler.getState() === State.ACTIVE)\n ) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getView() !== otherHandler.getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n let overlap = false;\n\n handlerPointers.forEach((pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n if (\n isPointerInBounds(handler.getView(), { x: handlerX, y: handlerY }) &&\n isPointerInBounds(otherHandler.getView(), { x: handlerX, y: handlerY })\n ) {\n overlap = true;\n }\n });\n\n otherPointers.forEach((pointer: number) => {\n const otherX: number = otherHandler.getTracker().getLastX(pointer);\n const otherY: number = otherHandler.getTracker().getLastY(pointer);\n\n if (\n isPointerInBounds(handler.getView(), { x: otherX, y: otherY }) &&\n isPointerInBounds(otherHandler.getView(), { x: otherX, y: otherY })\n ) {\n overlap = true;\n }\n });\n\n return overlap;\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: GestureHandler): void {\n this.gestureHandlers.forEach((handler: GestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.PEN\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n","import GestureHandler from '../handlers/GestureHandler';\nimport { Config, Handler } from '../interfaces';\n\nexport default class InteractionManager {\n private static instance: InteractionManager;\n private readonly waitForRelations: Map = new Map();\n private readonly simultaneousRelations: Map = new Map();\n\n // Private becaues of singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n public configureInteractions(handler: GestureHandler, config: Config) {\n this.dropRelationsForHandlerWithTag(handler.getTag());\n\n if (config.waitFor) {\n const waitFor: number[] = [];\n config.waitFor.forEach((otherHandler: Handler): void => {\n // New API reference\n if (typeof otherHandler === 'number') {\n waitFor.push(otherHandler);\n } else {\n // Old API reference\n waitFor.push(otherHandler.handlerTag);\n }\n });\n\n this.waitForRelations.set(handler.getTag(), waitFor);\n }\n\n if (config.simultaneousHandlers) {\n const simultaneousHandlers: number[] = [];\n config.simultaneousHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n simultaneousHandlers.push(otherHandler);\n } else {\n simultaneousHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);\n }\n }\n\n public shouldWaitForHandlerFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.waitForRelations.get(\n handler.getTag()\n );\n if (!waitFor) {\n return false;\n }\n\n let shouldWait = false;\n\n waitFor.forEach((tag: number): void => {\n if (tag === otherHandler.getTag()) {\n shouldWait = true;\n return; //Returns from callback\n }\n });\n\n return shouldWait;\n }\n\n public shouldRecognizeSimultaneously(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const simultaneousHandlers: number[] | undefined =\n this.simultaneousRelations.get(handler.getTag());\n if (!simultaneousHandlers) {\n return false;\n }\n\n let shouldRecognizeSimultaneously = false;\n\n simultaneousHandlers.forEach((tag: number): void => {\n if (tag === otherHandler.getTag()) {\n shouldRecognizeSimultaneously = true;\n return;\n }\n });\n\n return shouldRecognizeSimultaneously;\n }\n\n public shouldRequireHandlerToWaitForFailure(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n //TODO: Implement logic\n return false;\n }\n\n public shouldHandlerBeCancelledBy(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n //TODO: Implement logic\n return false;\n }\n\n public dropRelationsForHandlerWithTag(handlerTag: number): void {\n this.waitForRelations.delete(handlerTag);\n this.simultaneousRelations.delete(handlerTag);\n }\n\n public reset() {\n this.waitForRelations.clear();\n this.simultaneousRelations.clear();\n }\n\n public static getInstance(): InteractionManager {\n if (!this.instance) {\n this.instance = new InteractionManager();\n }\n\n return this.instance;\n }\n}\n","// Implementation taken from Flutter's LeastSquareSolver\n// https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/gestures/lsq_solver.dart\n\nclass Vector {\n private offset: number;\n private length: number;\n private elements: number[];\n\n constructor(length: number) {\n this.offset = 0;\n this.length = length;\n this.elements = new Array(length);\n }\n\n public static fromVOL(\n values: number[],\n offset: number,\n length: number\n ): Vector {\n const result = new Vector(0);\n\n result.offset = offset;\n result.length = length;\n result.elements = values;\n\n return result;\n }\n\n public get(index: number): number {\n return this.elements[this.offset + index];\n }\n\n public set(index: number, value: number): void {\n this.elements[this.offset + index] = value;\n }\n\n public dot(other: Vector): number {\n let result = 0;\n for (let i = 0; i < this.length; i++) {\n result += this.get(i) * other.get(i);\n }\n return result;\n }\n\n public norm() {\n return Math.sqrt(this.dot(this));\n }\n}\n\nclass Matrix {\n private columns: number;\n private elements: number[];\n\n constructor(rows: number, columns: number) {\n this.columns = columns;\n this.elements = new Array(rows * columns);\n }\n\n public get(row: number, column: number): number {\n return this.elements[row * this.columns + column];\n }\n\n public set(row: number, column: number, value: number): void {\n this.elements[row * this.columns + column] = value;\n }\n\n public getRow(row: number): Vector {\n return Vector.fromVOL(this.elements, row * this.columns, this.columns);\n }\n}\n\n/// An nth degree polynomial fit to a dataset.\nclass PolynomialFit {\n /// The polynomial coefficients of the fit.\n ///\n /// For each `i`, the element `coefficients[i]` is the coefficient of\n /// the `i`-th power of the variable.\n public coefficients: number[];\n\n /// Creates a polynomial fit of the given degree.\n ///\n /// There are n + 1 coefficients in a fit of degree n.\n constructor(degree: number) {\n this.coefficients = new Array(degree + 1);\n }\n}\n\nconst precisionErrorTolerance = 1e-10;\n\n/// Uses the least-squares algorithm to fit a polynomial to a set of data.\nexport default class LeastSquareSolver {\n /// The x-coordinates of each data point.\n private x: number[];\n /// The y-coordinates of each data point.\n private y: number[];\n /// The weight to use for each data point.\n private w: number[];\n\n /// Creates a least-squares solver.\n ///\n /// The [x], [y], and [w] arguments must not be null.\n constructor(x: number[], y: number[], w: number[]) {\n this.x = x;\n this.y = y;\n this.w = w;\n }\n\n /// Fits a polynomial of the given degree to the data points.\n ///\n /// When there is not enough data to fit a curve null is returned.\n public solve(degree: number): PolynomialFit | null {\n if (degree > this.x.length) {\n // Not enough data to fit a curve.\n return null;\n }\n\n const result = new PolynomialFit(degree);\n\n // Shorthands for the purpose of notation equivalence to original C++ code.\n const m = this.x.length;\n const n = degree + 1;\n\n // Expand the X vector to a matrix A, pre-multiplied by the weights.\n const a = new Matrix(n, m);\n for (let h = 0; h < m; h++) {\n a.set(0, h, this.w[h]);\n\n for (let i = 1; i < n; i++) {\n a.set(i, h, a.get(i - 1, h) * this.x[h]);\n }\n }\n\n // Apply the Gram-Schmidt process to A to obtain its QR decomposition.\n\n // Orthonormal basis, column-major ordVectorer.\n const q = new Matrix(n, m);\n // Upper triangular matrix, row-major order.\n const r = new Matrix(n, m);\n\n for (let j = 0; j < n; j += 1) {\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, a.get(j, h));\n }\n for (let i = 0; i < j; i += 1) {\n const dot = q.getRow(j).dot(q.getRow(i));\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) - dot * q.get(i, h));\n }\n }\n\n const norm = q.getRow(j).norm();\n if (norm < precisionErrorTolerance) {\n // Vectors are linearly dependent or zero so no solution.\n return null;\n }\n\n const inverseNorm = 1.0 / norm;\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) * inverseNorm);\n }\n for (let i = 0; i < n; i += 1) {\n r.set(j, i, i < j ? 0.0 : q.getRow(j).dot(a.getRow(i)));\n }\n }\n\n // Solve R B = Qt W Y to find B. This is easy because R is upper triangular.\n // We just work from bottom-right to top-left calculating B's coefficients.\n const wy = new Vector(m);\n for (let h = 0; h < m; h += 1) {\n wy.set(h, this.y[h] * this.w[h]);\n }\n for (let i = n - 1; i >= 0; i -= 1) {\n result.coefficients[i] = q.getRow(i).dot(wy);\n for (let j = n - 1; j > i; j -= 1) {\n result.coefficients[i] -= r.get(i, j) * result.coefficients[j];\n }\n result.coefficients[i] /= r.get(i, i);\n }\n\n return result;\n }\n}\n","import { ValueOf } from '../../typeUtils';\nimport { Gestures } from '../../RNGestureHandlerModule.web';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default abstract class NodeManager {\n private static gestures: Record<\n number,\n InstanceType>\n > = {};\n\n public static getHandler(tag: number) {\n if (tag in this.gestures) {\n return this.gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n }\n\n public static createGestureHandler(\n handlerTag: number,\n handler: InstanceType>\n ): void {\n if (handlerTag in this.gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n\n this.gestures[handlerTag] = handler;\n this.gestures[handlerTag].setTag(handlerTag);\n }\n\n public static dropGestureHandler(handlerTag: number): void {\n if (!(handlerTag in this.gestures)) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.gestures[handlerTag];\n }\n\n public static getNodes() {\n return { ...this.gestures };\n }\n}\n","import {\n AdaptedEvent,\n EventTypes,\n MouseButtons,\n PointerType,\n} from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class PointerEventManager extends EventManager {\n private trackedPointers = new Set();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n target.setPointerCapture(adaptedEvent.pointerId);\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n target.releasePointerCapture(adaptedEvent.pointerId);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n if (\n event.pointerType === PointerType.MOUSE &&\n event.buttons !== MouseButtons.LEFT\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.OUT;\n this.onPointerOut(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n","import { AdaptedEvent } from '../interfaces';\nimport VelocityTracker from './VelocityTracker';\n\nexport interface TrackerElement {\n lastX: number;\n lastY: number;\n\n timeStamp: number;\n\n velocityX: number;\n velocityY: number;\n}\n\nconst MAX_POINTERS = 20;\n\nexport default class PointerTracker {\n private velocityTracker = new VelocityTracker();\n private trackedPointers: Map = new Map<\n number,\n TrackerElement\n >();\n\n private touchEventsIds: Map = new Map();\n\n private lastMovedPointerId: number;\n\n private cachedAverages: { x: number; y: number } = { x: 0, y: 0 };\n\n public constructor() {\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public addToTracker(event: AdaptedEvent): void {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n const newElement: TrackerElement = {\n lastX: event.x,\n lastY: event.y,\n timeStamp: event.time,\n velocityX: 0,\n velocityY: 0,\n };\n\n this.trackedPointers.set(event.pointerId, newElement);\n this.mapTouchEventId(event.pointerId);\n\n this.cachedAverages = {\n x: this.getLastAvgX(),\n y: this.getLastAvgY(),\n };\n }\n\n public removeFromTracker(pointerId: number): void {\n this.trackedPointers.delete(pointerId);\n this.removeMappedTouchId(pointerId);\n }\n\n public track(event: AdaptedEvent): void {\n const element: TrackerElement = this.trackedPointers.get(\n event.pointerId\n ) as TrackerElement;\n\n if (!element) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n this.velocityTracker.add(event);\n const [velocityX, velocityY] = this.velocityTracker.getVelocity();\n\n element.velocityX = velocityX;\n element.velocityY = velocityY;\n\n element.lastX = event.x;\n element.lastY = event.y;\n\n this.trackedPointers.set(event.pointerId, element);\n\n const avgX: number = this.getLastAvgX();\n const avgY: number = this.getLastAvgY();\n\n this.cachedAverages = {\n x: avgX,\n y: avgY,\n };\n }\n\n //Mapping TouchEvents ID\n private mapTouchEventId(id: number): void {\n for (const [mappedId, touchId] of this.touchEventsIds) {\n if (isNaN(touchId)) {\n this.touchEventsIds.set(mappedId, id);\n break;\n }\n }\n }\n\n private removeMappedTouchId(id: number): void {\n const mappedId: number = this.getMappedTouchEventId(id);\n if (!isNaN(mappedId)) {\n this.touchEventsIds.set(mappedId, NaN);\n }\n }\n\n public getMappedTouchEventId(touchEventId: number): number {\n for (const [key, value] of this.touchEventsIds.entries()) {\n if (value === touchEventId) {\n return key;\n }\n }\n\n return NaN;\n }\n\n public getVelocityX(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityX as number;\n }\n public getVelocityY(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityY as number;\n }\n\n /**\n * Returns X coordinate of last moved pointer\n */\n public getLastX(): number;\n\n /**\n *\n * @param pointerId\n * Returns X coordinate of given pointer\n */\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n public getLastX(pointerId: number): number;\n\n public getLastX(pointerId?: number): number {\n if (pointerId !== undefined) {\n return this.trackedPointers.get(pointerId)?.lastX as number;\n } else {\n return this.trackedPointers.get(this.lastMovedPointerId)?.lastX as number;\n }\n }\n\n /**\n * Returns Y coordinate of last moved pointer\n */\n public getLastY(): number;\n\n /**\n *\n * @param pointerId\n * Returns Y coordinate of given pointer\n */\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n public getLastY(pointerId: number): number;\n\n public getLastY(pointerId?: number): number {\n if (pointerId !== undefined) {\n return this.trackedPointers.get(pointerId)?.lastY as number;\n } else {\n return this.trackedPointers.get(this.lastMovedPointerId)?.lastY as number;\n }\n }\n\n // Some handlers use these methods to send average values in native event.\n // This may happen when pointers have already been removed from tracker (i.e. pointerup event).\n // In situation when NaN would be sent as a response, we return cached value.\n // That prevents handlers from crashing\n public getLastAvgX(): number {\n const avgX: number = this.getSumX() / this.trackedPointers.size;\n return isNaN(avgX) ? this.cachedAverages.x : avgX;\n }\n public getLastAvgY(): number {\n const avgY: number = this.getSumY() / this.trackedPointers.size;\n return isNaN(avgY) ? this.cachedAverages.y : avgY;\n }\n public getSumX(ignoredPointer?: number): number {\n let sumX = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumX += value.lastX;\n }\n });\n\n return sumX;\n }\n public getSumY(ignoredPointer?: number): number {\n let sumY = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumY += value.lastY;\n }\n });\n\n return sumY;\n }\n public getTrackedPointersCount(): number {\n return this.trackedPointers.size;\n }\n public getTrackedPointersID(): number[] {\n const keys: number[] = [];\n\n this.trackedPointers.forEach((_value, key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n public getData(): Map {\n return this.trackedPointers;\n }\n\n public resetTracker(): void {\n this.velocityTracker.reset();\n this.trackedPointers.clear();\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public static shareCommonPointers(\n stPointers: number[],\n ndPointers: number[]\n ): boolean {\n return stPointers.some((pointerId) => ndPointers.includes(pointerId));\n }\n}\n","import {\n AdaptedEvent,\n EventTypes,\n MouseButtons,\n PointerType,\n TouchEventType,\n} from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class TouchEventManager extends EventManager {\n public setListeners(): void {\n this.view.addEventListener('touchstart', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n //@ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchmove', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.OUT;\n this.onPointerOut(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n });\n\n this.view.addEventListener('touchend', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchcancel', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n });\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n return {\n x: clientX,\n y: clientY,\n offsetX: clientX - rect.left,\n offsetY: clientY - rect.top,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n buttons: MouseButtons.NONE,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n","import { AdaptedEvent } from '../interfaces';\nimport CircularBuffer from './CircularBuffer';\nimport LeastSquareSolver from './LeastSquareSolver';\n\nexport default class VelocityTracker {\n private assumePointerMoveStoppedMilliseconds = 40;\n private historySize = 20;\n private horizonMilliseconds = 300;\n private minSampleSize = 3;\n\n private samples: CircularBuffer;\n\n constructor() {\n this.samples = new CircularBuffer(this.historySize);\n }\n\n public add(event: AdaptedEvent): void {\n this.samples.push(event);\n }\n\n /// Returns an estimate of the velocity of the object being tracked by the\n /// tracker given the current information available to the tracker.\n ///\n /// Information is added using [addPosition].\n ///\n /// Returns null if there is no data on which to base an estimate.\n private getVelocityEstimate(): [number, number] | null {\n const x = [];\n const y = [];\n const w = [];\n const time = [];\n\n let sampleCount = 0;\n let index = this.samples.size - 1;\n const newestSample = this.samples.get(index);\n if (!newestSample) {\n return null;\n }\n\n let previousSample = newestSample;\n\n // Starting with the most recent PointAtTime sample, iterate backwards while\n // the samples represent continuous motion.\n while (sampleCount < this.samples.size) {\n const sample = this.samples.get(index);\n\n const age = newestSample.time - sample.time;\n const delta = Math.abs(sample.time - previousSample.time);\n previousSample = sample;\n\n if (\n age > this.horizonMilliseconds ||\n delta > this.assumePointerMoveStoppedMilliseconds\n ) {\n break;\n }\n\n x.push(sample.x);\n y.push(sample.y);\n w.push(1);\n time.push(-age);\n\n sampleCount++;\n index--;\n }\n\n if (sampleCount >= this.minSampleSize) {\n const xSolver = new LeastSquareSolver(time, x, w);\n const xFit = xSolver.solve(2);\n\n if (xFit !== null) {\n const ySolver = new LeastSquareSolver(time, y, w);\n const yFit = ySolver.solve(2);\n\n if (yFit !== null) {\n const xVelocity = xFit.coefficients[1] * 1000;\n const yVelocity = yFit.coefficients[1] * 1000;\n\n return [xVelocity, yVelocity];\n }\n }\n }\n\n return null;\n }\n\n public getVelocity(): [number, number] {\n const estimate = this.getVelocityEstimate();\n if (estimate !== null) {\n return estimate;\n }\n return [0, 0];\n }\n\n public reset(): void {\n this.samples.clear();\n }\n}\n","export function isPointerInBounds(\n view: HTMLElement,\n { x, y }: { x: number; y: number }\n): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n","/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport GestureHandler from './GestureHandler';\nimport { TEST_MAX_IF_NOT_NAN } from './utils';\n\nabstract class DiscreteGestureHandler extends GestureHandler {\n get isDiscrete() {\n return true;\n }\n\n get shouldEnableGestureOnSetup() {\n return true;\n }\n\n shouldFailUnderCustomCriteria(\n { x, y, deltaX, deltaY }: any,\n { maxDeltaX, maxDeltaY, maxDistSq, shouldCancelWhenOutside }: any\n ) {\n if (shouldCancelWhenOutside) {\n if (!this.isPointInView({ x, y })) {\n return true;\n }\n }\n return (\n TEST_MAX_IF_NOT_NAN(Math.abs(deltaX), maxDeltaX) ||\n TEST_MAX_IF_NOT_NAN(Math.abs(deltaY), maxDeltaY) ||\n TEST_MAX_IF_NOT_NAN(\n Math.abs(deltaY * deltaY + deltaX * deltaX),\n maxDistSq\n )\n );\n }\n\n transformNativeEvent({ center: { x, y } }: any) {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n\n return {\n absoluteX: x,\n absoluteY: y,\n x: x - rect.left,\n y: y - rect.top,\n };\n }\n\n isGestureEnabledForEvent(\n {\n minPointers,\n maxPointers,\n maxDeltaX,\n maxDeltaY,\n maxDistSq,\n shouldCancelWhenOutside,\n }: any,\n _recognizer: any,\n { maxPointers: pointerLength, center, deltaX, deltaY }: any\n ) {\n const validPointerCount =\n pointerLength >= minPointers && pointerLength <= maxPointers;\n\n if (\n this.shouldFailUnderCustomCriteria(\n { ...center, deltaX, deltaY },\n {\n maxDeltaX,\n maxDeltaY,\n maxDistSq,\n shouldCancelWhenOutside,\n }\n ) ||\n // A user probably won't land a multi-pointer tap on the first tick (so we cannot just cancel each time)\n // but if the gesture is running and the user adds or subtracts another pointer then it should fail.\n (!validPointerCount && this.isGestureRunning)\n ) {\n return { failed: true };\n }\n\n return { success: validPointerCount };\n }\n}\n\nexport default DiscreteGestureHandler;\n","/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport GestureHandler, { HammerInputExt } from './GestureHandler';\nimport { PixelRatio } from 'react-native';\n\nabstract class DraggingGestureHandler extends GestureHandler {\n get shouldEnableGestureOnSetup() {\n return true;\n }\n\n transformNativeEvent({\n deltaX,\n deltaY,\n velocityX,\n velocityY,\n center: { x, y },\n }: HammerInputExt) {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n const ratio = PixelRatio.get();\n return {\n translationX: deltaX - (this.__initialX || 0),\n translationY: deltaY - (this.__initialY || 0),\n absoluteX: x,\n absoluteY: y,\n velocityX: velocityX * ratio,\n velocityY: velocityY * ratio,\n x: x - rect.left,\n y: y - rect.top,\n };\n }\n}\n\nexport default DraggingGestureHandler;\n","export class GesturePropError extends Error {\n constructor(name: string, value: unknown, expectedType: string) {\n super(\n `Invalid property \\`${name}: ${value}\\` expected \\`${expectedType}\\``\n );\n }\n}\n","/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\n\nimport { Direction } from './constants';\nimport { GesturePropError } from './Errors';\nimport DraggingGestureHandler from './DraggingGestureHandler';\nimport { isnan } from './utils';\nimport { HammerInputExt } from './GestureHandler';\n\nclass FlingGestureHandler extends DraggingGestureHandler {\n get name() {\n return 'swipe';\n }\n\n get NativeGestureClass() {\n return Hammer.Swipe;\n }\n\n onGestureActivated(event: HammerInputExt) {\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_MOVE,\n isFinal: false,\n isFirst: true,\n });\n this.isGestureRunning = false;\n this.hasGestureFailed = false;\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_END,\n isFinal: true,\n });\n }\n\n onRawEvent(ev: HammerInputExt) {\n super.onRawEvent(ev);\n if (this.hasGestureFailed) {\n return;\n }\n // Hammer doesn't send a `cancel` event for taps.\n // Manually fail the event.\n if (ev.isFinal) {\n setTimeout(() => {\n if (this.isGestureRunning) {\n this.cancelEvent(ev);\n }\n });\n } else if (!this.hasGestureFailed && !this.isGestureRunning) {\n // Tap Gesture start event\n const gesture = this.hammer!.get(this.name);\n // @ts-ignore FIXME(TS)\n if (gesture.options.enable(gesture, ev)) {\n this.onStart(ev);\n this.sendEvent(ev);\n }\n }\n }\n\n getHammerConfig() {\n return {\n // @ts-ignore FIXME(TS)\n pointers: this.config.numberOfPointers,\n direction: this.getDirection(),\n };\n }\n\n getTargetDirections(direction: number) {\n const directions = [];\n if (direction & Direction.RIGHT) {\n directions.push(Hammer.DIRECTION_RIGHT);\n }\n if (direction & Direction.LEFT) {\n directions.push(Hammer.DIRECTION_LEFT);\n }\n if (direction & Direction.UP) {\n directions.push(Hammer.DIRECTION_UP);\n }\n if (direction & Direction.DOWN) {\n directions.push(Hammer.DIRECTION_DOWN);\n }\n // const hammerDirection = directions.reduce((a, b) => a | b, 0);\n return directions;\n }\n\n getDirection() {\n // @ts-ignore FIXME(TS)\n const { direction } = this.getConfig();\n\n let directions = [];\n if (direction & Direction.RIGHT) {\n directions.push(Hammer.DIRECTION_HORIZONTAL);\n }\n if (direction & Direction.LEFT) {\n directions.push(Hammer.DIRECTION_HORIZONTAL);\n }\n if (direction & Direction.UP) {\n directions.push(Hammer.DIRECTION_VERTICAL);\n }\n if (direction & Direction.DOWN) {\n directions.push(Hammer.DIRECTION_VERTICAL);\n }\n directions = [...new Set(directions)];\n\n if (directions.length === 0) return Hammer.DIRECTION_NONE;\n if (directions.length === 1) return directions[0];\n return Hammer.DIRECTION_ALL;\n }\n\n isGestureEnabledForEvent(\n { numberOfPointers }: any,\n _recognizer: any,\n { maxPointers: pointerLength }: any\n ) {\n const validPointerCount = pointerLength === numberOfPointers;\n if (!validPointerCount && this.isGestureRunning) {\n return { failed: true };\n }\n return { success: validPointerCount };\n }\n\n updateGestureConfig({ numberOfPointers = 1, direction, ...props }: any) {\n if (isnan(direction) || typeof direction !== 'number') {\n throw new GesturePropError('direction', direction, 'number');\n }\n return super.updateGestureConfig({\n numberOfPointers,\n direction,\n ...props,\n });\n }\n}\n\nexport default FlingGestureHandler;\n","/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\nimport { findNodeHandle } from 'react-native';\n\nimport { State } from '../State';\nimport { EventMap } from './constants';\nimport * as NodeManager from './NodeManager';\n\n// TODO(TS) Replace with HammerInput if https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438/files is merged\nexport type HammerInputExt = Omit;\n\nexport type Config = Partial<{\n enabled: boolean;\n minPointers: number;\n maxPointers: number;\n minDist: number;\n minDistSq: number;\n minVelocity: number;\n minVelocitySq: number;\n maxDist: number;\n maxDistSq: number;\n failOffsetXStart: number;\n failOffsetYStart: number;\n failOffsetXEnd: number;\n failOffsetYEnd: number;\n activeOffsetXStart: number;\n activeOffsetXEnd: number;\n activeOffsetYStart: number;\n activeOffsetYEnd: number;\n waitFor: any[] | null;\n simultaneousHandlers: any[] | null;\n}>;\n\ntype NativeEvent = ReturnType;\n\nlet gestureInstances = 0;\n\nabstract class GestureHandler {\n public handlerTag: any;\n public isGestureRunning = false;\n public view: number | null = null;\n protected hasCustomActivationCriteria: boolean;\n protected hasGestureFailed = false;\n protected hammer: HammerManager | null = null;\n protected initialRotation: number | null = null;\n protected __initialX: any;\n protected __initialY: any;\n protected config: Config = {};\n protected previousState: State = State.UNDETERMINED;\n private pendingGestures: Record = {};\n private oldState: State = State.UNDETERMINED;\n private lastSentState: State | null = null;\n private gestureInstance: number;\n private _stillWaiting: any;\n private propsRef: any;\n private ref: any;\n\n abstract get name(): string;\n\n get id() {\n return `${this.name}${this.gestureInstance}`;\n }\n\n // a simple way to check if GestureHandler is NativeViewGestureHandler, since importing it\n // here to use instanceof would cause import cycle\n get isNative() {\n return false;\n }\n\n get isDiscrete() {\n return false;\n }\n\n get shouldEnableGestureOnSetup(): boolean {\n throw new Error('Must override GestureHandler.shouldEnableGestureOnSetup');\n }\n\n constructor() {\n this.gestureInstance = gestureInstances++;\n this.hasCustomActivationCriteria = false;\n }\n\n getConfig() {\n return this.config;\n }\n\n onWaitingEnded(_gesture: this) {}\n\n removePendingGesture(id: string) {\n delete this.pendingGestures[id];\n }\n\n addPendingGesture(gesture: this) {\n this.pendingGestures[gesture.id] = gesture;\n }\n\n isGestureEnabledForEvent(\n _config: any,\n _recognizer: any,\n _event: any\n ): { failed?: boolean; success?: boolean } {\n return { success: true };\n }\n\n get NativeGestureClass(): RecognizerStatic {\n throw new Error('Must override GestureHandler.NativeGestureClass');\n }\n\n updateHasCustomActivationCriteria(_config: Config) {\n return true;\n }\n\n clearSelfAsPending = () => {\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.removePendingGesture(this.id);\n }\n }\n };\n\n updateGestureConfig({ enabled = true, ...props }) {\n this.clearSelfAsPending();\n\n this.config = this.ensureConfig({ enabled, ...props });\n this.hasCustomActivationCriteria = this.updateHasCustomActivationCriteria(\n this.config\n );\n if (Array.isArray(this.config.waitFor)) {\n for (const gesture of this.config.waitFor) {\n gesture.addPendingGesture(this);\n }\n }\n\n if (this.hammer) {\n this.sync();\n }\n return this.config;\n }\n\n destroy = () => {\n this.clearSelfAsPending();\n\n if (this.hammer) {\n this.hammer.stop(false);\n this.hammer.destroy();\n }\n this.hammer = null;\n };\n\n isPointInView = ({ x, y }: { x: number; y: number }) => {\n // @ts-ignore FIXME(TS)\n const rect = this.view!.getBoundingClientRect();\n const pointerInside =\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n return pointerInside;\n };\n\n getState(type: keyof typeof EventMap): State {\n // @ts-ignore TODO(TS) check if this is needed\n if (type == 0) {\n return 0;\n }\n return EventMap[type];\n }\n\n transformEventData(event: HammerInputExt) {\n const { eventType, maxPointers: numberOfPointers } = event;\n // const direction = DirectionMap[ev.direction];\n const changedTouch = event.changedPointers[0];\n const pointerInside = this.isPointInView({\n x: changedTouch.clientX,\n y: changedTouch.clientY,\n });\n\n // TODO(TS) Remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50966 is merged.\n const state = this.getState(eventType as 1 | 2 | 4 | 8);\n if (state !== this.previousState) {\n this.oldState = this.previousState;\n this.previousState = state;\n }\n\n return {\n nativeEvent: {\n numberOfPointers,\n state,\n pointerInside,\n ...this.transformNativeEvent(event),\n // onHandlerStateChange only\n handlerTag: this.handlerTag,\n target: this.ref,\n // send oldState only when the state was changed, or is different than ACTIVE\n // GestureDetector relies on the presence of `oldState` to differentiate between\n // update events and state change events\n oldState:\n state !== this.previousState || state != 4\n ? this.oldState\n : undefined,\n },\n timeStamp: Date.now(),\n };\n }\n\n transformNativeEvent(_event: HammerInputExt) {\n return {};\n }\n\n sendEvent = (nativeEvent: HammerInputExt) => {\n const { onGestureHandlerEvent, onGestureHandlerStateChange } =\n this.propsRef.current;\n\n const event = this.transformEventData(nativeEvent);\n\n invokeNullableMethod(onGestureHandlerEvent, event);\n if (this.lastSentState !== event.nativeEvent.state) {\n this.lastSentState = event.nativeEvent.state as State;\n invokeNullableMethod(onGestureHandlerStateChange, event);\n }\n };\n\n cancelPendingGestures(event: HammerInputExt) {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture && gesture.isGestureRunning) {\n gesture.hasGestureFailed = true;\n gesture.cancelEvent(event);\n }\n }\n }\n\n notifyPendingGestures() {\n for (const gesture of Object.values(this.pendingGestures)) {\n if (gesture) {\n gesture.onWaitingEnded(this);\n }\n }\n }\n\n // FIXME event is undefined in runtime when firstly invoked (see Draggable example), check other functions taking event as input\n onGestureEnded(event: HammerInputExt) {\n this.isGestureRunning = false;\n this.cancelPendingGestures(event);\n }\n\n forceInvalidate(event: HammerInputExt) {\n if (this.isGestureRunning) {\n this.hasGestureFailed = true;\n this.cancelEvent(event);\n }\n }\n\n cancelEvent(event: HammerInputExt) {\n this.notifyPendingGestures();\n this.sendEvent({\n ...event,\n eventType: Hammer.INPUT_CANCEL,\n isFinal: true,\n });\n this.onGestureEnded(event);\n }\n\n onRawEvent({ isFirst }: HammerInputExt) {\n if (isFirst) {\n this.hasGestureFailed = false;\n }\n }\n\n shouldUseTouchEvents(config: Config) {\n return (\n config.simultaneousHandlers?.some((handler) => handler.isNative) ?? false\n );\n }\n\n setView(ref: Parameters['0'], propsRef: any) {\n if (ref == null) {\n this.destroy();\n this.view = null;\n return;\n }\n\n // @ts-ignore window doesn't exist on global type as we don't want to use Node types\n const SUPPORTS_TOUCH = 'ontouchstart' in window;\n this.propsRef = propsRef;\n this.ref = ref;\n\n this.view = findNodeHandle(ref);\n\n // When the browser starts handling the gesture (e.g. scrolling), it sends a pointercancel event and stops\n // sending additional pointer events. This is not the case with touch events, so if the gesture is simultaneous\n // with a NativeGestureHandler, we need to check if touch events are supported and use them if possible.\n this.hammer =\n SUPPORTS_TOUCH && this.shouldUseTouchEvents(this.config)\n ? new Hammer.Manager(this.view as any, {\n inputClass: Hammer.TouchInput,\n })\n : new Hammer.Manager(this.view as any);\n\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n const { NativeGestureClass } = this;\n // @ts-ignore TODO(TS)\n const gesture = new NativeGestureClass(this.getHammerConfig());\n this.hammer.add(gesture);\n\n this.hammer.on('hammer.input', (ev: HammerInput) => {\n if (!this.config.enabled) {\n this.hasGestureFailed = false;\n this.isGestureRunning = false;\n return;\n }\n\n this.onRawEvent(ev as unknown as HammerInputExt);\n\n // TODO: Bacon: Check against something other than null\n // The isFirst value is not called when the first rotation is calculated.\n if (this.initialRotation === null && ev.rotation !== 0) {\n this.initialRotation = ev.rotation;\n }\n if (ev.isFinal) {\n // in favor of a willFail otherwise the last frame of the gesture will be captured.\n setTimeout(() => {\n this.initialRotation = null;\n this.hasGestureFailed = false;\n });\n }\n });\n\n this.setupEvents();\n this.sync();\n }\n\n setupEvents() {\n // TODO(TS) Hammer types aren't exactly that what we get in runtime\n if (!this.isDiscrete) {\n this.hammer!.on(`${this.name}start`, (event: HammerInput) =>\n this.onStart(event as unknown as HammerInputExt)\n );\n this.hammer!.on(\n `${this.name}end ${this.name}cancel`,\n (event: HammerInput) => {\n this.onGestureEnded(event as unknown as HammerInputExt);\n }\n );\n }\n this.hammer!.on(this.name, (ev: HammerInput) =>\n this.onGestureActivated(ev as unknown as HammerInputExt)\n ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged\n }\n\n onStart({ deltaX, deltaY, rotation }: HammerInputExt) {\n // Reset the state for the next gesture\n this.oldState = State.UNDETERMINED;\n this.previousState = State.UNDETERMINED;\n this.lastSentState = null;\n\n this.isGestureRunning = true;\n this.__initialX = deltaX;\n this.__initialY = deltaY;\n this.initialRotation = rotation;\n }\n\n onGestureActivated(ev: HammerInputExt) {\n this.sendEvent(ev);\n }\n\n onSuccess() {}\n\n _getPendingGestures() {\n if (Array.isArray(this.config.waitFor) && this.config.waitFor.length) {\n // Get the list of gestures that this gesture is still waiting for.\n // Use `=== false` in case a ref that isn't a gesture handler is used.\n const stillWaiting = this.config.waitFor.filter(\n ({ hasGestureFailed }) => hasGestureFailed === false\n );\n return stillWaiting;\n }\n return [];\n }\n\n getHammerConfig() {\n const pointers =\n this.config.minPointers === this.config.maxPointers\n ? this.config.minPointers\n : 0;\n return {\n pointers,\n };\n }\n\n sync = () => {\n const gesture = this.hammer!.get(this.name);\n if (!gesture) return;\n\n const enable = (recognizer: any, inputData: any) => {\n if (!this.config.enabled) {\n this.isGestureRunning = false;\n this.hasGestureFailed = false;\n return false;\n }\n\n // Prevent events before the system is ready.\n if (\n !inputData ||\n !recognizer.options ||\n typeof inputData.maxPointers === 'undefined'\n ) {\n return this.shouldEnableGestureOnSetup;\n }\n\n if (this.hasGestureFailed) {\n return false;\n }\n\n if (!this.isDiscrete) {\n if (this.isGestureRunning) {\n return true;\n }\n // The built-in hammer.js \"waitFor\" doesn't work across multiple views.\n // Only process if there are views to wait for.\n this._stillWaiting = this._getPendingGestures();\n // This gesture should continue waiting.\n if (this._stillWaiting.length) {\n // Check to see if one of the gestures you're waiting for has started.\n // If it has then the gesture should fail.\n for (const gesture of this._stillWaiting) {\n // When the target gesture has started, this gesture must force fail.\n if (!gesture.isDiscrete && gesture.isGestureRunning) {\n this.hasGestureFailed = true;\n this.isGestureRunning = false;\n return false;\n }\n }\n // This gesture shouldn't start until the others have finished.\n return false;\n }\n }\n\n // Use default behaviour\n if (!this.hasCustomActivationCriteria) {\n return true;\n }\n\n const deltaRotation =\n this.initialRotation == null\n ? 0\n : inputData.rotation - this.initialRotation;\n // @ts-ignore FIXME(TS)\n const { success, failed } = this.isGestureEnabledForEvent(\n this.getConfig(),\n recognizer,\n {\n ...inputData,\n deltaRotation,\n }\n );\n\n if (failed) {\n this.simulateCancelEvent(inputData);\n this.hasGestureFailed = true;\n }\n return success;\n };\n\n const params = this.getHammerConfig();\n // @ts-ignore FIXME(TS)\n gesture.set({ ...params, enable });\n };\n\n simulateCancelEvent(_inputData: any) {}\n\n // Validate the props\n ensureConfig(config: Config): Required {\n const props = { ...config };\n\n // TODO(TS) We use ! to assert that if property is present then value is not empty (null, undefined)\n if ('minDist' in config) {\n props.minDist = config.minDist;\n props.minDistSq = props.minDist! * props.minDist!;\n }\n if ('minVelocity' in config) {\n props.minVelocity = config.minVelocity;\n props.minVelocitySq = props.minVelocity! * props.minVelocity!;\n }\n if ('maxDist' in config) {\n props.maxDist = config.maxDist;\n props.maxDistSq = config.maxDist! * config.maxDist!;\n }\n if ('waitFor' in config) {\n props.waitFor = asArray(config.waitFor)\n .map(({ handlerTag }: { handlerTag: number }) =>\n NodeManager.getHandler(handlerTag)\n )\n .filter((v) => v);\n } else {\n props.waitFor = null;\n }\n if ('simultaneousHandlers' in config) {\n const shouldUseTouchEvents = this.shouldUseTouchEvents(this.config);\n props.simultaneousHandlers = asArray(config.simultaneousHandlers)\n .map((handler: number | GestureHandler) => {\n if (typeof handler === 'number') {\n return NodeManager.getHandler(handler);\n } else {\n return NodeManager.getHandler(handler.handlerTag);\n }\n })\n .filter((v) => v);\n\n if (shouldUseTouchEvents !== this.shouldUseTouchEvents(props)) {\n queueMicrotask(() => {\n // if the undelying event API needs to be changed, we need to unmount and mount\n // the hammer instance again.\n this.destroy();\n this.setView(this.ref, this.propsRef);\n });\n }\n } else {\n props.simultaneousHandlers = null;\n }\n\n const configProps = [\n 'minPointers',\n 'maxPointers',\n 'minDist',\n 'maxDist',\n 'maxDistSq',\n 'minVelocitySq',\n 'minDistSq',\n 'minVelocity',\n 'failOffsetXStart',\n 'failOffsetYStart',\n 'failOffsetXEnd',\n 'failOffsetYEnd',\n 'activeOffsetXStart',\n 'activeOffsetXEnd',\n 'activeOffsetYStart',\n 'activeOffsetYEnd',\n ] as const;\n configProps.forEach((prop: typeof configProps[number]) => {\n if (typeof props[prop] === 'undefined') {\n props[prop] = Number.NaN;\n }\n });\n return props as Required; // TODO(TS) how to convince TS that props are filled?\n }\n}\n\n// TODO(TS) investigate this method\n// Used for sending data to a callback or AnimatedEvent\nfunction invokeNullableMethod(\n method:\n | ((event: NativeEvent) => void)\n | { __getHandler: () => (event: NativeEvent) => void }\n | { __nodeConfig: { argMapping: any } },\n event: NativeEvent\n) {\n if (method) {\n if (typeof method === 'function') {\n method(event);\n } else {\n // For use with reanimated's AnimatedEvent\n if (\n '__getHandler' in method &&\n typeof method.__getHandler === 'function'\n ) {\n const handler = method.__getHandler();\n invokeNullableMethod(handler, event);\n } else {\n if ('__nodeConfig' in method) {\n const { argMapping } = method.__nodeConfig;\n if (Array.isArray(argMapping)) {\n for (const [index, [key, value]] of argMapping.entries()) {\n if (key in event.nativeEvent) {\n // @ts-ignore fix method type\n const nativeValue = event.nativeEvent[key];\n if (value && value.setValue) {\n // Reanimated API\n value.setValue(nativeValue);\n } else {\n // RN Animated API\n method.__nodeConfig.argMapping[index] = [key, nativeValue];\n }\n }\n }\n }\n }\n }\n }\n }\n}\n\nfunction asArray(value: T | T[]) {\n // TODO(TS) use config.waitFor type\n return value == null ? [] : Array.isArray(value) ? value : [value];\n}\n\nexport default GestureHandler;\n","import GestureHandler from './GestureHandler';\n\n/**\n * The base class for **Rotation** and **Pinch** gesture handlers.\n */\nabstract class IndiscreteGestureHandler extends GestureHandler {\n get shouldEnableGestureOnSetup() {\n return false;\n }\n\n updateGestureConfig({ minPointers = 2, maxPointers = 2, ...props }) {\n return super.updateGestureConfig({\n minPointers,\n maxPointers,\n ...props,\n });\n }\n\n isGestureEnabledForEvent(\n { minPointers, maxPointers }: any,\n _recognizer: any,\n { maxPointers: pointerLength }: any\n ) {\n if (pointerLength > maxPointers) {\n return { failed: true };\n }\n const validPointerCount = pointerLength >= minPointers;\n return {\n success: validPointerCount,\n };\n }\n}\nexport default IndiscreteGestureHandler;\n","/* eslint-disable eslint-comments/no-unlimited-disable */\n/* eslint-disable */\nimport Hammer from '@egjs/hammerjs';\n\nimport { State } from '../State';\nimport PressGestureHandler from './PressGestureHandler';\nimport { isnan, isValidNumber } from './utils';\nimport { Config } from './GestureHandler';\nimport { HammerInputNames } from './constants';\n\nclass LongPressGestureHandler extends PressGestureHandler {\n get minDurationMs(): number {\n // @ts-ignore FIXNE(TS)\n return isnan(this.config.minDurationMs) ? 251 : this.config.minDurationMs;\n }\n\n get maxDist() {\n // @ts-ignore FIXNE(TS)\n return isnan(this.config.maxDist) ? 9 : this.config.maxDist;\n }\n\n updateHasCustomActivationCriteria({ maxDistSq }: Config) {\n return !isValidNumber(maxDistSq);\n }\n\n getConfig() {\n if (!this.hasCustomActivationCriteria) {\n // Default config\n // If no params have been defined then this config should emulate the native gesture as closely as possible.\n return {\n shouldCancelWhenOutside: true,\n maxDistSq: 10,\n };\n }\n return this.config;\n }\n\n getHammerConfig() {\n return {\n ...super.getHammerConfig(),\n // threshold: this.maxDist,\n time: this.minDurationMs,\n };\n }\n\n getState(type: keyof typeof HammerInputNames) {\n return {\n [Hammer.INPUT_START]: State.ACTIVE,\n [Hammer.INPUT_MOVE]: State.ACTIVE,\n [Hammer.INPUT_END]: State.END,\n [Hammer.INPUT_CANCEL]: State.FAILED,\n }[type];\n }\n}\n\nexport default LongPressGestureHandler;\n","import DiscreteGestureHandler from './DiscreteGestureHandler';\nimport { HammerInputExt } from './GestureHandler';\nimport * as NodeManager from './NodeManager';\nimport PressGestureHandler from './PressGestureHandler';\nimport { TEST_MIN_IF_NOT_NAN, VEC_LEN_SQ } from './utils';\n\nclass NativeViewGestureHandler extends PressGestureHandler {\n get isNative() {\n return true;\n }\n\n onRawEvent(ev: HammerInputExt) {\n super.onRawEvent(ev);\n if (!ev.isFinal) {\n // if (this.ref instanceof ScrollView) {\n if (TEST_MIN_IF_NOT_NAN(VEC_LEN_SQ({ x: ev.deltaX, y: ev.deltaY }), 10)) {\n // @ts-ignore FIXME(TS) config type\n if (this.config.disallowInterruption) {\n const gestures = Object.values(NodeManager.getNodes()).filter(\n (gesture) => {\n const { handlerTag, view, isGestureRunning } = gesture;\n return (\n // Check if this gesture isn't self\n handlerTag !== this.handlerTag &&\n // Ensure the gesture needs to be cancelled\n isGestureRunning &&\n // ScrollView can cancel discrete gestures like taps and presses\n gesture instanceof DiscreteGestureHandler &&\n // Ensure a view exists and is a child of the current view\n view &&\n // @ts-ignore FIXME(TS) view type\n this.view.contains(view)\n );\n }\n );\n // Cancel all of the gestures that passed the filter\n for (const gesture of gestures) {\n // TODO: Bacon: Send some cached event.\n gesture.forceInvalidate(ev);\n }\n }\n }\n }\n }\n}\n\nexport default NativeViewGestureHandler;\n","import { ValueOf } from '../typeUtils';\nimport { HammerGestures } from '../RNGestureHandlerModule.web';\n\nconst gestures: Record<\n number,\n InstanceType>\n> = {};\n\nexport function getHandler(tag: number) {\n if (tag in gestures) {\n return gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n}\n\nexport function createGestureHandler(\n handlerTag: number,\n handler: InstanceType>\n) {\n if (handlerTag in gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n gestures[handlerTag] = handler;\n // @ts-ignore no types for web handlers yet\n gestures[handlerTag].handlerTag = handlerTag;\n}\n\nexport function dropGestureHandler(handlerTag: number) {\n // Since React 18, there are cases where componentWillUnmount gets called twice in a row\n // so skip this if the tag was already removed.\n if (!(handlerTag in gestures)) {\n return;\n }\n getHandler(handlerTag).destroy();\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete gestures[handlerTag];\n}\n\nexport function getNodes() {\n return { ...gestures };\n}\n","import Hammer from '@egjs/hammerjs';\n\nimport {\n EventMap,\n MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD,\n MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD,\n} from './constants';\nimport DraggingGestureHandler from './DraggingGestureHandler';\nimport { isValidNumber, isnan, TEST_MIN_IF_NOT_NAN, VEC_LEN_SQ } from './utils';\nimport { State } from '../State';\n\nimport { Config, HammerInputExt } from './GestureHandler';\nclass PanGestureHandler extends DraggingGestureHandler {\n get name() {\n return 'pan';\n }\n\n get NativeGestureClass() {\n return Hammer.Pan;\n }\n\n getHammerConfig() {\n return {\n ...super.getHammerConfig(),\n direction: this.getDirection(),\n };\n }\n\n getState(type: keyof typeof EventMap) {\n const nextState = super.getState(type);\n // Ensure that the first state sent is `BEGAN` and not `ACTIVE`\n if (\n this.previousState === State.UNDETERMINED &&\n nextState === State.ACTIVE\n ) {\n return State.BEGAN;\n }\n return nextState;\n }\n\n getDirection() {\n const config = this.getConfig();\n const {\n activeOffsetXStart,\n activeOffsetXEnd,\n activeOffsetYStart,\n activeOffsetYEnd,\n minDist,\n } = config;\n let directions: number[] = [];\n let horizontalDirections = [];\n\n if (!isnan(minDist)) {\n return Hammer.DIRECTION_ALL;\n }\n\n if (!isnan(activeOffsetXStart)) {\n horizontalDirections.push(Hammer.DIRECTION_LEFT);\n }\n if (!isnan(activeOffsetXEnd)) {\n horizontalDirections.push(Hammer.DIRECTION_RIGHT);\n }\n if (horizontalDirections.length === 2) {\n horizontalDirections = [Hammer.DIRECTION_HORIZONTAL];\n }\n\n directions = directions.concat(horizontalDirections);\n let verticalDirections = [];\n\n if (!isnan(activeOffsetYStart)) {\n verticalDirections.push(Hammer.DIRECTION_UP);\n }\n if (!isnan(activeOffsetYEnd)) {\n verticalDirections.push(Hammer.DIRECTION_DOWN);\n }\n\n if (verticalDirections.length === 2) {\n verticalDirections = [Hammer.DIRECTION_VERTICAL];\n }\n\n directions = directions.concat(verticalDirections);\n\n if (!directions.length) {\n return Hammer.DIRECTION_NONE;\n }\n if (\n directions[0] === Hammer.DIRECTION_HORIZONTAL &&\n directions[1] === Hammer.DIRECTION_VERTICAL\n ) {\n return Hammer.DIRECTION_ALL;\n }\n if (horizontalDirections.length && verticalDirections.length) {\n return Hammer.DIRECTION_ALL;\n }\n\n return directions[0];\n }\n\n getConfig() {\n if (!this.hasCustomActivationCriteria) {\n // Default config\n // If no params have been defined then this config should emulate the native gesture as closely as possible.\n return {\n minDistSq: 10,\n };\n }\n return this.config;\n }\n\n shouldFailUnderCustomCriteria(\n { deltaX, deltaY }: HammerInputExt,\n criteria: any\n ) {\n return (\n (!isnan(criteria.failOffsetXStart) &&\n deltaX < criteria.failOffsetXStart) ||\n (!isnan(criteria.failOffsetXEnd) && deltaX > criteria.failOffsetXEnd) ||\n (!isnan(criteria.failOffsetYStart) &&\n deltaY < criteria.failOffsetYStart) ||\n (!isnan(criteria.failOffsetYEnd) && deltaY > criteria.failOffsetYEnd)\n );\n }\n\n shouldActivateUnderCustomCriteria(\n { deltaX, deltaY, velocity }: any,\n criteria: any\n ) {\n return (\n (!isnan(criteria.activeOffsetXStart) &&\n deltaX < criteria.activeOffsetXStart) ||\n (!isnan(criteria.activeOffsetXEnd) &&\n deltaX > criteria.activeOffsetXEnd) ||\n (!isnan(criteria.activeOffsetYStart) &&\n deltaY < criteria.activeOffsetYStart) ||\n (!isnan(criteria.activeOffsetYEnd) &&\n deltaY > criteria.activeOffsetYEnd) ||\n TEST_MIN_IF_NOT_NAN(\n VEC_LEN_SQ({ x: deltaX, y: deltaY }),\n criteria.minDistSq\n ) ||\n TEST_MIN_IF_NOT_NAN(velocity.x, criteria.minVelocityX) ||\n TEST_MIN_IF_NOT_NAN(velocity.y, criteria.minVelocityY) ||\n TEST_MIN_IF_NOT_NAN(VEC_LEN_SQ(velocity), criteria.minVelocitySq)\n );\n }\n\n shouldMultiFingerPanFail({\n pointerLength,\n scale,\n deltaRotation,\n }: {\n deltaRotation: number;\n pointerLength: number;\n scale: number;\n }) {\n if (pointerLength <= 1) {\n return false;\n }\n\n // Test if the pan had too much pinching or rotating.\n const deltaScale = Math.abs(scale - 1);\n const absDeltaRotation = Math.abs(deltaRotation);\n if (deltaScale > MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD) {\n // > If the threshold doesn't seem right.\n // You can log the value which it failed at here:\n return true;\n }\n if (absDeltaRotation > MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD) {\n // > If the threshold doesn't seem right.\n // You can log the value which it failed at here:\n return true;\n }\n\n return false;\n }\n\n updateHasCustomActivationCriteria(\n criteria: Config & { minVelocityX?: number; minVelocityY?: number }\n ) {\n return (\n isValidNumber(criteria.minDistSq) ||\n isValidNumber(criteria.minVelocityX) ||\n isValidNumber(criteria.minVelocityY) ||\n isValidNumber(criteria.minVelocitySq) ||\n isValidNumber(criteria.activeOffsetXStart) ||\n isValidNumber(criteria.activeOffsetXEnd) ||\n isValidNumber(criteria.activeOffsetYStart) ||\n isValidNumber(criteria.activeOffsetYEnd)\n );\n }\n\n isGestureEnabledForEvent(\n props: any,\n _recognizer: any,\n inputData: HammerInputExt & { deltaRotation: number }\n ) {\n if (this.shouldFailUnderCustomCriteria(inputData, props)) {\n return { failed: true };\n }\n\n const velocity = { x: inputData.velocityX, y: inputData.velocityY };\n if (\n this.hasCustomActivationCriteria &&\n this.shouldActivateUnderCustomCriteria(\n { deltaX: inputData.deltaX, deltaY: inputData.deltaY, velocity },\n props\n )\n ) {\n if (\n this.shouldMultiFingerPanFail({\n pointerLength: inputData.maxPointers,\n scale: inputData.scale,\n deltaRotation: inputData.deltaRotation,\n })\n ) {\n return {\n failed: true,\n };\n }\n return { success: true };\n }\n return { success: false };\n }\n}\n\nexport default PanGestureHandler;\n","import Hammer from '@egjs/hammerjs';\nimport { HammerInputExt } from './GestureHandler';\n\nimport IndiscreteGestureHandler from './IndiscreteGestureHandler';\n\nclass PinchGestureHandler extends IndiscreteGestureHandler {\n get name() {\n return 'pinch';\n }\n\n get NativeGestureClass() {\n return Hammer.Pinch;\n }\n\n transformNativeEvent({ scale, velocity, center }: HammerInputExt) {\n return {\n focalX: center.x,\n focalY: center.y,\n velocity,\n scale,\n };\n }\n}\n\nexport default PinchGestureHandler;\n","import Hammer from '@egjs/hammerjs';\n\nimport { State } from '../State';\nimport {\n CONTENT_TOUCHES_DELAY,\n CONTENT_TOUCHES_QUICK_TAP_END_DELAY,\n HammerInputNames,\n} from './constants';\nimport DiscreteGestureHandler from './DiscreteGestureHandler';\nimport { Config, HammerInputExt } from './GestureHandler';\nimport { fireAfterInterval, isValidNumber, isnan } from './utils';\n\nclass PressGestureHandler extends DiscreteGestureHandler {\n private visualFeedbackTimer: any;\n private initialEvent: HammerInputExt | null = null;\n get name() {\n return 'press';\n }\n\n get minDurationMs() {\n // @ts-ignore FIXME(TS)\n return isnan(this.config.minDurationMs) ? 5 : this.config.minDurationMs;\n }\n\n get maxDist() {\n return isnan(this.config.maxDist) ? 9 : this.config.maxDist;\n }\n\n get NativeGestureClass() {\n return Hammer.Press;\n }\n\n shouldDelayTouches = true;\n\n simulateCancelEvent(inputData: HammerInputExt) {\n // Long press never starts so we can't rely on the running event boolean.\n this.hasGestureFailed = true;\n this.cancelEvent(inputData);\n }\n\n updateHasCustomActivationCriteria({\n shouldCancelWhenOutside,\n maxDistSq,\n }: Config & { shouldCancelWhenOutside: boolean }) {\n return shouldCancelWhenOutside || !isValidNumber(maxDistSq);\n }\n\n getState(type: keyof typeof HammerInputNames): State {\n return {\n [Hammer.INPUT_START]: State.BEGAN,\n [Hammer.INPUT_MOVE]: State.ACTIVE,\n [Hammer.INPUT_END]: State.END,\n [Hammer.INPUT_CANCEL]: State.CANCELLED,\n }[type];\n }\n\n getConfig() {\n if (!this.hasCustomActivationCriteria) {\n // Default config\n // If no params have been defined then this config should emulate the native gesture as closely as possible.\n return {\n shouldCancelWhenOutside: true,\n maxDistSq: 10,\n };\n }\n return this.config;\n }\n\n getHammerConfig() {\n return {\n ...super.getHammerConfig(),\n // threshold: this.maxDist,\n time: this.minDurationMs,\n };\n }\n\n onGestureActivated(ev: HammerInputExt) {\n this.onGestureStart(ev);\n }\n\n shouldDelayTouchForEvent({ pointerType }: HammerInputExt) {\n // Don't disable event for mouse input\n return this.shouldDelayTouches && pointerType === 'touch';\n }\n\n onGestureStart(ev: HammerInputExt) {\n this.isGestureRunning = true;\n clearTimeout(this.visualFeedbackTimer);\n this.initialEvent = ev;\n this.visualFeedbackTimer = fireAfterInterval(() => {\n this.sendGestureStartedEvent(this.initialEvent as HammerInputExt);\n this.initialEvent = null;\n }, this.shouldDelayTouchForEvent(ev) && CONTENT_TOUCHES_DELAY);\n }\n\n sendGestureStartedEvent(ev: HammerInputExt) {\n clearTimeout(this.visualFeedbackTimer);\n this.visualFeedbackTimer = null;\n this.sendEvent({\n ...ev,\n eventType: Hammer.INPUT_MOVE,\n isFirst: true,\n });\n }\n\n forceInvalidate(event: HammerInputExt) {\n super.forceInvalidate(event);\n clearTimeout(this.visualFeedbackTimer);\n this.visualFeedbackTimer = null;\n this.initialEvent = null;\n }\n\n onRawEvent(ev: HammerInputExt) {\n super.onRawEvent(ev);\n if (this.isGestureRunning) {\n if (ev.isFinal) {\n let timeout;\n if (this.visualFeedbackTimer) {\n // Aesthetic timing for a quick tap.\n // We haven't activated the tap right away to emulate iOS `delaysContentTouches`\n // Now we must send the initial activation event and wait a set amount of time before firing the end event.\n timeout = CONTENT_TOUCHES_QUICK_TAP_END_DELAY;\n this.sendGestureStartedEvent(this.initialEvent as HammerInputExt);\n this.initialEvent = null;\n }\n fireAfterInterval(() => {\n this.sendEvent({\n ...ev,\n eventType: Hammer.INPUT_END,\n isFinal: true,\n });\n // @ts-ignore -- this should explicitly support undefined\n this.onGestureEnded();\n }, timeout);\n } else {\n this.sendEvent({\n ...ev,\n eventType: Hammer.INPUT_MOVE,\n isFinal: false,\n });\n }\n }\n }\n\n updateGestureConfig({\n shouldActivateOnStart = false,\n disallowInterruption = false,\n shouldCancelWhenOutside = true,\n minDurationMs = Number.NaN,\n maxDist = Number.NaN,\n minPointers = 1,\n maxPointers = 1,\n ...props\n }) {\n return super.updateGestureConfig({\n shouldActivateOnStart,\n disallowInterruption,\n shouldCancelWhenOutside,\n minDurationMs,\n maxDist,\n minPointers,\n maxPointers,\n ...props,\n });\n }\n}\nexport default PressGestureHandler;\n","import Hammer from '@egjs/hammerjs';\n\nimport { DEG_RAD } from './constants';\nimport { HammerInputExt } from './GestureHandler';\nimport IndiscreteGestureHandler from './IndiscreteGestureHandler';\n\nclass RotationGestureHandler extends IndiscreteGestureHandler {\n get name() {\n return 'rotate';\n }\n\n get NativeGestureClass() {\n return Hammer.Rotate;\n }\n\n transformNativeEvent({ rotation, velocity, center }: HammerInputExt) {\n return {\n rotation: (rotation - (this.initialRotation ?? 0)) * DEG_RAD,\n anchorX: center.x,\n anchorY: center.y,\n velocity,\n };\n }\n}\nexport default RotationGestureHandler;\n","import Hammer from '@egjs/hammerjs';\n\nimport DiscreteGestureHandler from './DiscreteGestureHandler';\nimport { HammerInputExt } from './GestureHandler';\nimport { isnan } from './utils';\n\nclass TapGestureHandler extends DiscreteGestureHandler {\n private _shouldFireEndEvent: HammerInputExt | null = null;\n private _timer: any;\n private _multiTapTimer: any; // TODO unused?\n get name() {\n return 'tap';\n }\n\n get NativeGestureClass() {\n return Hammer.Tap;\n }\n\n get maxDelayMs() {\n // @ts-ignore TODO(TS) trace down config\n return isnan(this.config.maxDelayMs) ? 300 : this.config.maxDelayMs;\n }\n\n simulateCancelEvent(inputData: HammerInputExt) {\n if (this.isGestureRunning) {\n this.cancelEvent(inputData);\n }\n }\n\n onGestureActivated(ev: HammerInputExt) {\n if (this.isGestureRunning) {\n this.onSuccessfulTap(ev);\n }\n }\n\n onSuccessfulTap = (ev: HammerInputExt) => {\n if (this._getPendingGestures().length) {\n this._shouldFireEndEvent = ev;\n return;\n }\n if (ev.eventType === Hammer.INPUT_END) {\n this.sendEvent({ ...ev, eventType: Hammer.INPUT_MOVE });\n }\n // When handler gets activated it will turn into State.END immediately.\n this.sendEvent({ ...ev, isFinal: true });\n this.onGestureEnded(ev);\n };\n\n onRawEvent(ev: HammerInput) {\n super.onRawEvent(ev);\n\n // Attempt to create a touch-down event by checking if a valid tap hasn't started yet, then validating the input.\n if (\n !this.hasGestureFailed &&\n !this.isGestureRunning &&\n // Prevent multi-pointer events from misfiring.\n !ev.isFinal\n ) {\n // Tap Gesture start event\n const gesture = this.hammer!.get(this.name);\n // @ts-ignore TODO(TS) trace down config\n if (gesture.options.enable(gesture, ev)) {\n clearTimeout(this._multiTapTimer);\n\n this.onStart(ev);\n this.sendEvent(ev);\n }\n }\n if (ev.isFinal && ev.maxPointers > 1) {\n setTimeout(() => {\n // Handle case where one finger presses slightly\n // after the first finger on a multi-tap event\n if (this.isGestureRunning) {\n this.cancelEvent(ev);\n }\n });\n }\n\n if (this.hasGestureFailed) {\n return;\n }\n // Hammer doesn't send a `cancel` event for taps.\n // Manually fail the event.\n if (ev.isFinal) {\n // Handle case where one finger presses slightly\n // after the first finger on a multi-tap event\n if (ev.maxPointers > 1) {\n setTimeout(() => {\n if (this.isGestureRunning) {\n this.cancelEvent(ev);\n }\n });\n }\n\n // Clear last timer\n clearTimeout(this._timer);\n // Create time out for multi-taps.\n this._timer = setTimeout(() => {\n this.hasGestureFailed = true;\n this.cancelEvent(ev);\n }, this.maxDelayMs);\n } else if (!this.hasGestureFailed && !this.isGestureRunning) {\n // Tap Gesture start event\n const gesture = this.hammer!.get(this.name);\n // @ts-ignore TODO(TS) trace down config\n if (gesture.options.enable(gesture, ev)) {\n clearTimeout(this._multiTapTimer);\n\n this.onStart(ev);\n this.sendEvent(ev);\n }\n }\n }\n\n getHammerConfig() {\n return {\n ...super.getHammerConfig(),\n event: this.name,\n // @ts-ignore TODO(TS) trace down config\n taps: isnan(this.config.numberOfTaps) ? 1 : this.config.numberOfTaps,\n interval: this.maxDelayMs,\n time:\n // @ts-ignore TODO(TS) trace down config\n isnan(this.config.maxDurationMs) || this.config.maxDurationMs == null\n ? 250\n : // @ts-ignore TODO(TS) trace down config\n this.config.maxDurationMs,\n };\n }\n\n updateGestureConfig({\n shouldCancelWhenOutside = true,\n maxDeltaX = Number.NaN,\n maxDeltaY = Number.NaN,\n numberOfTaps = 1,\n minDurationMs = 525,\n maxDelayMs = Number.NaN,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO possibly forgotten to use in updateGestureConfig?\n maxDurationMs = Number.NaN,\n maxDist = 2,\n minPointers = 1,\n maxPointers = 1,\n ...props\n }) {\n return super.updateGestureConfig({\n shouldCancelWhenOutside,\n numberOfTaps,\n maxDeltaX,\n maxDeltaY,\n minDurationMs,\n maxDelayMs,\n maxDist,\n minPointers,\n maxPointers,\n ...props,\n });\n }\n\n onGestureEnded(...props: any) {\n clearTimeout(this._timer);\n // @ts-ignore TODO(TS) check how onGestureEnded works\n super.onGestureEnded(...props);\n }\n\n onWaitingEnded(_gesture: any) {\n if (this._shouldFireEndEvent) {\n this.onSuccessfulTap(this._shouldFireEndEvent);\n this._shouldFireEndEvent = null;\n }\n }\n}\nexport default TapGestureHandler;\n","import Hammer from '@egjs/hammerjs';\n\nimport { State } from '../State';\n\nexport const CONTENT_TOUCHES_DELAY = 240;\nexport const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;\nexport const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;\nexport const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;\nexport const DEG_RAD = Math.PI / 180;\n\n// Map Hammer values to RNGH\nexport const EventMap = {\n [Hammer.INPUT_START]: State.BEGAN,\n [Hammer.INPUT_MOVE]: State.ACTIVE,\n [Hammer.INPUT_END]: State.END,\n [Hammer.INPUT_CANCEL]: State.FAILED,\n} as const;\n\nexport const Direction = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n};\n\nexport const DirectionMap = {\n [Hammer.DIRECTION_RIGHT]: Direction.RIGHT,\n [Hammer.DIRECTION_LEFT]: Direction.LEFT,\n [Hammer.DIRECTION_UP]: Direction.UP,\n [Hammer.DIRECTION_DOWN]: Direction.DOWN,\n};\n\nexport const HammerInputNames = {\n [Hammer.INPUT_START]: 'START',\n [Hammer.INPUT_MOVE]: 'MOVE',\n [Hammer.INPUT_END]: 'END',\n [Hammer.INPUT_CANCEL]: 'CANCEL',\n};\nexport const HammerDirectionNames = {\n [Hammer.DIRECTION_HORIZONTAL]: 'HORIZONTAL',\n [Hammer.DIRECTION_UP]: 'UP',\n [Hammer.DIRECTION_DOWN]: 'DOWN',\n [Hammer.DIRECTION_VERTICAL]: 'VERTICAL',\n [Hammer.DIRECTION_NONE]: 'NONE',\n [Hammer.DIRECTION_ALL]: 'ALL',\n [Hammer.DIRECTION_RIGHT]: 'RIGHT',\n [Hammer.DIRECTION_LEFT]: 'LEFT',\n};\n","// TODO(TS) remove if not necessary after rewrite\nexport const isnan = (v: unknown) => Number.isNaN(v);\n\n// TODO(TS) remove if not necessary after rewrite\nexport const isValidNumber = (v: unknown) =>\n typeof v === 'number' && !Number.isNaN(v);\n\nexport const TEST_MIN_IF_NOT_NAN = (value: number, limit: number): boolean =>\n !isnan(limit) &&\n ((limit < 0 && value <= limit) || (limit >= 0 && value >= limit));\nexport const VEC_LEN_SQ = ({ x = 0, y = 0 } = {}) => x * x + y * y;\nexport const TEST_MAX_IF_NOT_NAN = (value: number, max: number) =>\n !isnan(max) && ((max < 0 && value < max) || (max >= 0 && value > max));\n\nexport function fireAfterInterval(\n method: () => void,\n interval?: number | boolean\n) {\n if (!interval) {\n method();\n return null;\n }\n return setTimeout(() => method(), interval as number);\n}\n","import Indicator from './src/components/indicator';\nimport BallIndicator from './src/components/ball-indicator';\nimport BarIndicator from './src/components/bar-indicator';\nimport DotIndicator from './src/components/dot-indicator';\nimport MaterialIndicator from './src/components/material-indicator';\nimport PacmanIndicator from './src/components/pacman-indicator';\nimport PulseIndicator from './src/components/pulse-indicator';\nimport SkypeIndicator from './src/components/skype-indicator';\nimport UIActivityIndicator from './src/components/ui-activity-indicator';\nimport WaveIndicator from './src/components/wave-indicator';\n\nexport {\n Indicator,\n BarIndicator,\n BallIndicator,\n DotIndicator,\n MaterialIndicator,\n PacmanIndicator,\n PulseIndicator,\n SkypeIndicator,\n UIActivityIndicator,\n WaveIndicator,\n};\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class BallIndicator extends PureComponent {\n static defaultProps = {\n color: 'rgb(0, 0, 0)',\n count: 8,\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color: backgroundColor } = this.props;\n let angle = index * 360 / count;\n\n let layerStyle = {\n transform: [{\n rotate: angle + 'deg',\n }],\n };\n\n let inputRange = Array\n .from(new Array(count + 1), (item, index) => (\n index / count\n ));\n\n let outputRange = Array\n .from(new Array(count), (item, index) => (\n 1.2 - 0.5 * index / (count - 1)\n ));\n\n for (let j = 0; j < index; j++) {\n outputRange.unshift(outputRange.pop());\n }\n\n outputRange.unshift(...outputRange.slice(-1));\n\n let ballStyle = {\n margin: size / 20,\n backgroundColor,\n width: size / 5,\n height: size / 5,\n borderRadius: size / 10,\n transform: [{\n scale: progress\n .interpolate({ inputRange, outputRange }),\n }],\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class BarIndicator extends PureComponent {\n static defaultProps = {\n count: 3,\n\n color: 'rgb(0, 0, 0)',\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n outputRange(base, index, count, samples) {\n let range = Array\n .from(new Array(samples), (item, index) => (\n base * Math.abs(Math.cos(Math.PI * index / (samples - 1)))\n ));\n\n for (let j = 0; j < index * (samples / count); j++) {\n range.unshift(range.pop());\n }\n\n range.unshift(...range.slice(-1));\n\n return range;\n }\n\n renderComponent({ index, count, progress }) {\n let { color: backgroundColor, size, animationDuration } = this.props;\n\n let frames = 60 * animationDuration / 1000;\n let samples = 0;\n\n do\n samples += count;\n while (samples < frames);\n\n let inputRange = Array\n .from(new Array(samples + 1), (item, index) => index / samples);\n\n let\n width = Math.floor(size / 5),\n height = Math.floor(size / 2),\n radius = Math.ceil(width / 2);\n\n let containerStyle = {\n height: size,\n width: width,\n marginHorizontal: radius,\n };\n\n let topStyle = {\n width,\n height,\n backgroundColor,\n borderTopLeftRadius: radius,\n borderTopRightRadius: radius,\n transform: [{\n translateY: progress.interpolate({\n inputRange,\n outputRange: this.outputRange(+(height - radius) / 2, index, count, samples),\n }),\n }],\n };\n\n let bottomStyle = {\n width,\n height,\n backgroundColor,\n borderBottomLeftRadius: radius,\n borderBottomRightRadius: radius,\n transform: [{\n translateY: progress.interpolate({\n inputRange,\n outputRange: this.outputRange(-(height - radius) / 2, index, count, samples),\n }),\n }],\n };\n\n return (\n \n \n \n \n );\n }\n\n render() {\n let { style, ...props } = this.props;\n\n return (\n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { Animated, Easing } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class DotIndicator extends PureComponent {\n static defaultProps = {\n animationEasing: Easing.inOut(Easing.ease),\n\n color: 'rgb(0, 0, 0)',\n count: 4,\n size: 16,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color: backgroundColor } = this.props;\n\n let style = {\n width: size,\n height: size,\n margin: size / 2,\n borderRadius: size / 2,\n backgroundColor,\n transform: [{\n scale: progress.interpolate({\n inputRange: [\n 0.0,\n (index + 0.5) / (count + 1),\n (index + 1.0) / (count + 1),\n (index + 1.5) / (count + 1),\n 1.0,\n ],\n outputRange: [\n 1.0,\n 1.36,\n 1.56,\n 1.06,\n 1.0,\n ],\n }),\n }],\n };\n\n return (\n \n );\n }\n\n render() {\n let { style, ...props } = this.props;\n\n return (\n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { Animated, Easing } from 'react-native';\n\nexport default class Indicator extends PureComponent {\n static defaultProps = {\n animationEasing: Easing.linear,\n animationDuration: 1200,\n hideAnimationDuration: 200,\n\n animating: true,\n interaction: true,\n hidesWhenStopped: true,\n\n count: 1,\n };\n\n static propTypes = {\n animationEasing: PropTypes.func,\n animationDuration: PropTypes.number,\n hideAnimationDuration: PropTypes.number,\n\n animating: PropTypes.bool,\n interaction: PropTypes.bool,\n hidesWhenStopped: PropTypes.bool,\n\n renderComponent: PropTypes.func,\n count: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n /*\n * 0 -> 1\n * | startAnimation\n * | resumeAnimation\n *\n * 1 -> -1\n * | stopAnimation\n *\n * -1 -> 0\n * | saveAnimation\n */\n this.animationState = 0;\n this.savedValue = 0;\n\n let { animating } = this.props;\n\n this.state = {\n progress: new Animated.Value(0),\n hideAnimation: new Animated.Value(animating? 1 : 0),\n };\n }\n\n componentDidMount() {\n let { animating } = this.props;\n\n if (animating) {\n this.startAnimation();\n }\n }\n\n componentDidUpdate(prevProps) {\n let { animating } = this.props;\n\n if (animating && !prevProps.animating) {\n this.resumeAnimation();\n }\n\n if (!animating && prevProps.animating) {\n this.stopAnimation();\n }\n\n if (animating ^ prevProps.animating) {\n let { hideAnimation } = this.state;\n let { hideAnimationDuration: duration } = this.props;\n\n Animated\n .timing(hideAnimation, { toValue: animating? 1 : 0, duration })\n .start();\n }\n }\n\n startAnimation() {\n let { progress } = this.state;\n let { interaction, animationEasing, animationDuration } = this.props;\n\n if (0 !== this.animationState) {\n return;\n }\n\n let animation = Animated\n .timing(progress, {\n duration: animationDuration,\n easing: animationEasing,\n useNativeDriver: true,\n isInteraction: interaction,\n toValue: 1,\n });\n\n Animated\n .loop(animation)\n .start();\n\n this.animationState = 1;\n }\n\n stopAnimation() {\n let { progress } = this.state;\n\n if (1 !== this.animationState) {\n return;\n }\n\n let listener = progress\n .addListener(({ value }) => {\n progress.removeListener(listener);\n progress.stopAnimation(() => this.saveAnimation(value));\n });\n\n this.animationState = -1;\n }\n\n saveAnimation(value) {\n let { animating } = this.props;\n\n this.savedValue = value;\n this.animationState = 0;\n\n if (animating) {\n this.resumeAnimation();\n }\n }\n\n resumeAnimation() {\n let { progress } = this.state;\n let { interaction, animationDuration } = this.props;\n\n if (0 !== this.animationState) {\n return;\n }\n\n Animated\n .timing(progress, {\n useNativeDriver: true,\n isInteraction: interaction,\n duration: (1 - this.savedValue) * animationDuration,\n toValue: 1,\n })\n .start(({ finished }) => {\n if (finished) {\n progress.setValue(0);\n\n this.animationState = 0;\n this.startAnimation();\n }\n });\n\n this.savedValue = 0;\n this.animationState = 1;\n }\n\n renderComponent(item, index) {\n let { progress } = this.state;\n let { renderComponent, count } = this.props;\n\n if ('function' === typeof renderComponent) {\n return renderComponent({ index, count, progress });\n }\n\n return null;\n }\n\n render() {\n let { hideAnimation } = this.state;\n let { count, hidesWhenStopped, ...props } = this.props;\n\n if (hidesWhenStopped) {\n props.style = []\n .concat(props.style || [], { opacity: hideAnimation });\n }\n\n return (\n \n {Array.from(new Array(count), this.renderComponent, this)}\n \n );\n }\n}\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated, Easing } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class MaterialIndicator extends PureComponent {\n static defaultProps = {\n animationDuration: 4000,\n\n color: 'rgb(0, 0, 0)',\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n trackWidth: PropTypes.number,\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n _renderComponent = ({ index, count, progress }) => {\n let {\n size,\n color,\n trackWidth: borderWidth = size / 10,\n animationDuration,\n } = this.props;\n\n let frames = 60 * animationDuration / 1000;\n let easing = Easing.bezier(0.4, 0.0, 0.7, 1.0);\n\n let sa = 7.5;\n let ea = 30;\n\n let sequences = 3;\n let rotations = 5;\n\n let inputRange = Array\n .from(new Array(frames), (item, frameIndex) => frameIndex / (frames - 1));\n\n let outputRange = Array\n .from(new Array(frames), (item, frameIndex) => {\n let progress = 2 * sequences * frameIndex / (frames - 1);\n let rotation = index?\n +(360 - sa):\n -(180 - sa);\n\n let sequence = Math.ceil(progress);\n\n if (sequence % 2) {\n progress = progress - sequence + 1;\n } else {\n progress = sequence - progress;\n }\n\n let direction = index?\n -1:\n +1;\n\n return (direction * (180 - (sa + ea)) * easing(progress) + rotation) + 'deg';\n });\n\n let layerStyle = {\n width: size,\n height: size,\n transform: [{\n rotate: (90 - sa) + 'deg',\n }, {\n rotate: progress.interpolate({\n inputRange: [0, 1],\n outputRange: ['0deg', (360 * rotations) + 'deg'],\n }),\n }],\n };\n\n let viewportStyle = {\n width: size,\n height: size,\n transform: [{\n translateY: index?\n -size / 2:\n 0,\n }, {\n rotate: progress.interpolate({ inputRange, outputRange }),\n }],\n };\n\n let containerStyle = {\n width: size,\n height: size / 2,\n overflow: 'hidden',\n };\n\n let offsetStyle = index?\n { top: size / 2 }:\n null;\n\n let lineStyle = {\n width: size,\n height: size,\n borderColor: color,\n borderRadius: size / 2,\n borderWidth,\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n };\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated, I18nManager } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class PacmanIndicator extends PureComponent {\n static defaultProps = {\n animationDuration: 600,\n\n color: 'rgb(0, 0, 0)',\n size: 48,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderBlock({ index, count, progress }) {\n let { size, color: backgroundColor } = this.props;\n\n let transform = [{\n translateX: progress.interpolate({\n inputRange: [0.5, 1],\n outputRange: [0, size / (I18nManager.isRTL? 4 : -4)],\n extrapolate: 'clamp',\n }),\n }];\n\n let style = {\n position: 'absolute',\n top: size / 2 - size / 16,\n left: size / 2 + size / 16 + (index - 2) * size / 4,\n width: size / 8,\n height: size / 8,\n borderRadius: size / 16,\n backgroundColor,\n transform,\n };\n\n if (index === count - 1) {\n transform.push({\n scale: progress.interpolate({\n inputRange: [0, 0.5],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n }),\n });\n\n style.opacity = progress.interpolate({\n inputRange: [0, 0.25],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n });\n }\n\n return (\n \n );\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color: backgroundColor } = this.props;\n\n if (index > 1) {\n return this.renderBlock({ index, count, progress });\n }\n\n let hf = size / 2;\n let qr = size / 4;\n\n let pacmanStyle = {\n position: 'absolute',\n top: qr,\n left: 0,\n\n width: hf,\n height: hf,\n\n transform: [{\n rotate: progress.interpolate({\n inputRange: [0, 0.67, 1],\n outputRange: (index ^ I18nManager.isRTL)?\n ['0deg', '45deg', '0deg']:\n ['0deg', '-45deg', '0deg'],\n extrapolate: 'clamp',\n }),\n }],\n };\n\n let containerStyle = {\n overflow: 'hidden',\n\n width: hf,\n height: qr,\n\n ...(index? {\n top: qr,\n borderBottomLeftRadius: qr,\n borderBottomRightRadius: qr,\n } : {\n borderTopLeftRadius: qr,\n borderTopRightRadius: qr,\n }),\n\n backgroundColor,\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size, ...props } = this.props;\n\n let indicatorStyle = {\n width: size * 1.25,\n height: size,\n };\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated, Easing } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class PulseIndicator extends PureComponent {\n static defaultProps = {\n animationEasing: Easing.out(Easing.ease),\n\n color: 'rgb(0, 0, 0)',\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color } = this.props;\n\n let pulseStyle = {\n height: size,\n width: size,\n borderRadius: size / 2,\n backgroundColor: color,\n transform: [{\n scale: progress.interpolate({\n inputRange: [0, 0.67, 1],\n outputRange: index?\n [0.4, 0.6, 0.4]:\n [0.4, 0.6, 1.0],\n }),\n }],\n opacity: progress.interpolate({\n inputRange: [0, 0.67, 1],\n outputRange: index?\n [1.0, 1.0, 1.0]:\n [0.5, 0.5, 0.0],\n }),\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated, Easing } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class SkypeIndicator extends PureComponent {\n static defaultProps = {\n animationDuration: 1600,\n\n color: 'rgb(0, 0, 0)',\n count: 5,\n size: 40,\n\n minScale: 0.2,\n maxScale: 1.0,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n\n minScale: PropTypes.number,\n maxScale: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, minScale, maxScale, color: backgroundColor, animationDuration } = this.props;\n let frames = 60 * animationDuration / 1000;\n let offset = index / (count - 1);\n let easing = Easing.bezier(0.5, offset, 0.5, 1.0);\n\n let inputRange = Array\n .from(new Array(frames), (item, index) => index / (frames - 1));\n\n let outputRange = Array\n .from(new Array(frames), (item, index) => easing(index / (frames - 1)) * 360 + 'deg');\n\n let layerStyle = {\n transform: [{\n rotate: progress.interpolate({ inputRange, outputRange }),\n }],\n };\n\n let ballStyle = {\n width: size / 5,\n height: size / 5,\n borderRadius: size / 10,\n backgroundColor,\n transform: [{\n scale: progress.interpolate({\n inputRange: [0, 1],\n outputRange: [\n maxScale - (maxScale - minScale) * offset,\n minScale + (maxScale - minScale) * offset,\n ],\n }),\n }],\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'flex-start',\n alignItems: 'center',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nexport default class UIActivityIndicator extends PureComponent {\n static defaultProps = {\n color: 'rgb(0, 0, 0)',\n count: 12,\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color: backgroundColor } = this.props;\n let angle = index * 360 / count;\n\n let layerStyle = {\n transform: [{\n rotate: angle + 'deg',\n }],\n };\n\n let inputRange = Array\n .from(new Array(count + 1), (item, index) => (\n index / count\n ));\n\n let outputRange = Array\n .from(new Array(count), (item, index) => (\n Math.max(1.0 - index * (1 / (count - 1)), 0)\n ));\n\n for (let j = 0; j < index; j++) {\n outputRange.unshift(outputRange.pop());\n }\n\n outputRange.unshift(...outputRange.slice(-1));\n\n let barStyle = {\n width: size / 10,\n height: size / 4,\n borderRadius: size / 20,\n backgroundColor,\n opacity: progress\n .interpolate({ inputRange, outputRange }),\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'flex-start',\n alignItems: 'center',\n },\n});\n","import PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\nimport { View, Animated, Easing } from 'react-native';\n\nimport Indicator from '../indicator';\nimport styles from './styles';\n\nconst floatEpsilon = Math.pow(2, -23);\n\nexport default class WaveIndicator extends PureComponent {\n static defaultProps = {\n animationEasing: Easing.out(Easing.ease),\n animationDuration: 1600,\n\n waveFactor: 0.54,\n waveMode: 'fill',\n\n color: 'rgb(0, 0, 0)',\n count: 4,\n size: 40,\n };\n\n static propTypes = {\n ...Indicator.propTypes,\n\n waveFactor: PropTypes.number,\n waveMode: PropTypes.oneOf(['fill', 'outline']),\n\n color: PropTypes.string,\n size: PropTypes.number,\n };\n\n constructor(props) {\n super(props);\n\n this.renderComponent = this.renderComponent.bind(this);\n }\n\n renderComponent({ index, count, progress }) {\n let { size, color, waveFactor, waveMode } = this.props;\n let fill = 'fill' === waveMode;\n\n let factor = Math.max(1 - Math.pow(waveFactor, index), floatEpsilon);\n\n let waveStyle = {\n height: size,\n width: size,\n borderRadius: size / 2,\n borderWidth: fill? 0 : Math.floor(size / 20),\n [fill? 'backgroundColor' : 'borderColor']: color,\n\n transform: [{\n scale: progress.interpolate({\n inputRange: [factor, 1],\n outputRange: [0, 1],\n extrapolate: 'clamp',\n }),\n }],\n\n opacity: progress.interpolate({\n inputRange: [0, factor, 1],\n outputRange: [0, 1, 0],\n }),\n };\n\n return (\n \n \n \n );\n }\n\n render() {\n let { style, size: width, size: height, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import { StyleSheet } from 'react-native';\n\nexport default StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n },\n\n layer: {\n ...StyleSheet.absoluteFillObject,\n\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n",null,"import type { NativeMMKV } from 'react-native-mmkv';\n\n/* Mock MMKV instance for use in tests */\nexport const createMockMMKV = (): NativeMMKV => {\n const storage = new Map();\n\n return {\n clearAll: () => storage.clear(),\n delete: (key) => storage.delete(key),\n set: (key, value) => storage.set(key, value),\n getString: (key) => {\n const result = storage.get(key);\n return typeof result === 'string' ? result : undefined;\n },\n getNumber: (key) => {\n const result = storage.get(key);\n return typeof result === 'number' ? result : undefined;\n },\n getBoolean: (key) => {\n const result = storage.get(key);\n return typeof result === 'boolean' ? result : undefined;\n },\n getBuffer: (key) => {\n const result = storage.get(key);\n return result instanceof Uint8Array ? result : undefined;\n },\n getAllKeys: () => Array.from(storage.keys()),\n contains: (key) => storage.has(key),\n recrypt: () => {\n console.warn('Encryption is not supported in mocked MMKV instances!');\n },\n };\n};\n","import { createMMKV } from './createMMKV';\nimport { createMockMMKV } from './createMMKV.mock';\nimport { isJest } from './PlatformChecker';\n\ninterface Listener {\n remove: () => void;\n}\n\n/**\n * Used for configuration of a single MMKV instance.\n */\nexport interface MMKVConfiguration {\n /**\n * The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!\n *\n * @example\n * ```ts\n * const userStorage = new MMKV({ id: `user-${userId}-storage` })\n * const globalStorage = new MMKV({ id: 'global-app-storage' })\n * ```\n *\n * @default 'mmkv.default'\n */\n id: string;\n /**\n * The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization:\n\n * @example\n * ```ts\n * const temporaryStorage = new MMKV({ path: '/tmp/' })\n * ```\n * \n * _Notice_: On iOS you can set the AppGroup bundle property to share the same storage between your app and its extensions. \n * In this case `path` property will be ignored.\n * See more on MMKV configuration [here](https://github.com/Tencent/MMKV/wiki/iOS_tutorial#configuration).\n */\n path?: string;\n /**\n * The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV.\n *\n * Encryption keys can have a maximum length of 16 bytes.\n *\n * @example\n * ```ts\n * const secureStorage = new MMKV({ encryptionKey: 'my-encryption-key!' })\n * ```\n */\n encryptionKey?: string;\n}\n\n/**\n * Represents a single MMKV instance.\n */\ninterface MMKVInterface {\n /**\n * Set a value for the given `key`.\n */\n set: (key: string, value: boolean | string | number | Uint8Array) => void;\n /**\n * Get the boolean value for the given `key`, or `undefined` if it does not exist.\n *\n * @default undefined\n */\n getBoolean: (key: string) => boolean | undefined;\n /**\n * Get the string value for the given `key`, or `undefined` if it does not exist.\n *\n * @default undefined\n */\n getString: (key: string) => string | undefined;\n /**\n * Get the number value for the given `key`, or `undefined` if it does not exist.\n *\n * @default undefined\n */\n getNumber: (key: string) => number | undefined;\n /**\n * Get a raw buffer of unsigned 8-bit (0-255) data.\n *\n * @default undefined\n */\n getBuffer: (key: string) => Uint8Array | undefined;\n /**\n * Checks whether the given `key` is being stored in this MMKV instance.\n */\n contains: (key: string) => boolean;\n /**\n * Delete the given `key`.\n */\n delete: (key: string) => void;\n /**\n * Get all keys.\n *\n * @default []\n */\n getAllKeys: () => string[];\n /**\n * Delete all keys.\n */\n clearAll: () => void;\n /**\n * Sets (or updates) the encryption-key to encrypt all data in this MMKV instance with.\n *\n * To remove encryption, pass `undefined` as a key.\n *\n * Encryption keys can have a maximum length of 16 bytes.\n */\n recrypt: (key: string | undefined) => void;\n /**\n * Adds a value changed listener. The Listener will be called whenever any value\n * in this storage instance changes (set or delete).\n *\n * To unsubscribe from value changes, call `remove()` on the Listener.\n */\n addOnValueChangedListener: (\n onValueChanged: (key: string) => void\n ) => Listener;\n}\n\nexport type NativeMMKV = Pick<\n MMKVInterface,\n | 'clearAll'\n | 'contains'\n | 'delete'\n | 'getAllKeys'\n | 'getBoolean'\n | 'getNumber'\n | 'getString'\n | 'getBuffer'\n | 'set'\n | 'recrypt'\n>;\n\nconst onValueChangedListeners = new Map void)[]>();\n\n/**\n * A single MMKV instance.\n */\nexport class MMKV implements MMKVInterface {\n private nativeInstance: NativeMMKV;\n private functionCache: Partial;\n private id: string;\n\n /**\n * Creates a new MMKV instance with the given Configuration.\n * If no custom `id` is supplied, `'mmkv.default'` will be used.\n */\n constructor(configuration: MMKVConfiguration = { id: 'mmkv.default' }) {\n this.id = configuration.id;\n this.nativeInstance = isJest()\n ? createMockMMKV()\n : createMMKV(configuration);\n this.functionCache = {};\n }\n\n private get onValueChangedListeners() {\n if (!onValueChangedListeners.has(this.id)) {\n onValueChangedListeners.set(this.id, []);\n }\n return onValueChangedListeners.get(this.id)!;\n }\n\n private getFunctionFromCache(\n functionName: T\n ): NativeMMKV[T] {\n if (this.functionCache[functionName] == null) {\n this.functionCache[functionName] = this.nativeInstance[functionName];\n }\n return this.functionCache[functionName] as NativeMMKV[T];\n }\n\n private onValuesChanged(keys: string[]) {\n if (this.onValueChangedListeners.length === 0) return;\n\n for (const key of keys) {\n for (const listener of this.onValueChangedListeners) {\n listener(key);\n }\n }\n }\n\n set(key: string, value: boolean | string | number | Uint8Array): void {\n const func = this.getFunctionFromCache('set');\n func(key, value);\n\n this.onValuesChanged([key]);\n }\n getBoolean(key: string): boolean | undefined {\n const func = this.getFunctionFromCache('getBoolean');\n return func(key);\n }\n getString(key: string): string | undefined {\n const func = this.getFunctionFromCache('getString');\n return func(key);\n }\n getNumber(key: string): number | undefined {\n const func = this.getFunctionFromCache('getNumber');\n return func(key);\n }\n getBuffer(key: string): Uint8Array | undefined {\n const func = this.getFunctionFromCache('getBuffer');\n return func(key);\n }\n contains(key: string): boolean {\n const func = this.getFunctionFromCache('contains');\n return func(key);\n }\n delete(key: string): void {\n const func = this.getFunctionFromCache('delete');\n func(key);\n\n this.onValuesChanged([key]);\n }\n getAllKeys(): string[] {\n const func = this.getFunctionFromCache('getAllKeys');\n return func();\n }\n clearAll(): void {\n const keys = this.getAllKeys();\n\n const func = this.getFunctionFromCache('clearAll');\n func();\n\n this.onValuesChanged(keys);\n }\n recrypt(key: string | undefined): void {\n const func = this.getFunctionFromCache('recrypt');\n return func(key);\n }\n\n toString(): string {\n return `MMKV (${this.id}): [${this.getAllKeys().join(', ')}]`;\n }\n toJSON(): object {\n return {\n [this.id]: this.getAllKeys(),\n };\n }\n\n addOnValueChangedListener(onValueChanged: (key: string) => void): Listener {\n this.onValueChangedListeners.push(onValueChanged);\n\n return {\n remove: () => {\n const index = this.onValueChangedListeners.indexOf(onValueChanged);\n if (index !== -1) {\n this.onValueChangedListeners.splice(index, 1);\n }\n },\n };\n }\n}\n","export function isJest(): boolean {\n if (global.process == null) {\n // In a WebBrowser/Electron the `process` variable does not exist\n return false;\n }\n return process.env.JEST_WORKER_ID != null;\n}\n","/* global localStorage */\nimport type { MMKVConfiguration, NativeMMKV } from 'react-native-mmkv';\nimport { createTextEncoder } from './createTextEncoder';\n\nconst canUseDOM =\n typeof window !== 'undefined' && window.document?.createElement != null;\n\nconst hasAccessToLocalStorage = () => {\n try {\n // throws ACCESS_DENIED error\n window.localStorage;\n\n return true;\n } catch {\n return false;\n }\n};\n\nconst KEY_WILDCARD = '\\\\';\nconst inMemoryStorage = new Map();\n\nexport const createMMKV = (config: MMKVConfiguration): NativeMMKV => {\n if (config.encryptionKey != null) {\n throw new Error(\"MMKV: 'encryptionKey' is not supported on Web!\");\n }\n if (config.path != null) {\n throw new Error(\"MMKV: 'path' is not supported on Web!\");\n }\n \n // canUseDOM check prevents spam in Node server environments, such as Next.js server side props.\n if (!hasAccessToLocalStorage() && canUseDOM) {\n console.warn(\n 'MMKV: LocalStorage has been disabled. Your experience will be limited to in-memory storage!'\n );\n }\n\n const storage = () => {\n if (!canUseDOM) {\n throw new Error(\n 'Tried to access storage on the server. Did you forget to call this in useEffect?'\n );\n }\n\n if (!hasAccessToLocalStorage()) {\n return {\n getItem: (key: string) => inMemoryStorage.get(key) ?? null,\n setItem: (key: string, value: string) =>\n inMemoryStorage.set(key, value),\n removeItem: (key: string) => inMemoryStorage.delete(key),\n clear: () => inMemoryStorage.clear(),\n length: inMemoryStorage.size,\n key: (index: number) => Object.keys(inMemoryStorage).at(index) ?? null,\n } as Storage;\n }\n\n const domStorage =\n global?.localStorage ?? window?.localStorage ?? localStorage;\n if (domStorage == null) {\n throw new Error(`Could not find 'localStorage' instance!`);\n }\n return domStorage;\n };\n\n const textEncoder = createTextEncoder();\n\n if (config.id.includes(KEY_WILDCARD)) {\n throw new Error(\n 'MMKV: `id` cannot contain the backslash character (`\\\\`)!'\n );\n }\n\n const keyPrefix = `${config.id}${KEY_WILDCARD}`; // mmkv.default\\\\\n const prefixedKey = (key: string) => {\n if (key.includes('\\\\')) {\n throw new Error(\n 'MMKV: `key` cannot contain the backslash character (`\\\\`)!'\n );\n }\n return `${keyPrefix}${key}`;\n };\n\n return {\n clearAll: () => {\n const keys = Object.keys(storage());\n for (const key of keys) {\n if (key.startsWith(keyPrefix)) {\n storage().removeItem(key);\n }\n }\n },\n delete: (key) => storage().removeItem(prefixedKey(key)),\n set: (key, value) => {\n storage().setItem(prefixedKey(key), value.toString());\n },\n getString: (key) => storage().getItem(prefixedKey(key)) ?? undefined,\n getNumber: (key) => {\n const value = storage().getItem(prefixedKey(key));\n if (value == null) return undefined;\n return Number(value);\n },\n getBoolean: (key) => {\n const value = storage().getItem(prefixedKey(key));\n if (value == null) return undefined;\n return value === 'true';\n },\n getBuffer: (key) => {\n const value = storage().getItem(prefixedKey(key));\n if (value == null) return undefined;\n return textEncoder.encode(value);\n },\n getAllKeys: () => {\n const keys = Object.keys(storage());\n return keys.filter((key) => key.startsWith(keyPrefix));\n },\n contains: (key) => storage().getItem(prefixedKey(key)) != null,\n recrypt: () => {\n throw new Error('`recrypt(..)` is not supported on Web!');\n },\n };\n};\n","/* global TextEncoder */\nexport function createTextEncoder(): TextEncoder {\n if (global.TextEncoder != null) {\n return new global.TextEncoder();\n } else {\n return {\n encode: () => {\n throw new Error('TextEncoder is not supported in this environment!');\n },\n encodeInto: () => {\n throw new Error('TextEncoder is not supported in this environment!');\n },\n encoding: 'utf-8',\n };\n }\n}\n","import { useRef, useState, useMemo, useCallback, useEffect } from 'react';\nimport { MMKV, MMKVConfiguration } from './MMKV';\n\nfunction isConfigurationEqual(\n left?: MMKVConfiguration,\n right?: MMKVConfiguration\n): boolean {\n if (left == null || right == null) return left == null && right == null;\n\n return (\n left.encryptionKey === right.encryptionKey &&\n left.id === right.id &&\n left.path === right.path\n );\n}\n\nlet defaultInstance: MMKV | null = null;\nfunction getDefaultInstance(): MMKV {\n if (defaultInstance == null) {\n defaultInstance = new MMKV();\n }\n return defaultInstance;\n}\n\n/**\n * Use the default, shared MMKV instance.\n */\nexport function useMMKV(): MMKV;\n/**\n * Use a custom MMKV instance with the given configuration.\n * @param configuration The configuration to initialize the MMKV instance with. Does not have to be memoized.\n */\nexport function useMMKV(configuration: MMKVConfiguration): MMKV;\nexport function useMMKV(configuration?: MMKVConfiguration): MMKV {\n const instance = useRef();\n const lastConfiguration = useRef();\n\n if (configuration == null) return getDefaultInstance();\n\n if (\n instance.current == null ||\n !isConfigurationEqual(lastConfiguration.current, configuration)\n ) {\n lastConfiguration.current = configuration;\n instance.current = new MMKV(configuration);\n }\n\n return instance.current;\n}\n\nfunction createMMKVHook<\n T extends (boolean | number | string | Uint8Array) | undefined,\n TSet extends T | undefined,\n TSetAction extends TSet | ((current: T) => TSet)\n>(getter: (instance: MMKV, key: string) => T) {\n return (\n key: string,\n instance?: MMKV\n ): [value: T, setValue: (value: TSetAction) => void] => {\n const mmkv = instance ?? getDefaultInstance();\n const [value, setValue] = useState(() => getter(mmkv, key));\n const valueRef = useRef(value);\n valueRef.current = value;\n\n // update value by user set\n const set = useCallback(\n (v: TSetAction) => {\n const newValue = typeof v === 'function' ? v(valueRef.current) : v;\n switch (typeof newValue) {\n case 'number':\n case 'string':\n case 'boolean':\n mmkv.set(key, newValue);\n break;\n case 'undefined':\n mmkv.delete(key);\n break;\n case 'object':\n if (newValue instanceof Uint8Array) {\n mmkv.set(key, newValue);\n break;\n } else {\n throw new Error(\n `MMKV: Type object (${newValue}) is not supported!`\n );\n }\n default:\n throw new Error(`MMKV: Type ${typeof newValue} is not supported!`);\n }\n },\n [key, mmkv]\n );\n\n // update value if key or instance changes\n useEffect(() => {\n setValue(getter(mmkv, key));\n }, [key, mmkv]);\n\n // update value if it changes somewhere else (second hook, same key)\n useEffect(() => {\n const listener = mmkv.addOnValueChangedListener((changedKey) => {\n if (changedKey === key) {\n setValue(getter(mmkv, key));\n }\n });\n return () => listener.remove();\n }, [key, mmkv]);\n\n return [value, set];\n };\n}\n\n/**\n * Use the string value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [username, setUsername] = useMMKVString(\"user.name\")\n * ```\n */\nexport const useMMKVString = createMMKVHook((instance, key) =>\n instance.getString(key)\n);\n\n/**\n * Use the number value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [age, setAge] = useMMKVNumber(\"user.age\")\n * ```\n */\nexport const useMMKVNumber = createMMKVHook((instance, key) =>\n instance.getNumber(key)\n);\n/**\n * Use the boolean value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [isPremiumAccount, setIsPremiumAccount] = useMMKVBoolean(\"user.isPremium\")\n * ```\n */\nexport const useMMKVBoolean = createMMKVHook((instance, key) =>\n instance.getBoolean(key)\n);\n/**\n * Use the buffer value (unsigned 8-bit (0-255)) of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * @example\n * ```ts\n * const [privateKey, setPrivateKey] = useMMKVBuffer(\"user.privateKey\")\n * ```\n */\nexport const useMMKVBuffer = createMMKVHook((instance, key) =>\n instance.getBuffer(key)\n);\n/**\n * Use an object value of the given `key` from the given MMKV storage instance.\n *\n * If no instance is provided, a shared default instance will be used.\n *\n * The object will be serialized using `JSON`.\n *\n * @example\n * ```ts\n * const [user, setUser] = useMMKVObject(\"user\")\n * ```\n */\nexport function useMMKVObject(\n key: string,\n instance?: MMKV\n): [value: T | undefined, setValue: (value: T | undefined) => void] {\n const [string, setString] = useMMKVString(key, instance);\n\n const value = useMemo(() => {\n if (string == null) return undefined;\n return JSON.parse(string) as T;\n }, [string]);\n const setValue = useCallback(\n (v: T | undefined) => {\n if (v == null) {\n // Clear the Value\n setString(undefined);\n } else {\n // Store the Object as a serialized Value\n setString(JSON.stringify(v));\n }\n },\n [setString]\n );\n\n return [value, setValue];\n}\n\n/**\n * Listen for changes in the given MMKV storage instance.\n * If no instance is passed, the default instance will be used.\n * @param valueChangedListener The function to call whenever a value inside the storage instance changes\n * @param instance The instance to listen to changes to (or the default instance)\n *\n * @example\n * ```ts\n * useMMKVListener((key) => {\n * console.log(`Value for \"${key}\" changed!`)\n * })\n * ```\n */\nexport function useMMKVListener(\n valueChangedListener: (key: string) => void,\n instance?: MMKV\n): void {\n const ref = useRef(valueChangedListener);\n ref.current = valueChangedListener;\n\n const mmkv = instance ?? getDefaultInstance();\n\n useEffect(() => {\n const listener = mmkv.addOnValueChangedListener((changedKey) => {\n ref.current(changedKey);\n });\n return () => listener.remove();\n }, [mmkv]);\n}\n","export * from './MMKV';\nexport * from './hooks';\n","// platform select polyfil for older RN versions\nimport { Platform } from 'react-native';\n\nif (!Platform.select) {\n Platform.select = (obj) => obj[Platform.OS];\n}\n","import React from 'react';\nimport { Platform, TouchableHighlight, TouchableNativeFeedback } from 'react-native';\n\n/**\n * Promisifies measure's callback function and returns layout object.\n */\nexport const measure = ref => new Promise((resolve) => {\n ref.measure((x, y, width, height, pageX, pageY) => {\n resolve({\n x: pageX, y: pageY,\n width, height,\n })\n });\n});\n\n/**\n * Create unique menu name across all menu instances.\n */\nexport const makeName = (function() {\n let nextID = 1;\n return () => `menu-${nextID++}`;\n})();\n\n/**\n * Create touchable component based on passed parameter and platform.\n * It also returns default props for specific touchable types.\n */\nexport function makeTouchable(TouchableComponent) {\n const Touchable = TouchableComponent || Platform.select({\n android: TouchableNativeFeedback,\n ios: TouchableHighlight,\n default: TouchableHighlight,\n });\n let defaultTouchableProps = {};\n if (Touchable === TouchableHighlight) {\n defaultTouchableProps = { underlayColor: 'rgba(0, 0, 0, 0.1)' };\n }\n return { Touchable, defaultTouchableProps };\n}\n\nfunction includes(arr, value) {\n return arr.indexOf(value) > -1;\n}\n\n/**\nLog object - prepares object for logging by stripping all \"private\" or excluding fields\n*/\nexport function lo(object, ...excluding) {\n const exc = Array.from(excluding);\n function isObject(obj) {\n return obj === Object(obj);\n }\n function withoutPrivate(obj) {\n if (!isObject(obj)) return obj;\n const res = {};\n for (var property in obj) {\n if (obj.hasOwnProperty(property)) {\n if (!property.startsWith('_') && !includes(exc, property)) {\n res[property] = withoutPrivate(obj[property]);\n }\n }\n }\n return res;\n }\n return withoutPrivate(object);\n}\n\n/**\nConverts iterator to array\n*/\nexport function iterator2array(it) {\n // workaround around https://github.com/instea/react-native-popup-menu/issues/41#issuecomment-340290127\n const arr = [];\n for (let next = it.next(); !next.done; next = it.next()) {\n arr.push(next.value);\n }\n return arr;\n}\n\n/** checks if component is class component */\nexport function isClassComponent(component) {\n return component.prototype && !!component.prototype.render;\n}\n\n/**\n * Higher order component to deprecate usage of component.\n * message - deprecate warning message\n * methods - array of method names to be delegated to deprecated component\n */\nexport function deprecatedComponent(message, methods = []) {\n return function deprecatedComponentHOC(Component) {\n return class DeprecatedComponent extends React.Component {\n constructor(...args) {\n super(...args);\n methods.forEach(name => {\n // delegate methods to the component\n this[name] = (...args) => this.ref && this.ref[name](...args)\n });\n }\n\n render() {\n return \n }\n\n onRef = ref => this.ref = ref;\n\n componentDidMount() {\n console.warn(message);\n }\n }\n }\n}\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","import React from \"react\";\n\nexport function withContext(Context, propName = \"context\") {\n return function wrap(Component) {\n class EnhanceContext extends React.Component {\n render() {\n const { forwardedRef, ...rest } = this.props;\n\n return (\n \n {value => {\n const custom = {\n [propName]: value,\n ref: forwardedRef,\n };\n return ;\n }}\n \n );\n }\n }\n\n const name = Component.displayName || Component.name || \"Component\";\n const consumerName =\n Context.Consumer.displayName ||\n Context.Consumer.name ||\n \"Context.Consumer\";\n\n function enhanceForwardRef(props, ref) {\n return ;\n }\n\n enhanceForwardRef.displayName = `enhanceContext-${consumerName}(${name})`;\n\n const FC = React.forwardRef(enhanceForwardRef);\n FC.defaultProps = Component.defaultProps;\n FC.propTypes = Component.propTypes;\n return FC\n };\n}\n","import { iterator2array } from './helpers';\n\n/**\n * Registry to subscribe, unsubscribe and update data of menus.\n *\n * menu data: {\n * instance: react instance\n * triggerLayout: Object - layout of menu trigger if known\n * optionsLayout: Object - layout of menu options if known\n * optionsCustomStyles: Object - custom styles of options\n * }\n*/\nexport default function makeMenuRegistry(menus = new Map()) {\n\n /**\n * Subscribes menu instance.\n */\n function subscribe(instance) {\n const name = instance.getName()\n if (menus.get(name)) {\n console.warn(`incorrect usage of popup menu - menu with name ${name} already exists`);\n }\n menus.set(name, { name, instance });\n }\n\n /**\n * Unsubscribes menu instance.\n */\n function unsubscribe(instance) {\n menus.delete(instance.getName());\n }\n\n /**\n * Updates layout infomration.\n */\n function updateLayoutInfo(name, layouts = {}) {\n if (!menus.has(name)) {\n return;\n }\n const menu = Object.assign({}, menus.get(name));\n if (layouts.hasOwnProperty('triggerLayout')) {\n menu.triggerLayout = layouts.triggerLayout;\n }\n if (layouts.hasOwnProperty('optionsLayout')) {\n menu.optionsLayout = layouts.optionsLayout;\n }\n menus.set(name, menu);\n }\n\n function setOptionsCustomStyles(name, optionsCustomStyles) {\n if (!menus.has(name)) {\n return;\n }\n const menu = { ...menus.get(name), optionsCustomStyles };\n menus.set(name, menu);\n }\n\n /**\n * Get `menu data` by name.\n */\n function getMenu(name) {\n return menus.get(name);\n }\n\n /**\n * Returns all subscribed menus as array of `menu data`\n */\n function getAll() {\n return iterator2array(menus.values());\n }\n\n return { subscribe, unsubscribe, updateLayoutInfo, getMenu, getAll, setOptionsCustomStyles };\n}\n","import { Platform } from 'react-native';\n\n// common durations of animation\nexport const OPEN_ANIM_DURATION = 225;\nexport const CLOSE_ANIM_DURATION = 195;\n\nexport const USE_NATIVE_DRIVER = (Platform.OS !== \"web\");\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { View, StyleSheet, TouchableWithoutFeedback, Animated } from 'react-native';\nimport { OPEN_ANIM_DURATION, CLOSE_ANIM_DURATION, USE_NATIVE_DRIVER } from './constants';\n\nclass Backdrop extends Component {\n\n constructor(...args) {\n super(...args);\n this.fadeAnim = new Animated.Value(0.001);\n }\n\n open() {\n return new Promise(resolve => {\n Animated.timing(this.fadeAnim, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start(resolve);\n });\n }\n\n close() {\n return new Promise(resolve => {\n Animated.timing(this.fadeAnim, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start(resolve);\n });\n }\n\n render() {\n const { onPress, style } = this.props;\n return (\n \n \n \n \n \n );\n }\n\n}\n\nBackdrop.propTypes = {\n onPress: PropTypes.func.isRequired,\n};\n\nconst styles = StyleSheet.create({\n fullscreen: {\n opacity: 0,\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n },\n});\n\nexport default Backdrop;\n","\nexport const CFG = {\n debug: false,\n}\n/**\n * Debug logger depending on `Menu.debug` static porperty.\n */\nexport const debug = (...args) => {\n CFG.debug && console.log('react-native-popup-menu', ...args);\n};\n","import React, { Component } from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport Backdrop from './Backdrop';\nimport { debug } from './logger.js';\n\nexport default class MenuPlaceholder extends Component {\n constructor(props) {\n super(props)\n this.state = {};\n }\n\n shouldComponentUpdate() {\n // don't terminate closing animation\n return !this.props.ctx._isMenuClosing;\n }\n\n render() {\n const { ctx, backdropStyles } = this.props;\n const shouldRenderMenu = ctx.isMenuOpen() && ctx._isInitialized();\n debug('MenuPlaceholder should render', shouldRenderMenu);\n if (!shouldRenderMenu) {\n return null;\n }\n return (\n \n \n {\n ctx._makeOptions()\n }\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n placeholder: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden',\n },\n});\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\n\nexport const computePosition = ({ windowLayout }) => ({\n top: windowLayout.height,\n left: windowLayout.width,\n});\n\n\nconst MenuOutside = props => {\n const { style, children, layouts, ...other } = props;\n const position = computePosition(layouts);\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n options: {\n position: 'absolute',\n },\n});\n\nexport default MenuOutside;\n","import React, { Component, createContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { View, BackHandler, SafeAreaView, StyleSheet } from 'react-native';\n\nimport { withContext } from './with-context';\nimport makeMenuRegistry from './menuRegistry';\nimport MenuPlaceholder from './MenuPlaceholder';\nimport { measure, isClassComponent } from './helpers';\nimport { debug } from './logger.js';\nimport MenuOutside from './renderers/MenuOutside';\n\nconst defaultOptionsContainerRenderer = options => options;\nconst layoutsEqual = (a, b) => (\n a === b || (a && b && a.width === b.width && a.height === b.height)\n);\n\nif (!React.forwardRef) {\n throw new Error('This version of popup-menu requires RN 0.55+. Check our compatibility table.')\n}\nexport const PopupMenuContext = createContext({})\nexport const withCtx = withContext(PopupMenuContext, \"ctx\");\n\n// count of MenuProvider instances\nlet instanceCount = 0;\n\nexport default class MenuProvider extends Component {\n\n constructor(props) {\n super(props);\n this._menuRegistry = makeMenuRegistry();\n this._isMenuClosing = false;\n this._isBackHandlerRegistered = false;\n const menuActions = {\n openMenu: name => this.openMenu(name),\n closeMenu: () => this.closeMenu(),\n toggleMenu: name => this.toggleMenu(name),\n isMenuOpen: () => this.isMenuOpen(),\n _getOpenedMenu: () => this._getOpenedMenu(),\n _notify: force => this._notify(force),\n };\n this.menuCtx = { menuRegistry: this._menuRegistry, menuActions }\n }\n\n _handleBackButton = () => {\n const { backHandler } = this.props;\n debug('_handleBackButton called', backHandler);\n\n // Default handler if true is passed\n if (backHandler === true) {\n if (this.isMenuOpen()) {\n this.closeMenu();\n return true;\n }\n }\n\n // Custom handler called with MenuProvider instance id function is passed\n if (typeof backHandler === 'function') {\n return backHandler(this);\n }\n\n return false;\n }\n\n componentDidMount() {\n const { customStyles, skipInstanceCheck } = this.props;\n if (customStyles.menuContextWrapper) {\n console.warn('menuContextWrapper custom style is deprecated and it might be removed in future releases, use menuProviderWrapper instead.');\n }\n if (!skipInstanceCheck) {\n instanceCount++;\n }\n if (instanceCount > 1) {\n console.warn('In most cases you should not have more MenuProviders in your app (see API documentation). In other cases use skipInstanceCheck prop.');\n }\n }\n\n componentWillUnmount() {\n debug('unmounting menu provider')\n if (this._isBackHandlerRegistered) {\n BackHandler.removeEventListener('hardwareBackPress', this._handleBackButton);\n }\n const { skipInstanceCheck } = this.props;\n if (!skipInstanceCheck) {\n instanceCount--;\n }\n }\n\n isMenuOpen() {\n return !!this._getOpenedMenu();\n }\n\n openMenu(name) {\n const menu = this._menuRegistry.getMenu(name);\n if (!menu) {\n console.warn(`menu with name ${name} does not exist`);\n return Promise.resolve();\n }\n debug('open menu', name);\n if (!this._isBackHandlerRegistered) {\n // delay menu registration until the menu is really opened (and thus this back handler will be called \"sooner\")\n // too soon registration can cause another back handlers (e.g. react navigation) to be called instead of our back handler\n BackHandler.addEventListener('hardwareBackPress', this._handleBackButton);\n this._isBackHandlerRegistered = true;\n }\n menu.instance._setOpened(true);\n return this._notify();\n }\n\n closeMenu() { // has no effect on controlled menus\n debug('close menu');\n this._menuRegistry.getAll()\n .filter(menu => menu.instance._getOpened())\n .forEach(menu => menu.instance._setOpened(false));\n return this._notify();\n }\n\n _invalidateTriggerLayouts() {\n // invalidate layouts for closed menus,\n // both controlled and uncontrolled menus\n this._menuRegistry.getAll()\n .filter(menu => !menu.instance.isOpen())\n .forEach(menu => {\n this._menuRegistry.updateLayoutInfo(menu.name, { triggerLayout: undefined });\n });\n }\n\n _beforeClose(menu) {\n debug('before close', menu.name);\n const hideMenu = (this.optionsRef\n && this.optionsRef.close\n && this.optionsRef.close()) || Promise.resolve();\n const hideBackdrop = this.backdropRef && this.backdropRef.close();\n this._invalidateTriggerLayouts();\n this._isMenuClosing = true;\n return Promise.all([hideMenu, hideBackdrop])\n .then(() => {\n this._isMenuClosing = false;\n })\n .catch(err => {\n this._isMenuClosing = false;\n throw err;\n })\n }\n\n toggleMenu(name) {\n const menu = this._menuRegistry.getMenu(name);\n if (!menu) {\n console.warn(`menu with name ${name} does not exist`);\n return Promise.resolve();\n }\n debug('toggle menu', name);\n if (menu.instance._getOpened()) {\n return this.closeMenu();\n } else {\n return this.openMenu(name);\n }\n }\n\n _notify(forceUpdate) {\n const NULL = {};\n const prev = this.openedMenu || NULL;\n const next = this._menuRegistry.getAll().find(menu => menu.instance.isOpen()) || NULL;\n // set newly opened menu before any callbacks are called\n this.openedMenu = next === NULL ? undefined : next;\n if (!forceUpdate && !this._isRenderNeeded(prev, next)) {\n return Promise.resolve();\n }\n debug('notify: next menu:', next.name, ' prev menu:', prev.name);\n let afterSetState = undefined;\n let beforeSetState = () => Promise.resolve();\n if (prev.name !== next.name) {\n if (prev !== NULL && !prev.instance.isOpen()) {\n beforeSetState = () => this._beforeClose(prev)\n .then(() => prev.instance.props.onClose());\n }\n if (next !== NULL) {\n next.instance.props.onOpen();\n afterSetState = () => this._initOpen(next);\n }\n }\n return beforeSetState().then(() => {\n if (!this._placeholderRef) {\n debug('setState ignored - maybe the context was unmounted')\n return\n }\n this._placeholderRef.setState({ openedMenuName: this.openedMenu && this.openedMenu.name }, afterSetState);\n debug('notify ended');\n });\n }\n\n /**\n Compares states of opened menu to determine if rerender is needed.\n */\n _isRenderNeeded(prev, next) {\n if (prev === next) {\n debug('_isRenderNeeded: skipping - no change');\n return false;\n }\n if (prev.name !== next.name) {\n return true;\n }\n const { triggerLayout, optionsLayout } = next;\n if (!triggerLayout || !optionsLayout) {\n debug('_isRenderNeeded: skipping - no trigger or options layout');\n return false;\n }\n return true;\n }\n\n render() {\n const { style, customStyles } = this.props;\n debug('render menu', this.isMenuOpen(), this._ownLayout);\n return (\n \n \n \n { this.props.children }\n \n \n \n \n \n \n \n );\n }\n\n onBackdropRef = r => {\n this.backdropRef = r;\n }\n\n onOptionsRef = r => {\n this.optionsRef = r;\n }\n\n _onPlaceholderRef = r => this._placeholderRef = r;\n\n _getOpenedMenu() {\n const name = this._placeholderRef && this._placeholderRef.state.openedMenuName;\n const menu = name ? this._menuRegistry.getMenu(name) : undefined;\n debug('_getOpenedMenu', name, !!menu)\n return menu\n }\n\n _onBackdropPress = () => {\n debug('on backdrop press');\n const menu = this._getOpenedMenu();\n if (menu) {\n menu.instance.props.onBackdropPress();\n }\n this.closeMenu();\n }\n\n _isInitialized() {\n return !!this._ownLayout;\n }\n\n _initOpen(menu) {\n debug('opening', menu.name);\n const trigger = menu.instance._getTrigger();\n measure(trigger).then(triggerLayout => {\n debug('got trigger measurements', triggerLayout);\n this._menuRegistry.updateLayoutInfo(menu.name, { triggerLayout });\n this.backdropRef && this.backdropRef.open()\n this._notify();\n });\n }\n\n _onOptionsLayout(e, name, isOutside) {\n const optionsLayout = e.nativeEvent.layout;\n optionsLayout.isOutside = isOutside;\n debug('got options layout', optionsLayout);\n this._menuRegistry.updateLayoutInfo(name, { optionsLayout });\n this._notify();\n }\n\n _makeOptions() {\n const { instance, triggerLayout, optionsLayout } = this._getOpenedMenu();\n const options = instance._getOptions();\n const { renderer, rendererProps } = instance.props;\n const windowLayout = this._ownLayout;\n const safeAreaLayout = this._safeAreaLayout;\n const { optionsContainerStyle, renderOptionsContainer, customStyles } = options.props;\n const optionsRenderer = renderOptionsContainer || defaultOptionsContainerRenderer;\n const isOutside = !triggerLayout || !optionsLayout;\n const onLayout = e => this._onOptionsLayout(e, instance.getName(), isOutside);\n const style = [optionsContainerStyle, customStyles.optionsContainer];\n const layouts = { windowLayout, triggerLayout, optionsLayout, safeAreaLayout };\n const props = { ...rendererProps, style, onLayout, layouts };\n const optionsType = isOutside ? MenuOutside : renderer;\n if (isClassComponent(optionsType)) {\n props.ref = this.onOptionsRef;\n }\n return React.createElement(optionsType, props, optionsRenderer(options));\n }\n\n _onLayout = ({ nativeEvent: { layout } }) => {\n if (layoutsEqual(this._ownLayout, layout)) {\n return;\n }\n this._ownLayout = layout;\n debug('context layout has changed', this._ownLayout);\n if (!this.isMenuOpen()) {\n return;\n }\n const { instance } = this._getOpenedMenu();\n const trigger = instance._getTrigger();\n measure(trigger).then(triggerLayout => {\n debug('got trigger measurements after context layout change', triggerLayout);\n this._menuRegistry.updateLayoutInfo(instance.getName(), { triggerLayout });\n // force update as own layout has changed\n this._notify(true);\n });\n }\n\n _onSafeAreaLayout = ({ nativeEvent: { layout } }) => {\n if (layoutsEqual(this._safeAreaLayout, layout)) {\n return;\n }\n this._safeAreaLayout = layout;\n debug('safeArea layout has changed', this._safeAreaLayout);\n if (!this.isMenuOpen()) {\n return;\n }\n this._notify(true);\n }\n\n}\n\nMenuProvider.propTypes = {\n customStyles: PropTypes.object,\n backHandler: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n skipInstanceCheck: PropTypes.bool,\n}\n\nMenuProvider.defaultProps = {\n customStyles: {},\n backHandler: false,\n skipInstanceCheck: false,\n};\n\nconst styles = StyleSheet.create({\n flex1: {\n flex: 1,\n },\n safeArea: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { View } from 'react-native';\nimport { withCtx } from './MenuProvider';\n\nexport class MenuOptions extends React.Component {\n\n updateCustomStyles(_props) {\n const { customStyles } = _props\n const menu = this.props.ctx.menuActions._getOpenedMenu()\n // FIXME react 16.3 workaround for ControlledExample!\n if (!menu) return\n const menuName = menu.instance.getName()\n this.props.ctx.menuRegistry.setOptionsCustomStyles(menuName, customStyles)\n }\n\n componentDidMount() {\n this.updateCustomStyles(this.props)\n }\n\n componentDidUpdate() {\n this.updateCustomStyles(this.props)\n }\n\n render() {\n const { customStyles, style, children } = this.props\n return (\n \n {children}\n \n )\n }\n}\n\nMenuOptions.propTypes = {\n customStyles: PropTypes.object,\n renderOptionsContainer: PropTypes.func,\n optionsContainerStyle: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.number,\n PropTypes.array,\n ]),\n};\n\nMenuOptions.defaultProps = {\n customStyles: {},\n};\n\nexport default withCtx(MenuOptions);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { View, Text } from 'react-native';\nimport { debug } from './logger.js';\nimport { makeTouchable } from './helpers';\nimport { withCtx } from './MenuProvider';\n\nexport class MenuTrigger extends Component {\n\n _onPress() {\n debug('trigger onPress');\n this.props.onPress && this.props.onPress();\n this.props.ctx.menuActions.openMenu(this.props.menuName);\n }\n\n render() {\n const { disabled, onRef, text, children, style, customStyles, menuName, \n triggerOnLongPress, onAlternativeAction, testID, ...other } = this.props;\n const onPress = () => !disabled && this._onPress();\n const { Touchable, defaultTouchableProps } = makeTouchable(customStyles.TriggerTouchableComponent);\n return (\n \n \n \n {text ? {text} : children}\n \n \n \n );\n }\n\n}\n\nMenuTrigger.propTypes = {\n disabled: PropTypes.bool,\n text: PropTypes.string,\n onPress: PropTypes.func,\n onAlternativeAction: PropTypes.func,\n customStyles: PropTypes.object,\n triggerOnLongPress: PropTypes.bool,\n testID: PropTypes.string,\n};\n\nMenuTrigger.defaultProps = {\n disabled: false,\n customStyles: {},\n testID: undefined,\n};\n\nexport default withCtx(MenuTrigger)\n","import React from 'react';\nimport { I18nManager, Animated, Easing, StyleSheet, PixelRatio } from 'react-native';\nimport { OPEN_ANIM_DURATION, CLOSE_ANIM_DURATION, USE_NATIVE_DRIVER } from '../constants';\n\nconst axisPosition = (oDim, wDim, tPos, tDim) => {\n // if options are bigger than window dimension, then render at 0\n if (oDim > wDim) {\n return 0;\n }\n // render at trigger position if possible\n if (tPos + oDim <= wDim) {\n return tPos;\n }\n // aligned to the trigger from the bottom (right)\n if (tPos + tDim - oDim >= 0) {\n return tPos + tDim - oDim;\n }\n // compute center position\n let pos = Math.round(tPos + (tDim / 2) - (oDim / 2));\n // check top boundary\n if (pos < 0) {\n return 0;\n }\n // check bottom boundary\n if (pos + oDim > wDim) {\n return wDim - oDim;\n }\n // if everything ok, render in center position\n return pos;\n};\n\nfunction fit(pos, len, minPos, maxPos) {\n if (pos === undefined) {\n return undefined;\n }\n if (pos + len > maxPos) {\n pos = maxPos - len;\n }\n if (pos < minPos) {\n pos = minPos;\n }\n return pos;\n}\n// fits options (position) into safeArea\nexport const fitPositionIntoSafeArea = (position, layouts) => {\n const { windowLayout, safeAreaLayout, optionsLayout } = layouts;\n if (!safeAreaLayout) {\n return position;\n }\n const { x: saX, y: saY, height: saHeight, width: saWidth } = safeAreaLayout;\n const { height: oHeight, width: oWidth } = optionsLayout;\n const { width: wWidth } = windowLayout;\n let { top, left, right } = position;\n top = fit(top, oHeight, saY, saY + saHeight);\n left = fit(left, oWidth, saX, saX + saWidth)\n right = fit(right, oWidth, wWidth - saX - saWidth, saX)\n return { top, left, right };\n}\n\nexport const computePosition = (layouts, isRTL) => {\n const { windowLayout, triggerLayout, optionsLayout } = layouts;\n const { x: wX, y: wY, width: wWidth, height: wHeight } = windowLayout;\n const { x: tX, y: tY, height: tHeight, width: tWidth } = triggerLayout;\n const { height: oHeight, width: oWidth } = optionsLayout;\n const top = axisPosition(oHeight, wHeight, tY - wY, tHeight);\n const left = axisPosition(oWidth, wWidth, tX - wX, tWidth);\n const start = isRTL ? 'right' : 'left';\n const position = { top, [start]: left };\n return fitPositionIntoSafeArea(position, layouts);\n};\n\nexport default class ContextMenu extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n scaleAnim: new Animated.Value(0.1),\n };\n }\n\n componentDidMount() {\n Animated.timing(this.state.scaleAnim, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start();\n }\n\n close() {\n return new Promise(resolve => {\n Animated.timing(this.state.scaleAnim, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n easing: Easing.in(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start(resolve);\n });\n }\n\n render() {\n const { style, children, layouts, ...other } = this.props;\n const animation = {\n transform: [ { scale: this.state.scaleAnim } ],\n opacity: this.state.scaleAnim,\n };\n const position = computePosition(layouts, I18nManager.isRTL);\n return (\n \n {children}\n \n );\n }\n\n}\n\n// public exports\nContextMenu.computePosition = computePosition;\nContextMenu.fitPositionIntoSafeArea = fitPositionIntoSafeArea;\n\nexport const styles = StyleSheet.create({\n options: {\n position: 'absolute',\n borderRadius: 2,\n backgroundColor: 'white',\n width: PixelRatio.roundToNearestPixel(200),\n\n // Shadow only works on iOS.\n shadowColor: 'black',\n shadowOpacity: 0.3,\n shadowOffset: { width: 3, height: 3 },\n shadowRadius: 4,\n\n // This will elevate the view on Android, causing shadow to be drawn.\n elevation: 5,\n },\n});\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { View } from 'react-native';\nimport MenuOptions from './MenuOptions';\nimport MenuTrigger from './MenuTrigger';\nimport ContextMenu from './renderers/ContextMenu';\nimport { makeName } from './helpers';\nimport { debug, CFG } from './logger';\nimport { withCtx } from './MenuProvider';\n\nconst isRegularComponent = c => c.type !== MenuOptions && c.type !== MenuTrigger;\nconst isTrigger = c => c.type === MenuTrigger;\nconst isMenuOptions = c => c.type === MenuOptions;\n\nexport class Menu extends Component {\n\n constructor(props) {\n super(props);\n this._name = this.props.name || makeName();\n this._forceClose = false;\n const { ctx } = props;\n if(!(ctx && ctx.menuActions)) {\n throw new Error(\"Menu component must be ancestor of MenuProvider\");\n }\n }\n\n componentDidMount() {\n if (!this._validateChildren()) {\n return;\n }\n debug('subscribing menu', this._name);\n this.props.ctx.menuRegistry.subscribe(this);\n this.props.ctx.menuActions._notify();\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n console.warn('Menu name cannot be changed');\n }\n // force update if menu is opened as its content might have changed\n const force = this.isOpen();\n debug('component did update', this._name, force);\n this.props.ctx.menuActions._notify(force);\n }\n\n componentWillUnmount() {\n debug('unsubscribing menu', this._name);\n if (this.isOpen()) {\n this._forceClose = true;\n this.props.ctx.menuActions._notify();\n }\n this.props.ctx.menuRegistry.unsubscribe(this);\n }\n\n open() {\n return this.props.ctx.menuActions.openMenu(this._name);\n }\n\n close() {\n return this.props.ctx.menuActions.closeMenu();\n }\n\n isOpen() {\n if (this._forceClose) {\n return false;\n }\n return this.props.hasOwnProperty('opened') ? this.props.opened : this._opened;\n }\n\n getName() {\n return this._name;\n }\n\n render() {\n const { style } = this.props;\n const children = this._reduceChildren();\n return (\n \n {children}\n \n );\n }\n\n _reduceChildren() {\n return React.Children.toArray(this.props.children).reduce((r, child) => {\n if (isTrigger(child)) {\n r.push(React.cloneElement(child, {\n key: null,\n menuName: this._name,\n onRef: (t => this._trigger = t),\n }));\n }\n if (isRegularComponent(child)) {\n r.push(child);\n }\n return r;\n }, []);\n }\n\n _getTrigger() {\n return this._trigger;\n }\n\n _getOptions() {\n return React.Children.toArray(this.props.children).find(isMenuOptions);\n }\n\n _getOpened() {\n return this._opened;\n }\n\n _setOpened(opened) {\n this._opened = opened;\n }\n\n _validateChildren() {\n const children = React.Children.toArray(this.props.children);\n const options = children.find(isMenuOptions);\n if (!options) {\n console.warn('Menu has to contain MenuOptions component');\n }\n const trigger = children.find(isTrigger);\n if (!trigger) {\n console.warn('Menu has to contain MenuTrigger component');\n }\n return options && trigger;\n }\n\n}\n\nMenu.propTypes = {\n name: PropTypes.string,\n renderer: PropTypes.func,\n rendererProps: PropTypes.object,\n onSelect: PropTypes.func,\n onOpen: PropTypes.func,\n onClose: PropTypes.func,\n opened: PropTypes.bool,\n onBackdropPress: PropTypes.func,\n};\n\nMenu.defaultProps = {\n renderer: ContextMenu,\n rendererProps: {},\n onSelect: () => {},\n onOpen: () => {},\n onClose: () => {},\n onBackdropPress: () => {},\n};\n\nconst MenuExternal = withCtx(Menu);\nObject.defineProperty(MenuExternal, 'debug', \n { \n get: function() { return CFG.debug }, \n set: function(val) { CFG.debug = val }, \n });\nMenuExternal.setDefaultRenderer = (renderer) => {\n Menu.defaultProps.renderer = renderer;\n}\nMenuExternal.setDefaultRendererProps = (rendererProps) => {\n Menu.defaultProps.rendererProps = rendererProps;\n}\nexport default MenuExternal;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { View, StyleSheet, Text } from 'react-native';\nimport { debug } from './logger';\nimport { makeTouchable } from './helpers';\nimport { withCtx } from './MenuProvider';\n\n\nexport class MenuOption extends Component {\n\n _onSelect() {\n const { value } = this.props;\n const onSelect = this.props.onSelect || this._getMenusOnSelect()\n const shouldClose = onSelect(value) !== false;\n debug('select option', value, shouldClose);\n if (shouldClose) {\n this.props.ctx.menuActions.closeMenu();\n }\n }\n\n _getMenusOnSelect() {\n const menu = this.props.ctx.menuActions._getOpenedMenu();\n return menu.instance.props.onSelect;\n }\n\n _getCustomStyles() {\n // FIXME react 16.3 workaround for ControlledExample!\n const menu = this.props.ctx.menuActions._getOpenedMenu() || {}\n const { optionsCustomStyles } = menu;\n return {\n ...optionsCustomStyles,\n ...this.props.customStyles,\n }\n }\n\n render() {\n const { text, disabled, disableTouchable, children, style, testID } = this.props;\n const customStyles = this._getCustomStyles()\n if (text && React.Children.count(children) > 0) {\n console.warn(\"MenuOption: Please don't use text property together with explicit children. Children are ignored.\");\n }\n if (disabled) {\n const disabledStyles = [defaultStyles.optionTextDisabled, customStyles.optionText];\n return (\n \n {text ? {text} : children}\n \n );\n }\n const rendered = (\n \n {text ? {text} : children}\n \n );\n if (disableTouchable) {\n return rendered;\n }\n else {\n const { Touchable, defaultTouchableProps } = makeTouchable(customStyles.OptionTouchableComponent);\n return (\n this._onSelect()}\n {...defaultTouchableProps}\n {...customStyles.optionTouchable}\n >\n {rendered}\n \n );\n }\n }\n}\n\nMenuOption.propTypes = {\n disabled: PropTypes.bool,\n disableTouchable: PropTypes.bool,\n onSelect: PropTypes.func,\n text: PropTypes.string,\n value: PropTypes.any,\n customStyles: PropTypes.object,\n testID: PropTypes.string,\n};\n\nMenuOption.defaultProps = {\n disabled: false,\n disableTouchable: false,\n customStyles: {},\n testID: undefined,\n};\n\nconst defaultStyles = StyleSheet.create({\n option: {\n padding: 5,\n backgroundColor: 'transparent',\n },\n optionTextDisabled: {\n color: '#ccc',\n },\n});\n\nexport default withCtx(MenuOption);\n","import React from 'react';\nimport { I18nManager, View } from 'react-native';\n\nimport { computePosition, styles } from './ContextMenu';\n\n/**\nSimplified version of ContextMenu without animation.\n*/\nexport default class NotAnimatedContextMenu extends React.Component {\n\n render() {\n const { style, children, layouts, ...other } = this.props;\n const position = computePosition(layouts, I18nManager.isRTL);\n return (\n \n {children}\n \n );\n }\n\n}\n","import React from 'react';\nimport { Animated, StyleSheet, Easing } from 'react-native';\nimport { OPEN_ANIM_DURATION, CLOSE_ANIM_DURATION, USE_NATIVE_DRIVER } from '../constants';\n\nexport const computePosition = (layouts) => {\n const { windowLayout, optionsLayout } = layouts\n const { height: wHeight } = windowLayout;\n const { height: oHeight } = optionsLayout;\n const top = wHeight - oHeight;\n const left = 0, right = 0;\n const position = { top, left, right };\n // TODO what is the best way to handle safeArea?\n // most likely some extra paddings inside SlideInMenu \n return position;\n}\n\nexport default class SlideInMenu extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n slide: new Animated.Value(0),\n };\n }\n\n componentDidMount() {\n Animated.timing(this.state.slide, {\n duration: OPEN_ANIM_DURATION,\n toValue: 1,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start();\n }\n\n close() {\n return new Promise(resolve => {\n Animated.timing(this.state.slide, {\n duration: CLOSE_ANIM_DURATION,\n toValue: 0,\n easing: Easing.in(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start(resolve);\n });\n }\n\n render() {\n const { style, children, layouts, ...other } = this.props;\n const { height: oHeight } = layouts.optionsLayout;\n const animation = {\n transform: [{\n translateY: this.state.slide.interpolate({\n inputRange: [0, 1],\n outputRange: [oHeight, 0],\n }),\n }],\n };\n const position = computePosition(layouts);\n return (\n \n {children}\n \n );\n }\n}\n\nconst styles = StyleSheet.create({\n options: {\n position: 'absolute',\n backgroundColor: 'white',\n\n // Shadow only works on iOS.\n shadowColor: 'black',\n shadowOpacity: 0.3,\n shadowOffset: { width: 3, height: 3 },\n shadowRadius: 4,\n\n // This will elevate the view on Android, causing shadow to be drawn.\n elevation: 5,\n },\n});\n","import { I18nManager, Animated, Easing, StyleSheet, View } from 'react-native';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { OPEN_ANIM_DURATION, CLOSE_ANIM_DURATION, USE_NATIVE_DRIVER } from '../constants.js';\n\nconst popoverPadding = 7;\nconst anchorSize = 15;\nconst anchorHyp = Math.sqrt(anchorSize*anchorSize + anchorSize*anchorSize);\nconst anchorOffset = (anchorHyp + anchorSize) / 2 - popoverPadding;\n\n// left/top placement\nfunction axisNegativeSideProperties({ oDim, tPos }) {\n return { position: tPos - oDim };\n}\n\n// right/bottom placement\nfunction axisPositiveSideProperties({ tPos, tDim }) {\n // substract also anchor placeholder from the beginning\n return { position: tPos + tDim - anchorSize };\n}\n\n// computes offsets (off screen overlap) of popover when trying to align it to the center\nfunction centeringProperties({ oDim, wDim, tPos, tDim }) {\n const center = Math.round(tPos + (tDim / 2));\n const leftOffset = (oDim / 2) - center;\n const rightOffset = center + (oDim / 2) - wDim;\n return { center, leftOffset, rightOffset };\n}\n\n/**\n * Computes position and offset of popover when trying to align it to the triger center.\n * It consideres window boundaries.\n * Returns object with keys:\n * - position: Absolute position - top/left,\n * - offset: window overlapping size if window boundaries were not considered\n */\nfunction axisCenteredPositionProperties(options) {\n const { oDim, wDim } = options;\n const { center, leftOffset, rightOffset } = centeringProperties(options);\n if (leftOffset > 0 || rightOffset > 0) {\n // right/bottom position is better\n if (leftOffset < rightOffset) {\n return { offset: rightOffset, position: wDim - oDim };\n }\n // left/top position is better\n if (rightOffset < leftOffset) {\n return { offset: -leftOffset, position: 0 };\n }\n }\n // centered position\n return { offset: 0, position: center - oDim / 2 };\n}\n\n/* Evaluate centering placement */\nfunction getCenteringPrice(options) {\n const { leftOffset, rightOffset } = centeringProperties(options);\n // TODO: currently shifted popovers have higher price,\n // popover shift could be taken into account with the same price\n return Math.max(0, leftOffset) + Math.max(0, rightOffset);\n}\n\n/* Evaluate top placement */\nfunction getTopPrice(hOptions, vOptions) {\n const centerOffset = getCenteringPrice(vOptions)\n const sideOffset = Math.max(0, hOptions.oDim - hOptions.tPos)\n return centerOffset + sideOffset\n}\n\n/* Evaluate bottom placement */\nfunction getBottomPrice(hOptions, vOptions) {\n const centerOffset = getCenteringPrice(vOptions)\n const sideOffset = Math.max(0, hOptions.tPos + hOptions.tDim + hOptions.oDim - hOptions.wDim)\n return centerOffset + sideOffset\n}\n\n/* Evaluate left placement */\nfunction getLeftPrice(hOptions, vOptions) {\n const centerOffset = getCenteringPrice(hOptions)\n const sideOffset = Math.max(0, vOptions.oDim - vOptions.tPos)\n return centerOffset + sideOffset\n}\n\n/* Evaluate right placement */\nfunction getRightPrice(hOptions, vOptions) {\n const centerOffset = getCenteringPrice(hOptions)\n const sideOffset = Math.max(0, vOptions.tPos + vOptions.tDim + vOptions.oDim - vOptions.wDim)\n return centerOffset + sideOffset\n}\n\nfunction getStartPosKey(isRTL) {\n return isRTL ? 'right' : 'left';\n}\n\nfunction topProperties(hOptions, vOptions, isRTL) {\n const centered = axisCenteredPositionProperties(vOptions);\n const side = axisNegativeSideProperties(hOptions);\n return {\n position: {\n top: side.position,\n [getStartPosKey(isRTL)]: centered.position,\n },\n offset: centered.offset,\n placement: 'top',\n };\n}\n\nfunction bottomProperties(hOptions, vOptions, isRTL) {\n const centered = axisCenteredPositionProperties(vOptions);\n const side = axisPositiveSideProperties(hOptions);\n return {\n position: {\n top: side.position,\n [getStartPosKey(isRTL)]: centered.position,\n },\n offset: centered.offset,\n placement: 'bottom',\n };\n}\n\nfunction rightProperties(hOptions, vOptions, isRTL) {\n const centered = axisCenteredPositionProperties(hOptions);\n const side = axisPositiveSideProperties(vOptions);\n return {\n position: {\n top: centered.position,\n [getStartPosKey(isRTL)]: side.position,\n },\n offset: centered.offset,\n placement: 'right',\n };\n}\n\nfunction leftProperties(hOptions, vOptions, isRTL) {\n const centered = axisCenteredPositionProperties(hOptions);\n const side = axisNegativeSideProperties(vOptions);\n return {\n position: {\n top: centered.position,\n [getStartPosKey(isRTL)]: side.position,\n },\n offset: centered.offset,\n placement: 'left',\n };\n}\n\n// maps placement to function which computes correct properties\nconst propertiesByPlacement = {\n top: topProperties,\n bottom: bottomProperties,\n left: leftProperties,\n right: rightProperties,\n};\n\n/**\n * Computes properties needed for drawing popover.\n * Returns object with keys:\n * - position: { top: Number, left: Number } - popover absolute position\n * - placement: top|left|top|bottom - position to the trigger\n * - offset: value by which must be anchor shifted\n */\nexport function computeProperties (\n { windowLayout, triggerLayout, optionsLayout },\n placement,\n preferredPlacement,\n isRTL,\n) {\n const { x: wX, y: wY, width: wWidth, height: wHeight } = windowLayout;\n const { x: tX, y: tY, height: tHeight, width: tWidth } = triggerLayout;\n const { height: oHeight, width: oWidth } = optionsLayout;\n const hOptions = {\n oDim: oHeight + popoverPadding * 2,\n wDim: wHeight,\n tPos: tY - wY,\n tDim: tHeight,\n };\n const vOptions = {\n oDim: oWidth + popoverPadding * 2,\n wDim: wWidth,\n tPos: tX - wX,\n tDim: tWidth,\n };\n if (placement !== 'auto' && propertiesByPlacement[placement]) {\n return propertiesByPlacement[placement](hOptions, vOptions, isRTL)\n }\n\n const prices = {\n top: getTopPrice(hOptions, vOptions),\n bottom: getBottomPrice(hOptions, vOptions),\n right: getRightPrice(hOptions, vOptions),\n left: getLeftPrice(hOptions, vOptions),\n };\n const bestPrice = Object.values(prices).sort((a, b) => a - b)[0]\n const bestPlacement = prices[preferredPlacement] === bestPrice\n ? preferredPlacement\n : Object.keys(prices).find(pl => prices[pl] === bestPrice)\n\n return propertiesByPlacement[bestPlacement](hOptions, vOptions, isRTL)\n}\n\nexport default class Popover extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n scaleAnim: new Animated.Value(0.1),\n };\n }\n\n componentDidMount() {\n Animated.timing(this.state.scaleAnim, {\n duration: this.props.openAnimationDuration !== undefined ? this.props.openAnimationDuration : OPEN_ANIM_DURATION,\n toValue: 1,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start();\n }\n\n close() {\n return new Promise(resolve => {\n Animated.timing(this.state.scaleAnim, {\n duration: this.props.closeAnimationDuration !== undefined ? this.props.closeAnimationDuration : CLOSE_ANIM_DURATION,\n toValue: 0,\n easing: Easing.in(Easing.cubic),\n useNativeDriver: USE_NATIVE_DRIVER,\n }).start(resolve);\n });\n }\n\n render() {\n const {\n style,\n children,\n layouts,\n anchorStyle,\n preferredPlacement,\n openAnimationDuration,\n closeAnimationDuration,\n placement: userPlacement,\n ...other\n } = this.props;\n const isRTL = I18nManager.isRTL;\n const animation = {\n transform: [ { scale: this.state.scaleAnim } ],\n opacity: this.state.scaleAnim,\n };\n const { position, placement, offset } = computeProperties(\n layouts,\n userPlacement,\n preferredPlacement,\n isRTL,\n );\n return (\n \n \n \n {children}\n \n \n );\n }\n\n}\n\nPopover.propTypes = {\n anchorStyle: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.number,\n PropTypes.array,\n ]),\n placement: PropTypes.oneOf(['auto', 'top', 'right', 'bottom', 'left']),\n preferredPlacement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n openAnimationDuration: PropTypes.number,\n closeAnimationDuration: PropTypes.number,\n};\n\nPopover.defaultProps = {\n preferredPlacement: 'top',\n placement: 'auto',\n};\n\nconst getContainerStyle = ({ placement, isRTL }) => ({\n left: {\n flexDirection: isRTL ? 'row' : 'row-reverse',\n },\n right: {\n flexDirection: isRTL ? 'row-reverse' : 'row',\n },\n top: {\n flexDirection: 'column-reverse',\n },\n bottom: {\n flexDirection: 'column',\n },\n})[placement]\n\nconst dynamicAnchorStyle = ({ offset, placement, isRTL }) => {\n const start = getStartPosKey(isRTL);\n switch (placement) {\n case 'right':\n return {\n top: offset,\n transform: [\n { translateX: anchorOffset },\n { rotate: '45deg' },\n ],\n };\n case 'left':\n return {\n top: offset,\n transform: [\n { translateX: -anchorOffset },\n { rotate: '45deg' },\n ],\n };\n case 'top':\n return {\n [start]: offset,\n transform: [\n { translateY: -anchorOffset },\n { rotate: '45deg' },\n ],\n };\n case 'bottom':\n return {\n [start]: offset,\n transform: [\n { translateY: anchorOffset },\n { rotate: '45deg' },\n ],\n };\n }\n}\n\nexport const styles = StyleSheet.create({\n animated: {\n padding: popoverPadding,\n backgroundColor: 'transparent',\n position: 'absolute',\n alignItems: 'center',\n },\n options: {\n borderRadius: 2,\n minWidth: anchorHyp,\n minHeight: anchorHyp,\n backgroundColor: 'white',\n\n // Shadow only works on iOS.\n shadowColor: 'black',\n shadowOpacity: 0.3,\n shadowOffset: { width: 3, height: 3 },\n shadowRadius: 4,\n\n // This will elevate the view on Android, causing shadow to be drawn.\n elevation: 5,\n },\n anchor: {\n width: anchorSize,\n height: anchorSize,\n backgroundColor: 'white',\n elevation: 5,\n },\n});\n","import './polyfills';\nimport { deprecatedComponent } from './helpers'\n\nimport Menu from './Menu';\nimport MenuProvider, { withCtx } from './MenuProvider';\nimport MenuOption from './MenuOption';\nimport MenuOptions from './MenuOptions';\nimport MenuTrigger from './MenuTrigger';\n\nimport ContextMenu from './renderers/ContextMenu';\nimport NotAnimatedContextMenu from './renderers/NotAnimatedContextMenu';\nimport SlideInMenu from './renderers/SlideInMenu';\nimport Popover from './renderers/Popover';\nconst renderers = { ContextMenu, SlideInMenu, NotAnimatedContextMenu, Popover };\n\nconst MenuContext = deprecatedComponent(\n 'MenuContext is deprecated and it might be removed in future releases, use MenuProvider instead.',\n ['openMenu', 'toggleMenu', 'closeMenu', 'isMenuOpen'],\n)(MenuProvider);\n\nexport {\n Menu as default,\n Menu,\n MenuProvider,\n MenuContext,\n MenuOption,\n MenuOptions,\n MenuTrigger,\n renderers,\n withCtx as withMenuContext,\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { GestureHandlerRootView } from \"react-native-gesture-handler\";\nimport { runOnJS, useDerivedValue } from \"react-native-reanimated\";\n\nimport { useAutoPlay } from \"./hooks/useAutoPlay\";\nimport { useCarouselController } from \"./hooks/useCarouselController\";\nimport { useCommonVariables } from \"./hooks/useCommonVariables\";\nimport { useInitProps } from \"./hooks/useInitProps\";\nimport { useLayoutConfig } from \"./hooks/useLayoutConfig\";\nimport { useOnProgressChange } from \"./hooks/useOnProgressChange\";\nimport { usePropsErrorBoundary } from \"./hooks/usePropsErrorBoundary\";\nimport { useVisibleRanges } from \"./hooks/useVisibleRanges\";\nimport { BaseLayout } from \"./layouts/BaseLayout\";\nimport { ScrollViewGesture } from \"./ScrollViewGesture\";\nimport { CTX } from \"./store\";\nimport type { ICarouselInstance, TCarouselProps } from \"./types\";\nimport { computedRealIndexWithAutoFillData } from \"./utils/computedWithAutoFillData\";\n\nconst Carousel = React.forwardRef>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n loop,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Raw data that has not been processed\n rawData,\n // Length of raw data\n rawDataLength,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffset } = commonVariables;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffset.value % totalSize;\n\n if (!loop)\n return handlerOffset.value;\n\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary({ ...props, dataLength });\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawDataLength,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n dataLength,\n autoFillData,\n handlerOffset,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex }\n = carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem)\n onSnapToItem(realIndex);\n\n if (onScrollEnd)\n onScrollEnd(realIndex);\n }, [\n loop,\n autoFillData,\n rawDataLength,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo],\n );\n\n const visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n return (\n \n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n \n );\n },\n [\n loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ],\n );\n\n return (\n \n \n \n {data.map(renderLayout)}\n \n \n \n );\n },\n);\n\nexport default Carousel as (\n props: React.PropsWithChildren>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n itemsHorizontal: {\n flexDirection: \"row\",\n },\n itemsVertical: {\n flexDirection: \"column\",\n },\n});\n","import type { PropsWithChildren } from \"react\";\nimport React from \"react\";\n\ninterface Props {\n shouldUpdate: boolean\n}\n\nexport const LazyView: React.FC> = (props) => {\n const { shouldUpdate, children } = props;\n\n if (!shouldUpdate)\n return <>;\n\n return <>{children};\n};\n","import type { PropsWithChildren } from \"react\";\nimport React from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { PanGestureHandlerGestureEvent } from \"react-native-gesture-handler\";\nimport { PanGestureHandler } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedGestureHandler,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"./constants\";\nimport { CTX } from \"./store\";\nimport type { WithTimingAnimation } from \"./types\";\nimport { dealWithAnimation } from \"./utils/dealWithAnimation\";\n\ninterface GestureContext extends Record {\n validStart: boolean\n panOffset: number\n max: number\n}\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue\n}\n\nconst IScrollViewGesture: React.FC> = (props) => {\n const {\n props: {\n vertical,\n pagingEnabled,\n snapEnabled,\n panGestureHandlerProps,\n loop: infinite,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollBegin,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const touching = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef();\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!infinite && !overscrollEnabled) {\n const { width: containerWidth = 0 } = measure(containerRef);\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth)\n return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [infinite, size, dataLength, overscrollEnabled]);\n\n const withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished)\n onFinished && runOnJS(onFinished)();\n },\n );\n },\n [scrollAnimationDuration, withAnimation],\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (typeof maxScrollDistancePerSwipe === \"number\" && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {\n finalTranslation = origin;\n }\n else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n if (pagingEnabled) {\n // distance with direction\n const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n\n if (infinite) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n const nextPage = Math.round((origin + velocity * 0.4) / size) * size;\n finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!infinite && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n infinite,\n snapEnabled,\n translation,\n pagingEnabled,\n scrollEndVelocity.value,\n maxScrollDistancePerSwipe,\n scrollEndTranslation.value,\n ],\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching],\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n isFinished => onFinish(isFinished as boolean),\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value)\n return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!infinite) {\n translation.value = withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!infinite)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n infinite,\n activeDecay,\n withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!infinite && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const panGestureEventHandler = useAnimatedGestureHandler<\n PanGestureHandlerGestureEvent,\n GestureContext\n >(\n {\n onStart: (_, ctx) => {\n touching.value = true;\n ctx.validStart = true;\n onScrollBegin && runOnJS(onScrollBegin)();\n\n ctx.max = (maxPage - 1) * size;\n if (!infinite && !overscrollEnabled)\n ctx.max = getLimit();\n\n ctx.panOffset = translation.value;\n },\n onActive: (e, ctx) => {\n if (ctx.validStart) {\n ctx.validStart = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n let { translationX, translationY } = e;\n\n const totalTranslation = isHorizontal.value ? translationX : translationY;\n\n if (typeof maxScrollDistancePerSwipe === \"number\" && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const overSwipe = Math.abs(totalTranslation) - maxScrollDistancePerSwipe;\n const dampedTranslation = maxScrollDistancePerSwipe + overSwipe * 0.5;\n\n translationX = isHorizontal.value ? dampedTranslation * Math.sign(translationX) : translationX;\n translationY = !isHorizontal.value ? dampedTranslation * Math.sign(translationY) : translationY;\n }\n\n const panTranslation = isHorizontal.value ? translationX : translationY;\n if (!infinite) {\n if ((translation.value > 0 || translation.value < -ctx.max)) {\n const boundary = translation.value > 0 ? 0 : -ctx.max;\n const fixed = boundary - ctx.panOffset;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = ctx.panOffset + panTranslation;\n\n translation.value = translationValue;\n },\n onEnd: (e, ctx) => {\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n scrollEndTranslation.value = isHorizontal.value\n ? translationX\n : translationY;\n\n const totalTranslation = isHorizontal.value ? translationX : translationY;\n\n if (typeof maxScrollDistancePerSwipe === \"number\" && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {\n const nextPage = Math.round((ctx.panOffset + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!infinite)\n touching.value = false;\n },\n },\n [\n pagingEnabled,\n isHorizontal.value,\n infinite,\n maxPage,\n size,\n snapEnabled,\n onScrollBegin,\n onScrollEnd,\n ],\n );\n\n return (\n \n \n {props.children}\n \n \n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n","import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(\n 0.25,\n 1,\n 0.5,\n 1,\n ) as unknown as Animated.EasingFunction,\n};\n","export function omitZero(a: number, b: number) {\n \"worklet\";\n if (a === 0)\n return 0;\n\n return b;\n}\n\nexport function computeNewIndexWhenDataChanges(params: {\n direction: number\n handlerOffset: number\n size: number\n previousLength: number\n currentLength: number\n}) {\n \"worklet\";\n const { direction, handlerOffset: _handlerOffset, size, previousLength, currentLength } = params;\n\n let handlerOffset = _handlerOffset;\n let positionIndex;\n let round;\n\n const isPositive = direction < 0;\n\n if (isPositive) {\n positionIndex = (Math.abs(handlerOffset)) / size;\n round = parseInt(String(omitZero(previousLength, positionIndex / previousLength)));\n }\n else {\n positionIndex = (Math.abs(handlerOffset) - size) / size;\n round = parseInt(String(omitZero(previousLength, positionIndex / previousLength))) + 1;\n }\n\n const prevOffset = omitZero(previousLength, positionIndex % previousLength);\n const prevIndex = isPositive ? prevOffset : previousLength - prevOffset - 1;\n const changedLength = round * (currentLength - previousLength);\n const changedOffset = changedLength * size;\n if (prevIndex > currentLength - 1 && currentLength < previousLength) {\n if (isPositive)\n handlerOffset = (currentLength - 1) * size * direction;\n\n else\n handlerOffset = (currentLength - 1) * size * -1;\n }\n else {\n handlerOffset += changedOffset * direction;\n }\n\n return handlerOffset;\n}\n\n","import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean\n autoPlayInterval?: number\n autoPlayReverse?: boolean\n carouselController: ICarouselController\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef>();\n const stopped = React.useRef(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current)\n return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? prev({ onFinished: play })\n : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay)\n start();\n else\n pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n","import React, { useRef } from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from \"../types\";\nimport { computedRealIndexWithAutoFillData, convertToSharedIndex } from \"../utils/computedWithAutoFillData\";\nimport { dealWithAnimation } from \"../utils/dealWithAnimation\";\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\nimport { round } from \"../utils/log\";\n\ninterface IOpts {\n loop: boolean\n size: number\n dataLength: number\n autoFillData: TCarouselProps[\"autoFillData\"]\n handlerOffset: Animated.SharedValue\n withAnimation?: TCarouselProps[\"withAnimation\"]\n duration?: number\n defaultIndex?: number\n onScrollBegin?: () => void\n onScrollEnd?: () => void\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number\n prev: (opts?: TCarouselActionOptions) => void\n next: (opts?: TCarouselActionOptions) => void\n getCurrentIndex: () => number\n scrollTo: (opts?: TCarouselActionOptions) => void\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n loop,\n dataLength,\n handlerOffset,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: dataLength,\n disable: !dataLength,\n originalLength: dataLength,\n }),\n [dataLength],\n );\n\n const index = useSharedValue(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef(defaultIndex);\n const sharedPreIndex = useRef(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop)\n return -Math.round(handlerOffset.value / size);\n\n const fixed = (handlerOffset.value / size) % dataInfo.length;\n return Math.round(\n handlerOffset.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0),\n );\n }, [handlerOffset, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetValue = handlerOffset.value;\n const toInt = round(handlerOffsetValue / size) % dataInfo.length;\n const isPositive = handlerOffsetValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffset,\n ],\n );\n\n const getCurrentIndex = React.useCallback(() => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: index.value,\n dataLength: dataInfo.originalLength,\n loop,\n autoFillData: autoFillData!,\n });\n\n return realIndex;\n }, [index, autoFillData, dataInfo, loop]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const callback = (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback,\n );\n },\n [duration, withAnimation, onScrollEnd],\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n \"worklet\";\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -nextPage * size,\n onFinished,\n ) as any;\n }\n else {\n handlerOffset.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffset.value = scrollWithTiming(\n -prevPage * size,\n onFinished,\n );\n }\n else {\n handlerOffset.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffset,\n size,\n scrollWithTiming,\n currentFixedPage,\n ],\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n // target offset\n const offset = i * size * direction;\n // page width size * page count\n const totalSize = dataInfo.length * size;\n\n let isCloseToNextLoop = false;\n\n if (loop) {\n isCloseToNextLoop\n = Math.abs(handlerOffset.value % totalSize) / totalSize\n >= 0.5;\n }\n\n const finalOffset\n = (Math.floor(Math.abs(handlerOffset.value / totalSize))\n + (isCloseToNextLoop ? 1 : 0))\n * totalSize\n * direction\n + offset;\n\n if (animated) {\n index.value = i;\n handlerOffset.value = scrollWithTiming(finalOffset, onFinished);\n }\n else {\n handlerOffset.value = finalOffset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffset,\n size,\n dataInfo.length,\n loop,\n scrollWithTiming,\n ],\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n if (typeof i === \"number\" && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count)\n return;\n\n const n = Math.round(count);\n\n if (n < 0)\n prev({ count: Math.abs(n), animated, onFinished });\n\n else\n next({ count: n, animated, onFinished });\n },\n [prev, next, to],\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n","import React from \"react\";\n\nexport function useCheckMounted() {\n const mounted = React.useRef(false);\n\n React.useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return mounted;\n}\n","import React from \"react\";\nimport type Animated from \"react-native-reanimated\";\nimport { useSharedValue, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { computeNewIndexWhenDataChanges } from \"./computeNewIndexWhenDataChanges\";\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { handlerOffsetDirection } from \"../utils/handlerOffsetDirection\";\n\ninterface ICommonVariables {\n size: number\n validLength: number\n handlerOffset: Animated.SharedValue\n}\n\nexport function useCommonVariables(\n props: TInitializeCarouselProps,\n): ICommonVariables {\n const {\n vertical,\n height,\n width,\n dataLength,\n defaultIndex,\n defaultScrollOffsetValue,\n loop,\n } = props;\n const size = vertical ? height : width;\n const validLength = dataLength - 1;\n const defaultHandlerOffsetValue = -Math.abs(defaultIndex * size);\n const _handlerOffset = useSharedValue(defaultHandlerOffsetValue);\n const handlerOffset = defaultScrollOffsetValue ?? _handlerOffset;\n const prevDataLength = useSharedValue(dataLength);\n\n React.useEffect(() => {\n handlerOffset.value = defaultHandlerOffsetValue;\n }, [vertical, handlerOffset, defaultHandlerOffsetValue]);\n\n useAnimatedReaction(() => {\n const previousLength = prevDataLength.value;\n const currentLength = dataLength;\n const isLengthChanged = previousLength !== currentLength;\n const shouldComputed = isLengthChanged && loop;\n\n if (shouldComputed)\n prevDataLength.value = dataLength;\n\n return {\n shouldComputed,\n previousLength,\n currentLength,\n };\n }, ({ shouldComputed, previousLength, currentLength }) => {\n if (shouldComputed) {\n // direction -> 1 | -1\n const direction = handlerOffsetDirection(handlerOffset);\n\n handlerOffset.value = computeNewIndexWhenDataChanges({\n direction,\n previousLength,\n currentLength,\n size,\n handlerOffset: handlerOffset.value,\n });\n }\n }, [dataLength, loop]);\n\n return {\n size,\n validLength,\n handlerOffset,\n };\n}\n","import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedFillDataWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\ntype TGetRequiredProps

= Record<\nP,\nRequired[P]\n>;\n\nexport type TInitializeCarouselProps = TCarouselProps &\nTGetRequiredProps<\n| \"defaultIndex\"\n| \"loop\"\n| \"width\"\n| \"height\"\n| \"scrollAnimationDuration\"\n| \"autoPlayInterval\"\n| \"autoFillData\"\n> & {\n // Raw data that has not been processed\n rawData: T[]\n dataLength: number\n rawDataLength: number\n};\n\nexport function useInitProps(\n props: TCarouselProps,\n): TInitializeCarouselProps {\n const {\n defaultIndex = 0,\n data: rawData = [],\n loop = true,\n autoPlayInterval: _autoPlayInterval = 1000,\n scrollAnimationDuration = 500,\n style = {},\n panGestureHandlerProps = {},\n autoFillData = true,\n // switchers\n enabled = true,\n pagingEnabled = true,\n overscrollEnabled = true,\n snapEnabled = props.enableSnap ?? true,\n width: _width,\n height: _height,\n } = props;\n\n const width = Math.round(_width || 0);\n const height = Math.round(_height || 0);\n const autoPlayInterval = Math.max(_autoPlayInterval, 0);\n\n const data = React.useMemo(\n () => {\n return computedFillDataWithAutoFillData({\n loop,\n autoFillData,\n data: rawData,\n dataLength: rawData.length,\n });\n },\n [rawData, loop, autoFillData],\n );\n\n const dataLength = data.length;\n const rawDataLength = rawData.length;\n\n if (props.mode === \"vertical-stack\" || props.mode === \"horizontal-stack\") {\n if (!props.modeConfig)\n props.modeConfig = {};\n\n props.modeConfig.showLength = props.modeConfig?.showLength ?? dataLength - 1;\n }\n\n return {\n ...props,\n defaultIndex,\n autoFillData,\n // Fill data with autoFillData\n data,\n // Length of fill data\n dataLength,\n // Raw data that has not been processed\n rawData,\n // Length of raw data\n rawDataLength,\n loop,\n enabled,\n autoPlayInterval,\n scrollAnimationDuration,\n style,\n panGestureHandlerProps,\n pagingEnabled,\n snapEnabled,\n overscrollEnabled,\n width,\n height,\n };\n}\n","import React from \"react\";\n\nimport type { TInitializeCarouselProps } from \"./useInitProps\";\n\nimport { Layouts } from \"../layouts\";\nimport type { TAnimationStyle } from \"../layouts/BaseLayout\";\n\ntype TLayoutConfigOpts = TInitializeCarouselProps & { size: number };\n\nexport function useLayoutConfig(\n opts: TLayoutConfigOpts,\n): TAnimationStyle {\n const { size, vertical } = opts as Required>;\n\n return React.useMemo(() => {\n const baseConfig = { size, vertical };\n switch (opts.mode) {\n case \"parallax\":\n return Layouts.parallax(baseConfig, opts.modeConfig);\n case \"horizontal-stack\":\n return Layouts.horizontalStack(opts.modeConfig);\n case \"vertical-stack\":\n return Layouts.verticalStack(opts.modeConfig);\n default:\n return Layouts.normal(baseConfig);\n }\n }, [opts.mode, opts.modeConfig, size, vertical]);\n}\n","import type Animated from \"react-native-reanimated\";\nimport {\n Extrapolate,\n interpolate,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport type { IVisibleRanges } from \"./useVisibleRanges\";\n\nexport interface IOpts {\n index: number\n size: number\n handlerOffset: Animated.SharedValue\n dataLength: number\n type?: \"positive\" | \"negative\"\n viewCount?: number\n loop?: boolean\n}\n\nexport const useOffsetX = (opts: IOpts, visibleRanges: IVisibleRanges) => {\n const {\n handlerOffset,\n index,\n size,\n loop,\n dataLength,\n type = \"positive\",\n viewCount: _viewCount,\n } = opts;\n\n const ITEM_LENGTH = dataLength;\n const VALID_LENGTH = ITEM_LENGTH - 1;\n const TOTAL_WIDTH = size * ITEM_LENGTH;\n const HALF_WIDTH = 0.5 * size;\n\n const viewCount = _viewCount ?? Math.round((ITEM_LENGTH - 1) / 2);\n const positiveCount\n = type === \"positive\" ? viewCount : VALID_LENGTH - viewCount;\n\n let startPos = size * index;\n if (index > positiveCount)\n startPos = (index - ITEM_LENGTH) * size;\n\n const MAX = positiveCount * size;\n const MIN = -((VALID_LENGTH - positiveCount) * size);\n\n const x = useDerivedValue(() => {\n const { negativeRange, positiveRange } = visibleRanges.value;\n if (\n (index < negativeRange[0] || index > negativeRange[1])\n && (index < positiveRange[0] || index > positiveRange[1])\n )\n return Number.MAX_SAFE_INTEGER;\n\n if (loop) {\n const inputRange = [\n -TOTAL_WIDTH,\n MIN - HALF_WIDTH - startPos - Number.MIN_VALUE,\n MIN - HALF_WIDTH - startPos,\n 0,\n MAX + HALF_WIDTH - startPos,\n MAX + HALF_WIDTH - startPos + Number.MIN_VALUE,\n TOTAL_WIDTH,\n ];\n\n const outputRange = [\n startPos,\n MAX + HALF_WIDTH - Number.MIN_VALUE,\n MIN - HALF_WIDTH,\n startPos,\n MAX + HALF_WIDTH,\n MIN - HALF_WIDTH + Number.MIN_VALUE,\n startPos,\n ];\n\n return interpolate(\n handlerOffset.value,\n inputRange,\n outputRange,\n Extrapolate.CLAMP,\n );\n }\n\n return handlerOffset.value + size * index;\n }, [loop, dataLength, viewCount, type, size, visibleRanges]);\n\n return x;\n};\n","import type Animated from \"react-native-reanimated\";\nimport {\n runOnJS,\n useAnimatedReaction,\n} from \"react-native-reanimated\";\n\nimport type { TCarouselProps } from \"../types\";\nimport { computedOffsetXValueWithAutoFillData } from \"../utils/computedWithAutoFillData\";\n\nexport function useOnProgressChange(\n opts: {\n size: number\n autoFillData: boolean\n loop: boolean\n offsetX: Animated.SharedValue\n rawDataLength: number\n } & Pick,\n) {\n const { autoFillData, loop, offsetX, size, rawDataLength, onProgressChange }\n = opts;\n\n useAnimatedReaction(\n () => offsetX.value,\n (_value) => {\n let value = computedOffsetXValueWithAutoFillData({\n value: _value,\n rawDataLength,\n size,\n autoFillData,\n loop,\n });\n\n if (!loop) {\n value = Math.max(\n -((rawDataLength - 1) * size),\n Math.min(value, 0),\n );\n }\n\n let absoluteProgress = Math.abs(value / size);\n\n if (value > 0)\n absoluteProgress = rawDataLength - absoluteProgress;\n\n if (onProgressChange)\n runOnJS(onProgressChange)(value, absoluteProgress);\n },\n [loop, autoFillData, rawDataLength, onProgressChange],\n );\n}\n","import React from \"react\";\n\nimport type { TCarouselProps } from \"../types\";\n\nexport function usePropsErrorBoundary(props: TCarouselProps & { dataLength: number }) {\n React.useEffect(() => {\n const { defaultIndex, dataLength: viewCount } = props;\n\n if (typeof defaultIndex === \"number\" && viewCount > 0) {\n if (defaultIndex < 0 || defaultIndex >= viewCount) {\n throw new Error(\n \"DefaultIndex must be in the range of data length.\",\n );\n }\n }\n\n // TODO\n if (!props.mode || props.mode === \"parallax\") {\n if (!props.vertical && !props.width) {\n throw new Error(\n \"`width` must be specified for horizontal carousels.\",\n );\n }\n if (props.vertical && !props.height) {\n throw new Error(\n \"`height` must be specified for vertical carousels.\",\n );\n }\n }\n }, [props]);\n}\n","import type Animated from \"react-native-reanimated\";\nimport { useDerivedValue } from \"react-native-reanimated\";\n\nexport type IVisibleRanges = Animated.SharedValue<{\n negativeRange: number[]\n positiveRange: number[]\n}>;\n\nexport function useVisibleRanges(options: {\n total: number\n viewSize: number\n windowSize?: number\n translation: Animated.SharedValue\n}): IVisibleRanges {\n const {\n total = 0,\n viewSize,\n translation,\n windowSize: _windowSize = 0,\n } = options;\n\n const windowSize = total <= _windowSize ? total : _windowSize;\n\n const ranges = useDerivedValue(() => {\n const positiveCount = Math.round(windowSize / 2);\n const negativeCount = windowSize - positiveCount;\n let curIndex = Math.round(-translation.value / viewSize);\n curIndex = curIndex < 0 ? (curIndex % total) + total : curIndex;\n const negativeRange = [\n (curIndex - negativeCount + total) % total,\n (curIndex - 1 + total) % total,\n ];\n const positiveRange = [\n (curIndex + total) % total,\n (curIndex + positiveCount + total) % total,\n ];\n if (negativeRange[0] < total && negativeRange[0] > negativeRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n if (positiveRange[0] > positiveRange[1]) {\n negativeRange[1] = total - 1;\n positiveRange[0] = 0;\n }\n return { negativeRange, positiveRange };\n }, [total, windowSize, translation]);\n\n return ranges;\n}\n","import Carousel from \"./Carousel\";\nexport type {\n TCarouselProps,\n ICarouselInstance,\n IComputedDirectionTypes,\n CarouselRenderItem,\n} from \"./types\";\nexport { ILayoutConfig } from \"./layouts/stack\";\n\nexport default Carousel;\n","import React from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type { AnimatedStyleProp } from \"react-native-reanimated\";\nimport Animated, {\n runOnJS,\n useAnimatedReaction,\n useAnimatedStyle,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport type { ILayoutConfig } from \"./stack\";\n\nimport { useCheckMounted } from \"../hooks/useCheckMounted\";\nimport type { IOpts } from \"../hooks/useOffsetX\";\nimport { useOffsetX } from \"../hooks/useOffsetX\";\nimport type { IVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { LazyView } from \"../LazyView\";\nimport { CTX } from \"../store\";\n\nexport type TAnimationStyle = (value: number) => AnimatedStyleProp;\n\nexport const BaseLayout: React.FC<{\n index: number\n handlerOffset: Animated.SharedValue\n visibleRanges: IVisibleRanges\n animationStyle: TAnimationStyle\n children: (ctx: {\n animationValue: Animated.SharedValue\n }) => React.ReactElement\n}> = (props) => {\n const mounted = useCheckMounted();\n const { handlerOffset, index, children, visibleRanges, animationStyle }\n = props;\n\n const context = React.useContext(CTX);\n const {\n props: {\n loop,\n dataLength,\n width,\n height,\n vertical,\n customConfig,\n mode,\n modeConfig,\n },\n } = context;\n const size = vertical ? height : width;\n const [shouldUpdate, setShouldUpdate] = React.useState(false);\n let offsetXConfig: IOpts = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n ...(typeof customConfig === \"function\" ? customConfig() : {}),\n };\n\n if (mode === \"horizontal-stack\") {\n const { snapDirection, showLength } = modeConfig as ILayoutConfig;\n\n offsetXConfig = {\n handlerOffset,\n index,\n size,\n dataLength,\n loop,\n type: snapDirection === \"right\" ? \"negative\" : \"positive\",\n viewCount: showLength,\n };\n }\n\n const x = useOffsetX(offsetXConfig, visibleRanges);\n const animationValue = useDerivedValue(() => x.value / size, [x, size]);\n const animatedStyle = useAnimatedStyle(\n () => animationStyle(x.value / size),\n [animationStyle],\n );\n\n const updateView = React.useCallback(\n (negativeRange: number[], positiveRange: number[]) => {\n mounted.current\n && setShouldUpdate(\n (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]),\n );\n },\n [index, mounted],\n );\n\n useAnimatedReaction(\n () => visibleRanges.value,\n () => {\n runOnJS(updateView)(\n visibleRanges.value.negativeRange,\n visibleRanges.value.positiveRange,\n );\n },\n [visibleRanges.value],\n );\n\n return (\n \n \n {children({ animationValue })}\n \n \n );\n};\n","import { normalLayout } from \"./normal\";\nimport { parallaxLayout } from \"./parallax\";\nimport { horizontalStackLayout, verticalStackLayout } from \"./stack\";\n\nexport type TMode = \"parallax\" | \"horizontal-stack\" | \"vertical-stack\";\n\nexport const Layouts = {\n normal: normalLayout,\n parallax: parallaxLayout,\n horizontalStack: horizontalStackLayout,\n verticalStack: verticalStackLayout,\n};\n","import { interpolate } from \"react-native-reanimated\";\n\nexport function normalLayout(opts: { size: number; vertical: boolean }) {\n const { size, vertical } = opts;\n\n return (value: number) => {\n \"worklet\";\n const translate = interpolate(value, [-1, 0, 1], [-size, 0, size]);\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n ],\n };\n };\n}\n","import { Extrapolate, interpolate } from \"react-native-reanimated\";\n\nimport type { IComputedDirectionTypes } from \"../types\";\n\ninterface TBaseConfig {\n size: number\n vertical: boolean\n}\n\nexport interface ILayoutConfig {\n /**\n * control prev/next item offset.\n * @default 100\n */\n parallaxScrollingOffset?: number\n /**\n * control prev/current/next item offset.\n * @default 0.8\n */\n parallaxScrollingScale?: number\n /**\n * control prev/next item offset.\n * @default Math.pow(parallaxScrollingScale, 2)\n */\n parallaxAdjacentItemScale?: number\n}\n\nexport type TParallaxModeProps = IComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: \"parallax\"\n modeConfig?: ILayoutConfig\n}>;\n\nexport function parallaxLayout(\n baseConfig: TBaseConfig,\n modeConfig: ILayoutConfig = {},\n) {\n const { size, vertical } = baseConfig;\n const {\n parallaxScrollingOffset = 100,\n parallaxScrollingScale = 0.8,\n parallaxAdjacentItemScale = parallaxScrollingScale ** 2,\n } = modeConfig;\n\n return (value: number) => {\n \"worklet\";\n const translate = interpolate(\n value,\n [-1, 0, 1],\n [-size + parallaxScrollingOffset, 0, size - parallaxScrollingOffset],\n );\n\n const zIndex = interpolate(\n value,\n [-1, 0, 1],\n [0, size, 0],\n Extrapolate.CLAMP,\n );\n\n const scale = interpolate(\n value,\n [-1, 0, 1],\n [\n parallaxAdjacentItemScale,\n parallaxScrollingScale,\n parallaxAdjacentItemScale,\n ],\n Extrapolate.CLAMP,\n );\n\n return {\n transform: [\n vertical\n ? {\n translateY: translate,\n }\n : {\n translateX: translate,\n },\n {\n scale,\n },\n ],\n zIndex,\n };\n };\n}\n","import { useMemo } from \"react\";\nimport type { TransformsStyle, ViewStyle } from \"react-native\";\nimport { Dimensions } from \"react-native\";\nimport { Extrapolate, interpolate } from \"react-native-reanimated\";\n\nimport type { IComputedDirectionTypes, CustomConfig } from \"../types\";\n\nconst screen = Dimensions.get(\"window\");\n\nexport interface ILayoutConfig {\n showLength?: number\n moveSize?: number\n stackInterval?: number\n scaleInterval?: number\n opacityInterval?: number\n rotateZDeg?: number\n snapDirection?: \"left\" | \"right\"\n}\n\nexport type TStackModeProps = IComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: \"horizontal-stack\" | \"vertical-stack\"\n /**\n * Stack animation style.\n * @default\n * mode: 'vertical',\n * snapDirection: 'right',\n * moveSize: window.width,\n * stackInterval: 30,\n * scaleInterval: 0.08,\n * rotateZDeg: 135,\n */\n modeConfig?: ILayoutConfig\n}>;\n\nexport function horizontalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n \"worklet\";\n\n const {\n showLength,\n snapDirection = \"left\",\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n\n const transform: TransformsStyle[\"transform\"] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n\n if (snapDirection === \"left\") {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, validLength * stackInterval],\n Extrapolate.CLAMP,\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP,\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP,\n )}deg`;\n }\n else if (snapDirection === \"right\") {\n translateX = interpolate(\n value,\n inputRange,\n [-validLength * stackInterval, 0, moveSize],\n Extrapolate.CLAMP,\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP,\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP,\n )}deg`;\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n );\n\n return styles;\n };\n}\n\nexport function useHorizontalStackLayout(\n customAnimationConfig: ILayoutConfig = {},\n customConfig: CustomConfig = {},\n) {\n const config = useMemo(\n () => ({\n type:\n customAnimationConfig.snapDirection === \"right\"\n ? \"negative\"\n : \"positive\",\n viewCount: customAnimationConfig.showLength,\n ...customConfig,\n }),\n [customAnimationConfig, customConfig],\n );\n\n return {\n layout: horizontalStackLayout(customAnimationConfig),\n config,\n };\n}\n\nexport function verticalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n \"worklet\";\n\n const {\n showLength,\n snapDirection = \"left\",\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n const transform: TransformsStyle[\"transform\"] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n let translateY: number;\n\n if (snapDirection === \"left\") {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, 0],\n Extrapolate.CLAMP,\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP,\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP,\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [0, 0, validLength * stackInterval],\n Extrapolate.CLAMP,\n );\n }\n else if (snapDirection === \"right\") {\n translateX = interpolate(\n value,\n inputRange,\n [0, 0, moveSize],\n Extrapolate.CLAMP,\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP,\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP,\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [validLength * stackInterval, 0, 0],\n Extrapolate.CLAMP,\n );\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n {\n translateY: translateY!,\n },\n );\n\n return styles;\n };\n}\n\nfunction getCommonVariables(opts: {\n value: number\n showLength: number\n snapDirection: \"left\" | \"right\"\n}) {\n \"worklet\";\n\n const { showLength, value: _value, snapDirection } = opts;\n function easeInOutCubic(v: number): number {\n return v < 0.5 ? 4 * v * v * v : 1 - (-2 * v + 2) ** 3 / 2;\n }\n const page = Math.floor(Math.abs(_value));\n const diff = Math.abs(_value) % 1;\n const value\n = _value < 0\n ? -(page + easeInOutCubic(diff))\n : page + easeInOutCubic(diff);\n const validLength = showLength! - 1;\n\n let inputRange: [number, number, number];\n\n if (snapDirection === \"left\")\n inputRange = [-1, 0, validLength];\n else if (snapDirection === \"right\")\n inputRange = [-validLength, 0, 1];\n else\n throw new Error(\"snapDirection must be set to either left or right\");\n\n return {\n inputRange,\n validLength,\n value,\n };\n}\n\nfunction getCommonStyles(opts: {\n value: number\n validLength: number\n opacityInterval: number\n snapDirection: \"left\" | \"right\"\n}) {\n \"worklet\";\n\n const { snapDirection, validLength, value, opacityInterval } = opts;\n\n let zIndex: number;\n let opacity: number;\n\n if (snapDirection === \"left\") {\n zIndex\n = Math.floor(\n interpolate(\n value,\n [-1.5, -1, -1 + Number.MIN_VALUE, 0, validLength],\n [\n Number.MIN_VALUE,\n validLength,\n validLength,\n validLength - 1,\n -1,\n ],\n ) * 10000,\n ) / 100;\n\n opacity = interpolate(\n value,\n [-1, 0, validLength - 1, validLength],\n [0.25, 1, 1 - (validLength - 1) * opacityInterval, 0.25],\n );\n }\n else if (snapDirection === \"right\") {\n zIndex\n = Math.floor(\n interpolate(\n value,\n [-validLength, 0, 1 - Number.MIN_VALUE, 1, 1.5],\n [\n 1,\n validLength - 1,\n validLength,\n validLength,\n Number.MIN_VALUE,\n ],\n ) * 10000,\n ) / 100;\n opacity = interpolate(\n value,\n [-validLength, 1 - validLength, 0, 1],\n [0.25, 1 - (validLength - 1) * opacityInterval, 1, 0.25],\n );\n }\n else {\n throw new Error(\"snapDirection must be set to either left or right\");\n }\n\n return {\n zIndex,\n opacity,\n };\n}\n","import React from \"react\";\n\nimport type { TInitializeCarouselProps } from \"../hooks/useInitProps\";\n\nexport interface IContext {\n props: TInitializeCarouselProps\n common: {\n size: number\n validLength: number\n }\n}\n\nexport const CTX = React.createContext({} as IContext);\n","import { DATA_LENGTH } from \"../constants\";\n\nconst { SINGLE_ITEM, DOUBLE_ITEM } = DATA_LENGTH;\n\nfunction isAutoFillData(params: { autoFillData: boolean; loop: boolean }) {\n \"worklet\";\n return !!params.loop && !!params.autoFillData;\n}\n\ntype BaseParams = {\n autoFillData: boolean\n loop: boolean\n} & T;\n\nexport function convertToSharedIndex(\n params: BaseParams<{ index: number; rawDataLength: number }>,\n) {\n \"worklet\";\n const { loop, rawDataLength, index, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (rawDataLength) {\n case SINGLE_ITEM:\n return 0;\n case DOUBLE_ITEM:\n return index % 2;\n }\n }\n\n return index;\n}\n\nexport function computedOffsetXValueWithAutoFillData(\n params: BaseParams<{\n rawDataLength: number\n value: number\n size: number\n }>,\n) {\n \"worklet\";\n\n const { rawDataLength, value, size, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (rawDataLength) {\n case SINGLE_ITEM:\n return value % size;\n case DOUBLE_ITEM:\n return value % (size * 2);\n }\n }\n\n return value;\n}\n\nexport function computedRealIndexWithAutoFillData(\n params: BaseParams<{\n index: number\n dataLength: number\n }>,\n) {\n const { index, dataLength, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return index % 1;\n case DOUBLE_ITEM:\n return index % 2;\n }\n }\n\n return index;\n}\n\nexport function computedFillDataWithAutoFillData(\n params: BaseParams<{\n data: T[]\n dataLength: number\n }>,\n): T[] {\n const { data, loop, autoFillData, dataLength } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return [data[0], data[0], data[0]];\n case DOUBLE_ITEM:\n return [data[0], data[1], data[0], data[1]];\n }\n }\n\n return data;\n}\n","import { withSpring, withTiming } from \"react-native-reanimated\";\n\nimport type { WithAnimation } from \"../types\";\n\nexport function dealWithAnimation(\n withAnimation: WithAnimation,\n): (value: number, cb: (isFinished: boolean) => void) => number {\n \"worklet\";\n switch (withAnimation.type) {\n case \"spring\":\n return (value, cb) => withSpring(value, withAnimation.config, isFinished =>\n cb(isFinished as boolean),\n );\n case \"timing\":\n return (value, cb) => withTiming(value, withAnimation.config, isFinished =>\n cb(isFinished as boolean),\n );\n }\n}\n","import type { SharedValue } from \"react-native-reanimated\";\n\nexport function handlerOffsetDirection(handlerOffset: SharedValue): -1 | 1 {\n \"worklet\";\n\n const isPositiveZero = Object.is(handlerOffset.value, +0);\n const isNegativeZero = Object.is(handlerOffset.value, -0);\n const direction = isPositiveZero\n ? 1\n : isNegativeZero\n ? -1\n : Math.sign(handlerOffset.value) as -1 | 1;\n\n return direction;\n}\n","/**\n * In worklet\n * e.g. runOnJS(lop)(...);\n */\nexport function log(...msg: any) {\n // eslint-disable-next-line no-console\n console.log(...msg);\n}\n\nexport function round(number: number) {\n \"worklet\";\n return Math.round(number);\n}\n","import type { Extrapolate as _Extrapolate } from './reanimated2/interpolateColor';\nimport type { SharedValue as _SharedValue } from './reanimated2/commonTypes';\nimport type { DerivedValue as _DerivedValue } from './reanimated2/hook/useDerivedValue';\nimport type {\n TransformStyleTypes as _TransformStyleTypes,\n Adaptable as _Adaptable,\n AdaptTransforms as _AdaptTransforms,\n AnimatedTransform as _AnimatedTransform,\n AnimateStyle as _AnimateStyle,\n StylesOrDefault as _StylesOrDefault,\n AnimateProps as _AnimateProps,\n} from './reanimated2/helperTypes';\nimport type { EasingFunction as _EasingFunction } from './reanimated2/Easing';\nimport {\n addWhitelistedNativeProps as _addWhitelistedNativeProps,\n addWhitelistedUIProps as _addWhitelistedUIProps,\n} from './ConfigHelper';\nimport type { AnimatedScrollViewProps as _AnimatedScrollViewProps } from './reanimated2/component/ScrollView';\nimport type { FlatListPropsWithLayout as _FlatListPropsWithLayout } from './reanimated2/component/FlatList';\nexport { default as createAnimatedComponent } from './createAnimatedComponent';\n\nexport { AnimatedText as Text } from './reanimated2/component/Text';\nexport { AnimatedView as View } from './reanimated2/component/View';\nexport { AnimatedScrollView as ScrollView } from './reanimated2/component/ScrollView';\nexport { AnimatedImage as Image } from './reanimated2/component/Image';\nexport { ReanimatedFlatList as FlatList } from './reanimated2/component/FlatList';\n/**\n * @deprecated Please import `Extrapolate` directly from `react-native-reanimated` instead of `Animated` namespace.\n */\nexport type Extrapolate = typeof _Extrapolate;\n/**\n * @deprecated Please import `SharedValue` directly from `react-native-reanimated` instead of `Animated` namespace.\n */\n\nexport type SharedValue = _SharedValue;\n/**\n * @deprecated Please import `DerivedValue` directly from `react-native-reanimated` instead of `Animated` namespace.\n */\nexport type DerivedValue = _DerivedValue;\n/**\n * @deprecated Please import `Adaptable` directly from `react-native-reanimated` instead of `Animated` namespace.\n */\nexport type Adaptable = _Adaptable;\n/**\n * @deprecated Please import `TransformStyleTypes` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type TransformStyleTypes = _TransformStyleTypes;\n/**\n * @deprecated Please import `AdaptTransforms` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type AdaptTransforms = _AdaptTransforms;\n/**\n * @deprecated Please import `AnimatedTransform` directly from `react-native-reanimated` instead of `Animated` namespace.\n */\nexport type AnimatedTransform = _AnimatedTransform;\n/**\n * @deprecated Please import `AnimateStyle` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type AnimateStyle = _AnimateStyle;\n/**\n * @deprecated Please import `StylesOrDefault` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type StylesOrDefault = _StylesOrDefault;\n/**\n * @deprecated Please import `AnimateProps` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type AnimateProps

= _AnimateProps

;\n/**\n * @deprecated Please import `EasingFunction` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type EasingFunction = _EasingFunction;\n/**\n * @deprecated Please import `addWhitelistedNativeProps` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport const addWhitelistedNativeProps = _addWhitelistedNativeProps;\n/**\n * @deprecated Please import `addWhitelistedUIProps` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport const addWhitelistedUIProps = _addWhitelistedUIProps;\n/**\n * @deprecated Please import `AnimatedScrollViewProps` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type AnimatedScrollViewProps = _AnimatedScrollViewProps;\n/**\n * @deprecated Please import `FlatListPropsWithLayout` directly from `react-native-reanimated` instead of `Animated` namespace.\n * */\nexport type FlatListPropsWithLayout = _FlatListPropsWithLayout;\n","import { configureProps as jsiConfigureProps } from './reanimated2/core';\n\n/**\n * Styles allowed to be direcly updated in UI thread\n */\nlet UI_THREAD_PROPS_WHITELIST: Record = {\n opacity: true,\n transform: true,\n /* colors */\n backgroundColor: true,\n borderRightColor: true,\n borderBottomColor: true,\n borderColor: true,\n borderEndColor: true,\n borderLeftColor: true,\n borderStartColor: true,\n borderTopColor: true,\n /* ios styles */\n shadowOpacity: true,\n shadowRadius: true,\n /* legacy android transform properties */\n scaleX: true,\n scaleY: true,\n translateX: true,\n translateY: true,\n};\n\n/**\n * Whitelist of view props that can be updated in native thread via UIManagerModule\n */\nlet NATIVE_THREAD_PROPS_WHITELIST: Record = {\n borderBottomWidth: true,\n borderEndWidth: true,\n borderLeftWidth: true,\n borderRightWidth: true,\n borderStartWidth: true,\n borderTopWidth: true,\n borderWidth: true,\n bottom: true,\n flex: true,\n flexGrow: true,\n flexShrink: true,\n height: true,\n left: true,\n margin: true,\n marginBottom: true,\n marginEnd: true,\n marginHorizontal: true,\n marginLeft: true,\n marginRight: true,\n marginStart: true,\n marginTop: true,\n marginVertical: true,\n maxHeight: true,\n maxWidth: true,\n minHeight: true,\n minWidth: true,\n padding: true,\n paddingBottom: true,\n paddingEnd: true,\n paddingHorizontal: true,\n paddingLeft: true,\n paddingRight: true,\n paddingStart: true,\n paddingTop: true,\n paddingVertical: true,\n right: true,\n start: true,\n top: true,\n width: true,\n zIndex: true,\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderRadius: true,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n elevation: true,\n fontSize: true,\n lineHeight: true,\n textShadowRadius: true,\n letterSpacing: true,\n aspectRatio: true,\n columnGap: true, // iOS only\n end: true, // number or string\n flexBasis: true, // number or string\n gap: true,\n rowGap: true,\n /* strings */\n display: true,\n backfaceVisibility: true,\n overflow: true,\n resizeMode: true,\n fontStyle: true,\n fontWeight: true,\n textAlign: true,\n textDecorationLine: true,\n fontFamily: true,\n textAlignVertical: true,\n fontVariant: true,\n textDecorationStyle: true,\n textTransform: true,\n writingDirection: true,\n alignContent: true,\n alignItems: true,\n alignSelf: true,\n direction: true, // iOS only\n flexDirection: true,\n flexWrap: true,\n justifyContent: true,\n position: true,\n /* text color */\n color: true,\n tintColor: true,\n shadowColor: true,\n placeholderTextColor: true,\n};\n\nfunction configureProps(): void {\n jsiConfigureProps(\n Object.keys(UI_THREAD_PROPS_WHITELIST),\n Object.keys(NATIVE_THREAD_PROPS_WHITELIST)\n );\n}\n\nexport function addWhitelistedNativeProps(\n props: Record\n): void {\n const oldSize = Object.keys(NATIVE_THREAD_PROPS_WHITELIST).length;\n NATIVE_THREAD_PROPS_WHITELIST = {\n ...NATIVE_THREAD_PROPS_WHITELIST,\n ...props,\n };\n if (oldSize !== Object.keys(NATIVE_THREAD_PROPS_WHITELIST).length) {\n configureProps();\n }\n}\n\nexport function addWhitelistedUIProps(props: Record): void {\n const oldSize = Object.keys(UI_THREAD_PROPS_WHITELIST).length;\n UI_THREAD_PROPS_WHITELIST = { ...UI_THREAD_PROPS_WHITELIST, ...props };\n if (oldSize !== Object.keys(UI_THREAD_PROPS_WHITELIST).length) {\n configureProps();\n }\n}\n\nconst PROCESSED_VIEW_NAMES = new Set();\n\ninterface ViewConfig {\n uiViewClassName: string;\n validAttributes: Record;\n}\n/**\n * updates UI props whitelist for given view host instance\n * this will work just once for every view name\n */\n\nexport function adaptViewConfig(viewConfig: ViewConfig): void {\n const viewName = viewConfig.uiViewClassName;\n const props = viewConfig.validAttributes;\n\n // update whitelist of UI props for this view name only once\n if (!PROCESSED_VIEW_NAMES.has(viewName)) {\n const propsToAdd: Record = {};\n Object.keys(props).forEach((key) => {\n // we don't want to add native props as they affect layout\n // we also skip props which repeat here\n if (\n !(key in NATIVE_THREAD_PROPS_WHITELIST) &&\n !(key in UI_THREAD_PROPS_WHITELIST)\n ) {\n propsToAdd[key] = true;\n }\n });\n addWhitelistedUIProps(propsToAdd);\n\n PROCESSED_VIEW_NAMES.add(viewName);\n }\n}\n\nconfigureProps();\n","import type {\n Component,\n ComponentClass,\n ComponentType,\n FunctionComponent,\n MutableRefObject,\n Ref,\n} from 'react';\nimport React from 'react';\nimport { findNodeHandle, Platform, StyleSheet } from 'react-native';\nimport WorkletEventHandler from './reanimated2/WorkletEventHandler';\nimport setAndForwardRef from './setAndForwardRef';\nimport './reanimated2/layoutReanimation/animationsManager';\nimport invariant from 'invariant';\nimport { adaptViewConfig } from './ConfigHelper';\nimport { RNRenderer } from './reanimated2/platform-specific/RNRenderer';\nimport {\n configureLayoutAnimations,\n enableLayoutAnimations,\n startMapper,\n stopMapper,\n} from './reanimated2/core';\nimport {\n isJest,\n isChromeDebugger,\n shouldBeUseWeb,\n isWeb,\n} from './reanimated2/PlatformChecker';\nimport { initialUpdaterRun } from './reanimated2/animation';\nimport type {\n BaseAnimationBuilder,\n EntryExitAnimationFunction,\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from './reanimated2/layoutReanimation';\nimport {\n SharedTransition,\n LayoutAnimationType,\n} from './reanimated2/layoutReanimation';\nimport type {\n SharedValue,\n StyleProps,\n ShadowNodeWrapper,\n} from './reanimated2/commonTypes';\nimport type {\n ViewDescriptorsSet,\n ViewRefSet,\n} from './reanimated2/ViewDescriptorsSet';\nimport { makeViewDescriptorsSet } from './reanimated2/ViewDescriptorsSet';\nimport { getShadowNodeWrapperFromRef } from './reanimated2/fabricUtils';\nimport updateProps from './reanimated2/UpdateProps';\nimport NativeReanimatedModule from './reanimated2/NativeReanimated';\nimport { isSharedValue } from './reanimated2';\nimport type { AnimateProps } from './reanimated2/helperTypes';\nimport { removeFromPropsRegistry } from './reanimated2/PropsRegistry';\n\nfunction dummyListener() {\n // empty listener we use to assign to listener properties for which animated\n // event is used.\n}\n\nfunction maybeBuild(\n layoutAnimationOrBuilder:\n | ILayoutAnimationBuilder\n | LayoutAnimationFunction\n | Keyframe\n): LayoutAnimationFunction | Keyframe {\n const isAnimationBuilder = (\n value: ILayoutAnimationBuilder | LayoutAnimationFunction | Keyframe\n ): value is ILayoutAnimationBuilder =>\n 'build' in layoutAnimationOrBuilder &&\n typeof layoutAnimationOrBuilder.build === 'function';\n\n if (isAnimationBuilder(layoutAnimationOrBuilder)) {\n return layoutAnimationOrBuilder.build();\n } else {\n return layoutAnimationOrBuilder;\n }\n}\n\ntype NestedArray = T | NestedArray[];\nfunction flattenArray(array: NestedArray): T[] {\n if (!Array.isArray(array)) {\n return [array];\n }\n const resultArr: T[] = [];\n\n const _flattenArray = (arr: NestedArray[]): void => {\n arr.forEach((item) => {\n if (Array.isArray(item)) {\n _flattenArray(item);\n } else {\n resultArr.push(item);\n }\n });\n };\n _flattenArray(array);\n return resultArr;\n}\n\nfunction onlyAnimatedStyles(styles: StyleProps[]) {\n return styles.filter((style) => style?.viewDescriptors);\n}\n\nfunction isSameAnimatedStyle(\n style1?: StyleProps,\n style2?: StyleProps\n): boolean {\n // We cannot use equality check to compare useAnimatedStyle outputs directly.\n // Instead, we can compare its viewsRefs.\n return style1?.viewsRef === style2?.viewsRef;\n}\n\nconst isSameAnimatedProps = isSameAnimatedStyle;\n\nconst has = (\n key: K,\n x: unknown\n): x is { [key in K]: unknown } => {\n if (typeof x === 'function' || typeof x === 'object') {\n if (x === null || x === undefined) {\n return false;\n } else {\n return key in x;\n }\n }\n return false;\n};\n\nfunction isInlineStyleTransform(transform: any): boolean {\n if (!transform) {\n return false;\n }\n return transform.some((t: Record) => hasInlineStyles(t));\n}\n\nfunction hasInlineStyles(style: StyleProps): boolean {\n if (!style) {\n return false;\n }\n return Object.keys(style).some((key) => {\n const styleValue = style[key];\n return (\n isSharedValue(styleValue) ||\n (key === 'transform' && isInlineStyleTransform(styleValue))\n );\n });\n}\n\nfunction extractSharedValuesMapFromProps(\n props: AnimatedComponentProps\n): Record {\n const inlineProps: Record = {};\n\n for (const key in props) {\n const value = props[key];\n if (key === 'style') {\n const styles = flattenArray(props.style ?? []);\n styles.forEach((style) => {\n if (!style) {\n return;\n }\n for (const [key, styleValue] of Object.entries(style)) {\n if (isSharedValue(styleValue)) {\n inlineProps[key] = styleValue;\n } else if (\n key === 'transform' &&\n isInlineStyleTransform(styleValue)\n ) {\n inlineProps[key] = styleValue;\n }\n }\n });\n } else if (isSharedValue(value)) {\n inlineProps[key] = value;\n }\n }\n\n return inlineProps;\n}\n\nfunction inlinePropsHasChanged(styles1: StyleProps, styles2: StyleProps) {\n if (Object.keys(styles1).length !== Object.keys(styles2).length) {\n return true;\n }\n\n for (const key of Object.keys(styles1)) {\n if (styles1[key] !== styles2[key]) return true;\n }\n\n return false;\n}\n\nfunction getInlinePropsUpdate(inlineProps: Record) {\n 'worklet';\n const update: Record = {};\n for (const [key, styleValue] of Object.entries(inlineProps)) {\n if (key === 'transform') {\n update[key] = styleValue.map((transform: Record) => {\n return getInlinePropsUpdate(transform);\n });\n } else if (isSharedValue(styleValue)) {\n update[key] = styleValue.value;\n } else {\n update[key] = styleValue;\n }\n }\n return update;\n}\n\ninterface AnimatedProps extends Record {\n viewDescriptors?: ViewDescriptorsSet;\n viewsRef?: ViewRefSet;\n initial?: SharedValue;\n}\n\ntype AnimatedComponentProps

> = P & {\n forwardedRef?: Ref;\n style?: NestedArray;\n animatedProps?: Partial>;\n animatedStyle?: StyleProps;\n layout?:\n | BaseAnimationBuilder\n | ILayoutAnimationBuilder\n | typeof BaseAnimationBuilder;\n entering?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n exiting?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n sharedTransitionTag?: string;\n sharedTransitionStyle?: SharedTransition;\n};\n\ntype Options

= {\n setNativeProps: (ref: ComponentRef, props: P) => void;\n};\n\ninterface ComponentRef extends Component {\n setNativeProps?: (props: Record) => void;\n getScrollableNode?: () => ComponentRef;\n getAnimatableRef?: () => ComponentRef;\n}\n\ninterface InitialComponentProps extends Record {\n ref?: Ref;\n collapsable?: boolean;\n}\n\nexport default function createAnimatedComponent

(\n component: FunctionComponent

,\n options?: Options

\n): FunctionComponent>;\n\nexport default function createAnimatedComponent

(\n component: ComponentClass

,\n options?: Options

\n): ComponentClass>;\n\nexport default function createAnimatedComponent(\n Component: ComponentType,\n options?: Options\n): any {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n `Looks like you're passing a function component \\`${Component.name}\\` to \\`createAnimatedComponent\\` function which supports only class components. Please wrap your function component with \\`React.forwardRef()\\` or use a class component instead.`\n );\n\n class AnimatedComponent extends React.Component<\n AnimatedComponentProps\n > {\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial>;\n _viewTag = -1;\n _isFirstRender = true;\n animatedStyle: { value: StyleProps } = { value: {} };\n initialStyle = {};\n _component: ComponentRef | null = null;\n _inlinePropsViewDescriptors: ViewDescriptorsSet | null = null;\n _inlinePropsMapperId: number | null = null;\n _inlineProps: StyleProps = {};\n _sharedElementTransition: SharedTransition | null = null;\n static displayName: string;\n\n constructor(props: AnimatedComponentProps) {\n super(props);\n if (isJest()) {\n this.animatedStyle = { value: {} };\n }\n }\n\n componentWillUnmount() {\n this._detachNativeEvents();\n this._detachStyles();\n this._detachInlineProps();\n this._sharedElementTransition?.unregisterTransition(this._viewTag);\n }\n\n componentDidMount() {\n this._attachNativeEvents();\n this._attachAnimatedStyles();\n this._attachInlineProps();\n }\n\n _getEventViewRef() {\n // Make sure to get the scrollable node for components that implement\n // `ScrollResponder.Mixin`.\n return this._component?.getScrollableNode\n ? this._component.getScrollableNode()\n : this._component;\n }\n\n _attachNativeEvents() {\n const node = this._getEventViewRef();\n let viewTag = null; // We set it only if needed\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n if (viewTag === null) {\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n }\n }\n }\n\n _detachNativeEvents() {\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n }\n\n _detachStyles() {\n if (isWeb() && this._styles !== null) {\n for (const style of this._styles) {\n if (style?.viewsRef) {\n style.viewsRef.remove(this);\n }\n }\n } else if (this._viewTag !== -1 && this._styles !== null) {\n for (const style of this._styles) {\n style.viewDescriptors.remove(this._viewTag);\n }\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.remove(this._viewTag);\n }\n if (global._IS_FABRIC) {\n removeFromPropsRegistry(this._viewTag);\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps\n ) {\n for (const key in prevProps) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n\n let viewTag = null;\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n if (viewTag === null) {\n const node = this._getEventViewRef();\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.setNativeProps(this._component!, props);\n } else {\n // eslint-disable-next-line no-unused-expressions\n this._component?.setNativeProps?.(props);\n }\n }\n\n _getViewInfo() {\n let viewTag: number | null;\n let viewName: string | null;\n let shadowNodeWrapper: ShadowNodeWrapper | null = null;\n let viewConfig;\n // Component can specify ref which should be animated when animated version of the component is created.\n // Otherwise, we animate the component itself.\n const component = this._component?.getAnimatableRef\n ? this._component.getAnimatableRef()\n : this;\n if (isWeb()) {\n viewTag = findNodeHandle(component);\n viewName = null;\n shadowNodeWrapper = null;\n viewConfig = null;\n } else {\n // hostInstance can be null for a component that doesn't render anything (render function returns null). Example: svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx\n const hostInstance = RNRenderer.findHostInstance_DEPRECATED(component);\n if (!hostInstance) {\n throw new Error(\n 'Cannot find host instance for this component. Maybe it renders nothing?'\n );\n }\n // we can access view tag in the same way it's accessed here https://github.com/facebook/react/blob/e3f4eb7272d4ca0ee49f27577156b57eeb07cf73/packages/react-native-renderer/src/ReactFabric.js#L146\n viewTag = hostInstance?._nativeTag;\n /**\n * RN uses viewConfig for components for storing different properties of the component(example: https://github.com/facebook/react-native/blob/master/Libraries/Components/ScrollView/ScrollViewViewConfig.js#L16).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n\n viewConfig = hostInstance?.viewConfig;\n\n if (global._IS_FABRIC) {\n shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\n }\n }\n return { viewTag, viewName, shadowNodeWrapper, viewConfig };\n }\n\n _attachAnimatedStyles() {\n const styles = this.props.style\n ? onlyAnimatedStyles(flattenArray(this.props.style))\n : [];\n const prevStyles = this._styles;\n this._styles = styles;\n\n const prevAnimatedProps = this._animatedProps;\n this._animatedProps = this.props.animatedProps;\n\n const { viewTag, viewName, shadowNodeWrapper, viewConfig } =\n this._getViewInfo();\n\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && viewConfig) {\n adaptViewConfig(viewConfig);\n }\n\n this._viewTag = viewTag as number;\n\n // remove old styles\n if (prevStyles) {\n // in most of the cases, views have only a single animated style and it remains unchanged\n const hasOneSameStyle =\n styles.length === 1 &&\n prevStyles.length === 1 &&\n isSameAnimatedStyle(styles[0], prevStyles[0]);\n\n if (!hasOneSameStyle) {\n // otherwise, remove each style that is not present in new styles\n for (const prevStyle of prevStyles) {\n const isPresent = styles.some((style) =>\n isSameAnimatedStyle(style, prevStyle)\n );\n if (!isPresent) {\n prevStyle.viewDescriptors.remove(viewTag);\n }\n }\n }\n }\n\n styles.forEach((style) => {\n style.viewDescriptors.add({\n tag: viewTag,\n name: viewName,\n shadowNodeWrapper,\n });\n if (isJest()) {\n /**\n * We need to connect Jest's TestObject instance whose contains just props object\n * with the updateProps() function where we update the properties of the component.\n * We can't update props object directly because TestObject contains a copy of props - look at render function:\n * const props = this._filterNonAnimatedProps(this.props);\n */\n this.animatedStyle.value = {\n ...this.animatedStyle.value,\n ...style.initial.value,\n };\n style.animatedStyle.current = this.animatedStyle;\n }\n });\n\n // detach old animatedProps\n if (\n prevAnimatedProps &&\n !isSameAnimatedProps(prevAnimatedProps, this.props.animatedProps)\n ) {\n prevAnimatedProps.viewDescriptors!.remove(viewTag as number);\n }\n\n // attach animatedProps property\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.add({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tag: viewTag!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name: viewName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n }\n\n _attachInlineProps() {\n const newInlineProps: Record =\n extractSharedValuesMapFromProps(this.props);\n const hasChanged = inlinePropsHasChanged(\n newInlineProps,\n this._inlineProps\n );\n\n if (hasChanged) {\n if (!this._inlinePropsViewDescriptors) {\n this._inlinePropsViewDescriptors = makeViewDescriptorsSet();\n\n const { viewTag, viewName, shadowNodeWrapper, viewConfig } =\n this._getViewInfo();\n\n if (Object.keys(newInlineProps).length && viewConfig) {\n adaptViewConfig(viewConfig);\n }\n\n this._inlinePropsViewDescriptors.add({\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tag: viewTag!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name: viewName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n const sharableViewDescriptors =\n this._inlinePropsViewDescriptors.sharableViewDescriptors;\n\n const maybeViewRef = NativeReanimatedModule.native\n ? undefined\n : ({ items: new Set([this]) } as ViewRefSet); // see makeViewsRefSet\n\n const updaterFunction = () => {\n 'worklet';\n const update = getInlinePropsUpdate(newInlineProps);\n updateProps(sharableViewDescriptors, update, maybeViewRef);\n };\n this._inlineProps = newInlineProps;\n if (this._inlinePropsMapperId) {\n stopMapper(this._inlinePropsMapperId);\n }\n this._inlinePropsMapperId = null;\n if (Object.keys(newInlineProps).length) {\n this._inlinePropsMapperId = startMapper(\n updaterFunction,\n Object.values(newInlineProps)\n );\n }\n }\n }\n\n _detachInlineProps() {\n if (this._inlinePropsMapperId) {\n stopMapper(this._inlinePropsMapperId);\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps\n ) {\n this._reattachNativeEvents(prevProps);\n this._attachAnimatedStyles();\n this._attachInlineProps();\n }\n\n _setComponentRef = setAndForwardRef({\n getForwardedRef: () =>\n this.props.forwardedRef as MutableRefObject<\n Component, Record, unknown>\n >,\n setLocalRef: (ref) => {\n // TODO update config\n const tag = findNodeHandle(ref);\n const { layout, entering, exiting, sharedTransitionTag } = this.props;\n if (\n (layout || entering || exiting || sharedTransitionTag) &&\n tag != null\n ) {\n if (!shouldBeUseWeb()) {\n enableLayoutAnimations(true, false);\n }\n if (layout) {\n configureLayoutAnimations(\n tag,\n LayoutAnimationType.LAYOUT,\n maybeBuild(layout)\n );\n }\n if (entering) {\n configureLayoutAnimations(\n tag,\n LayoutAnimationType.ENTERING,\n maybeBuild(entering)\n );\n }\n if (exiting) {\n configureLayoutAnimations(\n tag,\n LayoutAnimationType.EXITING,\n maybeBuild(exiting)\n );\n }\n if (sharedTransitionTag) {\n const sharedElementTransition =\n this.props.sharedTransitionStyle ?? new SharedTransition();\n sharedElementTransition.registerTransition(\n tag,\n sharedTransitionTag\n );\n this._sharedElementTransition = sharedElementTransition;\n }\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n _filterNonAnimatedProps(\n inputProps: AnimatedComponentProps\n ): Record {\n const props: Record = {};\n for (const key in inputProps) {\n const value = inputProps[key];\n if (key === 'style') {\n const styleProp = inputProps.style;\n const styles = flattenArray(styleProp ?? []);\n const processedStyle: StyleProps = styles.map((style) => {\n if (style && style.viewDescriptors) {\n // this is how we recognize styles returned by useAnimatedStyle\n style.viewsRef.add(this);\n if (this._isFirstRender) {\n this.initialStyle = {\n ...style.initial.value,\n ...this.initialStyle,\n ...initialUpdaterRun(style.initial.updater),\n };\n }\n return this.initialStyle;\n } else if (hasInlineStyles(style)) {\n if (this._isFirstRender) {\n return getInlinePropsUpdate(style);\n }\n const newStyle: StyleProps = {};\n for (const [key, styleValue] of Object.entries(style)) {\n if (\n !isSharedValue(styleValue) &&\n !(key === 'transform' && isInlineStyleTransform(styleValue))\n ) {\n newStyle[key] = styleValue;\n }\n }\n return newStyle;\n } else {\n return style;\n }\n });\n props[key] = StyleSheet.flatten(processedStyle);\n } else if (key === 'animatedProps') {\n const animatedProp = inputProps.animatedProps as Partial<\n AnimatedComponentProps\n >;\n if (animatedProp.initial !== undefined) {\n Object.keys(animatedProp.initial.value).forEach((key) => {\n props[key] = animatedProp.initial?.value[key];\n animatedProp.viewsRef?.add(this);\n });\n }\n } else if (\n has('current', value) &&\n value.current instanceof WorkletEventHandler\n ) {\n if (value.current.eventNames.length > 0) {\n value.current.eventNames.forEach((eventName) => {\n props[eventName] = has('listeners', value.current)\n ? (value.current.listeners as Record)[\n eventName\n ]\n : dummyListener;\n });\n } else {\n props[key] = dummyListener;\n }\n } else if (isSharedValue(value)) {\n if (this._isFirstRender) {\n props[key] = (value as SharedValue).value;\n }\n } else if (\n key !== 'onGestureHandlerStateChange' ||\n !isChromeDebugger()\n ) {\n props[key] = value;\n }\n }\n return props;\n }\n\n render() {\n const props = this._filterNonAnimatedProps(this.props);\n if (isJest()) {\n props.animatedStyle = this.animatedStyle;\n }\n\n if (this._isFirstRender) {\n this._isFirstRender = false;\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n return (\n \n );\n }\n }\n\n AnimatedComponent.displayName = `AnimatedComponent(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return React.forwardRef((props, ref) => {\n return (\n \n );\n });\n}\n","export * from './reanimated2';\nexport * as default from './Animated'; // If this line fails, you probably forgot some installation steps. Check out the installation guide here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation/ 1) Make sure reanimated's babel plugin is installed in your babel.config.js (you should have 'react-native-reanimated/plugin' listed there - also see the above link for details) 2) Make sure you reset build cache after updating the config, run: yarn start --reset-cache\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\n\nexport function Bezier(\n mX1: number,\n mY1: number,\n mX2: number,\n mY2: number\n): (x: number) => number {\n 'worklet';\n\n const NEWTON_ITERATIONS = 4;\n const NEWTON_MIN_SLOPE = 0.001;\n const SUBDIVISION_PRECISION = 0.0000001;\n const SUBDIVISION_MAX_ITERATIONS = 10;\n\n const kSplineTableSize = 11;\n const kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1: number, aA2: number): number {\n 'worklet';\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1: number, aA2: number): number {\n 'worklet';\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1: number) {\n 'worklet';\n return 3.0 * aA1;\n }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT: number, aA1: number, aA2: number): number {\n 'worklet';\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope(aT: number, aA1: number, aA2: number): number {\n 'worklet';\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(\n aX: number,\n aA: number,\n aB: number,\n mX1: number,\n mX2: number\n ): number {\n 'worklet';\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n }\n\n function newtonRaphsonIterate(\n aX: number,\n aGuessT: number,\n mX1: number,\n mX2: number\n ): number {\n 'worklet';\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function LinearEasing(x: number): number {\n 'worklet';\n return x;\n }\n\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // FIXME: Float32Array is not available in Hermes right now\n //\n // var float32ArraySupported = typeof Float32Array === 'function';\n // const sampleValues = float32ArraySupported\n // ? new Float32Array(kSplineTableSize)\n // : new Array(kSplineTableSize);\n\n // Precompute samples table\n const sampleValues = new Array(kSplineTableSize);\n\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX(aX: number): number {\n 'worklet';\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n\n const initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n mX1,\n mX2\n );\n }\n }\n\n return function BezierEasing(x) {\n 'worklet';\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n","/**\n * Copied from:\n * react-native/Libraries/StyleSheet/normalizeColor.js\n * react-native/Libraries/StyleSheet/processColor.js\n * https://github.com/wcandillon/react-native-redash/blob/master/src/Colors.ts\n */\n\n/* eslint no-bitwise: 0 */\nimport { makeShareable } from './core';\nimport { isAndroid, isWeb } from './PlatformChecker';\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\ninterface HSV {\n h: number;\n s: number;\n v: number;\n}\n\n// var INTEGER = '[-+]?\\\\d+';\nconst NUMBER = '[-+]?(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args: unknown[]): string {\n 'worklet';\n return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nconst MATCHERS = {\n rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n rgba: new RegExp('rgba' + call(NUMBER, NUMBER, NUMBER, NUMBER)),\n hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n hsla: new RegExp('hsla' + call(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER)),\n hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#([0-9a-fA-F]{6})$/,\n hex8: /^#([0-9a-fA-F]{8})$/,\n};\n\nfunction hue2rgb(p: number, q: number, t: number): number {\n 'worklet';\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n\nfunction hslToRgb(h: number, s: number, l: number): number {\n 'worklet';\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n const r = hue2rgb(p, q, h + 1 / 3);\n const g = hue2rgb(p, q, h);\n const b = hue2rgb(p, q, h - 1 / 3);\n\n return (\n (Math.round(r * 255) << 24) |\n (Math.round(g * 255) << 16) |\n (Math.round(b * 255) << 8)\n );\n}\n\nfunction parse255(str: string): number {\n 'worklet';\n const int = Number.parseInt(str, 10);\n if (int < 0) {\n return 0;\n }\n if (int > 255) {\n return 255;\n }\n return int;\n}\n\nfunction parse360(str: string): number {\n 'worklet';\n const int = Number.parseFloat(str);\n return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str: string): number {\n 'worklet';\n const num = Number.parseFloat(str);\n if (num < 0) {\n return 0;\n }\n if (num > 1) {\n return 255;\n }\n return Math.round(num * 255);\n}\n\nfunction parsePercentage(str: string): number {\n 'worklet';\n // parseFloat conveniently ignores the final %\n const int = Number.parseFloat(str);\n if (int < 0) {\n return 0;\n }\n if (int > 100) {\n return 1;\n }\n return int / 100;\n}\n\nconst names: any = makeShareable({\n transparent: 0x00000000,\n\n // http://www.w3.org/TR/css3-color/#svg-color\n aliceblue: 0xf0f8ffff,\n antiquewhite: 0xfaebd7ff,\n aqua: 0x00ffffff,\n aquamarine: 0x7fffd4ff,\n azure: 0xf0ffffff,\n beige: 0xf5f5dcff,\n bisque: 0xffe4c4ff,\n black: 0x000000ff,\n blanchedalmond: 0xffebcdff,\n blue: 0x0000ffff,\n blueviolet: 0x8a2be2ff,\n brown: 0xa52a2aff,\n burlywood: 0xdeb887ff,\n burntsienna: 0xea7e5dff,\n cadetblue: 0x5f9ea0ff,\n chartreuse: 0x7fff00ff,\n chocolate: 0xd2691eff,\n coral: 0xff7f50ff,\n cornflowerblue: 0x6495edff,\n cornsilk: 0xfff8dcff,\n crimson: 0xdc143cff,\n cyan: 0x00ffffff,\n darkblue: 0x00008bff,\n darkcyan: 0x008b8bff,\n darkgoldenrod: 0xb8860bff,\n darkgray: 0xa9a9a9ff,\n darkgreen: 0x006400ff,\n darkgrey: 0xa9a9a9ff,\n darkkhaki: 0xbdb76bff,\n darkmagenta: 0x8b008bff,\n darkolivegreen: 0x556b2fff,\n darkorange: 0xff8c00ff,\n darkorchid: 0x9932ccff,\n darkred: 0x8b0000ff,\n darksalmon: 0xe9967aff,\n darkseagreen: 0x8fbc8fff,\n darkslateblue: 0x483d8bff,\n darkslategray: 0x2f4f4fff,\n darkslategrey: 0x2f4f4fff,\n darkturquoise: 0x00ced1ff,\n darkviolet: 0x9400d3ff,\n deeppink: 0xff1493ff,\n deepskyblue: 0x00bfffff,\n dimgray: 0x696969ff,\n dimgrey: 0x696969ff,\n dodgerblue: 0x1e90ffff,\n firebrick: 0xb22222ff,\n floralwhite: 0xfffaf0ff,\n forestgreen: 0x228b22ff,\n fuchsia: 0xff00ffff,\n gainsboro: 0xdcdcdcff,\n ghostwhite: 0xf8f8ffff,\n gold: 0xffd700ff,\n goldenrod: 0xdaa520ff,\n gray: 0x808080ff,\n green: 0x008000ff,\n greenyellow: 0xadff2fff,\n grey: 0x808080ff,\n honeydew: 0xf0fff0ff,\n hotpink: 0xff69b4ff,\n indianred: 0xcd5c5cff,\n indigo: 0x4b0082ff,\n ivory: 0xfffff0ff,\n khaki: 0xf0e68cff,\n lavender: 0xe6e6faff,\n lavenderblush: 0xfff0f5ff,\n lawngreen: 0x7cfc00ff,\n lemonchiffon: 0xfffacdff,\n lightblue: 0xadd8e6ff,\n lightcoral: 0xf08080ff,\n lightcyan: 0xe0ffffff,\n lightgoldenrodyellow: 0xfafad2ff,\n lightgray: 0xd3d3d3ff,\n lightgreen: 0x90ee90ff,\n lightgrey: 0xd3d3d3ff,\n lightpink: 0xffb6c1ff,\n lightsalmon: 0xffa07aff,\n lightseagreen: 0x20b2aaff,\n lightskyblue: 0x87cefaff,\n lightslategray: 0x778899ff,\n lightslategrey: 0x778899ff,\n lightsteelblue: 0xb0c4deff,\n lightyellow: 0xffffe0ff,\n lime: 0x00ff00ff,\n limegreen: 0x32cd32ff,\n linen: 0xfaf0e6ff,\n magenta: 0xff00ffff,\n maroon: 0x800000ff,\n mediumaquamarine: 0x66cdaaff,\n mediumblue: 0x0000cdff,\n mediumorchid: 0xba55d3ff,\n mediumpurple: 0x9370dbff,\n mediumseagreen: 0x3cb371ff,\n mediumslateblue: 0x7b68eeff,\n mediumspringgreen: 0x00fa9aff,\n mediumturquoise: 0x48d1ccff,\n mediumvioletred: 0xc71585ff,\n midnightblue: 0x191970ff,\n mintcream: 0xf5fffaff,\n mistyrose: 0xffe4e1ff,\n moccasin: 0xffe4b5ff,\n navajowhite: 0xffdeadff,\n navy: 0x000080ff,\n oldlace: 0xfdf5e6ff,\n olive: 0x808000ff,\n olivedrab: 0x6b8e23ff,\n orange: 0xffa500ff,\n orangered: 0xff4500ff,\n orchid: 0xda70d6ff,\n palegoldenrod: 0xeee8aaff,\n palegreen: 0x98fb98ff,\n paleturquoise: 0xafeeeeff,\n palevioletred: 0xdb7093ff,\n papayawhip: 0xffefd5ff,\n peachpuff: 0xffdab9ff,\n peru: 0xcd853fff,\n pink: 0xffc0cbff,\n plum: 0xdda0ddff,\n powderblue: 0xb0e0e6ff,\n purple: 0x800080ff,\n rebeccapurple: 0x663399ff,\n red: 0xff0000ff,\n rosybrown: 0xbc8f8fff,\n royalblue: 0x4169e1ff,\n saddlebrown: 0x8b4513ff,\n salmon: 0xfa8072ff,\n sandybrown: 0xf4a460ff,\n seagreen: 0x2e8b57ff,\n seashell: 0xfff5eeff,\n sienna: 0xa0522dff,\n silver: 0xc0c0c0ff,\n skyblue: 0x87ceebff,\n slateblue: 0x6a5acdff,\n slategray: 0x708090ff,\n slategrey: 0x708090ff,\n snow: 0xfffafaff,\n springgreen: 0x00ff7fff,\n steelblue: 0x4682b4ff,\n tan: 0xd2b48cff,\n teal: 0x008080ff,\n thistle: 0xd8bfd8ff,\n tomato: 0xff6347ff,\n turquoise: 0x40e0d0ff,\n violet: 0xee82eeff,\n wheat: 0xf5deb3ff,\n white: 0xffffffff,\n whitesmoke: 0xf5f5f5ff,\n yellow: 0xffff00ff,\n yellowgreen: 0x9acd32ff,\n});\n\nfunction normalizeColor(color: unknown): number | null {\n 'worklet';\n\n if (typeof color === 'number') {\n if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n return color;\n }\n return null;\n }\n\n if (typeof color !== 'string') {\n return null;\n }\n\n let match: RegExpExecArray | null | undefined;\n\n // Ordered based on occurrences on Facebook codebase\n if ((match = MATCHERS.hex6.exec(color))) {\n return Number.parseInt(match[1] + 'ff', 16) >>> 0;\n }\n\n if (names[color] !== undefined) {\n return names[color];\n }\n\n if ((match = MATCHERS.rgb.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = MATCHERS.rgba.exec(color))) {\n return (\n // b\n ((parse255(match[1]) << 24) | // r\n (parse255(match[2]) << 16) | // g\n (parse255(match[3]) << 8) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n if ((match = MATCHERS.hex3.exec(color))) {\n return (\n Number.parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n 'ff', // a\n 16\n ) >>> 0\n );\n }\n\n // https://drafts.csswg.org/css-color-4/#hex-notation\n if ((match = MATCHERS.hex8.exec(color))) {\n return Number.parseInt(match[1], 16) >>> 0;\n }\n\n if ((match = MATCHERS.hex4.exec(color))) {\n return (\n Number.parseInt(\n match[1] +\n match[1] + // r\n match[2] +\n match[2] + // g\n match[3] +\n match[3] + // b\n match[4] +\n match[4], // a\n 16\n ) >>> 0\n );\n }\n\n if ((match = MATCHERS.hsl.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]) // l\n ) |\n 0x000000ff) >>> // a\n 0\n );\n }\n\n if ((match = MATCHERS.hsla.exec(color))) {\n return (\n (hslToRgb(\n parse360(match[1]), // h\n parsePercentage(match[2]), // s\n parsePercentage(match[3]) // l\n ) |\n parse1(match[4])) >>> // a\n 0\n );\n }\n\n return null;\n}\n\nexport const opacity = (c: number): number => {\n 'worklet';\n return ((c >> 24) & 255) / 255;\n};\n\nexport const red = (c: number): number => {\n 'worklet';\n return (c >> 16) & 255;\n};\n\nexport const green = (c: number): number => {\n 'worklet';\n return (c >> 8) & 255;\n};\n\nexport const blue = (c: number): number => {\n 'worklet';\n return c & 255;\n};\n\nconst IS_WEB = isWeb();\nconst IS_ANDROID = isAndroid();\n\nexport const rgbaColor = (\n r: number,\n g: number,\n b: number,\n alpha = 1\n): number | string => {\n 'worklet';\n if (IS_WEB || !_WORKLET) {\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n\n const c =\n Math.round(alpha * 255) * (1 << 24) +\n Math.round(r) * (1 << 16) +\n Math.round(g) * (1 << 8) +\n Math.round(b);\n if (IS_ANDROID) {\n // on Android color is represented as signed 32 bit int\n return c < (1 << 31) >>> 0 ? c : c - 4294967296; // 4294967296 == Math.pow(2, 32);\n }\n return c;\n};\n\n/* accepts parameters\n * r Object = {r:x, g:y, b:z}\n * OR\n * r, g, b\n * 0 <= r, g, b <= 255\n * returns 0 <= h, s, v <= 1\n */\nexport function RGBtoHSV(rgb: RGB): HSV;\nexport function RGBtoHSV(r: number, g: number, b: number): HSV;\nexport function RGBtoHSV(r: any, g?: any, b?: any): HSV {\n 'worklet';\n /* eslint-disable */\n if (arguments.length === 1) {\n g = r.g;\n b = r.b;\n r = r.r;\n }\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n const v = max / 255;\n\n let h;\n\n switch (max) {\n default:\n /* fallthrough */\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n\n return {\n h: h,\n s: s,\n v: v,\n };\n /* eslint-enable */\n}\n\n/* accepts parameters\n * h Object = {h:x, s:y, v:z}\n * OR\n * h, s, v\n * 0 <= h, s, v <= 1\n * returns 0 <= r, g, b <= 255\n */\nfunction HSVtoRGB(hsv: HSV): RGB;\nfunction HSVtoRGB(h: number, s: number, v: number): RGB;\nfunction HSVtoRGB(h: any, s?: any, v?: any) {\n 'worklet';\n /* eslint-disable */\n var r, g, b, i, f, p, q, t;\n if (arguments.length === 1) {\n s = h.s;\n v = h.v;\n h = h.h;\n }\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n (r = v), (g = t), (b = p);\n break;\n case 1:\n (r = q), (g = v), (b = p);\n break;\n case 2:\n (r = p), (g = v), (b = t);\n break;\n case 3:\n (r = p), (g = q), (b = v);\n break;\n case 4:\n (r = t), (g = p), (b = v);\n break;\n case 5:\n (r = v), (g = p), (b = q);\n break;\n }\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255),\n };\n /* eslint-enable */\n}\n\nexport const hsvToColor = (\n h: number,\n s: number,\n v: number,\n a: number\n): number | string => {\n 'worklet';\n const { r, g, b } = HSVtoRGB(h, s, v);\n return rgbaColor(r, g, b, a);\n};\n\nexport function processColorInitially(\n color: unknown\n): number | null | undefined {\n 'worklet';\n if (color === null || color === undefined || typeof color === 'number') {\n return color;\n }\n\n let normalizedColor = normalizeColor(color);\n\n if (normalizedColor === null || normalizedColor === undefined) {\n return undefined;\n }\n\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n\n normalizedColor = ((normalizedColor << 24) | (normalizedColor >>> 8)) >>> 0; // argb\n return normalizedColor;\n}\n\nexport function isColor(value: unknown): boolean {\n 'worklet';\n if (typeof value !== 'string') {\n return false;\n }\n return processColorInitially(value) != null;\n}\n\nexport function processColor(color: unknown): number | null | undefined {\n 'worklet';\n let normalizedColor = processColorInitially(color);\n if (normalizedColor === null || normalizedColor === undefined) {\n return undefined;\n }\n\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n\n if (IS_ANDROID) {\n // Android use 32 bit *signed* integer to represent the color\n // We utilize the fact that bitwise operations in JS also operates on\n // signed 32 bit integers, so that we can use those to convert from\n // *unsigned* to *signed* 32bit int that way.\n normalizedColor = normalizedColor | 0x0;\n }\n\n return normalizedColor;\n}\n\nexport type ParsedColorArray = [number, number, number, number];\n\nexport function convertToRGBA(color: unknown): ParsedColorArray {\n 'worklet';\n const processedColor = processColorInitially(color)!; // argb;\n const a = (processedColor >>> 24) / 255;\n const r = ((processedColor << 8) >>> 24) / 255;\n const g = ((processedColor << 16) >>> 24) / 255;\n const b = ((processedColor << 24) >>> 24) / 255;\n return [r, g, b, a];\n}\n\nexport function rgbaArrayToRGBAColor(RGBA: ParsedColorArray): string {\n 'worklet';\n return `rgba(${Math.round(RGBA[0] * 255)}, ${Math.round(\n RGBA[1] * 255\n )}, ${Math.round(RGBA[2] * 255)}, ${RGBA[3]})`;\n}\n\nexport function toLinearSpace(\n RGBA: ParsedColorArray,\n gamma = 2.2\n): ParsedColorArray {\n 'worklet';\n const res = [];\n for (let i = 0; i < 3; ++i) {\n res.push(Math.pow(RGBA[i], gamma));\n }\n res.push(RGBA[3]);\n return res as ParsedColorArray;\n}\n\nexport function toGammaSpace(\n RGBA: ParsedColorArray,\n gamma = 2.2\n): ParsedColorArray {\n 'worklet';\n const res = [];\n for (let i = 0; i < 3; ++i) {\n res.push(Math.pow(RGBA[i], 1 / gamma));\n }\n res.push(RGBA[3]);\n return res as ParsedColorArray;\n}\n","import { Bezier } from './Bezier';\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\n\nexport type EasingFunction = (t: number) => number;\n\n/**\n * @deprecated Please use `EasingFunction` type instead.\n */\nexport type EasingFn = EasingFunction;\n\nexport type EasingFunctionFactory = { factory: () => EasingFunction };\n\n/**\n * @deprecated Please use `EasingFunctionFactory` type instead.\n */\nexport type EasingFactoryFn = EasingFunctionFactory;\n/**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\nfunction linear(t: number): number {\n 'worklet';\n return t;\n}\n\n/**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\nfunction ease(t: number): number {\n 'worklet';\n return Bezier(0.42, 0, 1, 1)(t);\n}\n\n/**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\nfunction quad(t: number): number {\n 'worklet';\n return t * t;\n}\n\n/**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\nfunction cubic(t: number): number {\n 'worklet';\n return t * t * t;\n}\n\n/**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\nfunction poly(n: number): EasingFunction {\n 'worklet';\n return (t) => {\n 'worklet';\n return Math.pow(t, n);\n };\n}\n\n/**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\nfunction sin(t: number): number {\n 'worklet';\n return 1 - Math.cos((t * Math.PI) / 2);\n}\n\n/**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\nfunction circle(t: number): number {\n 'worklet';\n return 1 - Math.sqrt(1 - t * t);\n}\n\n/**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\nfunction exp(t: number): number {\n 'worklet';\n return Math.pow(2, 10 * (t - 1));\n}\n\n/**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\nfunction elastic(bounciness = 1): EasingFunction {\n 'worklet';\n const p = bounciness * Math.PI;\n return (t) => {\n 'worklet';\n return 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);\n };\n}\n\n/**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\nfunction back(s = 1.70158): (t: number) => number {\n 'worklet';\n return (t) => {\n 'worklet';\n return t * t * ((s + 1) * t - s);\n };\n}\n\n/**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\nfunction bounce(t: number): number {\n 'worklet';\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n const t2 = t - 1.5 / 2.75;\n return 7.5625 * t2 * t2 + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n const t2 = t - 2.25 / 2.75;\n return 7.5625 * t2 * t2 + 0.9375;\n }\n\n const t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n}\n\n/**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\nfunction bezier(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): { factory: () => (x: number) => number } {\n 'worklet';\n return {\n factory: () => {\n 'worklet';\n return Bezier(x1, y1, x2, y2);\n },\n };\n}\n\nfunction bezierFn(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): (x: number) => number {\n 'worklet';\n return Bezier(x1, y1, x2, y2);\n}\n\n/**\n * Runs an easing function forwards.\n */\nfunction in_(easing: EasingFunction): EasingFunction {\n 'worklet';\n return easing;\n}\n\n/**\n * Runs an easing function backwards.\n */\nfunction out(easing: EasingFunction): EasingFunction {\n 'worklet';\n return (t) => {\n 'worklet';\n return 1 - easing(1 - t);\n };\n}\n\n/**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\nfunction inOut(easing: EasingFunction): EasingFunction {\n 'worklet';\n return (t) => {\n 'worklet';\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n}\n\n/**\n * The `steps` easing function jumps between discrete values at regular intervals,\n * creating a stepped animation effect. The `n` parameter determines the number of\n * steps in the animation, and the `roundToNextStep` parameter determines whether the animation\n * should start at the beginning or end of each step.\n */\nfunction steps(n = 10, roundToNextStep = true): EasingFunction {\n 'worklet';\n return (t) => {\n 'worklet';\n const value = Math.min(Math.max(t, 0), 1) * n;\n if (roundToNextStep) {\n return Math.ceil(value) / n;\n }\n return Math.floor(value) / n;\n };\n}\n\nconst EasingObject = {\n linear,\n ease,\n quad,\n cubic,\n poly,\n sin,\n circle,\n exp,\n elastic,\n back,\n bounce,\n bezier,\n bezierFn,\n steps,\n in: in_,\n out,\n inOut,\n};\n\nexport const Easing = EasingObject;\n","import type { MeasuredDimensions, ShadowNodeWrapper } from './commonTypes';\nimport {\n isChromeDebugger,\n isJest,\n isWeb,\n shouldBeUseWeb,\n} from './PlatformChecker';\n\nimport type { AnimatedRef } from './hook/commonTypes';\nimport type { Component } from 'react';\n\nconst IS_NATIVE = !shouldBeUseWeb();\n\nexport let measure: (\n animatedRef: AnimatedRef\n) => MeasuredDimensions | null;\n\nif (isWeb()) {\n measure = (animatedRef) => {\n const element = (animatedRef as any)() as HTMLElement; // TODO: fix typing of animated refs on web\n const viewportOffset = element.getBoundingClientRect();\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n x: element.offsetLeft,\n y: element.offsetTop,\n pageX: viewportOffset.left,\n pageY: viewportOffset.top,\n };\n };\n} else if (isChromeDebugger()) {\n measure = () => {\n console.warn('[Reanimated] measure() cannot be used with Chrome Debugger.');\n return null;\n };\n} else if (isJest()) {\n measure = () => {\n console.warn('[Reanimated] measure() cannot be used with Jest.');\n return null;\n };\n} else if (IS_NATIVE) {\n measure = (animatedRef) => {\n 'worklet';\n if (!_WORKLET) {\n return null;\n }\n\n const viewTag = (animatedRef as any)();\n if (viewTag === -1) {\n console.warn(\n `[Reanimated] The view with tag ${viewTag} is not a valid argument for measure(). This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`\n );\n return null;\n }\n\n const measured = _IS_FABRIC\n ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _measureFabric!(viewTag as ShadowNodeWrapper)\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _measurePaper!(viewTag as number);\n if (measured === null) {\n console.warn(\n `[Reanimated] The view with tag ${viewTag} has some undefined, not-yet-computed or meaningless value of \\`LayoutMetrics\\` type. This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`\n );\n return null;\n } else if (measured.x === -1234567) {\n console.warn(\n `[Reanimated] The view with tag ${viewTag} returned an invalid measurement response.`\n );\n return null;\n } else if (isNaN(measured.x)) {\n console.warn(\n `[Reanimated] The view with tag ${viewTag} gets view-flattened on Android. To disable view-flattening, set \\`collapsable={false}\\` on this component.`\n );\n return null;\n } else {\n return measured;\n }\n };\n} else {\n measure = () => {\n console.warn(\n '[Reanimated] measure() is not supported on this configuration.'\n );\n return null;\n };\n}\n\nexport let dispatchCommand: (\n animatedRef: AnimatedRef,\n commandName: string,\n args?: Array\n) => void;\n\nif (IS_NATIVE && global._IS_FABRIC) {\n dispatchCommand = (animatedRef, commandName, args = []) => {\n 'worklet';\n if (!_WORKLET) {\n return;\n }\n\n const shadowNodeWrapper = animatedRef() as ShadowNodeWrapper;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _dispatchCommandFabric!(shadowNodeWrapper, commandName, args);\n };\n} else if (IS_NATIVE) {\n dispatchCommand = (animatedRef, commandName, args = []) => {\n 'worklet';\n if (!_WORKLET) {\n return;\n }\n\n const viewTag = animatedRef() as number;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _dispatchCommandPaper!(viewTag, commandName, args);\n };\n} else if (isWeb()) {\n dispatchCommand = () => {\n console.warn('[Reanimated] dispatchCommand() is not supported on web.');\n };\n} else if (isChromeDebugger()) {\n dispatchCommand = () => {\n console.warn(\n '[Reanimated] dispatchCommand() is not supported with Chrome Debugger.'\n );\n };\n} else if (isJest()) {\n dispatchCommand = () => {\n console.warn('[Reanimated] dispatchCommand() is not supported with Jest.');\n };\n} else {\n dispatchCommand = () => {\n console.warn(\n '[Reanimated] dispatchCommand() is not supported on this configuration.'\n );\n };\n}\n\nexport let scrollTo: (\n animatedRef: AnimatedRef,\n x: number,\n y: number,\n animated: boolean\n) => void;\n\nif (isWeb()) {\n scrollTo = (animatedRef, x, y, animated) => {\n 'worklet';\n const element = (animatedRef as any)() as HTMLElement; // TODO: fix typing of animated refs on web\n // @ts-ignore same call as in react-native-web\n element.scrollTo({ x, y, animated });\n };\n} else if (IS_NATIVE && global._IS_FABRIC) {\n scrollTo = (animatedRef, x, y, animated) => {\n 'worklet';\n dispatchCommand(animatedRef as any, 'scrollTo', [x, y, animated]);\n };\n} else if (IS_NATIVE) {\n scrollTo = (animatedRef, x, y, animated) => {\n 'worklet';\n if (!_WORKLET) {\n return;\n }\n\n // Calling animatedRef on Paper returns a number (nativeTag)\n const viewTag = (animatedRef as any)() as number;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _scrollToPaper!(viewTag, x, y, animated);\n };\n} else if (isChromeDebugger()) {\n scrollTo = () => {\n console.warn(\n '[Reanimated] scrollTo() is not supported with Chrome Debugger.'\n );\n };\n} else if (isJest()) {\n scrollTo = () => {\n console.warn('[Reanimated] scrollTo() is not supported with Jest.');\n };\n} else {\n scrollTo = () => {\n console.warn(\n '[Reanimated] scrollTo() is not supported on this configuration.'\n );\n };\n}\n\nexport let setGestureState: (handlerTag: number, newState: number) => void;\n\nif (IS_NATIVE) {\n setGestureState = (handlerTag, newState) => {\n 'worklet';\n if (!_WORKLET) {\n console.warn(\n '[Reanimated] You can not use setGestureState in non-worklet function.'\n );\n return;\n }\n _setGestureState(handlerTag, newState);\n };\n} else if (isWeb()) {\n setGestureState = () => {\n console.warn('[Reanimated] setGestureState() is not available on web.');\n };\n} else if (isChromeDebugger()) {\n setGestureState = () => {\n console.warn(\n '[Reanimated] setGestureState() cannot be used with Chrome Debugger.'\n );\n };\n} else if (isJest()) {\n setGestureState = () => {\n console.warn('[Reanimated] setGestureState() cannot be used with Jest.');\n };\n} else {\n setGestureState = () => {\n console.warn(\n '[Reanimated] setGestureState() is not supported on this configuration.'\n );\n };\n}\n","import { NativeModules } from 'react-native';\nimport type {\n ShareableRef,\n ShareableSyncDataHolderRef,\n Value3D,\n ValueRotation,\n} from '../commonTypes';\nimport type {\n LayoutAnimationFunction,\n LayoutAnimationType,\n} from '../layoutReanimation';\nimport { checkCppVersion } from '../platform-specific/checkCppVersion';\n\n// this is the type of `__reanimatedModuleProxy` which is injected using JSI\nexport interface NativeReanimatedModule {\n installCoreFunctions(\n callGuard: , U>(\n fn: (...args: T) => U,\n ...args: T\n ) => void,\n valueUnpacker: (value: T) => T\n ): void;\n makeShareableClone(\n value: T,\n shouldPersistRemote: boolean\n ): ShareableRef;\n makeSynchronizedDataHolder(\n valueRef: ShareableRef\n ): ShareableSyncDataHolderRef;\n getDataSynchronously(ref: ShareableSyncDataHolderRef): T;\n scheduleOnUI(shareable: ShareableRef): void;\n registerEventHandler(\n eventHash: string,\n eventHandler: ShareableRef\n ): number;\n unregisterEventHandler(id: number): void;\n getViewProp(\n viewTag: string,\n propName: string,\n callback?: (result: T) => void\n ): Promise;\n enableLayoutAnimations(flag: boolean): void;\n registerSensor(\n sensorType: number,\n interval: number,\n iosReferenceFrame: number,\n handler: ShareableRef<(data: Value3D | ValueRotation) => void>\n ): number;\n unregisterSensor(sensorId: number): void;\n configureProps(uiProps: string[], nativeProps: string[]): void;\n subscribeForKeyboardEvents(\n handler: ShareableRef,\n isStatusBarTranslucent: boolean\n ): number;\n unsubscribeFromKeyboardEvents(listenerId: number): void;\n configureLayoutAnimation(\n viewTag: number,\n type: LayoutAnimationType,\n sharedTransitionTag: string,\n config: ShareableRef\n ): void;\n}\n\nexport class NativeReanimated {\n native = true;\n private InnerNativeModule: NativeReanimatedModule;\n\n constructor() {\n if (global.__reanimatedModuleProxy === undefined) {\n const { ReanimatedModule } = NativeModules;\n ReanimatedModule?.installTurboModule();\n }\n if (global.__reanimatedModuleProxy === undefined) {\n throw new Error(\n `[Reanimated] The native part of Reanimated doesn't seem to be initialized. This could be caused by\\n\\\n- not rebuilding the app after installing or upgrading Reanimated\\n\\\n- trying to run Reanimated on an unsupported platform\\n\\\n- running in a brownfield app without manually initializing the native library`\n );\n }\n checkCppVersion();\n this.InnerNativeModule = global.__reanimatedModuleProxy;\n }\n\n installCoreFunctions(\n callGuard: , U>(\n fn: (...args: T) => U,\n ...args: T\n ) => void,\n valueUnpacker: (value: T) => T\n ) {\n return this.InnerNativeModule.installCoreFunctions(\n callGuard,\n valueUnpacker\n );\n }\n\n makeShareableClone(value: T, shouldPersistRemote: boolean) {\n return this.InnerNativeModule.makeShareableClone(\n value,\n shouldPersistRemote\n );\n }\n\n makeSynchronizedDataHolder(valueRef: ShareableRef) {\n return this.InnerNativeModule.makeSynchronizedDataHolder(valueRef);\n }\n\n getDataSynchronously(ref: ShareableSyncDataHolderRef) {\n return this.InnerNativeModule.getDataSynchronously(ref);\n }\n\n scheduleOnUI(shareable: ShareableRef) {\n return this.InnerNativeModule.scheduleOnUI(shareable);\n }\n\n registerSensor(\n sensorType: number,\n interval: number,\n iosReferenceFrame: number,\n handler: ShareableRef<(data: Value3D | ValueRotation) => void>\n ) {\n return this.InnerNativeModule.registerSensor(\n sensorType,\n interval,\n iosReferenceFrame,\n handler\n );\n }\n\n unregisterSensor(sensorId: number) {\n return this.InnerNativeModule.unregisterSensor(sensorId);\n }\n\n registerEventHandler(eventHash: string, eventHandler: ShareableRef) {\n return this.InnerNativeModule.registerEventHandler(eventHash, eventHandler);\n }\n\n unregisterEventHandler(id: number) {\n return this.InnerNativeModule.unregisterEventHandler(id);\n }\n\n getViewProp(\n viewTag: string,\n propName: string,\n callback?: (result: T) => void\n ) {\n return this.InnerNativeModule.getViewProp(viewTag, propName, callback);\n }\n\n configureLayoutAnimation(\n viewTag: number,\n type: LayoutAnimationType,\n sharedTransitionTag: string,\n config: ShareableRef\n ) {\n this.InnerNativeModule.configureLayoutAnimation(\n viewTag,\n type,\n sharedTransitionTag,\n config\n );\n }\n\n enableLayoutAnimations(flag: boolean) {\n this.InnerNativeModule.enableLayoutAnimations(flag);\n }\n\n configureProps(uiProps: string[], nativeProps: string[]) {\n this.InnerNativeModule.configureProps(uiProps, nativeProps);\n }\n\n subscribeForKeyboardEvents(\n handler: ShareableRef,\n isStatusBarTranslucent: boolean\n ) {\n return this.InnerNativeModule.subscribeForKeyboardEvents(\n handler,\n isStatusBarTranslucent\n );\n }\n\n unsubscribeFromKeyboardEvents(listenerId: number) {\n this.InnerNativeModule.unsubscribeFromKeyboardEvents(listenerId);\n }\n}\n","import reanimatedJS from '../js-reanimated';\nimport { shouldBeUseWeb } from '../PlatformChecker';\nimport { NativeReanimated } from './NativeReanimated';\n\nexport default shouldBeUseWeb() ? reanimatedJS : new NativeReanimated();\n","import { Platform } from 'react-native';\n\nexport function isJest(): boolean {\n return !!process.env.JEST_WORKER_ID;\n}\n\nexport function isChromeDebugger(): boolean {\n return !(global as any).nativeCallSyncHook || (global as any).__REMOTEDEV__;\n}\n\nexport function isWeb(): boolean {\n return Platform.OS === 'web';\n}\n\nexport function isAndroid(): boolean {\n return Platform.OS === 'android';\n}\n\nexport function shouldBeUseWeb() {\n return isJest() || isChromeDebugger() || isWeb();\n}\n\nexport function nativeShouldBeMock() {\n return isJest() || isChromeDebugger();\n}\n","import { addWhitelistedNativeProps } from '../ConfigHelper';\nimport type { AdapterWorkletFunction } from './commonTypes';\nimport type { AnimatedPropsAdapterFunction } from './helperTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\nexport type createAnimatedPropAdapterType = (\n adapter: AnimatedPropsAdapterFunction,\n nativeProps?: string[]\n) => AnimatedPropsAdapterFunction;\n\nexport const createAnimatedPropAdapter = ((\n adapter: AdapterWorkletFunction,\n nativeProps?: string[]\n): AdapterWorkletFunction => {\n const nativePropsToAdd: { [key: string]: boolean } = {};\n // eslint-disable-next-line no-unused-expressions\n nativeProps?.forEach((prop) => {\n nativePropsToAdd[prop] = true;\n });\n addWhitelistedNativeProps(nativePropsToAdd);\n return adapter;\n}) as createAnimatedPropAdapterType;\n\n// ADAPTERS\n\nexport const SVGAdapter: AdapterWorkletFunction = createAnimatedPropAdapter(\n (props) => {\n 'worklet';\n const keys = Object.keys(props);\n // transform\n if (keys.includes('transform')) {\n if (Array.isArray(props.transform)) {\n // case of array with 6 values => https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/elements/Shape.tsx#L200\n if (props.transform.length !== 6) {\n throw new Error(\n `invalid transform length of ${props.transform.length}, should be 6`\n );\n }\n const transform: number[] = props.transform as number[];\n const x: number = (props.x as number) ?? 0;\n const y: number = (props.y as number) ?? 0;\n props.transform = [\n { translateX: transform[0] * x + transform[2] * y + transform[4] },\n { translateY: transform[1] * x + transform[3] * y + transform[5] },\n ];\n } else if (typeof props.transform === 'string') {\n // case of string 'translate(translateX translateY)'\n // todo: handle other cases of transform string like here https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/lib/extract/extractTransform.ts#L184\n const transform: string = props.transform as string;\n const arr = transform\n .replace('translate(', '')\n .replace(')', '')\n .split(' ');\n props.transform = [\n { translateX: parseFloat(arr[0]) },\n { translateY: parseFloat(arr[1]) },\n ];\n }\n }\n // todo: other props\n }\n);\n\nexport const TextInputAdapter = createAnimatedPropAdapter(\n (props) => {\n 'worklet';\n const keys = Object.keys(props);\n // convert text to value like RN does here: https://github.com/facebook/react-native/blob/f2c6279ca497b34d5a2bfbb6f2d33dc7a7bea02a/Libraries/Components/TextInput/TextInput.js#L878\n if (keys.includes('value')) {\n props.text = props.value;\n delete props.value;\n }\n },\n ['text']\n);\n","import { runOnUI } from './threads';\n\nlet viewTags: number[] = [];\n\nexport function removeFromPropsRegistry(viewTag: number) {\n viewTags.push(viewTag);\n if (viewTags.length === 1) {\n queueMicrotask(flush);\n }\n}\n\nfunction flush() {\n if (__DEV__ && !global._IS_FABRIC) {\n throw new Error('PropsRegistry is only available on Fabric');\n }\n runOnUI(removeFromPropsRegistryOnUI)(viewTags);\n viewTags = [];\n}\n\nfunction removeFromPropsRegistryOnUI(viewTags: number[]) {\n 'worklet';\n _removeFromPropsRegistry(viewTags);\n}\n","import NativeReanimatedModule from './NativeReanimated';\nimport type {\n SensorConfig,\n SharedValue,\n Value3D,\n ValueRotation,\n ShareableRef,\n} from './commonTypes';\nimport { SensorType } from './commonTypes';\nimport { makeMutable } from './mutables';\n\nfunction initSensorData(\n sensorType: SensorType\n): SharedValue {\n if (sensorType === SensorType.ROTATION) {\n return makeMutable({\n qw: 0,\n qx: 0,\n qy: 0,\n qz: 0,\n yaw: 0,\n pitch: 0,\n roll: 0,\n interfaceOrientation: 0,\n });\n } else {\n return makeMutable({\n x: 0,\n y: 0,\n z: 0,\n interfaceOrientation: 0,\n });\n }\n}\n\nexport default class Sensor {\n public listenersNumber = 0;\n private sensorId: number | null = null;\n private sensorType: SensorType;\n private data: SharedValue;\n private config: SensorConfig;\n\n constructor(sensorType: SensorType, config: SensorConfig) {\n this.sensorType = sensorType;\n this.config = config;\n this.data = initSensorData(sensorType);\n }\n\n register(\n eventHandler: ShareableRef<(data: Value3D | ValueRotation) => void>\n ) {\n const config = this.config;\n const sensorType = this.sensorType;\n this.sensorId = NativeReanimatedModule.registerSensor(\n sensorType,\n config.interval === 'auto' ? -1 : config.interval,\n config.iosReferenceFrame,\n eventHandler\n );\n return this.sensorId !== -1;\n }\n\n isRunning() {\n return this.sensorId !== -1 && this.sensorId !== null;\n }\n\n isAvailable() {\n return this.sensorId !== -1;\n }\n\n getSharedValue() {\n return this.data;\n }\n\n unregister() {\n if (this.sensorId !== null && this.sensorId !== -1) {\n NativeReanimatedModule.unregisterSensor(this.sensorId);\n }\n this.sensorId = null;\n }\n}\n","import type {\n SensorType,\n SensorConfig,\n Value3D,\n ValueRotation,\n ShareableRef,\n SharedValue,\n} from './commonTypes';\nimport Sensor from './Sensor';\n\nexport class SensorContainer {\n private nativeSensors: Map = new Map();\n\n getSensorId(sensorType: SensorType, config: SensorConfig) {\n return (\n sensorType * 100 +\n config.iosReferenceFrame * 10 +\n Number(config.adjustToInterfaceOrientation)\n );\n }\n\n initializeSensor(\n sensorType: SensorType,\n config: SensorConfig\n ): SharedValue {\n const sensorId = this.getSensorId(sensorType, config);\n\n if (!this.nativeSensors.has(sensorId)) {\n const newSensor = new Sensor(sensorType, config);\n this.nativeSensors.set(sensorId, newSensor);\n }\n\n const sensor = this.nativeSensors.get(sensorId);\n return sensor!.getSharedValue();\n }\n\n registerSensor(\n sensorType: SensorType,\n config: SensorConfig,\n handler: ShareableRef<(data: Value3D | ValueRotation) => void>\n ): number {\n const sensorId = this.getSensorId(sensorType, config);\n\n if (!this.nativeSensors.has(sensorId)) {\n return -1;\n }\n\n const sensor = this.nativeSensors.get(sensorId);\n if (\n sensor &&\n sensor.isAvailable() &&\n (sensor.isRunning() || sensor.register(handler))\n ) {\n sensor.listenersNumber++;\n return sensorId;\n }\n return -1;\n }\n\n unregisterSensor(sensorId: number) {\n if (this.nativeSensors.has(sensorId)) {\n const sensor = this.nativeSensors.get(sensorId);\n if (sensor && sensor.isRunning()) {\n sensor.listenersNumber--;\n if (sensor.listenersNumber === 0) {\n sensor.unregister();\n }\n }\n }\n }\n}\n","import type { MutableRefObject } from 'react';\nimport { processColor } from './Colors';\nimport type { ShadowNodeWrapper, SharedValue, StyleProps } from './commonTypes';\nimport type { AnimatedStyle } from './helperTypes';\nimport { makeShareable } from './core';\nimport type { Descriptor } from './hook/commonTypes';\nimport { _updatePropsJS } from './js-reanimated';\nimport { shouldBeUseWeb } from './PlatformChecker';\nimport type { ViewRefSet } from './ViewDescriptorsSet';\nimport { runOnUIImmediately } from './threads';\n\n// copied from react-native/Libraries/Components/View/ReactNativeStyleAttributes\nconst colorProps = [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderTopColor',\n 'borderStartColor',\n 'borderEndColor',\n 'color',\n 'shadowColor',\n 'textDecorationColor',\n 'tintColor',\n 'textShadowColor',\n 'overlayColor',\n];\n\nexport const ColorProperties = makeShareable(colorProps);\n\nlet updateProps: (\n viewDescriptor: SharedValue,\n updates: StyleProps | AnimatedStyle,\n maybeViewRef: ViewRefSet | undefined\n) => void;\n\nif (shouldBeUseWeb()) {\n updateProps = (_, updates, maybeViewRef) => {\n 'worklet';\n if (maybeViewRef) {\n maybeViewRef.items.forEach((item, _) => {\n _updatePropsJS(updates, item);\n });\n }\n };\n} else {\n updateProps = (viewDescriptors, updates) => {\n 'worklet';\n for (const key in updates) {\n if (ColorProperties.indexOf(key) !== -1) {\n updates[key] = processColor(updates[key]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n global.UpdatePropsManager!.update(viewDescriptors, updates);\n };\n}\n\nexport const updatePropsJestWrapper = (\n viewDescriptors: SharedValue,\n updates: AnimatedStyle,\n maybeViewRef: ViewRefSet | undefined,\n animatedStyle: MutableRefObject>,\n adapters: ((updates: AnimatedStyle) => void)[]\n): void => {\n adapters.forEach((adapter) => {\n adapter(updates);\n });\n animatedStyle.current.value = {\n ...animatedStyle.current.value,\n ...updates,\n };\n\n updateProps(viewDescriptors, updates, maybeViewRef);\n};\n\nexport default updateProps;\n\nconst createUpdatePropsManager = global._IS_FABRIC\n ? () => {\n 'worklet';\n // Fabric\n const operations: {\n shadowNodeWrapper: ShadowNodeWrapper;\n updates: StyleProps | AnimatedStyle;\n }[] = [];\n return {\n update(\n viewDescriptors: SharedValue,\n updates: StyleProps | AnimatedStyle\n ) {\n viewDescriptors.value.forEach((viewDescriptor) => {\n operations.push({\n shadowNodeWrapper: viewDescriptor.shadowNodeWrapper,\n updates,\n });\n if (operations.length === 1) {\n queueMicrotask(this.flush);\n }\n });\n },\n flush() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _updatePropsFabric!(operations);\n operations.length = 0;\n },\n };\n }\n : () => {\n 'worklet';\n // Paper\n const operations: {\n tag: number;\n name: string;\n updates: StyleProps | AnimatedStyle;\n }[] = [];\n return {\n update(\n viewDescriptors: SharedValue,\n updates: StyleProps | AnimatedStyle\n ) {\n viewDescriptors.value.forEach((viewDescriptor) => {\n operations.push({\n tag: viewDescriptor.tag,\n name: viewDescriptor.name || 'RCTView',\n updates,\n });\n if (operations.length === 1) {\n queueMicrotask(this.flush);\n }\n });\n },\n flush() {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n _updatePropsPaper!(operations);\n operations.length = 0;\n },\n };\n };\n\nrunOnUIImmediately(() => {\n 'worklet';\n global.UpdatePropsManager = createUpdatePropsManager();\n})();\n\nexport interface UpdatePropsManager {\n update(\n viewDescriptors: SharedValue,\n updates: StyleProps | AnimatedStyle\n ): void;\n flush(): void;\n}\n","import { useRef } from 'react';\nimport { makeMutable } from './core';\nimport type { SharedValue } from './commonTypes';\nimport type { Descriptor } from './hook/commonTypes';\n\nexport interface ViewRefSet {\n items: Set;\n add: (item: T) => void;\n remove: (item: T) => void;\n}\n\nexport interface ViewDescriptorsSet {\n sharableViewDescriptors: SharedValue;\n add: (item: Descriptor) => void;\n remove: (viewTag: number) => void;\n}\n\nexport function makeViewDescriptorsSet(): ViewDescriptorsSet {\n const sharableViewDescriptors = makeMutable([]);\n const data: ViewDescriptorsSet = {\n sharableViewDescriptors,\n add: (item: Descriptor) => {\n sharableViewDescriptors.modify((descriptors: Descriptor[]) => {\n 'worklet';\n const index = descriptors.findIndex(\n (descriptor) => descriptor.tag === item.tag\n );\n if (index !== -1) {\n descriptors[index] = item;\n } else {\n descriptors.push(item);\n }\n return descriptors;\n });\n },\n\n remove: (viewTag: number) => {\n sharableViewDescriptors.modify((descriptors: Descriptor[]) => {\n 'worklet';\n const index = descriptors.findIndex(\n (descriptor) => descriptor.tag === viewTag\n );\n if (index !== -1) {\n descriptors.splice(index, 1);\n }\n return descriptors;\n });\n },\n };\n return data;\n}\n\nexport function makeViewsRefSet(): ViewRefSet {\n const ref = useRef | null>(null);\n if (ref.current === null) {\n const data: ViewRefSet = {\n items: new Set(),\n\n add: (item: T) => {\n if (data.items.has(item)) return;\n data.items.add(item);\n },\n\n remove: (item: T) => {\n data.items.delete(item);\n },\n };\n ref.current = data;\n }\n\n return ref.current;\n}\n","import type { NativeEvent } from './commonTypes';\nimport NativeReanimatedModule from './NativeReanimated';\nimport { registerEventHandler, unregisterEventHandler } from './core';\n\nfunction jsListener>(\n eventName: string,\n handler: (event: T) => void\n) {\n return (evt: T) => {\n handler({ ...evt.nativeEvent, eventName });\n };\n}\n\nexport default class WorkletEventHandler> {\n worklet: (event: T) => void;\n eventNames: string[];\n reattachNeeded: boolean;\n listeners: Record void>;\n viewTag: number | undefined;\n registrations: number[];\n constructor(worklet: (event: T) => void, eventNames: string[] = []) {\n this.worklet = worklet;\n this.eventNames = eventNames;\n this.reattachNeeded = false;\n this.listeners = {};\n this.viewTag = undefined;\n this.registrations = [];\n\n if (!NativeReanimatedModule.native) {\n this.listeners = eventNames.reduce(\n (acc: Record void>, eventName: string) => {\n acc[eventName] = jsListener(eventName, worklet);\n return acc;\n },\n {}\n );\n }\n }\n\n updateWorklet(newWorklet: (event: T) => void): void {\n this.worklet = newWorklet;\n this.reattachNeeded = true;\n }\n\n registerForEvents(viewTag: number, fallbackEventName?: string): void {\n this.viewTag = viewTag;\n this.registrations = this.eventNames.map((eventName) =>\n registerEventHandler(viewTag + eventName, this.worklet)\n );\n if (this.registrations.length === 0 && fallbackEventName) {\n this.registrations.push(\n registerEventHandler(viewTag + fallbackEventName, this.worklet)\n );\n }\n }\n\n registerForEventByName(eventName: string) {\n this.registrations.push(registerEventHandler(eventName, this.worklet));\n }\n\n unregisterFromEvents(): void {\n this.registrations.forEach((id) => unregisterEventHandler(id));\n this.registrations = [];\n }\n}\n","import { defineAnimation } from './util';\nimport type {\n Animation,\n AnimationCallback,\n AnimationObject,\n AnimatableValue,\n Timestamp,\n} from '../commonTypes';\nimport { isWeb } from '../PlatformChecker';\n\ninterface DecayConfig {\n deceleration?: number;\n velocityFactor?: number;\n clamp?: number[];\n velocity?: number;\n}\n\nexport type WithDecayConfig = DecayConfig;\n\ninterface DefaultDecayConfig {\n deceleration: number;\n velocityFactor: number;\n clamp?: number[];\n velocity: number;\n rubberBandEffect?: boolean;\n rubberBandFactor: number;\n}\n\nexport interface DecayAnimation extends Animation {\n lastTimestamp: Timestamp;\n startTimestamp: Timestamp;\n initialVelocity: number;\n velocity: number;\n current: AnimatableValue;\n}\n\ninterface InnerDecayAnimation\n extends Omit,\n AnimationObject {\n current: number;\n}\n\nconst IS_WEB = isWeb();\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype withDecayType = (\n userConfig: DecayConfig,\n callback?: AnimationCallback\n) => number;\n\nexport const withDecay = function (\n userConfig: DecayConfig,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(0, () => {\n 'worklet';\n const config: DefaultDecayConfig = {\n deceleration: 0.998,\n velocityFactor: 1,\n velocity: 0,\n rubberBandFactor: 0.6,\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n const VELOCITY_EPS = IS_WEB ? 1 / 20 : 1;\n const SLOPE_FACTOR = 0.1;\n\n let decay: (animation: InnerDecayAnimation, now: number) => boolean;\n\n if (config.rubberBandEffect) {\n decay = (animation: InnerDecayAnimation, now: number): boolean => {\n const { lastTimestamp, startTimestamp, current, velocity } = animation;\n\n const deltaTime = Math.min(now - lastTimestamp, 64);\n const clampIndex =\n Math.abs(current - config.clamp![0]) <\n Math.abs(current - config.clamp![1])\n ? 0\n : 1;\n\n let derivative = 0;\n if (current < config.clamp![0] || current > config.clamp![1]) {\n derivative = current - config.clamp![clampIndex];\n }\n\n if (derivative !== 0) {\n animation.springActive = true;\n } else if (derivative === 0 && animation.springActive) {\n animation.current = config.clamp![clampIndex];\n return true;\n }\n\n const v =\n velocity *\n Math.exp(\n -(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR\n ) -\n derivative * config.rubberBandFactor;\n\n animation.current =\n current + (v * config.velocityFactor * deltaTime) / 1000;\n animation.velocity = v;\n animation.lastTimestamp = now;\n return false;\n };\n } else {\n decay = (animation: InnerDecayAnimation, now: number): boolean => {\n const {\n lastTimestamp,\n startTimestamp,\n initialVelocity,\n current,\n velocity,\n } = animation;\n\n const deltaTime = Math.min(now - lastTimestamp, 64);\n const v =\n velocity *\n Math.exp(\n -(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR\n );\n animation.current =\n current + (v * config.velocityFactor * deltaTime) / 1000;\n animation.velocity = v;\n animation.lastTimestamp = now;\n\n if (config.clamp) {\n if (initialVelocity < 0 && animation.current <= config.clamp[0]) {\n animation.current = config.clamp[0];\n return true;\n } else if (\n initialVelocity > 0 &&\n animation.current >= config.clamp[1]\n ) {\n animation.current = config.clamp[1];\n return true;\n }\n }\n\n return Math.abs(v) < VELOCITY_EPS;\n };\n }\n\n function validateConfig(): void {\n if (config.clamp) {\n if (!Array.isArray(config.clamp)) {\n throw Error(\n `config.clamp must be an array but is ${typeof config.clamp}`\n );\n }\n if (config.clamp.length !== 2) {\n throw Error(\n `clamp array must contain 2 items but is given ${config.clamp.length}`\n );\n }\n }\n if (config.velocityFactor <= 0) {\n throw Error(\n `config.velocityFactor must be greather then 0 but is ${config.velocityFactor}`\n );\n }\n if (config.rubberBandEffect && !config.clamp) {\n throw Error(\n 'You need to set `clamp` property when using `rubberBandEffect`.'\n );\n }\n }\n\n function onStart(\n animation: DecayAnimation,\n value: number,\n now: Timestamp\n ): void {\n animation.current = value;\n animation.lastTimestamp = now;\n animation.startTimestamp = now;\n animation.initialVelocity = config.velocity;\n validateConfig();\n }\n\n return {\n onFrame: decay,\n onStart,\n callback,\n velocity: config.velocity ?? 0,\n initialVelocity: 0,\n current: 0,\n lastTimestamp: 0,\n startTimestamp: 0,\n } as DecayAnimation;\n });\n} as unknown as withDecayType;\n","import { defineAnimation } from './util';\nimport type {\n Animation,\n Timestamp,\n AnimatableValue,\n AnimationObject,\n} from '../commonTypes';\nimport type { DelayAnimation } from './commonTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype withDelayType = (\n delayMs: number,\n delayedAnimation: T\n) => T;\n\nexport const withDelay = function (\n delayMs: number,\n _nextAnimation: T | (() => T)\n): Animation {\n 'worklet';\n return defineAnimation(\n _nextAnimation,\n (): DelayAnimation => {\n 'worklet';\n const nextAnimation =\n typeof _nextAnimation === 'function'\n ? _nextAnimation()\n : _nextAnimation;\n\n function delay(animation: DelayAnimation, now: Timestamp): boolean {\n const { startTime, started, previousAnimation } = animation;\n const current: AnimatableValue = animation.current;\n\n if (now - startTime > delayMs) {\n if (!started) {\n nextAnimation.onStart(\n nextAnimation,\n current,\n now,\n previousAnimation!\n );\n animation.previousAnimation = null;\n animation.started = true;\n }\n const finished = nextAnimation.onFrame(nextAnimation, now);\n animation.current = nextAnimation.current!;\n return finished;\n } else if (previousAnimation) {\n const finished =\n previousAnimation.finished ||\n previousAnimation.onFrame(previousAnimation, now);\n animation.current = previousAnimation.current;\n if (finished) {\n animation.previousAnimation = null;\n }\n }\n return false;\n }\n\n function onStart(\n animation: Animation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: Animation | null\n ): void {\n animation.startTime = now;\n animation.started = false;\n animation.current = value;\n if (previousAnimation === animation) {\n animation.previousAnimation = previousAnimation.previousAnimation;\n } else {\n animation.previousAnimation = previousAnimation;\n }\n }\n\n const callback = (finished?: boolean): void => {\n if (nextAnimation.callback) {\n nextAnimation.callback(finished);\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame: delay,\n onStart,\n current: nextAnimation.current!,\n callback,\n previousAnimation: null,\n startTime: 0,\n started: false,\n };\n }\n );\n} as withDelayType;\n","export type {\n HigherOrderAnimation,\n NextAnimation,\n DelayAnimation,\n RepeatAnimation,\n SequenceAnimation,\n StyleLayoutAnimation,\n} from './commonTypes';\nexport { cancelAnimation, defineAnimation, initialUpdaterRun } from './util';\nexport { withTiming } from './timing';\nexport type { TimingAnimation, WithTimingConfig } from './timing';\nexport { withSpring } from './spring';\nexport type { SpringAnimation, WithSpringConfig } from './springUtils';\nexport { withDecay, WithDecayConfig } from './decay';\nexport type { DecayAnimation } from './decay';\nexport { withDelay } from './delay';\nexport { withRepeat } from './repeat';\nexport { withSequence } from './sequence';\nexport { withStyleAnimation } from './styleAnimation';\n","import { defineAnimation } from './util';\nimport type {\n Animation,\n AnimationCallback,\n AnimatableValue,\n Timestamp,\n AnimationObject,\n} from '../commonTypes';\nimport type { RepeatAnimation } from './commonTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype withRepeatType = (\n animation: T,\n numberOfReps?: number,\n reverse?: boolean,\n callback?: AnimationCallback\n) => T;\n\nexport const withRepeat = function (\n _nextAnimation: T | (() => T),\n numberOfReps = 2,\n reverse = false,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(\n _nextAnimation,\n (): RepeatAnimation => {\n 'worklet';\n\n const nextAnimation =\n typeof _nextAnimation === 'function'\n ? _nextAnimation()\n : _nextAnimation;\n\n function repeat(animation: RepeatAnimation, now: Timestamp): boolean {\n const finished = nextAnimation.onFrame(nextAnimation, now);\n animation.current = nextAnimation.current;\n if (finished) {\n animation.reps += 1;\n // call inner animation's callback on every repetition\n // as the second argument the animation's current value is passed\n if (nextAnimation.callback) {\n nextAnimation.callback(true /* finished */, animation.current);\n }\n if (numberOfReps > 0 && animation.reps >= numberOfReps) {\n return true;\n }\n\n const startValue = reverse\n ? (nextAnimation.current as number)\n : animation.startValue;\n if (reverse) {\n nextAnimation.toValue = animation.startValue;\n animation.startValue = startValue;\n }\n nextAnimation.onStart(\n nextAnimation,\n startValue,\n now,\n nextAnimation.previousAnimation as RepeatAnimation\n );\n return false;\n }\n return false;\n }\n\n const repCallback = (finished?: boolean): void => {\n if (callback) {\n callback(finished);\n }\n // when cancelled call inner animation's callback\n if (!finished && nextAnimation.callback) {\n nextAnimation.callback(false /* finished */);\n }\n };\n\n function onStart(\n animation: RepeatAnimation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: Animation | null\n ): void {\n animation.startValue = value;\n animation.reps = 0;\n nextAnimation.onStart(nextAnimation, value, now, previousAnimation);\n }\n\n return {\n isHigherOrder: true,\n onFrame: repeat,\n onStart,\n reps: 0,\n current: nextAnimation.current,\n callback: repCallback,\n startValue: 0,\n };\n }\n );\n} as withRepeatType;\n","import { defineAnimation } from './util';\nimport type { NextAnimation, SequenceAnimation } from './commonTypes';\nimport type {\n Animation,\n AnimatableValue,\n AnimationObject,\n Timestamp,\n} from '../commonTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype withSequenceType = (...animations: T[]) => T;\n\nexport const withSequence = function (\n ..._animations: NextAnimation[]\n): Animation {\n 'worklet';\n return defineAnimation(\n _animations[0] as SequenceAnimation,\n () => {\n 'worklet';\n const animations = _animations.map((a) => {\n const result = typeof a === 'function' ? a() : a;\n result.finished = false;\n return result;\n });\n const firstAnimation = animations[0];\n\n const callback = (finished: boolean): void => {\n if (finished) {\n // we want to call the callback after every single animation\n // not after all of them\n return;\n }\n // this is going to be called only if sequence has been cancelled\n animations.forEach((animation) => {\n if (typeof animation.callback === 'function' && !animation.finished) {\n animation.callback(finished);\n }\n });\n };\n\n function sequence(animation: SequenceAnimation, now: Timestamp): boolean {\n const currentAnim = animations[animation.animationIndex];\n const finished = currentAnim.onFrame(currentAnim, now);\n animation.current = currentAnim.current;\n if (finished) {\n // we want to call the callback after every single animation\n if (currentAnim.callback) {\n currentAnim.callback(true /* finished */);\n }\n currentAnim.finished = true;\n animation.animationIndex += 1;\n if (animation.animationIndex < animations.length) {\n const nextAnim = animations[animation.animationIndex];\n nextAnim.onStart(nextAnim, currentAnim.current, now, currentAnim);\n return false;\n }\n return true;\n }\n return false;\n }\n\n function onStart(\n animation: SequenceAnimation,\n value: AnimatableValue,\n now: Timestamp,\n previousAnimation: SequenceAnimation\n ): void {\n animation.animationIndex = 0;\n if (previousAnimation === undefined) {\n previousAnimation = animations[\n animations.length - 1\n ] as SequenceAnimation;\n }\n firstAnimation.onStart(firstAnimation, value, now, previousAnimation);\n }\n\n return {\n isHigherOrder: true,\n onFrame: sequence,\n onStart,\n animationIndex: 0,\n current: firstAnimation.current,\n callback,\n } as SequenceAnimation;\n }\n );\n} as withSequenceType;\n","import { defineAnimation } from './util';\nimport type {\n Animation,\n AnimationCallback,\n AnimatableValue,\n Timestamp,\n} from '../commonTypes';\nimport type {\n SpringConfig,\n SpringAnimation,\n InnerSpringAnimation,\n SpringConfigInner,\n} from './springUtils';\nimport {\n initialCalculations,\n calculateNewMassToMatchDuration,\n underDampedSpringCalculations,\n criticallyDampedSpringCalculations,\n isAnimationTerminatingCalculation,\n} from './springUtils';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype withSpringType = (\n toValue: T,\n userConfig?: SpringConfig,\n callback?: AnimationCallback\n) => T;\n\nexport const withSpring = ((\n toValue: AnimatableValue,\n userConfig?: SpringConfig,\n callback?: AnimationCallback\n): Animation => {\n 'worklet';\n\n return defineAnimation(toValue, () => {\n 'worklet';\n const defaultConfig: Record = {\n damping: 10,\n mass: 1,\n stiffness: 100,\n overshootClamping: false,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 2,\n velocity: 0,\n duration: 2000,\n dampingRatio: 0.5,\n } as const;\n\n const config: Record & SpringConfigInner = {\n ...defaultConfig,\n ...userConfig,\n useDuration: !!(userConfig?.duration || userConfig?.dampingRatio),\n configIsInvalid: false,\n };\n\n if (\n [\n config.stiffness,\n config.damping,\n config.duration,\n config.dampingRatio,\n config.restDisplacementThreshold,\n config.restSpeedThreshold,\n ].some((x) => x <= 0) ||\n config.mass === 0\n ) {\n config.configIsInvalid = true;\n console.warn(\n \"You have provided invalid spring animation configuration! \\n Value of stiffness, damping, duration and damping ratio must be greater than zero, and mass can't equal zero.\"\n );\n }\n\n function springOnFrame(\n animation: InnerSpringAnimation,\n now: Timestamp\n ): boolean {\n const { toValue, startTimestamp, current } = animation;\n\n const timeFromStart = now - startTimestamp;\n\n if (config.useDuration && timeFromStart >= config.duration) {\n animation.current = toValue;\n\n // clear lastTimestamp to avoid using stale value by the next spring animation that starts after this one\n animation.lastTimestamp = 0;\n return true;\n }\n\n if (config.configIsInvalid) {\n // We don't animate wrong config\n if (config.useDuration) return false;\n else {\n animation.current = toValue;\n animation.lastTimestamp = 0;\n return true;\n }\n }\n const { lastTimestamp, velocity } = animation;\n\n const deltaTime = Math.min(now - lastTimestamp, 64);\n animation.lastTimestamp = now;\n\n const t = deltaTime / 1000;\n const v0 = -velocity;\n const x0 = toValue - current;\n\n const { zeta, omega0, omega1 } = animation;\n\n const { position: newPosition, velocity: newVelocity } =\n zeta < 1\n ? underDampedSpringCalculations(animation, {\n zeta,\n v0,\n x0,\n omega0,\n omega1,\n t,\n })\n : criticallyDampedSpringCalculations(animation, {\n v0,\n x0,\n omega0,\n t,\n });\n\n animation.current = newPosition;\n animation.velocity = newVelocity;\n\n const { isOvershooting, isVelocity, isDisplacement } =\n isAnimationTerminatingCalculation(animation, config);\n\n const springIsNotInMove =\n isOvershooting || (isVelocity && isDisplacement);\n\n if (!config.useDuration && springIsNotInMove) {\n animation.velocity = 0;\n animation.current = toValue;\n // clear lastTimestamp to avoid using stale value by the next spring animation that starts after this one\n animation.lastTimestamp = 0;\n return true;\n }\n\n return false;\n }\n\n function isTriggeredTwice(\n previousAnimation: SpringAnimation | undefined,\n animation: SpringAnimation\n ) {\n return (\n previousAnimation?.lastTimestamp &&\n previousAnimation?.startTimestamp &&\n previousAnimation?.toValue === animation.toValue &&\n previousAnimation?.duration === animation.duration &&\n previousAnimation?.dampingRatio === animation.dampingRatio\n );\n }\n\n function onStart(\n animation: SpringAnimation,\n value: number,\n now: Timestamp,\n previousAnimation: SpringAnimation | undefined\n ): void {\n animation.current = value;\n animation.startValue = value;\n\n let mass = config.mass;\n const triggeredTwice = isTriggeredTwice(previousAnimation, animation);\n\n const duration = config.duration;\n\n const x0 = triggeredTwice\n ? // If animation is triggered twice we want to continue the previous animation\n // form the previous starting point\n previousAnimation?.startValue\n : Number(animation.toValue) - value;\n\n if (previousAnimation) {\n animation.velocity =\n (triggeredTwice\n ? previousAnimation?.velocity\n : previousAnimation?.velocity + config.velocity) || 0;\n } else {\n animation.velocity = config.velocity || 0;\n }\n\n if (triggeredTwice) {\n animation.zeta = previousAnimation?.zeta || 0;\n animation.omega0 = previousAnimation?.omega0 || 0;\n animation.omega1 = previousAnimation?.omega1 || 0;\n } else {\n if (config.useDuration) {\n const actualDuration = triggeredTwice\n ? // If animation is triggered twice we want to continue the previous animation\n // so we need to include the time that already elapsed\n duration -\n ((previousAnimation?.lastTimestamp || 0) -\n (previousAnimation?.startTimestamp || 0))\n : duration;\n\n config.duration = actualDuration;\n mass = calculateNewMassToMatchDuration(\n x0 as number,\n config,\n animation.velocity\n );\n }\n\n const { zeta, omega0, omega1 } = initialCalculations(mass, config);\n animation.zeta = zeta;\n animation.omega0 = omega0;\n animation.omega1 = omega1;\n }\n\n animation.lastTimestamp = previousAnimation?.lastTimestamp || now;\n\n animation.startTimestamp = triggeredTwice\n ? previousAnimation?.startTimestamp || now\n : now;\n }\n\n return {\n onFrame: springOnFrame,\n onStart,\n toValue,\n velocity: config.velocity || 0,\n current: toValue,\n startValue: 0,\n callback,\n lastTimestamp: 0,\n startTimestamp: 0,\n zeta: 0,\n omega0: 0,\n omega1: 0,\n } as SpringAnimation;\n });\n}) as withSpringType;\n","import type { Animation, AnimatableValue, Timestamp } from '../commonTypes';\n\nexport type SpringConfig = {\n stiffness?: number;\n overshootClamping?: boolean;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n velocity?: number;\n} & (\n | {\n mass?: number;\n damping?: number;\n duration?: never;\n dampingRatio?: never;\n }\n | {\n mass?: never;\n damping?: never;\n duration?: number;\n dampingRatio?: number;\n }\n);\n\nexport type WithSpringConfig = SpringConfig;\n\nexport interface SpringConfigInner {\n useDuration: boolean;\n configIsInvalid: boolean;\n}\n\nexport interface SpringAnimation extends Animation {\n current: AnimatableValue;\n toValue: AnimatableValue;\n velocity: number;\n lastTimestamp: Timestamp;\n startTimestamp: Timestamp;\n startValue: number;\n zeta: number;\n omega0: number;\n omega1: number;\n}\n\nexport interface InnerSpringAnimation\n extends Omit {\n toValue: number;\n current: number;\n}\n\nfunction bisectRoot({\n min,\n max,\n func,\n maxIterations = 20,\n}: {\n min: number;\n max: number;\n func: (x: number) => number;\n maxIterations?: number;\n}) {\n 'worklet';\n const ACCURACY = 0.00005;\n let idx = maxIterations;\n let current = (max + min) / 2;\n while (Math.abs(func(current)) > ACCURACY && idx > 0) {\n idx -= 1;\n\n if (func(current) < 0) {\n min = current;\n } else {\n max = current;\n }\n current = (min + max) / 2;\n }\n return current;\n}\n\nexport function initialCalculations(\n mass = 0,\n config: Record & SpringConfigInner\n): {\n zeta: number;\n omega0: number;\n omega1: number;\n} {\n 'worklet';\n\n if (config.configIsInvalid) {\n return { zeta: 0, omega0: 0, omega1: 0 };\n }\n\n if (config.useDuration) {\n const { stiffness: k, dampingRatio: zeta } = config;\n\n /** omega0 and omega1 denote angular frequency and natural angular frequency, see this link for formulas:\n * https://courses.lumenlearning.com/suny-osuniversityphysics/chapter/15-5-damped-oscillations/\n */\n const omega0 = Math.sqrt(k / mass);\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\n return { zeta, omega0, omega1 };\n } else {\n const { damping: c, mass: m, stiffness: k } = config;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n return { zeta, omega0, omega1 };\n }\n}\n\nexport function calculateNewMassToMatchDuration(\n x0: number,\n config: Record & SpringConfigInner,\n v0: number\n) {\n 'worklet';\n if (config.configIsInvalid) {\n return 0;\n }\n\n /** Use this formula: https://phys.libretexts.org/Bookshelves/University_Physics/Book%3A_University_Physics_(OpenStax)/Book%3A_University_Physics_I_-_Mechanics_Sound_Oscillations_and_Waves_(OpenStax)/15%3A_Oscillations/15.06%3A_Damped_Oscillations\n * to find the asymptote and estimate the damping that gives us the expected duration \n\n ⎛ ⎛ c⎞ ⎞ \n ⎜-⎜──⎟ ⋅ duration⎟ \n ⎝ ⎝2m⎠ ⎠ \n A ⋅ e = threshold\n\n \n Amplitude calculated using \"Conservation of energy\"\n _________________\n ╱ 2 2\n ╱ m ⋅ v0 + k ⋅ x0 \n amplitude = ╱ ─────────────────\n ╲╱ k \n\n And replace mass with damping ratio which is provided: m = (c^2)/(4 * k * zeta^2) \n */\n const {\n stiffness: k,\n dampingRatio: zeta,\n restSpeedThreshold: threshold,\n duration,\n } = config;\n\n const durationForMass = (mass: number) => {\n 'worklet';\n const amplitude =\n (mass * v0 * v0 + k * x0 * x0) / (Math.exp(1 - 0.5 * zeta) * k);\n const c = zeta * 2 * Math.sqrt(k * mass);\n return (\n 1000 * ((-2 * mass) / c) * Math.log((threshold * 0.01) / amplitude) -\n duration\n );\n };\n\n // Bisection turns out to be much faster than Newton's method in our case\n return bisectRoot({ min: 0, max: 100, func: durationForMass });\n}\n\nexport function criticallyDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n v0: number;\n x0: number;\n omega0: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue } = animation;\n\n const { v0, x0, omega0, t } = precalculatedValues;\n\n const criticallyDampedEnvelope = Math.exp(-omega0 * t);\n const criticallyDampedPosition =\n toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n const criticallyDampedVelocity =\n criticallyDampedEnvelope *\n (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n return {\n position: criticallyDampedPosition,\n velocity: criticallyDampedVelocity,\n };\n}\n\nexport function underDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n zeta: number;\n v0: number;\n x0: number;\n omega0: number;\n omega1: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue, current, velocity } = animation;\n\n const { zeta, t, omega0, omega1 } = precalculatedValues;\n\n const v0 = -velocity;\n const x0 = toValue - current;\n\n const sin1 = Math.sin(omega1 * t);\n const cos1 = Math.cos(omega1 * t);\n\n // under damped\n const underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n const underDampedFrag1 =\n underDampedEnvelope *\n (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n const underDampedPosition = toValue - underDampedFrag1;\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity =\n zeta * omega0 * underDampedFrag1 -\n underDampedEnvelope *\n (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n return { position: underDampedPosition, velocity: underDampedVelocity };\n}\n\nexport function isAnimationTerminatingCalculation(\n animation: InnerSpringAnimation,\n config: Partial &\n Required<\n Pick\n >\n): {\n isOvershooting: boolean;\n isVelocity: boolean;\n isDisplacement: boolean;\n} {\n 'worklet';\n const { toValue, velocity, startValue, current } = animation;\n\n const isOvershooting = config.overshootClamping\n ? (current > toValue && startValue < toValue) ||\n (current < toValue && startValue > toValue)\n : false;\n\n const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;\n const isDisplacement =\n Math.abs(toValue - current) < config.restDisplacementThreshold;\n\n return { isOvershooting, isVelocity, isDisplacement };\n}\n","import { defineAnimation } from './util';\nimport type {\n Timestamp,\n AnimatableValue,\n AnimationObject,\n Animation,\n NestedObject,\n NestedObjectValues,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\nimport type { StyleLayoutAnimation } from './commonTypes';\nimport { withTiming } from './timing';\nimport { ColorProperties } from '../UpdateProps';\nimport { processColor } from '../Colors';\n\n// resolves path to value for nested objects\n// if path cannot be resolved returns undefined\nfunction resolvePath(\n obj: NestedObject,\n path: AnimatableValue[] | AnimatableValue\n): NestedObjectValues | undefined {\n 'worklet';\n const keys: AnimatableValue[] = Array.isArray(path) ? path : [path];\n return keys.reduce | undefined>((acc, current) => {\n if (Array.isArray(acc) && typeof current === 'number') {\n return acc[current];\n } else if (\n acc !== null &&\n typeof acc === 'object' &&\n (current as number | string) in acc\n ) {\n return (acc as { [key: string]: NestedObjectValues })[\n current as number | string\n ];\n }\n return undefined;\n }, obj);\n}\n\n// set value at given path\ntype Path = Array | string | number;\nfunction setPath(\n obj: NestedObject,\n path: Path,\n value: NestedObjectValues\n): void {\n 'worklet';\n const keys: Path = Array.isArray(path) ? path : [path];\n let currObj: NestedObjectValues = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n // creates entry if there isn't one\n currObj = currObj as { [key: string]: NestedObjectValues };\n if (!(keys[i] in currObj)) {\n // if next key is a number create an array\n if (typeof keys[i + 1] === 'number') {\n currObj[keys[i]] = [];\n } else {\n currObj[keys[i]] = {};\n }\n }\n currObj = currObj[keys[i]];\n }\n\n (currObj as { [key: string]: NestedObjectValues })[keys[keys.length - 1]] =\n value;\n}\n\ninterface NestedObjectEntry {\n value: NestedObjectValues;\n path: (string | number)[];\n}\n\nexport function withStyleAnimation(\n styleAnimations: AnimatedStyle\n): StyleLayoutAnimation {\n 'worklet';\n return defineAnimation({}, () => {\n 'worklet';\n\n const onFrame = (\n animation: StyleLayoutAnimation,\n now: Timestamp\n ): boolean => {\n let stillGoing = false;\n const entriesToCheck: NestedObjectEntry[] = [\n { value: animation.styleAnimations, path: [] },\n ];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry =\n entriesToCheck.pop() as NestedObjectEntry;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onFrame === undefined\n ) {\n // nested object\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentEntry.value as AnimationObject;\n if (currentStyleAnimation.finished) {\n continue;\n }\n const finished = currentStyleAnimation.onFrame(\n currentStyleAnimation,\n now\n );\n if (finished) {\n currentStyleAnimation.finished = true;\n if (currentStyleAnimation.callback) {\n currentStyleAnimation.callback(true);\n }\n } else {\n stillGoing = true;\n }\n\n if (ColorProperties.includes(currentEntry.path[0] as string)) {\n currentStyleAnimation.current = processColor(\n currentStyleAnimation.current\n ) as number;\n }\n\n setPath(\n animation.current,\n currentEntry.path,\n currentStyleAnimation.current\n );\n }\n }\n return !stillGoing;\n };\n\n const onStart = (\n animation: StyleLayoutAnimation,\n value: AnimatedStyle,\n now: Timestamp,\n previousAnimation: StyleLayoutAnimation\n ): void => {\n const entriesToCheck: NestedObjectEntry<\n AnimationObject | AnimatableValue\n >[] = [{ value: styleAnimations, path: [] }];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<\n AnimationObject | AnimatableValue\n > = entriesToCheck.pop() as NestedObjectEntry<\n AnimationObject | AnimatableValue\n >;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onStart === undefined\n ) {\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const prevAnimation = resolvePath(\n previousAnimation?.styleAnimations,\n currentEntry.path\n );\n let prevVal = resolvePath(value, currentEntry.path);\n if (prevAnimation && !prevVal) {\n prevVal = prevAnimation.current;\n }\n if (prevVal === undefined) {\n console.warn(\n `Initial values for animation are missing for property ${currentEntry.path.join(\n '.'\n )}`\n );\n }\n setPath(animation.current, currentEntry.path, prevVal);\n let currentAnimation: AnimationObject;\n if (\n typeof currentEntry.value !== 'object' ||\n !currentEntry.value.onStart\n ) {\n currentAnimation = withTiming(\n currentEntry.value as AnimatableValue,\n { duration: 0 }\n ) as AnimationObject; // TODO TYPESCRIPT this temporary cast is to get rid of .d.ts file.\n setPath(\n animation.styleAnimations,\n currentEntry.path,\n currentAnimation\n );\n } else {\n currentAnimation = currentEntry.value as Animation;\n }\n currentAnimation.onStart(\n currentAnimation,\n prevVal,\n now,\n prevAnimation\n );\n }\n }\n };\n\n const callback = (finished: boolean): void => {\n if (!finished) {\n const animationsToCheck: NestedObjectValues[] = [\n styleAnimations,\n ];\n while (animationsToCheck.length > 0) {\n const currentAnimation: NestedObjectValues =\n animationsToCheck.pop() as NestedObjectValues;\n if (Array.isArray(currentAnimation)) {\n for (const element of currentAnimation) {\n animationsToCheck.push(element);\n }\n } else if (\n typeof currentAnimation === 'object' &&\n currentAnimation.onStart === undefined\n ) {\n for (const value of Object.values(currentAnimation)) {\n animationsToCheck.push(value);\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentAnimation as AnimationObject;\n if (\n !currentStyleAnimation.finished &&\n currentStyleAnimation.callback\n ) {\n currentStyleAnimation.callback(false);\n }\n }\n }\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame,\n onStart,\n current: {},\n styleAnimations,\n callback,\n } as StyleLayoutAnimation;\n });\n}\n","import type { EasingFunction, EasingFunctionFactory } from '../Easing';\nimport { Easing } from '../Easing';\nimport { defineAnimation } from './util';\nimport type {\n Animation,\n AnimationCallback,\n Timestamp,\n AnimatableValue,\n} from '../commonTypes';\n\ninterface TimingConfig {\n duration?: number;\n easing?: EasingFunction | EasingFunctionFactory;\n}\n\nexport type WithTimingConfig = TimingConfig;\n\nexport interface TimingAnimation extends Animation {\n type: string;\n easing: EasingFunction;\n startValue: AnimatableValue;\n startTime: Timestamp;\n progress: number;\n toValue: AnimatableValue;\n current: AnimatableValue;\n}\n\ninterface InnerTimingAnimation\n extends Omit {\n toValue: number;\n current: number;\n}\n\n// TODO TYPESCRIPT This is temporary type put in here to get rid of our .d.ts file\ntype withTimingType = (\n toValue: T,\n userConfig?: TimingConfig,\n callback?: AnimationCallback\n) => T;\n\nexport const withTiming = function (\n toValue: AnimatableValue,\n userConfig?: TimingConfig,\n callback?: AnimationCallback\n): Animation {\n 'worklet';\n\n return defineAnimation(toValue, () => {\n 'worklet';\n const config: Required = {\n duration: 300,\n easing: Easing.inOut(Easing.quad),\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n function timing(animation: InnerTimingAnimation, now: Timestamp): boolean {\n const { toValue, startTime, startValue } = animation;\n const runtime = now - startTime;\n\n if (runtime >= config.duration) {\n // reset startTime to avoid reusing finished animation config in `start` method\n animation.startTime = 0;\n animation.current = toValue;\n return true;\n }\n const progress = animation.easing(runtime / config.duration);\n animation.current =\n (startValue as number) + (toValue - (startValue as number)) * progress;\n return false;\n }\n\n function onStart(\n animation: TimingAnimation,\n value: number,\n now: Timestamp,\n previousAnimation: Animation\n ): void {\n if (\n previousAnimation &&\n (previousAnimation as TimingAnimation).type === 'timing' &&\n (previousAnimation as TimingAnimation).toValue === toValue &&\n (previousAnimation as TimingAnimation).startTime\n ) {\n // to maintain continuity of timing animations we check if we are starting\n // new timing over the old one with the same parameters. If so, we want\n // to copy animation timeline properties\n animation.startTime = (previousAnimation as TimingAnimation).startTime;\n animation.startValue = (\n previousAnimation as TimingAnimation\n ).startValue;\n } else {\n animation.startTime = now;\n animation.startValue = value;\n }\n animation.current = value;\n if (typeof config.easing === 'object') {\n animation.easing = config.easing.factory();\n } else {\n animation.easing = config.easing;\n }\n }\n\n return {\n type: 'timing',\n onFrame: timing,\n onStart: onStart as (animation: TimingAnimation, now: number) => boolean,\n progress: 0,\n toValue,\n startValue: 0,\n startTime: 0,\n easing: () => 0,\n current: toValue,\n callback,\n } as TimingAnimation;\n });\n} as withTimingType;\n","type FixedLengthArray<\n T,\n L extends number,\n PassedObject = [T, ...Array]\n> = PassedObject & {\n readonly length: L;\n [I: number]: T;\n};\n\nexport type AffineMatrix = FixedLengthArray, 4>;\n\nexport type AffineMatrixFlat = FixedLengthArray;\n\ntype TransformMatrixDecomposition = Record<\n 'translationMatrix' | 'scaleMatrix' | 'rotationMatrix' | 'skewMatrix',\n AffineMatrix\n>;\n\ntype Axis = 'x' | 'y' | 'z';\n\ninterface TansformMatrixDecompositionWithAngles\n extends TransformMatrixDecomposition {\n rx: number;\n ry: number;\n rz: number;\n}\n\nexport function isAffineMatrixFlat(x: unknown): x is AffineMatrixFlat {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 16 &&\n x.every((element) => typeof element === 'number' && !isNaN(element))\n );\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function isAffineMatrix(x: unknown): x is AffineMatrix {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 4 &&\n x.every(\n (row) =>\n Array.isArray(row) &&\n row.length === 4 &&\n row.every((element) => typeof element === 'number' && !isNaN(element))\n )\n );\n}\n\nexport function flatten(matrix: AffineMatrix): AffineMatrixFlat {\n 'worklet';\n return matrix.flat() as AffineMatrixFlat;\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function unflatten(m: AffineMatrixFlat): AffineMatrix {\n 'worklet';\n return [\n [m[0], m[1], m[2], m[3]],\n [m[4], m[5], m[6], m[7]],\n [m[8], m[9], m[10], m[11]],\n [m[12], m[13], m[14], m[15]],\n ] as AffineMatrix;\n}\n\nfunction maybeFlattenMatrix(\n matrix: AffineMatrix | AffineMatrixFlat\n): AffineMatrixFlat {\n 'worklet';\n return isAffineMatrix(matrix) ? flatten(matrix) : matrix;\n}\n\nexport function multiplyMatrices(\n a: AffineMatrix,\n b: AffineMatrix\n): AffineMatrix {\n 'worklet';\n return [\n [\n a[0][0] * b[0][0] +\n a[0][1] * b[1][0] +\n a[0][2] * b[2][0] +\n a[0][3] * b[3][0],\n\n a[0][0] * b[0][1] +\n a[0][1] * b[1][1] +\n a[0][2] * b[2][1] +\n a[0][3] * b[3][1],\n\n a[0][0] * b[0][2] +\n a[0][1] * b[1][2] +\n a[0][2] * b[2][2] +\n a[0][3] * b[3][2],\n\n a[0][0] * b[0][3] +\n a[0][1] * b[1][3] +\n a[0][2] * b[2][3] +\n a[0][3] * b[3][3],\n ],\n [\n a[1][0] * b[0][0] +\n a[1][1] * b[1][0] +\n a[1][2] * b[2][0] +\n a[1][3] * b[3][0],\n\n a[1][0] * b[0][1] +\n a[1][1] * b[1][1] +\n a[1][2] * b[2][1] +\n a[1][3] * b[3][1],\n\n a[1][0] * b[0][2] +\n a[1][1] * b[1][2] +\n a[1][2] * b[2][2] +\n a[1][3] * b[3][2],\n\n a[1][0] * b[0][3] +\n a[1][1] * b[1][3] +\n a[1][2] * b[2][3] +\n a[1][3] * b[3][3],\n ],\n [\n a[2][0] * b[0][0] +\n a[2][1] * b[1][0] +\n a[2][2] * b[2][0] +\n a[2][3] * b[3][0],\n\n a[2][0] * b[0][1] +\n a[2][1] * b[1][1] +\n a[2][2] * b[2][1] +\n a[2][3] * b[3][1],\n\n a[2][0] * b[0][2] +\n a[2][1] * b[1][2] +\n a[2][2] * b[2][2] +\n a[2][3] * b[3][2],\n\n a[2][0] * b[0][3] +\n a[2][1] * b[1][3] +\n a[2][2] * b[2][3] +\n a[2][3] * b[3][3],\n ],\n [\n a[3][0] * b[0][0] +\n a[3][1] * b[1][0] +\n a[3][2] * b[2][0] +\n a[3][3] * b[3][0],\n\n a[3][0] * b[0][1] +\n a[3][1] * b[1][1] +\n a[3][2] * b[2][1] +\n a[3][3] * b[3][1],\n\n a[3][0] * b[0][2] +\n a[3][1] * b[1][2] +\n a[3][2] * b[2][2] +\n a[3][3] * b[3][2],\n\n a[3][0] * b[0][3] +\n a[3][1] * b[1][3] +\n a[3][2] * b[2][3] +\n a[3][3] * b[3][3],\n ],\n ];\n}\n\nexport function subtractMatrices(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatA);\n const b: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] - b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function addMatrices(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n const b = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] + b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function scaleMatrix(\n maybeFlatA: T,\n scalar: number\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n\n const b = a.map((x) => x * scalar) as AffineMatrixFlat;\n return isFlatOnStart ? (b as T) : (unflatten(b) as T);\n}\n\nexport function getRotationMatrix(\n angle: number,\n axis: Axis = 'z'\n): AffineMatrix {\n 'worklet';\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n switch (axis) {\n case 'z':\n return [\n [cos, sin, 0, 0],\n [-sin, cos, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n case 'y':\n return [\n [cos, 0, -sin, 0],\n [0, 1, 0, 0],\n [sin, 0, cos, 0],\n [0, 0, 0, 1],\n ];\n case 'x':\n return [\n [1, 0, 0, 0],\n [0, cos, sin, 0],\n [0, -sin, cos, 0],\n [0, 0, 0, 1],\n ];\n }\n}\n\nfunction norm3d(x: number, y: number, z: number) {\n 'worklet';\n return Math.sqrt(x * x + y * y + z * z);\n}\n\nfunction transposeMatrix(matrix: AffineMatrix): AffineMatrix {\n 'worklet';\n const m = flatten(matrix);\n return [\n [m[0], m[4], m[8], m[12]],\n [m[1], m[5], m[9], m[13]],\n [m[2], m[6], m[10], m[14]],\n [m[3], m[7], m[11], m[15]],\n ];\n}\n\nfunction assertVectorsHaveEqualLengths(a: number[], b: number[]) {\n 'worklet';\n if (__DEV__ && a.length !== b.length) {\n throw new Error(\n `Cannot calculate inner product of two vectors of different lengths. Length of ${a} is ${a.length} and length of ${b} is ${b.length}.`\n );\n }\n}\n\nfunction innerProduct(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.reduce((acc, _, i) => acc + a[i] * b[i], 0);\n}\n\nfunction projection(u: number[], a: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(u, a);\n const s = innerProduct(u, a) / innerProduct(u, u);\n return u.map((e) => e * s);\n}\n\nfunction subtractVectors(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.map((_, i) => a[i] - b[i]);\n}\n\nfunction scaleVector(u: number[], a: number) {\n 'worklet';\n return u.map((e) => e * a);\n}\n\nfunction gramSchmidtAlgorithm(matrix: AffineMatrix): {\n rotationMatrix: AffineMatrix;\n skewMatrix: AffineMatrix;\n} {\n // Gram-Schmidt orthogonalization decomposes any matrix with non-zero determinant into an orthogonal and a triangular matrix\n // These matrices are equal to rotation and skew matrices respectively, because we apply it to transformation matrix\n // That is expected to already have extracted the remaining transforms (scale & translation)\n 'worklet';\n const [a0, a1, a2, a3] = matrix;\n\n const u0 = a0;\n const u1 = subtractVectors(a1, projection(u0, a1));\n const u2 = subtractVectors(\n subtractVectors(a2, projection(u0, a2)),\n projection(u1, a2)\n );\n const u3 = subtractVectors(\n subtractVectors(\n subtractVectors(a3, projection(u0, a3)),\n projection(u1, a3)\n ),\n projection(u2, a3)\n );\n\n const [e0, e1, e2, e3] = [u0, u1, u2, u3].map((u) =>\n scaleVector(u, 1 / Math.sqrt(innerProduct(u, u)))\n );\n\n const rotationMatrix: AffineMatrix = [\n [e0[0], e1[0], e2[0], e3[0]],\n [e0[1], e1[1], e2[1], e3[1]],\n [e0[2], e1[2], e2[2], e3[2]],\n [e0[3], e1[3], e2[3], e3[3]],\n ];\n\n const skewMatrix: AffineMatrix = [\n [\n innerProduct(e0, a0),\n innerProduct(e0, a1),\n innerProduct(e0, a2),\n innerProduct(e0, a3),\n ],\n [0, innerProduct(e1, a1), innerProduct(e1, a2), innerProduct(e1, a3)],\n [0, 0, innerProduct(e2, a2), innerProduct(e2, a3)],\n [0, 0, 0, innerProduct(e3, a3)],\n ];\n return {\n rotationMatrix: transposeMatrix(rotationMatrix),\n skewMatrix: transposeMatrix(skewMatrix),\n };\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function decomposeMatrix(\n unknownTypeMatrix: AffineMatrixFlat | AffineMatrix\n): TransformMatrixDecomposition {\n 'worklet';\n const matrix = maybeFlattenMatrix(unknownTypeMatrix);\n\n // normalize matrix\n if (matrix[15] === 0) {\n throw new Error('Invalid transform matrix!');\n }\n matrix.forEach((_, i) => (matrix[i] /= matrix[15]));\n\n const translationMatrix: AffineMatrix = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [matrix[12], matrix[13], matrix[14], 1],\n ];\n const sx = matrix[15] * norm3d(matrix[0], matrix[4], matrix[8]);\n const sy = matrix[15] * norm3d(matrix[1], matrix[5], matrix[9]);\n const sz = matrix[15] * norm3d(matrix[2], matrix[6], matrix[10]);\n\n const scaleMatrix: AffineMatrix = [\n [sx, 0, 0, 0],\n [0, sy, 0, 0],\n [0, 0, sz, 0],\n [0, 0, 0, 1],\n ];\n\n const rotationAndSkewMatrix: AffineMatrix = [\n [matrix[0] / sx, matrix[1] / sx, matrix[2] / sx, 0],\n [matrix[4] / sy, matrix[5] / sy, matrix[6] / sy, 0],\n [matrix[8] / sz, matrix[9] / sz, matrix[10] / sz, 0],\n [0, 0, 0, 1],\n ];\n\n const { rotationMatrix, skewMatrix } = gramSchmidtAlgorithm(\n rotationAndSkewMatrix\n );\n\n return {\n translationMatrix,\n scaleMatrix,\n rotationMatrix,\n skewMatrix,\n };\n}\n\nexport function decomposeMatrixIntoMatricesAndAngles(\n matrix: AffineMatrixFlat | AffineMatrix\n): TansformMatrixDecompositionWithAngles {\n 'worklet';\n const { scaleMatrix, rotationMatrix, translationMatrix, skewMatrix } =\n decomposeMatrix(matrix);\n\n const sinRy = -rotationMatrix[0][2];\n\n const ry = Math.asin(sinRy);\n let rx;\n let rz;\n if (sinRy === 1 || sinRy === -1) {\n rz = 0;\n rx = Math.atan2(sinRy * rotationMatrix[0][1], sinRy * rotationMatrix[0][2]);\n } else {\n rz = Math.atan2(rotationMatrix[0][1], rotationMatrix[0][0]);\n rx = Math.atan2(rotationMatrix[1][2], rotationMatrix[2][2]);\n }\n\n return {\n scaleMatrix,\n rotationMatrix,\n translationMatrix,\n skewMatrix,\n rx: rx || 0,\n ry: ry || 0,\n rz: rz || 0,\n };\n}\n","import type { HigherOrderAnimation, StyleLayoutAnimation } from './commonTypes';\nimport type { ParsedColorArray } from '../Colors';\nimport {\n isColor,\n convertToRGBA,\n rgbaArrayToRGBAColor,\n toGammaSpace,\n toLinearSpace,\n} from '../Colors';\nimport type {\n SharedValue,\n AnimatableValue,\n Animation,\n AnimationObject,\n Timestamp,\n AnimatableValueObject,\n} from '../commonTypes';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport {\n AffineMatrixFlat,\n AffineMatrix,\n flatten,\n multiplyMatrices,\n scaleMatrix,\n addMatrices,\n decomposeMatrixIntoMatricesAndAngles,\n isAffineMatrixFlat,\n subtractMatrices,\n getRotationMatrix,\n} from './transformationMatrix/matrixUtils';\n\nlet IN_STYLE_UPDATER = false;\n\nexport function initialUpdaterRun(updater: () => T): T {\n IN_STYLE_UPDATER = true;\n const result = updater();\n IN_STYLE_UPDATER = false;\n return result;\n}\n\ninterface RecognizedPrefixSuffix {\n prefix?: string;\n suffix?: string;\n strippedValue: number;\n}\n\nfunction recognizePrefixSuffix(value: string | number): RecognizedPrefixSuffix {\n 'worklet';\n if (typeof value === 'string') {\n const match = value.match(\n /([A-Za-z]*)(-?\\d*\\.?\\d*)([eE][-+]?[0-9]+)?([A-Za-z%]*)/\n );\n if (!match) {\n throw Error(\n \"Couldn't parse animation value. Check if there isn't any typo.\"\n );\n }\n const prefix = match[1];\n const suffix = match[4];\n // number with scientific notation\n const number = match[2] + (match[3] ?? '');\n return { prefix, suffix, strippedValue: parseFloat(number) };\n } else {\n return { strippedValue: value };\n }\n}\n\nfunction applyProgressToMatrix(\n progress: number,\n a: AffineMatrix,\n b: AffineMatrix\n) {\n 'worklet';\n return addMatrices(a, scaleMatrix(subtractMatrices(b, a), progress));\n}\n\nfunction applyProgressToNumber(progress: number, a: number, b: number) {\n 'worklet';\n return a + progress * (b - a);\n}\n\nfunction decorateAnimation(\n animation: T\n): void {\n 'worklet';\n if ((animation as HigherOrderAnimation).isHigherOrder) {\n return;\n }\n\n const baseOnStart = (animation as Animation).onStart;\n const baseOnFrame = (animation as Animation).onFrame;\n const animationCopy = Object.assign({}, animation);\n delete animationCopy.callback;\n\n const prefNumberSuffOnStart = (\n animation: Animation,\n value: string | number,\n timestamp: number,\n previousAnimation: Animation\n ) => {\n // recognize prefix, suffix, and updates stripped value on animation start\n const { prefix, suffix, strippedValue } = recognizePrefixSuffix(value);\n animation.__prefix = prefix;\n animation.__suffix = suffix;\n animation.strippedCurrent = strippedValue;\n const { strippedValue: strippedToValue } = recognizePrefixSuffix(\n animation.toValue as string | number\n );\n animation.current = strippedValue;\n animation.startValue = strippedValue;\n animation.toValue = strippedToValue;\n if (previousAnimation && previousAnimation !== animation) {\n const {\n prefix: paPrefix,\n suffix: paSuffix,\n strippedValue: paStrippedValue,\n } = recognizePrefixSuffix(previousAnimation.current as string | number);\n previousAnimation.current = paStrippedValue;\n previousAnimation.__prefix = paPrefix;\n previousAnimation.__suffix = paSuffix;\n }\n\n baseOnStart(animation, strippedValue, timestamp, previousAnimation);\n\n animation.current =\n (animation.__prefix ?? '') +\n animation.current +\n (animation.__suffix ?? '');\n\n if (previousAnimation && previousAnimation !== animation) {\n previousAnimation.current =\n (previousAnimation.__prefix ?? '') +\n previousAnimation.current +\n (previousAnimation.__suffix ?? '');\n }\n };\n const prefNumberSuffOnFrame = (\n animation: Animation,\n timestamp: number\n ) => {\n animation.current = animation.strippedCurrent;\n const res = baseOnFrame(animation, timestamp);\n animation.strippedCurrent = animation.current;\n animation.current =\n (animation.__prefix ?? '') +\n animation.current +\n (animation.__suffix ?? '');\n return res;\n };\n\n const tab = ['R', 'G', 'B', 'A'];\n const colorOnStart = (\n animation: Animation,\n value: string | number,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n let RGBAValue: ParsedColorArray;\n let RGBACurrent: ParsedColorArray;\n let RGBAToValue: ParsedColorArray;\n const res: Array = [];\n if (isColor(value)) {\n RGBACurrent = toLinearSpace(convertToRGBA(animation.current));\n RGBAValue = toLinearSpace(convertToRGBA(value));\n if (animation.toValue) {\n RGBAToValue = toLinearSpace(convertToRGBA(animation.toValue));\n }\n }\n tab.forEach((i, index) => {\n animation[i] = Object.assign({}, animationCopy);\n animation[i].current = RGBACurrent[index];\n animation[i].toValue = RGBAToValue ? RGBAToValue[index] : undefined;\n animation[i].onStart(\n animation[i],\n RGBAValue[index],\n timestamp,\n previousAnimation ? previousAnimation[i] : undefined\n );\n res.push(animation[i].current);\n });\n\n animation.current = rgbaArrayToRGBAColor(\n toGammaSpace(res as ParsedColorArray)\n );\n };\n\n const colorOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n const RGBACurrent = toLinearSpace(convertToRGBA(animation.current));\n const res: Array = [];\n let finished = true;\n tab.forEach((i, index) => {\n animation[i].current = RGBACurrent[index];\n const result = animation[i].onFrame(animation[i], timestamp);\n // We really need to assign this value to result, instead of passing it directly - otherwise once \"finished\" is false, onFrame won't be called\n finished = finished && result;\n res.push(animation[i].current);\n });\n\n animation.current = rgbaArrayToRGBAColor(\n toGammaSpace(res as ParsedColorArray)\n );\n return finished;\n };\n\n const transformationMatrixOnStart = (\n animation: Animation,\n value: AffineMatrixFlat,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n const toValue = animation.toValue as AffineMatrixFlat;\n\n animation.startMatrices = decomposeMatrixIntoMatricesAndAngles(value);\n animation.stopMatrices = decomposeMatrixIntoMatricesAndAngles(toValue);\n\n // We create an animation copy to animate single value between 0 and 100\n // We set limits from 0 to 100 (instead of 0-1) to make spring look good\n // with default thresholds.\n\n animation[0] = Object.assign({}, animationCopy);\n animation[0].current = 0;\n animation[0].toValue = 100;\n animation[0].onStart(\n animation[0],\n 0,\n timestamp,\n previousAnimation ? previousAnimation[0] : undefined\n );\n\n animation.current = value;\n };\n\n const transformationMatrixOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n let finished = true;\n const result = animation[0].onFrame(animation[0], timestamp);\n // We really need to assign this value to result, instead of passing it directly - otherwise once \"finished\" is false, onFrame won't be called\n finished = finished && result;\n\n const progress = animation[0].current / 100;\n\n const transforms = ['translationMatrix', 'scaleMatrix', 'skewMatrix'];\n const mappedTransforms: Array = [];\n\n transforms.forEach((key, _) =>\n mappedTransforms.push(\n applyProgressToMatrix(\n progress,\n animation.startMatrices[key],\n animation.stopMatrices[key]\n )\n )\n );\n\n const [currentTranslation, currentScale, skewMatrix] = mappedTransforms;\n\n const rotations: Array<'x' | 'y' | 'z'> = ['x', 'y', 'z'];\n const mappedRotations: Array = [];\n\n rotations.forEach((key, _) => {\n const angle = applyProgressToNumber(\n progress,\n animation.startMatrices['r' + key],\n animation.stopMatrices['r' + key]\n );\n mappedRotations.push(getRotationMatrix(angle, key));\n });\n\n const [rotationMatrixX, rotationMatrixY, rotationMatrixZ] = mappedRotations;\n\n const rotationMatrix = multiplyMatrices(\n rotationMatrixX,\n multiplyMatrices(rotationMatrixY, rotationMatrixZ)\n );\n\n const updated = flatten(\n multiplyMatrices(\n multiplyMatrices(\n currentScale,\n multiplyMatrices(skewMatrix, rotationMatrix)\n ),\n currentTranslation\n )\n );\n\n animation.current = updated;\n\n return finished;\n };\n\n const arrayOnStart = (\n animation: Animation,\n value: Array,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n value.forEach((v, i) => {\n animation[i] = Object.assign({}, animationCopy);\n animation[i].current = v;\n animation[i].toValue = (animation.toValue as Array)[i];\n animation[i].onStart(\n animation[i],\n v,\n timestamp,\n previousAnimation ? previousAnimation[i] : undefined\n );\n });\n\n animation.current = value;\n };\n\n const arrayOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n let finished = true;\n (animation.current as Array).forEach((_, i) => {\n const result = animation[i].onFrame(animation[i], timestamp);\n // We really need to assign this value to result, instead of passing it directly - otherwise once \"finished\" is false, onFrame won't be called\n finished = finished && result;\n (animation.current as Array)[i] = animation[i].current;\n });\n\n return finished;\n };\n\n const objectOnStart = (\n animation: Animation,\n value: AnimatableValueObject,\n timestamp: Timestamp,\n previousAnimation: Animation\n ): void => {\n for (const key in value) {\n animation[key] = Object.assign({}, animationCopy);\n animation[key].onStart = animation.onStart;\n\n animation[key].current = value[key];\n animation[key].toValue = (animation.toValue as AnimatableValueObject)[\n key\n ];\n animation[key].onStart(\n animation[key],\n value[key],\n timestamp,\n previousAnimation ? previousAnimation[key] : undefined\n );\n }\n animation.current = value;\n };\n\n const objectOnFrame = (\n animation: Animation,\n timestamp: Timestamp\n ): boolean => {\n let finished = true;\n const newObject: AnimatableValueObject = {};\n for (const key in animation.current as AnimatableValueObject) {\n const result = animation[key].onFrame(animation[key], timestamp);\n // We really need to assign this value to result, instead of passing it directly - otherwise once \"finished\" is false, onFrame won't be called\n finished = finished && result;\n newObject[key] = animation[key].current;\n }\n animation.current = newObject;\n return finished;\n };\n\n animation.onStart = (\n animation: Animation,\n value: number,\n timestamp: Timestamp,\n previousAnimation: Animation\n ) => {\n if (isColor(value)) {\n colorOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = colorOnFrame;\n return;\n } else if (isAffineMatrixFlat(value)) {\n transformationMatrixOnStart(\n animation,\n value,\n timestamp,\n previousAnimation\n );\n animation.onFrame = transformationMatrixOnFrame;\n return;\n } else if (Array.isArray(value)) {\n arrayOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = arrayOnFrame;\n return;\n } else if (typeof value === 'string') {\n prefNumberSuffOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = prefNumberSuffOnFrame;\n return;\n } else if (typeof value === 'object' && value !== null) {\n objectOnStart(animation, value, timestamp, previousAnimation);\n animation.onFrame = objectOnFrame;\n return;\n }\n baseOnStart(animation, value, timestamp, previousAnimation);\n };\n}\n\ntype AnimationToDecoration<\n T extends AnimationObject | StyleLayoutAnimation,\n U extends AnimationObject | StyleLayoutAnimation\n> = T extends StyleLayoutAnimation\n ? Record\n : U | (() => U) | AnimatableValue;\n\nconst IS_NATIVE = NativeReanimatedModule.native;\n\nexport function defineAnimation<\n T extends AnimationObject | StyleLayoutAnimation, // type that's supposed to be returned\n U extends AnimationObject | StyleLayoutAnimation = T // type that's received\n>(starting: AnimationToDecoration, factory: () => T): T {\n 'worklet';\n if (IN_STYLE_UPDATER) {\n return starting as unknown as T;\n }\n const create = () => {\n 'worklet';\n const animation = factory();\n decorateAnimation(animation as unknown as U);\n return animation;\n };\n\n if (_WORKLET || !IS_NATIVE) {\n return create();\n }\n // @ts-ignore: eslint-disable-line\n return create;\n}\n\nexport function cancelAnimation(sharedValue: SharedValue): void {\n 'worklet';\n // setting the current value cancels the animation if one is currently running\n sharedValue.value = sharedValue.value; // eslint-disable-line no-self-assign\n}\n","import type {\n PerpectiveTransform,\n RotateTransform,\n RotateXTransform,\n RotateYTransform,\n RotateZTransform,\n ScaleTransform,\n ScaleXTransform,\n ScaleYTransform,\n TranslateXTransform,\n TranslateYTransform,\n SkewXTransform,\n SkewYTransform,\n MatrixTransform,\n ViewStyle,\n TextStyle,\n} from 'react-native';\n\nexport type TransformProperty =\n | PerpectiveTransform\n | RotateTransform\n | RotateXTransform\n | RotateYTransform\n | RotateZTransform\n | ScaleTransform\n | ScaleXTransform\n | ScaleYTransform\n | TranslateXTransform\n | TranslateYTransform\n | SkewXTransform\n | SkewYTransform\n | MatrixTransform;\n\nexport interface StyleProps extends ViewStyle, TextStyle {\n originX?: number;\n originY?: number;\n [key: string]: any;\n}\n\nexport interface SharedValue {\n value: T;\n addListener: (listenerID: number, listener: (value: T) => void) => void;\n removeListener: (listenerID: number) => void;\n modify: (modifier: (value: T) => T) => void;\n}\n\n// The below type is used for HostObjects returned by the JSI API that don't have\n// any accessible fields or methods but can carry data that is accessed from the\n// c++ side. We add a field to the type to make it possible for typescript to recognize\n// which JSI methods accept those types as arguments and to be able to correctly type\n// check other methods that may use them. However, this field is not actually defined\n// nor should be used for anything else as assigning any data to those objects will\n// throw an error.\nexport type ShareableRef = {\n __hostObjectShareableJSRef: T;\n};\n\nexport type ShareableSyncDataHolderRef = {\n __hostObjectShareableJSRefSyncDataHolder: T;\n};\n\nexport type MapperRegistry = {\n start: (\n mapperID: number,\n worklet: () => void,\n inputs: SharedValue[],\n outputs?: SharedValue[]\n ) => void;\n stop: (mapperID: number) => void;\n};\n\nexport type Context = Record;\n\nexport interface WorkletFunction {\n _closure?: Context;\n __workletHash?: number;\n}\n\nexport interface BasicWorkletFunction extends WorkletFunction {\n (): T;\n}\n\nexport interface BasicWorkletFunctionOptional extends WorkletFunction {\n (): Partial;\n}\n\nexport interface NativeEvent {\n nativeEvent: T;\n}\nexport interface ComplexWorkletFunction\n extends WorkletFunction {\n (...args: A): R;\n __remoteFunction?: (...args: A) => R;\n}\n\nexport interface NestedObject {\n [key: string]: NestedObjectValues;\n}\n\nexport type NestedObjectValues =\n | T\n | Array>\n | NestedObject;\n\nexport interface AdapterWorkletFunction extends WorkletFunction {\n (value: NestedObject): void;\n}\n\ntype Animatable = number | string | Array;\n\nexport type AnimatableValueObject = { [key: string]: Animatable };\n\nexport type AnimatableValue = Animatable | AnimatableValueObject;\n\nexport interface AnimationObject {\n [key: string]: any;\n callback?: AnimationCallback;\n current?: AnimatableValue;\n toValue?: AnimationObject['current'];\n startValue?: AnimationObject['current'];\n finished?: boolean;\n strippedCurrent?: number;\n cancelled?: boolean;\n\n __prefix?: string;\n __suffix?: string;\n onFrame: (animation: any, timestamp: Timestamp) => boolean;\n onStart: (\n nextAnimation: any,\n current: any,\n timestamp: Timestamp,\n previousAnimation: any\n ) => void;\n}\n\nexport interface Animation extends AnimationObject {\n onFrame: (animation: T, timestamp: Timestamp) => boolean;\n onStart: (\n nextAnimation: T,\n current: AnimatableValue,\n timestamp: Timestamp,\n previousAnimation: Animation | null | T\n ) => void;\n}\n\nexport enum SensorType {\n ACCELEROMETER = 1,\n GYROSCOPE = 2,\n GRAVITY = 3,\n MAGNETIC_FIELD = 4,\n ROTATION = 5,\n}\nexport enum IOSReferenceFrame {\n XArbitraryZVertical,\n XArbitraryCorrectedZVertical,\n XMagneticNorthZVertical,\n XTrueNorthZVertical,\n Auto,\n}\n\nexport type SensorConfig = {\n interval: number | 'auto';\n adjustToInterfaceOrientation: boolean;\n iosReferenceFrame: IOSReferenceFrame;\n};\n\nexport type AnimatedSensor = {\n sensor: SharedValue;\n unregister: () => void;\n isAvailable: boolean;\n config: SensorConfig;\n};\n\nexport interface NumericAnimation {\n current?: number;\n}\n\nexport type AnimationCallback = (\n finished?: boolean,\n current?: AnimatableValue\n) => void;\n\nexport type Timestamp = number;\n\nexport type Value3D = {\n x: number;\n y: number;\n z: number;\n interfaceOrientation: InterfaceOrientation;\n};\n\nexport type ValueRotation = {\n qw: number;\n qx: number;\n qy: number;\n qz: number;\n yaw: number;\n pitch: number;\n roll: number;\n interfaceOrientation: InterfaceOrientation;\n};\n\nexport enum InterfaceOrientation {\n ROTATION_0 = 0,\n ROTATION_90 = 90,\n ROTATION_180 = 180,\n ROTATION_270 = 270,\n}\n\nexport type ShadowNodeWrapper = object;\n\nexport enum KeyboardState {\n UNKNOWN = 0,\n OPENING = 1,\n OPEN = 2,\n CLOSING = 3,\n CLOSED = 4,\n}\n\nexport type AnimatedKeyboardInfo = {\n height: SharedValue;\n state: SharedValue;\n};\n\nexport interface MeasuredDimensions {\n x: number;\n y: number;\n width: number;\n height: number;\n pageX: number;\n pageY: number;\n}\n\nexport interface AnimatedKeyboardOptions {\n isStatusBarTranslucentAndroid?: boolean;\n}\n","import type { ForwardedRef } from 'react';\nimport React, { Component, forwardRef } from 'react';\nimport type { FlatListProps, LayoutChangeEvent } from 'react-native';\nimport { FlatList, StyleSheet } from 'react-native';\nimport { AnimatedView } from './View';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport type { ILayoutAnimationBuilder } from '../layoutReanimation/animationBuilder/commonTypes';\nimport type { StyleProps } from '../commonTypes';\nimport type { AnimateProps } from '../helperTypes';\n\nconst AnimatedFlatList = createAnimatedComponent(FlatList as any) as any;\n\ninterface AnimatedFlatListProps {\n onLayout: (event: LayoutChangeEvent) => void;\n // implicit `children` prop has been removed in @types/react^18.0.0\n children: React.ReactNode;\n inverted?: boolean;\n horizontal?: boolean;\n}\n\nconst createCellRenderer = (\n itemLayoutAnimation?: ILayoutAnimationBuilder,\n cellStyle?: StyleProps\n) => {\n const cellRenderer = (props: AnimatedFlatListProps) => {\n return (\n \n {props.children}\n \n );\n };\n\n return cellRenderer;\n};\n\ninterface ReanimatedFlatListPropsWithLayout extends FlatListProps {\n itemLayoutAnimation?: ILayoutAnimationBuilder;\n}\n\nexport type FlatListPropsWithLayout = ReanimatedFlatListPropsWithLayout;\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ndeclare class ReanimatedFlatListClass extends Component<\n AnimateProps>\n> {\n getNode(): FlatList;\n}\n\ninterface ReanimatedFlatListProps extends FlatListProps {\n itemLayoutAnimation?: ILayoutAnimationBuilder;\n}\n\nexport const ReanimatedFlatList = forwardRef(\n (props: ReanimatedFlatListProps, ref: ForwardedRef) => {\n const { itemLayoutAnimation, ...restProps } = props;\n\n const cellStyle = restProps?.inverted\n ? restProps?.horizontal\n ? styles.horizontallyInverted\n : styles.verticallyInverted\n : undefined;\n\n // Set default scrollEventThrottle, because user expects\n // to have continuous scroll events and\n // react-native defaults it to 50 for FlatLists.\n // We set it to 1 so we have peace until\n // there are 960 fps screens.\n if (!('scrollEventThrottle' in restProps)) {\n restProps.scrollEventThrottle = 1;\n }\n\n const cellRenderer = React.useMemo(\n () => createCellRenderer(itemLayoutAnimation, cellStyle),\n [cellStyle]\n );\n\n return (\n \n );\n }\n // TODO TYPESCRIPT this was a cast before\n // ) as (\n // props: ReanimatedFlatListProps & RefAttributes>\n // ) => React.ReactElement;\n);\n\nconst styles = StyleSheet.create({\n verticallyInverted: { transform: [{ scaleY: -1 }] },\n horizontallyInverted: { transform: [{ scaleX: -1 }] },\n});\n\nexport type ReanimatedFlatList = typeof ReanimatedFlatListClass &\n FlatList;\n","import type { ImageProps } from 'react-native';\nimport { Image } from 'react-native';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport { Component } from 'react';\nimport type { AnimateProps } from '../helperTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ndeclare class AnimatedImageClass extends Component> {\n getNode(): Image;\n}\n\nexport type AnimatedImage = typeof AnimatedImageClass & Image;\n\nexport const AnimatedImage = createAnimatedComponent(\n Image as any\n) as unknown as AnimatedImage; // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n","import type { ForwardedRef, RefObject } from 'react';\nimport React, { Component, forwardRef } from 'react';\nimport type { ScrollViewProps } from 'react-native';\nimport { ScrollView } from 'react-native';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport type { SharedValue } from '../commonTypes';\nimport type { AnimateProps } from '../helperTypes';\nimport { useAnimatedRef, useScrollViewOffset } from '../hook';\n\nexport interface AnimatedScrollViewProps extends ScrollViewProps {\n scrollViewOffset?: SharedValue;\n}\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ndeclare class AnimatedScrollViewClass extends Component<\n AnimateProps\n> {\n getNode(): ScrollView;\n}\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface AnimatedScrollViewInterface extends ScrollView {\n getNode(): ScrollView;\n}\n\nconst AnimatedScrollViewComponent = createAnimatedComponent(\n ScrollView as any\n) as any;\n\n// type AnimatedScrollViewFC = React.FC;\n\nexport const AnimatedScrollView: AnimatedScrollView = forwardRef(\n (props: AnimatedScrollViewProps, ref: ForwardedRef) => {\n const { scrollViewOffset, ...restProps } = props;\n const aref = ref === null ? useAnimatedRef() : ref;\n\n if (scrollViewOffset) {\n useScrollViewOffset(\n aref as RefObject,\n scrollViewOffset\n );\n }\n\n // Set default scrollEventThrottle, because user expects\n // to have continuous scroll events.\n // We set it to 1 so we have peace until\n // there are 960 fps screens.\n if (!('scrollEventThrottle' in restProps)) {\n restProps.scrollEventThrottle = 1;\n }\n\n return ;\n }\n) as unknown as AnimatedScrollView;\n\nexport type AnimatedScrollView = typeof AnimatedScrollViewClass &\n AnimatedScrollViewInterface;\n","import { Component } from 'react';\nimport type { TextProps } from 'react-native';\nimport { Text } from 'react-native';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport type { AnimateProps } from '../helperTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ndeclare class AnimatedTextClass extends Component> {\n getNode(): Text;\n}\n\nexport const AnimatedText = createAnimatedComponent(\n Text as any\n) as unknown as AnimatedText; // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n\nexport type AnimatedText = typeof AnimatedTextClass & AnimatedTextClass & Text;\n","import type { ViewProps } from 'react-native';\nimport { View } from 'react-native';\nimport createAnimatedComponent from '../../createAnimatedComponent';\nimport { Component } from 'react';\nimport type { AnimateProps } from '../helperTypes';\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ndeclare class AnimatedViewClass extends Component> {\n getNode(): View;\n}\nexport type AnimatedView = typeof AnimatedViewClass & View;\n\nexport const AnimatedView = createAnimatedComponent(View);\n","import NativeReanimatedModule from './NativeReanimated';\nimport { nativeShouldBeMock, isWeb } from './PlatformChecker';\nimport type {\n AnimatedKeyboardOptions,\n SensorConfig,\n SensorType,\n SharedValue,\n Value3D,\n ValueRotation,\n} from './commonTypes';\nimport { makeShareableCloneRecursive } from './shareables';\nimport type {\n LayoutAnimationFunction,\n LayoutAnimationType,\n} from './layoutReanimation';\nimport { initializeUIRuntime } from './initializers';\nimport type {\n ProgressAnimationCallback,\n SharedTransitionAnimationsFunction,\n} from './layoutReanimation/animationBuilder/commonTypes';\nimport { SensorContainer } from './SensorContainer';\n\nexport { startMapper, stopMapper } from './mappers';\nexport { runOnJS, runOnUI } from './threads';\nexport { makeShareable } from './shareables';\nexport { makeMutable, makeRemote } from './mutables';\n\nexport type ReanimatedConsole = Pick<\n Console,\n 'debug' | 'log' | 'warn' | 'info' | 'error'\n>;\n\n/**\n * @returns `true` in Reanimated 3, doesn't exist in Reanimated 2 or 1\n */\nexport const isReanimated3 = () => true;\n\n// Superseded by check in `/src/threads.ts`.\n// Used by `react-navigation` to detect if using Reanimated 2 or 3.\n/**\n * @deprecated This function was superseded by other checks.\n * We keep it here for backward compatibility reasons.\n * If you need to check if you are using Reanimated 3 or Reanimated 2\n * please use `isReanimated3` function instead.\n * @returns `true` in Reanimated 3, doesn't exist in Reanimated 2\n */\nexport const isConfigured = isReanimated3;\n\n// this is for web implementation\nglobal._WORKLET = false;\nglobal._log = function (s: string) {\n console.log(s);\n};\n\nexport function getViewProp(viewTag: string, propName: string): Promise {\n if (global._IS_FABRIC) {\n throw new Error(\n '[react-native-reanimated] `getViewProp` is not supported on Fabric yet'\n );\n }\n\n return new Promise((resolve, reject) => {\n return NativeReanimatedModule.getViewProp(\n viewTag,\n propName,\n (result: T) => {\n if (typeof result === 'string' && result.substr(0, 6) === 'error:') {\n reject(result);\n } else {\n resolve(result);\n }\n }\n );\n });\n}\n\nexport function getSensorContainer(): SensorContainer {\n if (!global.__sensorContainer) {\n global.__sensorContainer = new SensorContainer();\n }\n return global.__sensorContainer;\n}\n\nexport function registerEventHandler(\n eventHash: string,\n eventHandler: (event: T) => void\n): number {\n function handleAndFlushAnimationFrame(eventTimestamp: number, event: T) {\n 'worklet';\n global.__frameTimestamp = eventTimestamp;\n eventHandler(event);\n global.__flushAnimationFrame(eventTimestamp);\n global.__frameTimestamp = undefined;\n }\n return NativeReanimatedModule.registerEventHandler(\n eventHash,\n makeShareableCloneRecursive(handleAndFlushAnimationFrame)\n );\n}\n\nexport function unregisterEventHandler(id: number): void {\n return NativeReanimatedModule.unregisterEventHandler(id);\n}\n\nexport function subscribeForKeyboardEvents(\n eventHandler: (state: number, height: number) => void,\n options: AnimatedKeyboardOptions\n): number {\n // TODO: this should really go with the same code path as other events, that is\n // via registerEventHandler. For now we are copying the code from there.\n function handleAndFlushAnimationFrame(state: number, height: number) {\n 'worklet';\n const now = performance.now();\n global.__frameTimestamp = now;\n eventHandler(state, height);\n global.__flushAnimationFrame(now);\n global.__frameTimestamp = undefined;\n }\n return NativeReanimatedModule.subscribeForKeyboardEvents(\n makeShareableCloneRecursive(handleAndFlushAnimationFrame),\n options.isStatusBarTranslucentAndroid ?? false\n );\n}\n\nexport function unsubscribeFromKeyboardEvents(listenerId: number): void {\n return NativeReanimatedModule.unsubscribeFromKeyboardEvents(listenerId);\n}\n\nexport function registerSensor(\n sensorType: SensorType,\n config: SensorConfig,\n eventHandler: (\n data: Value3D | ValueRotation,\n orientationDegrees: number\n ) => void\n): number {\n const sensorContainer = getSensorContainer();\n return sensorContainer.registerSensor(\n sensorType,\n config,\n makeShareableCloneRecursive(eventHandler)\n );\n}\n\nexport function initializeSensor(\n sensorType: SensorType,\n config: SensorConfig\n): SharedValue {\n const sensorContainer = getSensorContainer();\n return sensorContainer.initializeSensor(sensorType, config);\n}\n\nexport function unregisterSensor(sensorId: number): void {\n const sensorContainer = getSensorContainer();\n return sensorContainer.unregisterSensor(sensorId);\n}\n\nif (!isWeb()) {\n initializeUIRuntime();\n}\n\ntype FeaturesConfig = {\n enableLayoutAnimations: boolean;\n setByUser: boolean;\n};\n\nlet featuresConfig: FeaturesConfig = {\n enableLayoutAnimations: false,\n setByUser: false,\n};\n\nexport function enableLayoutAnimations(\n flag: boolean,\n isCallByUser = true\n): void {\n if (isCallByUser) {\n featuresConfig = {\n enableLayoutAnimations: flag,\n setByUser: true,\n };\n NativeReanimatedModule.enableLayoutAnimations(flag);\n } else if (\n !featuresConfig.setByUser &&\n featuresConfig.enableLayoutAnimations !== flag\n ) {\n featuresConfig.enableLayoutAnimations = flag;\n NativeReanimatedModule.enableLayoutAnimations(flag);\n }\n}\n\nexport function configureLayoutAnimations(\n viewTag: number,\n type: LayoutAnimationType,\n config:\n | LayoutAnimationFunction\n | Keyframe\n | SharedTransitionAnimationsFunction\n | ProgressAnimationCallback,\n sharedTransitionTag = ''\n): void {\n NativeReanimatedModule.configureLayoutAnimation(\n viewTag,\n type,\n sharedTransitionTag,\n makeShareableCloneRecursive(config)\n );\n}\n\nexport function configureProps(uiProps: string[], nativeProps: string[]): void {\n if (!nativeShouldBeMock()) {\n NativeReanimatedModule.configureProps(uiProps, nativeProps);\n }\n}\n","type StackDetails = [Error, number, number];\n\nconst _workletStackDetails = new Map();\n\nexport function registerWorkletStackDetails(\n hash: number,\n stackDetails: StackDetails\n) {\n _workletStackDetails.set(hash, stackDetails);\n}\n\nfunction getBundleOffset(error: Error): [string, number, number] {\n const frame = error.stack?.split('\\n')?.[0];\n if (frame) {\n const parsedFrame = /@([^@]+):(\\d+):(\\d+)/.exec(frame);\n if (parsedFrame) {\n const [, file, line, col] = parsedFrame;\n return [file, Number(line), Number(col)];\n }\n }\n return ['unknown', 0, 0];\n}\n\nfunction processStack(stack: string): string {\n const workletStackEntries = stack.match(/worklet_(\\d+):(\\d+):(\\d+)/g);\n let result = stack;\n workletStackEntries?.forEach((match) => {\n const [, hash, origLine, origCol] = match.split(/:|_/).map(Number);\n const errorDetails = _workletStackDetails.get(hash);\n if (!errorDetails) {\n return;\n }\n const [error, lineOffset, colOffset] = errorDetails;\n const [bundleFile, bundleLine, bundleCol] = getBundleOffset(error);\n const line = origLine + bundleLine + lineOffset;\n const col = origCol + bundleCol + colOffset;\n\n result = result.replace(match, `${bundleFile}:${line}:${col}`);\n });\n return result;\n}\n\nexport function reportFatalErrorOnJS({\n message,\n stack,\n}: {\n message: string;\n stack?: string;\n}) {\n const error = new Error();\n error.message = message;\n error.stack = stack ? processStack(stack) : undefined;\n error.name = 'ReanimatedError';\n // @ts-ignore React Native's ErrorUtils implementation extends the Error type with jsEngine field\n error.jsEngine = 'reanimated';\n // @ts-ignore the reportFatalError method is an internal method of ErrorUtils not exposed in the type definitions\n global.ErrorUtils.reportFatalError(error);\n}\n","export function getShadowNodeWrapperFromRef() {\n throw new Error(\n '[Reanimated] Trying to call `getShadowNodeWrapperFromRef` on web.'\n );\n}\n","import { runOnUI } from '../core';\nimport type { FrameInfo } from './FrameCallbackRegistryUI';\nimport { prepareUIRegistry } from './FrameCallbackRegistryUI';\n\nexport default class FrameCallbackRegistryJS {\n private nextCallbackId = 0;\n\n constructor() {\n prepareUIRegistry();\n }\n\n registerFrameCallback(callback: (frameInfo: FrameInfo) => void): number {\n if (!callback) {\n return -1;\n }\n\n const callbackId = this.nextCallbackId;\n this.nextCallbackId++;\n\n runOnUI(() => {\n global._frameCallbackRegistry.registerFrameCallback(callback, callbackId);\n })();\n\n return callbackId;\n }\n\n unregisterFrameCallback(callbackId: number): void {\n runOnUI(() => {\n global._frameCallbackRegistry.unregisterFrameCallback(callbackId);\n })();\n }\n\n manageStateFrameCallback(callbackId: number, state: boolean): void {\n runOnUI(() => {\n global._frameCallbackRegistry.manageStateFrameCallback(callbackId, state);\n })();\n }\n}\n","import { runOnUIImmediately } from '../threads';\n\ntype CallbackDetails = {\n callback: (frameInfo: FrameInfo) => void;\n startTime: number | null;\n};\n\nexport type FrameInfo = {\n timestamp: number;\n timeSincePreviousFrame: number | null;\n timeSinceFirstFrame: number;\n};\n\nexport interface FrameCallbackRegistryUI {\n frameCallbackRegistry: Map;\n activeFrameCallbacks: Set;\n previousFrameTimestamp: number | null;\n runCallbacks: (callId: number) => void;\n nextCallId: number;\n registerFrameCallback: (\n callback: (frameInfo: FrameInfo) => void,\n callbackId: number\n ) => void;\n unregisterFrameCallback: (callbackId: number) => void;\n manageStateFrameCallback: (callbackId: number, state: boolean) => void;\n}\n\nexport const prepareUIRegistry = runOnUIImmediately(() => {\n 'worklet';\n\n const frameCallbackRegistry: FrameCallbackRegistryUI = {\n frameCallbackRegistry: new Map(),\n activeFrameCallbacks: new Set(),\n previousFrameTimestamp: null,\n nextCallId: 0,\n\n runCallbacks(callId) {\n const loop = (timestamp: number) => {\n if (callId !== this.nextCallId) {\n return;\n }\n if (this.previousFrameTimestamp === null) {\n this.previousFrameTimestamp = timestamp;\n }\n\n const delta = timestamp - this.previousFrameTimestamp;\n\n this.activeFrameCallbacks.forEach((callbackId: number) => {\n const callbackDetails = this.frameCallbackRegistry.get(callbackId)!;\n\n const { startTime } = callbackDetails;\n\n if (startTime === null) {\n // First frame\n callbackDetails.startTime = timestamp;\n\n callbackDetails.callback({\n timestamp,\n timeSincePreviousFrame: null,\n timeSinceFirstFrame: 0,\n });\n } else {\n // Next frame\n callbackDetails.callback({\n timestamp,\n timeSincePreviousFrame: delta,\n timeSinceFirstFrame: timestamp - startTime,\n });\n }\n });\n\n if (this.activeFrameCallbacks.size > 0) {\n this.previousFrameTimestamp = timestamp;\n requestAnimationFrame(loop);\n } else {\n this.previousFrameTimestamp = null;\n }\n };\n\n // runCallback() should only be called after registering a callback,\n // so if there is only one active callback, then it means that there were\n // zero previously and the loop isn't running yet.\n if (this.activeFrameCallbacks.size === 1 && callId === this.nextCallId) {\n requestAnimationFrame(loop);\n }\n },\n\n registerFrameCallback(\n callback: (frameInfo: FrameInfo) => void,\n callbackId: number\n ) {\n this.frameCallbackRegistry.set(callbackId, {\n callback: callback,\n startTime: null,\n });\n },\n\n unregisterFrameCallback(callbackId: number) {\n this.manageStateFrameCallback(callbackId, false);\n this.frameCallbackRegistry.delete(callbackId);\n },\n\n manageStateFrameCallback(callbackId: number, state: boolean) {\n if (callbackId === -1) {\n return;\n }\n if (state) {\n this.activeFrameCallbacks.add(callbackId);\n this.runCallbacks(this.nextCallId);\n } else {\n const callback = this.frameCallbackRegistry.get(callbackId)!;\n callback.startTime = null;\n\n this.activeFrameCallbacks.delete(callbackId);\n if (this.activeFrameCallbacks.size === 0) {\n this.nextCallId += 1;\n }\n }\n },\n };\n\n global._frameCallbackRegistry = frameCallbackRegistry;\n});\n","import { useCallback } from 'react';\nimport { useAnimatedStyle } from './useAnimatedStyle';\nimport type { DependencyList } from './commonTypes';\nimport type { useAnimatedPropsType } from '../helperTypes';\n\n// TODO: we should make sure that when useAP is used we are not assigning styles\n// when you need styles to animated you should always use useAS\n// TODO TYPESCRIPT This is a temporary cast to get rid of .d.ts file.\nexport const useAnimatedProps = useAnimatedStyle as useAnimatedPropsType;\n\nexport function useWorkletCallback(\n fun: (...args: A) => R,\n deps?: DependencyList\n): (...args: Parameters) => R {\n return useCallback(fun, deps ?? []);\n}\n\nexport { useEvent, useHandler } from './utils';\n","export type { DependencyList, AnimatedRef } from './commonTypes';\nexport {\n useAnimatedProps,\n useEvent,\n useHandler,\n useWorkletCallback,\n} from './Hooks';\nexport { useSharedValue } from './useSharedValue';\nexport { useReducedMotion } from './useReducedMotion';\nexport { useAnimatedStyle } from './useAnimatedStyle';\nexport type {\n AnimatedStyleResult,\n AnimatedStyleProp,\n} from './useAnimatedStyle';\nexport { useAnimatedGestureHandler } from './useAnimatedGestureHandler';\nexport type {\n GestureHandlerEvent,\n GestureHandlers,\n} from './useAnimatedGestureHandler';\nexport { useAnimatedReaction } from './useAnimatedReaction';\nexport type { AnimatedReactionWorkletFunction } from './useAnimatedReaction';\nexport { useAnimatedRef } from './useAnimatedRef';\nexport { useAnimatedScrollHandler } from './useAnimatedScrollHandler';\nexport type { ScrollHandler, ScrollHandlers } from './useAnimatedScrollHandler';\nexport { useDerivedValue } from './useDerivedValue';\nexport type { DerivedValue } from './useDerivedValue';\nexport { useAnimatedSensor } from './useAnimatedSensor';\nexport { useFrameCallback } from './useFrameCallback';\nexport type { FrameCallback } from './useFrameCallback';\nexport { useAnimatedKeyboard } from './useAnimatedKeyboard';\nexport { useScrollViewOffset } from './useScrollViewOffset';\n","import type { Context, WorkletFunction, NativeEvent } from '../commonTypes';\nimport type { DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\ninterface Handler extends WorkletFunction {\n (event: T, context: TContext, isCanceledOrFailed?: boolean): void;\n}\n\nexport interface GestureHandlers {\n [key: string]: Handler | undefined;\n onStart?: Handler;\n onActive?: Handler;\n onEnd?: Handler;\n onFail?: Handler;\n onCancel?: Handler;\n onFinish?: Handler;\n}\n\nconst EventType = {\n UNDETERMINED: 0,\n FAILED: 1,\n BEGAN: 2,\n CANCELLED: 3,\n ACTIVE: 4,\n END: 5,\n};\n\ninterface GestureHandlerNativeEvent {\n handlerTag: number;\n numberOfPointers: number;\n state: (typeof EventType)[keyof typeof EventType];\n}\n\nexport interface GestureHandlerEvent extends NativeEvent {\n nativeEvent: T;\n}\n\ntype InferArgument = T extends GestureHandlerEvent\n ? E extends GestureHandlerNativeEvent\n ? E\n : never\n : never;\n\nexport function useAnimatedGestureHandler<\n T extends GestureHandlerEvent,\n TContext extends Context = Context,\n Payload = InferArgument\n>(\n handlers: GestureHandlers,\n dependencies?: DependencyList\n): (e: T) => void {\n const { context, doDependenciesDiffer, useWeb } = useHandler<\n Payload,\n TContext\n >(handlers, dependencies);\n\n const handler = (e: T) => {\n 'worklet';\n const event = useWeb ? e.nativeEvent : e;\n\n if (event.state === EventType.BEGAN && handlers.onStart) {\n handlers.onStart(event, context);\n }\n if (event.state === EventType.ACTIVE && handlers.onActive) {\n handlers.onActive(event, context);\n }\n if (\n event.oldState === EventType.ACTIVE &&\n event.state === EventType.END &&\n handlers.onEnd\n ) {\n handlers.onEnd(event, context);\n }\n if (\n event.oldState === EventType.BEGAN &&\n event.state === EventType.FAILED &&\n handlers.onFail\n ) {\n handlers.onFail(event, context);\n }\n if (\n event.oldState === EventType.ACTIVE &&\n event.state === EventType.CANCELLED &&\n handlers.onCancel\n ) {\n handlers.onCancel(event, context);\n }\n if (\n (event.oldState === EventType.BEGAN ||\n event.oldState === EventType.ACTIVE) &&\n event.state !== EventType.BEGAN &&\n event.state !== EventType.ACTIVE &&\n handlers.onFinish\n ) {\n handlers.onFinish(\n event,\n context,\n event.state === EventType.CANCELLED || event.state === EventType.FAILED\n );\n }\n };\n\n if (useWeb) {\n return handler;\n }\n\n return useEvent(\n handler,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n doDependenciesDiffer\n ) as unknown as (e: T) => void; // this is not correct but we want to make GH think it receives a function\n}\n","import { useEffect, useRef } from 'react';\nimport {\n makeMutable,\n subscribeForKeyboardEvents,\n unsubscribeFromKeyboardEvents,\n} from '../core';\nimport type {\n AnimatedKeyboardInfo,\n AnimatedKeyboardOptions,\n} from '../commonTypes';\nimport { KeyboardState } from '../commonTypes';\n\nexport function useAnimatedKeyboard(\n options: AnimatedKeyboardOptions = { isStatusBarTranslucentAndroid: false }\n): AnimatedKeyboardInfo {\n const ref = useRef(null);\n const listenerId = useRef(-1);\n const isSubscribed = useRef(false);\n\n if (ref.current === null) {\n const keyboardEventData: AnimatedKeyboardInfo = {\n state: makeMutable(KeyboardState.UNKNOWN),\n height: makeMutable(0),\n };\n listenerId.current = subscribeForKeyboardEvents((state, height) => {\n 'worklet';\n keyboardEventData.state.value = state;\n keyboardEventData.height.value = height;\n }, options);\n ref.current = keyboardEventData;\n isSubscribed.current = true;\n }\n useEffect(() => {\n if (isSubscribed.current === false && ref.current !== null) {\n const keyboardEventData = ref.current;\n // subscribe again after Fast Refresh\n listenerId.current = subscribeForKeyboardEvents((state, height) => {\n 'worklet';\n keyboardEventData.state.value = state;\n keyboardEventData.height.value = height;\n }, options);\n isSubscribed.current = true;\n }\n return () => {\n unsubscribeFromKeyboardEvents(listenerId.current);\n isSubscribed.current = false;\n };\n }, []);\n return ref.current;\n}\n","import { useEffect } from 'react';\nimport type { BasicWorkletFunction, WorkletFunction } from '../commonTypes';\nimport { startMapper, stopMapper } from '../core';\nimport type { DependencyList } from './commonTypes';\nimport { useSharedValue } from './useSharedValue';\nimport { shouldBeUseWeb } from '../PlatformChecker';\n\nexport interface AnimatedReactionWorkletFunction extends WorkletFunction {\n (prepared: T, previous: T | null): void;\n}\n/**\n * @param prepare - worklet used for data preparation for the second parameter\n * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions\n * the first worklet defines the inputs, in other words on which shared values change will it be called.\n * the second one can modify any shared values but those which are mentioned in the first worklet. Beware of that, because this may result in endless loop and high cpu usage.\n */\nexport function useAnimatedReaction(\n prepare: BasicWorkletFunction,\n react: AnimatedReactionWorkletFunction,\n dependencies?: DependencyList\n): void {\n const previous = useSharedValue(null, true);\n\n let inputs = Object.values(prepare._closure ?? {});\n\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n }\n\n if (dependencies === undefined) {\n dependencies = [\n ...Object.values(prepare._closure ?? {}),\n ...Object.values(react._closure ?? {}),\n prepare.__workletHash,\n react.__workletHash,\n ];\n } else {\n dependencies.push(prepare.__workletHash, react.__workletHash);\n }\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n const input = prepare();\n react(input, previous.value);\n previous.value = input;\n };\n const mapperId = startMapper(fun, inputs, []);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n}\n","import type { Component } from 'react';\nimport { useRef } from 'react';\nimport { useSharedValue } from './useSharedValue';\nimport type { AnimatedRef } from './commonTypes';\nimport type { ShadowNodeWrapper } from '../commonTypes';\nimport { getShadowNodeWrapperFromRef } from '../fabricUtils';\nimport {\n makeShareableCloneRecursive,\n registerShareableMapping,\n} from '../shareables';\nimport { findNodeHandle } from 'react-native';\ninterface MaybeScrollableComponent extends Component {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNativeScrollRef?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getScrollableNode?: any;\n}\n\nfunction getComponentOrScrollable(component: MaybeScrollableComponent) {\n if (global._IS_FABRIC && component.getNativeScrollRef) {\n return component.getNativeScrollRef();\n } else if (!global._IS_FABRIC && component.getScrollableNode) {\n return component.getScrollableNode();\n }\n return component;\n}\n\nconst getTagValueFunction = global._IS_FABRIC\n ? getShadowNodeWrapperFromRef\n : findNodeHandle;\n\nexport function useAnimatedRef<\n T extends MaybeScrollableComponent\n>(): AnimatedRef {\n const tag = useSharedValue(-1);\n const ref = useRef>();\n\n if (!ref.current) {\n const fun: AnimatedRef = >((component) => {\n // enters when ref is set by attaching to a component\n if (component) {\n tag.value = getTagValueFunction(getComponentOrScrollable(component));\n fun.current = component;\n }\n return tag.value;\n });\n\n fun.current = null;\n\n const remoteRef = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return () => tag.value;\n },\n });\n registerShareableMapping(fun, remoteRef);\n ref.current = fun;\n }\n\n return ref.current;\n}\n","import type { RefObject } from 'react';\nimport type { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\nimport type { Context, NativeEvent, WorkletFunction } from '../commonTypes';\nimport type WorkletEventHandler from '../WorkletEventHandler';\nimport type { DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\nexport interface ScrollHandler\n extends WorkletFunction {\n (event: NativeScrollEvent, context?: TContext): void;\n}\n\nexport interface ScrollEvent\n extends NativeScrollEvent,\n NativeEvent {\n eventName: string;\n}\nexport interface ScrollHandlers {\n [key: string]: ScrollHandler | undefined;\n onScroll?: ScrollHandler;\n onBeginDrag?: ScrollHandler;\n onEndDrag?: ScrollHandler;\n onMomentumBegin?: ScrollHandler;\n onMomentumEnd?: ScrollHandler;\n}\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype OnScroll = (event: NativeSyntheticEvent) => void;\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\nexport type useAnimatedScrollHandler = <\n TContext extends Context = Record\n>(\n handlers: ScrollHandlers | ScrollHandler,\n deps?: DependencyList\n) => OnScroll;\n\nexport const useAnimatedScrollHandler = function (\n handlers: ScrollHandlers | ScrollHandler,\n dependencies?: DependencyList\n): RefObject> {\n // case when handlers is a function\n const scrollHandlers: ScrollHandlers =\n typeof handlers === 'function' ? { onScroll: handlers } : handlers;\n const { context, doDependenciesDiffer } = useHandler(\n scrollHandlers,\n dependencies\n );\n\n // build event subscription array\n const subscribeForEvents = ['onScroll'];\n if (scrollHandlers.onBeginDrag !== undefined) {\n subscribeForEvents.push('onScrollBeginDrag');\n }\n if (scrollHandlers.onEndDrag !== undefined) {\n subscribeForEvents.push('onScrollEndDrag');\n }\n if (scrollHandlers.onMomentumBegin !== undefined) {\n subscribeForEvents.push('onMomentumScrollBegin');\n }\n if (scrollHandlers.onMomentumEnd !== undefined) {\n subscribeForEvents.push('onMomentumScrollEnd');\n }\n\n return useEvent(\n (event: ScrollEvent) => {\n 'worklet';\n const {\n onScroll,\n onBeginDrag,\n onEndDrag,\n onMomentumBegin,\n onMomentumEnd,\n } = scrollHandlers;\n if (onScroll && event.eventName.endsWith('onScroll')) {\n onScroll(event, context);\n } else if (onBeginDrag && event.eventName.endsWith('onScrollBeginDrag')) {\n onBeginDrag(event, context);\n } else if (onEndDrag && event.eventName.endsWith('onScrollEndDrag')) {\n onEndDrag(event, context);\n } else if (\n onMomentumBegin &&\n event.eventName.endsWith('onMomentumScrollBegin')\n ) {\n onMomentumBegin(event, context);\n } else if (\n onMomentumEnd &&\n event.eventName.endsWith('onMomentumScrollEnd')\n ) {\n onMomentumEnd(event, context);\n }\n },\n subscribeForEvents,\n doDependenciesDiffer\n // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n ) as any;\n // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n} as unknown as useAnimatedScrollHandler;\n","import { useEffect, useRef } from 'react';\nimport { initializeSensor, registerSensor, unregisterSensor } from '../core';\nimport type {\n SensorConfig,\n AnimatedSensor,\n Value3D,\n ValueRotation,\n} from '../commonTypes';\nimport { SensorType, IOSReferenceFrame } from '../commonTypes';\nimport { callMicrotasks } from '../threads';\n\n// euler angles are in order ZXY, z = yaw, x = pitch, y = roll\n// https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js#L237\nfunction eulerToQuaternion(pitch: number, roll: number, yaw: number) {\n 'worklet';\n const c1 = Math.cos(pitch / 2);\n const s1 = Math.sin(pitch / 2);\n const c2 = Math.cos(roll / 2);\n const s2 = Math.sin(roll / 2);\n const c3 = Math.cos(yaw / 2);\n const s3 = Math.sin(yaw / 2);\n\n return [\n s1 * c2 * c3 - c1 * s2 * s3,\n c1 * s2 * c3 + s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3,\n ];\n}\n\nfunction adjustRotationToInterfaceOrientation(data: ValueRotation) {\n 'worklet';\n const { interfaceOrientation, pitch, roll, yaw } = data;\n if (interfaceOrientation === 90) {\n data.pitch = roll;\n data.roll = -pitch;\n data.yaw = yaw - Math.PI / 2;\n } else if (interfaceOrientation === 270) {\n data.pitch = -roll;\n data.roll = pitch;\n data.yaw = yaw + Math.PI / 2;\n } else if (interfaceOrientation === 180) {\n data.pitch *= -1;\n data.roll *= -1;\n data.yaw *= -1;\n }\n\n const q = eulerToQuaternion(data.pitch, data.roll, data.yaw);\n data.qx = q[0];\n data.qy = q[1];\n data.qz = q[2];\n data.qw = q[3];\n return data;\n}\n\nfunction adjustVectorToInterfaceOrientation(data: Value3D) {\n 'worklet';\n const { interfaceOrientation, x, y } = data;\n if (interfaceOrientation === 90) {\n data.x = -y;\n data.y = x;\n } else if (interfaceOrientation === 270) {\n data.x = y;\n data.y = -x;\n } else if (interfaceOrientation === 180) {\n data.x *= -1;\n data.y *= -1;\n }\n return data;\n}\n\nexport function useAnimatedSensor(\n sensorType: SensorType.ROTATION,\n userConfig?: Partial\n): AnimatedSensor;\nexport function useAnimatedSensor(\n sensorType: Exclude,\n userConfig?: Partial\n): AnimatedSensor;\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: Partial\n): AnimatedSensor {\n const config: SensorConfig = {\n interval: 'auto',\n adjustToInterfaceOrientation: true,\n iosReferenceFrame: IOSReferenceFrame.Auto,\n ...userConfig,\n };\n const ref = useRef>({\n sensor: initializeSensor(sensorType, config),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config: config,\n });\n\n useEffect(() => {\n const newConfig = {\n ...config,\n ...userConfig,\n };\n ref.current.sensor = initializeSensor(sensorType, newConfig);\n\n const sensorData = ref.current.sensor;\n const adjustToInterfaceOrientation =\n ref.current.config.adjustToInterfaceOrientation;\n\n const id = registerSensor(sensorType, config, (data) => {\n 'worklet';\n if (adjustToInterfaceOrientation) {\n if (sensorType === SensorType.ROTATION) {\n data = adjustRotationToInterfaceOrientation(data as ValueRotation);\n } else {\n data = adjustVectorToInterfaceOrientation(data as Value3D);\n }\n }\n sensorData.value = data;\n callMicrotasks();\n });\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current;\n}\n","import type { MutableRefObject } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { startMapper, stopMapper, makeRemote } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n isAnimated,\n shallowEqual,\n validateAnimatedStyles,\n} from './utils';\nimport type { DependencyList, Descriptor } from './commonTypes';\nimport type { ViewDescriptorsSet, ViewRefSet } from '../ViewDescriptorsSet';\nimport { makeViewDescriptorsSet, makeViewsRefSet } from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport type {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n StyleProps,\n} from '../commonTypes';\nimport type {\n ImageStyle,\n RegisteredStyle,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type { AnimatedStyle } from '../helperTypes';\n\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet;\n animatedStyle?: MutableRefObject>;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n frameTimestamp: number,\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n frameTimestamp,\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(frameTimestamp);\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n frameTimestamp,\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue,\n updater: BasicWorkletFunction>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet | undefined,\n animationsActive: SharedValue\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n const nonAnimatedNewValues: StyleProps = {};\n\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n let hasNonAnimatedValues = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || performance.now();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n hasNonAnimatedValues = true;\n nonAnimatedNewValues[key] = value;\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n\n if (hasNonAnimatedValues) {\n updateProps(viewDescriptors, nonAnimatedNewValues, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n if (!shallowEqual(oldValues, newValues)) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n state.last = newValues;\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue,\n updater: BasicWorkletFunction>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet | undefined,\n animationsActive: SharedValue,\n animatedStyle: MutableRefObject>,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || performance.now();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n state.last = newValues;\n\n if (!shallowEqual(oldValues, newValues)) {\n updatePropsJestWrapper(\n viewDescriptors,\n newValues,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (\n typeof prop === 'object' &&\n prop !== null &&\n prop.value === undefined\n ) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop !== null &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\n// This type is kept for backward compatibility.\nexport type AnimatedStyleProp =\n | AnimatedStyle\n | RegisteredStyle>;\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype useAnimatedStyleType = <\n T extends AnimatedStyleProp\n>(\n updater: () => T,\n deps?: DependencyList | null\n) => T;\n\nexport const useAnimatedStyle = function >(\n // animated style cannot be an array\n updater: BasicWorkletFunction ? never : T>,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet = makeViewsRefSet();\n const initRef = useRef();\n let inputs = Object.values(updater._closure ?? {});\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n if (__DEV__ && !inputs.length && !dependencies && !updater.__workletHash) {\n throw new Error(\n `useAnimatedStyle was used without a dependency array or Babel plugin. Please explicitly pass a dependency array, or enable the Babel/SWC plugin.\n\nFor more, see the docs: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/web-support#web-without-a-babel-plugin`\n );\n }\n }\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue(true);\n const animatedStyle: MutableRefObject> = useRef<\n AnimatedStyle\n >({});\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, viewDescriptors } = initRef.current!;\n const sharableViewDescriptors = viewDescriptors.sharableViewDescriptors;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n dependencies.push(sharableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (isJest()) {\n return { viewDescriptors, initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial, viewsRef };\n }\n // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n} as useAnimatedStyleType;\n","import { useEffect, useRef } from 'react';\nimport { initialUpdaterRun } from '../animation';\nimport type { BasicWorkletFunction, SharedValue } from '../commonTypes';\nimport { makeMutable, startMapper, stopMapper } from '../core';\nimport type { DependencyList } from './commonTypes';\nimport { shouldBeUseWeb } from '../PlatformChecker';\n\nexport type DerivedValue = Readonly>;\n\nexport function useDerivedValue(\n processor: BasicWorkletFunction,\n dependencies?: DependencyList\n): DerivedValue {\n const initRef = useRef | null>(null);\n let inputs = Object.values(processor._closure ?? {});\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n }\n\n // build dependencies\n if (dependencies === undefined) {\n dependencies = [...inputs, processor.__workletHash];\n } else {\n dependencies.push(processor.__workletHash);\n }\n\n if (initRef.current === null) {\n initRef.current = makeMutable(initialUpdaterRun(processor));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sharedValue: SharedValue = initRef.current!;\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n sharedValue.value = processor();\n };\n const mapperId = startMapper(fun, inputs, [sharedValue]);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n return sharedValue;\n}\n","import { useEffect, useRef } from 'react';\nimport FrameCallbackRegistryJS from '../frameCallback/FrameCallbackRegistryJS';\nimport type { FrameInfo } from '../frameCallback/FrameCallbackRegistryUI';\n\nexport type FrameCallback = {\n setActive: (isActive: boolean) => void;\n isActive: boolean;\n callbackId: number;\n};\nconst frameCallbackRegistry = new FrameCallbackRegistryJS();\n\nexport function useFrameCallback(\n callback: (frameInfo: FrameInfo) => void,\n autostart = true\n): FrameCallback {\n const ref = useRef({\n setActive: (isActive: boolean) => {\n frameCallbackRegistry.manageStateFrameCallback(\n ref.current.callbackId,\n isActive\n );\n ref.current.isActive = isActive;\n },\n isActive: autostart,\n callbackId: -1,\n });\n\n useEffect(() => {\n ref.current.callbackId =\n frameCallbackRegistry.registerFrameCallback(callback);\n ref.current.setActive(ref.current.isActive);\n\n return () => {\n frameCallbackRegistry.unregisterFrameCallback(ref.current.callbackId);\n ref.current.callbackId = -1;\n };\n }, [callback, autostart]);\n\n return ref.current;\n}\n","export function useReducedMotion() {\n return !window.matchMedia('(prefers-reduced-motion: no-preference)').matches;\n}\n","import type { RefObject } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport type Animated from '../../index'; // TODO: fixme?\nimport type { ScrollEvent } from './useAnimatedScrollHandler';\nimport type { SharedValue } from '../commonTypes';\nimport { findNodeHandle } from 'react-native';\nimport { useEvent } from './utils';\nimport { useSharedValue } from './useSharedValue';\n\nconst scrollEventNames = [\n 'onScroll',\n 'onScrollBeginDrag',\n 'onScrollEndDrag',\n 'onMomentumScrollBegin',\n 'onMomentumScrollEnd',\n];\n\nexport function useScrollViewOffset(\n aref: RefObject,\n initialRef?: SharedValue\n): SharedValue {\n const offsetRef = useRef(\n initialRef !== undefined ? initialRef : useSharedValue(0)\n );\n\n const event = useEvent((event: ScrollEvent) => {\n 'worklet';\n offsetRef.current.value =\n event.contentOffset.x === 0\n ? event.contentOffset.y\n : event.contentOffset.x;\n }, scrollEventNames);\n\n useEffect(() => {\n const viewTag = findNodeHandle(aref.current);\n // @ts-ignore TODO TYPESCRIPT This happens because of\n // how we had to type `useEvent` to get rid of .d.ts file.\n event.current?.registerForEvents(viewTag as number);\n }, [aref.current]);\n\n return offsetRef.current;\n}\n","import { useEffect, useRef } from 'react';\nimport { cancelAnimation } from '../animation';\nimport type { SharedValue } from '../commonTypes';\nimport { makeMutable } from '../core';\n\nexport function useSharedValue(\n init: T,\n oneWayReadsOnly = false\n): SharedValue {\n const ref = useRef>(makeMutable(init, oneWayReadsOnly));\n\n if (ref.current === null) {\n ref.current = makeMutable(init, oneWayReadsOnly);\n }\n\n useEffect(() => {\n return () => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n cancelAnimation(ref.current!);\n };\n }, []);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return ref.current!;\n}\n","import type { MutableRefObject } from 'react';\nimport { useEffect, useRef } from 'react';\nimport type {\n Context,\n NativeEvent,\n NestedObjectValues,\n WorkletFunction,\n AnimationObject,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\nimport { makeRemote } from '../core';\nimport { isWeb, isJest } from '../PlatformChecker';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport type { ContextWithDependencies, DependencyList } from './commonTypes';\nimport type { NativeSyntheticEvent } from 'react-native';\ninterface Handler extends WorkletFunction {\n (event: T, context: TContext): void;\n}\n\ninterface Handlers {\n [key: string]: Handler | undefined;\n}\n\ninterface UseHandlerContext {\n context: TContext;\n doDependenciesDiffer: boolean;\n useWeb: boolean;\n}\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype useEventType = (\n handler: (e: T) => void,\n eventNames?: string[],\n rebuild?: boolean\n) => (e: NativeSyntheticEvent) => void;\n\nexport const useEvent = function >(\n handler: (event: T) => void,\n eventNames: string[] = [],\n rebuild = false\n): MutableRefObject | null> {\n const initRef = useRef | null>(null);\n if (initRef.current === null) {\n initRef.current = new WorkletEventHandler(handler, eventNames);\n } else if (rebuild) {\n initRef.current.updateWorklet(handler);\n }\n\n return initRef;\n // TODO TYPESCRIPT This cast is to get rid of .d.ts file.\n} as unknown as useEventType;\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\ntype useHandlerType = >(\n handlers: Handlers,\n deps?: DependencyList\n) => { context: TContext; doDependenciesDiffer: boolean; useWeb: boolean };\n\nexport const useHandler = function (\n handlers: Handlers,\n dependencies?: DependencyList\n): UseHandlerContext {\n const initRef = useRef | null>(null);\n if (initRef.current === null) {\n initRef.current = {\n context: makeRemote({} as TContext),\n savedDependencies: [],\n };\n }\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n const { context, savedDependencies } = initRef.current;\n\n dependencies = buildDependencies(dependencies, handlers);\n\n const doDependenciesDiffer = !areDependenciesEqual(\n dependencies,\n savedDependencies\n );\n initRef.current.savedDependencies = dependencies;\n const useWeb = isWeb() || isJest();\n\n return { context, doDependenciesDiffer, useWeb };\n // TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\n} as useHandlerType;\n\n// builds one big hash from multiple worklets' hashes\nexport function buildWorkletsHash(\n handlers: Record | Array\n): string {\n return Object.values(handlers).reduce(\n (acc: string, worklet: WorkletFunction) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n acc + worklet.__workletHash!.toString(),\n ''\n );\n}\n\n// builds dependencies array for gesture handlers\nfunction buildDependencies(\n dependencies: DependencyList,\n handlers: Record\n): Array {\n const handlersList: WorkletFunction[] = Object.values(handlers).filter(\n (handler) => handler !== undefined\n ) as WorkletFunction[];\n if (!dependencies) {\n dependencies = handlersList.map((handler) => {\n return {\n workletHash: handler.__workletHash,\n closure: handler._closure,\n };\n });\n } else {\n dependencies.push(buildWorkletsHash(handlersList));\n }\n\n return dependencies;\n}\n\n// this is supposed to work as useEffect comparison\nfunction areDependenciesEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n): boolean {\n function is(x: number, y: number) {\n /* eslint-disable no-self-compare */\n return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);\n /* eslint-enable no-self-compare */\n }\n const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =\n typeof Object.is === 'function' ? Object.is : is;\n\n function areHookInputsEqual(\n nextDeps: DependencyList,\n prevDeps: DependencyList\n ): boolean {\n if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {\n return false;\n }\n for (let i = 0; i < prevDeps.length; ++i) {\n if (!objectIs(nextDeps[i], prevDeps[i])) {\n return false;\n }\n }\n return true;\n }\n\n return areHookInputsEqual(nextDeps, prevDeps);\n}\n\nexport function isAnimated(prop: NestedObjectValues): boolean {\n 'worklet';\n if (Array.isArray(prop)) {\n return prop.some(isAnimated);\n } else if (typeof prop === 'object' && prop !== null) {\n if (prop.onFrame !== undefined) {\n return true;\n } else {\n return Object.values(prop).some(isAnimated);\n }\n }\n return false;\n}\n\nexport function shallowEqual(a: any, b: any) {\n 'worklet';\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n for (let i = 0; i < aKeys.length; i++) {\n if (a[aKeys[i]] !== b[aKeys[i]]) {\n return false;\n }\n }\n return true;\n}\n\nexport const validateAnimatedStyles = (styles: AnimatedStyle): void => {\n 'worklet';\n if (typeof styles !== 'object') {\n throw new Error(\n `useAnimatedStyle has to return an object, found ${typeof styles} instead`\n );\n } else if (Array.isArray(styles)) {\n throw new Error(\n 'useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.'\n );\n }\n};\n","import './publicGlobals';\n\nexport * from './core';\nexport * from './hook';\nexport * from './animation';\nexport * from './interpolation';\nexport * from './interpolateColor';\nexport * from './Easing';\nexport * from './NativeMethods';\nexport * from './Colors';\nexport * from './PropAdapters';\nexport * from './layoutReanimation';\nexport * from './utils';\nexport * from './commonTypes';\nexport * from './frameCallback';\nexport * from './pluginUtils';\nexport * from './jestUtils';\nexport type {\n Adaptable,\n AdaptTransforms,\n AnimateProps,\n AnimatedProps,\n AnimatedTransform,\n TransformStyleTypes,\n AnimateStyle,\n AnimatedStyle,\n StylesOrDefault,\n} from './helperTypes';\nexport type { AnimatedScrollViewProps } from './component/ScrollView';\nexport type { FlatListPropsWithLayout } from './component/FlatList';\n","import { reportFatalErrorOnJS } from './errors';\nimport NativeReanimatedModule from './NativeReanimated';\nimport { isChromeDebugger, isJest, shouldBeUseWeb } from './PlatformChecker';\nimport {\n runOnJS,\n setupMicrotasks,\n callMicrotasks,\n runOnUIImmediately,\n} from './threads';\n\n// callGuard is only used with debug builds\nfunction callGuardDEV, U>(\n fn: (...args: T) => U,\n ...args: T\n): void {\n 'worklet';\n try {\n fn(...args);\n } catch (e) {\n if (global.__ErrorUtils) {\n global.__ErrorUtils.reportFatalError(e as Error);\n } else {\n throw e;\n }\n }\n}\n\nfunction valueUnpacker(objectToUnpack: any, category?: string): any {\n 'worklet';\n let workletsCache = global.__workletsCache;\n let handleCache = global.__handleCache;\n if (workletsCache === undefined) {\n // init\n workletsCache = global.__workletsCache = new Map();\n handleCache = global.__handleCache = new WeakMap();\n }\n const workletHash = objectToUnpack.__workletHash;\n if (workletHash !== undefined) {\n let workletFun = workletsCache.get(workletHash);\n if (workletFun === undefined) {\n const initData = objectToUnpack.__initData;\n if (global.evalWithSourceMap) {\n // if the runtime (hermes only for now) supports loading source maps\n // we want to use the proper filename for the location as it guarantees\n // that debugger understands and loads the source code of the file where\n // the worklet is defined.\n workletFun = global.evalWithSourceMap(\n '(' + initData.code + '\\n)',\n initData.location,\n initData.sourceMap\n ) as (...args: any[]) => any;\n } else if (global.evalWithSourceUrl) {\n // if the runtime doesn't support loading source maps, in dev mode we\n // can pass source url when evaluating the worklet. Now, instead of using\n // the actual file location we use worklet hash, as it the allows us to\n // properly symbolicate traces (see errors.ts for details)\n workletFun = global.evalWithSourceUrl(\n '(' + initData.code + '\\n)',\n `worklet_${workletHash}`\n ) as (...args: any[]) => any;\n } else {\n // in release we use the regular eval to save on JSI calls\n // eslint-disable-next-line no-eval\n workletFun = eval('(' + initData.code + '\\n)') as (\n ...args: any[]\n ) => any;\n }\n workletsCache.set(workletHash, workletFun);\n }\n const functionInstance = workletFun.bind(objectToUnpack);\n objectToUnpack._recur = functionInstance;\n return functionInstance;\n } else if (objectToUnpack.__init) {\n let value = handleCache!.get(objectToUnpack);\n if (value === undefined) {\n value = objectToUnpack.__init();\n handleCache!.set(objectToUnpack, value);\n }\n return value;\n } else if (category === 'RemoteFunction') {\n const fun = () => {\n throw new Error(`Tried to synchronously call a non-worklet function on the UI thread.\n\nPossible solutions are:\n a) If you want to synchronously execute this method, mark it as a worklet\n b) If you want to execute this function on the JS thread, wrap it using \\`runOnJS\\``);\n };\n fun.__remoteFunction = objectToUnpack;\n return fun;\n } else {\n throw new Error('data type not recognized by unpack method');\n }\n}\n\nfunction setupRequestAnimationFrame() {\n 'worklet';\n\n // Jest mocks requestAnimationFrame API and it does not like if that mock gets overridden\n // so we avoid doing requestAnimationFrame batching in Jest environment.\n const nativeRequestAnimationFrame = global.requestAnimationFrame;\n\n let animationFrameCallbacks: Array<(timestamp: number) => void> = [];\n let lastNativeAnimationFrameTimestamp = -1;\n\n global.__flushAnimationFrame = (frameTimestamp: number) => {\n const currentCallbacks = animationFrameCallbacks;\n animationFrameCallbacks = [];\n currentCallbacks.forEach((f) => f(frameTimestamp));\n callMicrotasks();\n };\n\n global.requestAnimationFrame = (\n callback: (timestamp: number) => void\n ): number => {\n animationFrameCallbacks.push(callback);\n if (animationFrameCallbacks.length === 1) {\n // We schedule native requestAnimationFrame only when the first callback\n // is added and then use it to execute all the enqueued callbacks. Once\n // the callbacks are run, we clear the array.\n nativeRequestAnimationFrame((timestamp) => {\n if (lastNativeAnimationFrameTimestamp >= timestamp) {\n // Make sure we only execute the callbacks once for a given frame\n return;\n }\n lastNativeAnimationFrameTimestamp = timestamp;\n global.__frameTimestamp = timestamp;\n global.__flushAnimationFrame(timestamp);\n global.__frameTimestamp = undefined;\n });\n }\n // Reanimated currently does not support cancelling callbacks requested with\n // requestAnimationFrame. We return -1 as identifier which isn't in line\n // with the spec but it should give users better clue in case they actually\n // attempt to store the value returned from rAF and use it for cancelling.\n return -1;\n };\n}\n\nexport function initializeUIRuntime() {\n NativeReanimatedModule.installCoreFunctions(callGuardDEV, valueUnpacker);\n\n const IS_JEST = isJest();\n const IS_CHROME_DEBUGGER = isChromeDebugger();\n const IS_NATIVE = !shouldBeUseWeb();\n\n if (IS_JEST) {\n // requestAnimationFrame react-native jest's setup is incorrect as it polyfills\n // the method directly using setTimeout, therefore the callback doesn't get the\n // expected timestamp as the only argument: https://github.com/facebook/react-native/blob/main/jest/setup.js#L28\n // We override this setup here to make sure that callbacks get the proper timestamps\n // when executed. For non-jest environments we define requestAnimationFrame in setupRequestAnimationFrame\n // @ts-ignore TypeScript uses Node definition for rAF, setTimeout, etc which returns a Timeout object rather than a number\n global.requestAnimationFrame = (callback: (timestamp: number) => void) => {\n return setTimeout(() => callback(performance.now()), 0);\n };\n }\n\n // We really have to create a copy of console here. Function runOnJS we use on elements inside\n // this object makes it not configurable\n const capturableConsole = { ...console };\n runOnUIImmediately(() => {\n 'worklet';\n // setup error handler\n global.__ErrorUtils = {\n reportFatalError: (error: Error) => {\n runOnJS(reportFatalErrorOnJS)({\n message: error.message,\n stack: error.stack,\n });\n },\n };\n\n if (!IS_CHROME_DEBUGGER) {\n // setup console\n // @ts-ignore TypeScript doesn't like that there are missing methods in console object, but we don't provide all the methods for the UI runtime console version\n global.console = {\n assert: runOnJS(capturableConsole.assert),\n debug: runOnJS(capturableConsole.debug),\n log: runOnJS(capturableConsole.log),\n warn: runOnJS(capturableConsole.warn),\n error: runOnJS(capturableConsole.error),\n info: runOnJS(capturableConsole.info),\n };\n }\n\n if (IS_NATIVE) {\n setupMicrotasks();\n setupRequestAnimationFrame();\n }\n })();\n}\n","import {\n hsvToColor,\n RGBtoHSV,\n rgbaColor,\n processColor,\n red,\n green,\n blue,\n opacity,\n} from './Colors';\nimport { makeMutable } from './core';\nimport { interpolate } from './interpolation';\nimport type { SharedValue } from './commonTypes';\nimport { useSharedValue } from './hook/useSharedValue';\n\nexport const Extrapolate = {\n EXTEND: 'extend',\n CLAMP: 'clamp',\n IDENTITY: 'identity',\n};\n\nexport type InterpolationOptions = {\n gamma?: number;\n useCorrectedHSVInterpolation?: boolean;\n};\n\nconst interpolateColorsHSV = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateHSV,\n options: InterpolationOptions\n) => {\n 'worklet';\n let h = 0;\n const { useCorrectedHSVInterpolation = true } = options;\n if (useCorrectedHSVInterpolation) {\n // if the difference between hues in a range is > 180 deg\n // then move the hue at the right end of the range +/- 360 deg\n // and add the next point in the original place + 0.00001 with original hue\n // to not break the next range\n const correctedInputRange = [inputRange[0]];\n const originalH = colors.h;\n const correctedH = [originalH[0]];\n\n for (let i = 1; i < originalH.length; ++i) {\n const d = originalH[i] - originalH[i - 1];\n if (originalH[i] > originalH[i - 1] && d > 0.5) {\n correctedInputRange.push(inputRange[i]);\n correctedInputRange.push(inputRange[i] + 0.00001);\n correctedH.push(originalH[i] - 1);\n correctedH.push(originalH[i]);\n } else if (originalH[i] < originalH[i - 1] && d < -0.5) {\n correctedInputRange.push(inputRange[i]);\n correctedInputRange.push(inputRange[i] + 0.00001);\n correctedH.push(originalH[i] + 1);\n correctedH.push(originalH[i]);\n } else {\n correctedInputRange.push(inputRange[i]);\n correctedH.push(originalH[i]);\n }\n }\n h =\n (interpolate(value, correctedInputRange, correctedH, Extrapolate.CLAMP) +\n 1) %\n 1;\n } else {\n h = interpolate(value, inputRange, colors.h, Extrapolate.CLAMP);\n }\n const s = interpolate(value, inputRange, colors.s, Extrapolate.CLAMP);\n const v = interpolate(value, inputRange, colors.v, Extrapolate.CLAMP);\n const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);\n return hsvToColor(h, s, v, a);\n};\n\nconst toLinearSpace = (x: number[], gamma: number): number[] => {\n 'worklet';\n return x.map((v) => Math.pow(v / 255, gamma));\n};\n\nconst toGammaSpace = (x: number, gamma: number): number => {\n 'worklet';\n return Math.round(Math.pow(x, 1 / gamma) * 255);\n};\n\nconst interpolateColorsRGB = (\n value: number,\n inputRange: readonly number[],\n colors: InterpolateRGB,\n options: InterpolationOptions\n) => {\n 'worklet';\n const { gamma = 2.2 } = options;\n let { r: outputR, g: outputG, b: outputB } = colors;\n if (gamma !== 1) {\n outputR = toLinearSpace(outputR, gamma);\n outputG = toLinearSpace(outputG, gamma);\n outputB = toLinearSpace(outputB, gamma);\n }\n const r = interpolate(value, inputRange, outputR, Extrapolate.CLAMP);\n const g = interpolate(value, inputRange, outputG, Extrapolate.CLAMP);\n const b = interpolate(value, inputRange, outputB, Extrapolate.CLAMP);\n const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);\n if (gamma === 1) {\n return rgbaColor(r, g, b, a);\n }\n return rgbaColor(\n toGammaSpace(r, gamma),\n toGammaSpace(g, gamma),\n toGammaSpace(b, gamma),\n a\n );\n};\n\nexport interface InterpolateRGB {\n r: number[];\n g: number[];\n b: number[];\n a: number[];\n}\n\nconst getInterpolateRGB = (\n colors: readonly (string | number)[]\n): InterpolateRGB => {\n 'worklet';\n\n const r = [];\n const g = [];\n const b = [];\n const a = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = processColor(color);\n // explicit check in case if processedColor is 0\n if (processedColor !== null && processedColor !== undefined) {\n r.push(red(processedColor));\n g.push(green(processedColor));\n b.push(blue(processedColor));\n a.push(opacity(processedColor));\n }\n }\n return { r, g, b, a };\n};\n\nexport interface InterpolateHSV {\n h: number[];\n s: number[];\n v: number[];\n a: number[];\n}\n\nconst getInterpolateHSV = (\n colors: readonly (string | number)[]\n): InterpolateHSV => {\n 'worklet';\n const h = [];\n const s = [];\n const v = [];\n const a = [];\n for (let i = 0; i < colors.length; ++i) {\n const color = colors[i];\n const processedColor = processColor(color) as any;\n if (typeof processedColor === 'number') {\n const processedHSVColor = RGBtoHSV(\n red(processedColor),\n green(processedColor),\n blue(processedColor)\n );\n\n h.push(processedHSVColor.h);\n s.push(processedHSVColor.s);\n v.push(processedHSVColor.v);\n a.push(opacity(processedColor));\n }\n }\n return { h, s, v, a };\n};\n\nexport function interpolateColor(\n value: number,\n inputRange: readonly number[],\n outputRange: readonly string[],\n colorSpace?: 'RGB' | 'HSV',\n options?: InterpolationOptions\n): string;\n\nexport function interpolateColor(\n value: number,\n inputRange: readonly number[],\n outputRange: readonly number[],\n colorSpace?: 'RGB' | 'HSV',\n options?: InterpolationOptions\n): number;\n\nexport function interpolateColor(\n value: number,\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace: 'RGB' | 'HSV' = 'RGB',\n options: InterpolationOptions = {}\n): string | number {\n 'worklet';\n if (colorSpace === 'HSV') {\n return interpolateColorsHSV(\n value,\n inputRange,\n getInterpolateHSV(outputRange),\n options\n );\n } else if (colorSpace === 'RGB') {\n return interpolateColorsRGB(\n value,\n inputRange,\n getInterpolateRGB(outputRange),\n options\n );\n }\n throw new Error(\n `Invalid color space provided: ${colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n}\n\nexport enum ColorSpace {\n RGB = 0,\n HSV = 1,\n}\n\nexport interface InterpolateConfig {\n inputRange: readonly number[];\n outputRange: readonly (string | number)[];\n colorSpace: ColorSpace;\n cache: SharedValue;\n options: InterpolationOptions;\n}\n\nexport function useInterpolateConfig(\n inputRange: readonly number[],\n outputRange: readonly (string | number)[],\n colorSpace = ColorSpace.RGB,\n options: InterpolationOptions = {}\n): SharedValue {\n return useSharedValue({\n inputRange,\n outputRange,\n colorSpace,\n cache: makeMutable(null),\n options,\n });\n}\n\nexport const interpolateSharableColor = (\n value: number,\n interpolateConfig: SharedValue\n): string | number => {\n 'worklet';\n let colors = interpolateConfig.value.cache.value;\n if (interpolateConfig.value.colorSpace === ColorSpace.RGB) {\n if (!colors) {\n colors = getInterpolateRGB(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsRGB(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateRGB,\n interpolateConfig.value.options\n );\n } else if (interpolateConfig.value.colorSpace === ColorSpace.HSV) {\n if (!colors) {\n colors = getInterpolateHSV(interpolateConfig.value.outputRange);\n interpolateConfig.value.cache.value = colors;\n }\n return interpolateColorsHSV(\n value,\n interpolateConfig.value.inputRange,\n colors as InterpolateHSV,\n interpolateConfig.value.options\n );\n }\n throw new Error(\n `Invalid color space provided: ${interpolateConfig.value.colorSpace}. Supported values are: ['RGB', 'HSV']`\n );\n};\n","export enum Extrapolation {\n IDENTITY = 'identity',\n CLAMP = 'clamp',\n EXTEND = 'extend',\n}\n\ninterface InterpolationNarrowedInput {\n leftEdgeInput: number;\n rightEdgeInput: number;\n leftEdgeOutput: number;\n rightEdgeOutput: number;\n}\n\nexport interface ExtrapolationConfig {\n extrapolateLeft?: Extrapolation | string;\n extrapolateRight?: Extrapolation | string;\n}\n\ninterface RequiredExtrapolationConfig {\n extrapolateLeft: Extrapolation;\n extrapolateRight: Extrapolation;\n}\n\nexport type ExtrapolationType =\n | ExtrapolationConfig\n | Extrapolation\n | string\n | undefined;\n\nfunction getVal(\n type: Extrapolation,\n coef: number,\n val: number,\n leftEdgeOutput: number,\n rightEdgeOutput: number,\n x: number\n): number {\n 'worklet';\n\n switch (type) {\n case Extrapolation.IDENTITY:\n return x;\n case Extrapolation.CLAMP:\n if (coef * val < coef * leftEdgeOutput) {\n return leftEdgeOutput;\n }\n return rightEdgeOutput;\n case Extrapolation.EXTEND:\n default:\n return val;\n }\n}\n\nfunction isExtrapolate(value: string): value is Extrapolation {\n 'worklet';\n\n return (\n value === Extrapolation.EXTEND ||\n value === Extrapolation.CLAMP ||\n value === Extrapolation.IDENTITY\n );\n}\n\n// validates extrapolations type\n// if type is correct, converts it to ExtrapolationConfig\nfunction validateType(type: ExtrapolationType): RequiredExtrapolationConfig {\n 'worklet';\n // initialize extrapolationConfig with default extrapolation\n const extrapolationConfig: RequiredExtrapolationConfig = {\n extrapolateLeft: Extrapolation.EXTEND,\n extrapolateRight: Extrapolation.EXTEND,\n };\n\n if (!type) {\n return extrapolationConfig;\n }\n\n if (typeof type === 'string') {\n if (!isExtrapolate(type)) {\n throw new Error(\n `Reanimated: not supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], \"clamp\")`\n );\n }\n extrapolationConfig.extrapolateLeft = type;\n extrapolationConfig.extrapolateRight = type;\n return extrapolationConfig;\n }\n\n // otherwise type is extrapolation config object\n if (\n (type.extrapolateLeft && !isExtrapolate(type.extrapolateLeft)) ||\n (type.extrapolateRight && !isExtrapolate(type.extrapolateRight))\n ) {\n throw new Error(\n `Reanimated: not supported value for \"interpolate\" \\nSupported values: [\"extend\", \"clamp\", \"identity\", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\\n Valid example:\n interpolate(value, [inputRange], [outputRange], {\n extrapolateLeft: Extrapolation.CLAMP,\n extrapolateRight: Extrapolation.IDENTITY\n }})`\n );\n }\n\n Object.assign(extrapolationConfig, type);\n return extrapolationConfig;\n}\n\nfunction internalInterpolate(\n x: number,\n narrowedInput: InterpolationNarrowedInput,\n extrapolationConfig: RequiredExtrapolationConfig\n) {\n 'worklet';\n const { leftEdgeInput, rightEdgeInput, leftEdgeOutput, rightEdgeOutput } =\n narrowedInput;\n if (rightEdgeInput - leftEdgeInput === 0) return leftEdgeOutput;\n const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);\n const val = leftEdgeOutput + progress * (rightEdgeOutput - leftEdgeOutput);\n const coef = rightEdgeOutput >= leftEdgeOutput ? 1 : -1;\n\n if (coef * val < coef * leftEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateLeft,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n } else if (coef * val > coef * rightEdgeOutput) {\n return getVal(\n extrapolationConfig.extrapolateRight,\n coef,\n val,\n leftEdgeOutput,\n rightEdgeOutput,\n x\n );\n }\n\n return val;\n}\n\n// TODO: support default values in worklets:\n// e.g. function interpolate(x, input, output, type = Extrapolatation.CLAMP)\nexport function interpolate(\n x: number,\n input: readonly number[],\n output: readonly number[],\n type?: ExtrapolationType\n): number {\n 'worklet';\n if (input.length < 2 || output.length < 2) {\n throw Error(\n 'Interpolation input and output should contain at least two values.'\n );\n }\n\n const extrapolationConfig = validateType(type);\n const length = input.length;\n const narrowedInput: InterpolationNarrowedInput = {\n leftEdgeInput: input[0],\n rightEdgeInput: input[1],\n leftEdgeOutput: output[0],\n rightEdgeOutput: output[1],\n };\n if (length > 2) {\n if (x > input[length - 1]) {\n narrowedInput.leftEdgeInput = input[length - 2];\n narrowedInput.rightEdgeInput = input[length - 1];\n narrowedInput.leftEdgeOutput = output[length - 2];\n narrowedInput.rightEdgeOutput = output[length - 1];\n } else {\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput.leftEdgeInput = input[i - 1];\n narrowedInput.rightEdgeInput = input[i];\n narrowedInput.leftEdgeOutput = output[i - 1];\n narrowedInput.rightEdgeOutput = output[i];\n break;\n }\n }\n }\n }\n\n return internalInterpolate(x, narrowedInput, extrapolationConfig);\n}\n","import { isChromeDebugger, isJest, isWeb } from '../PlatformChecker';\nimport type {\n ShareableRef,\n ShareableSyncDataHolderRef,\n Value3D,\n ValueRotation,\n} from '../commonTypes';\nimport { SensorType } from '../commonTypes';\nimport type { WebSensor } from './WebSensor';\n\nexport default class JSReanimated {\n native = false;\n nextSensorId = 0;\n sensors = new Map();\n platform?: Platform = undefined;\n\n makeShareableClone(): ShareableRef {\n throw new Error(\n '[Reanimated] makeShareableClone should never be called in JSReanimated.'\n );\n }\n\n installCoreFunctions(\n _callGuard: , U>(\n fn: (...args: T) => U,\n ...args: T\n ) => void,\n _valueUnpacker: (value: T) => T\n ): void {\n // noop\n }\n\n scheduleOnUI(worklet: ShareableRef) {\n // @ts-ignore web implementation has still not been updated after the rewrite, this will be addressed once the web implementation updates are ready\n requestAnimationFrame(worklet);\n }\n\n registerEventHandler(\n _eventHash: string,\n _eventHandler: ShareableRef\n ): number {\n // noop\n return -1;\n }\n\n unregisterEventHandler(_: number): void {\n // noop\n }\n\n enableLayoutAnimations() {\n if (isWeb()) {\n console.warn(\n '[Reanimated] Layout Animations are not supported on web yet.'\n );\n } else if (isChromeDebugger()) {\n console.warn(\n '[Reanimated] Layout Animations are no-ops when using Chrome Debugger.'\n );\n } else if (isJest()) {\n console.warn(\n '[Reanimated] Layout Animations are no-ops when using Jest.'\n );\n } else {\n console.warn(\n '[Reanimated] Layout Animations are not supported on this configuration.'\n );\n }\n }\n\n configureLayoutAnimation() {\n // no-op\n }\n\n registerSensor(\n sensorType: SensorType,\n interval: number,\n _iosReferenceFrame: number,\n eventHandler: ShareableRef<(data: Value3D | ValueRotation) => void>\n ): number {\n if (this.platform === undefined) {\n this.detectPlatform();\n }\n\n if (!(this.getSensorName(sensorType) in window)) {\n // https://w3c.github.io/sensors/#secure-context\n console.warn(\n '[Reanimated] Sensor is not available.' +\n (isWeb() && location.protocol !== 'https:'\n ? ' Make sure you use secure origin with `npx expo start --web --https`.'\n : '') +\n (this.platform === Platform.WEB_IOS\n ? ' For iOS web, you will also have to also grant permission in the browser: https://dev.to/li/how-to-requestpermission-for-devicemotion-and-deviceorientation-events-in-ios-13-46g2.'\n : '')\n );\n return -1;\n }\n\n if (this.platform === undefined) {\n this.detectPlatform();\n }\n\n const sensor: WebSensor = this.initializeSensor(sensorType, interval);\n let callback;\n if (sensorType === SensorType.ROTATION) {\n callback = () => {\n let [qw, qx, qy, qz] = sensor.quaternion;\n\n // Android sensors have a different coordinate system than iOS\n if (this.platform === Platform.WEB_ANDROID) {\n [qy, qz] = [qz, -qy];\n }\n\n // reference: https://stackoverflow.com/questions/5782658/extracting-yaw-from-a-quaternion\n const yaw = Math.atan2(\n 2.0 * (qy * qz + qw * qx),\n qw * qw - qx * qx - qy * qy + qz * qz\n );\n const pitch = Math.sin(-2.0 * (qx * qz - qw * qy));\n const roll = Math.atan2(\n 2.0 * (qx * qy + qw * qz),\n qw * qw + qx * qx - qy * qy - qz * qz\n );\n // TODO TYPESCRIPT on web ShareableRef is the value itself so we call it directly\n (eventHandler as any)({\n qw,\n qx,\n qy,\n qz,\n yaw,\n pitch,\n roll,\n interfaceOrientation: 0,\n });\n };\n } else {\n callback = () => {\n let { x, y, z } = sensor;\n [x, y, z] =\n this.platform === Platform.WEB_ANDROID ? [-x, -y, -z] : [x, y, z];\n // TODO TYPESCRIPT on web ShareableRef is the value itself so we call it directly\n (eventHandler as any)({ x, y, z, interfaceOrientation: 0 });\n };\n }\n sensor.addEventListener('reading', callback);\n sensor.start();\n\n this.sensors.set(this.nextSensorId, sensor);\n return this.nextSensorId++;\n }\n\n unregisterSensor(id: number): void {\n const sensor: WebSensor | undefined = this.sensors.get(id);\n if (sensor !== undefined) {\n sensor.stop();\n this.sensors.delete(id);\n }\n }\n\n subscribeForKeyboardEvents(_: ShareableRef): number {\n if (isWeb()) {\n console.warn(\n '[Reanimated] useAnimatedKeyboard is not available on web yet.'\n );\n } else if (isChromeDebugger()) {\n console.warn(\n '[Reanimated] useAnimatedKeyboard is not available when using Chrome Debugger.'\n );\n } else if (isJest()) {\n console.warn(\n '[Reanimated] useAnimatedKeyboard is not available when using Jest.'\n );\n } else {\n console.warn(\n '[Reanimated] useAnimatedKeyboard is not available on this configuration.'\n );\n }\n return -1;\n }\n\n unsubscribeFromKeyboardEvents(_: number): void {\n // noop\n }\n\n initializeSensor(sensorType: SensorType, interval: number): WebSensor {\n const config =\n interval <= 0\n ? { referenceFrame: 'device' }\n : { frequency: 1000 / interval };\n switch (sensorType) {\n case SensorType.ACCELEROMETER:\n return new window.Accelerometer(config);\n case SensorType.GYROSCOPE:\n return new window.Gyroscope(config);\n case SensorType.GRAVITY:\n return new window.GravitySensor(config);\n case SensorType.MAGNETIC_FIELD:\n return new window.Magnetometer(config);\n case SensorType.ROTATION:\n return new window.AbsoluteOrientationSensor(config);\n }\n }\n\n getSensorName(sensorType: SensorType): string {\n switch (sensorType) {\n case SensorType.ACCELEROMETER:\n return 'Accelerometer';\n case SensorType.GRAVITY:\n return 'GravitySensor';\n case SensorType.GYROSCOPE:\n return 'Gyroscope';\n case SensorType.MAGNETIC_FIELD:\n return 'Magnetometer';\n case SensorType.ROTATION:\n return 'AbsoluteOrientationSensor';\n }\n }\n\n detectPlatform() {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n if (userAgent === undefined) {\n this.platform = Platform.UNKNOWN;\n } else if (/iPad|iPhone|iPod/.test(userAgent)) {\n this.platform = Platform.WEB_IOS;\n } else if (/android/i.test(userAgent)) {\n this.platform = Platform.WEB_ANDROID;\n } else {\n this.platform = Platform.WEB;\n }\n }\n\n makeSynchronizedDataHolder(\n _valueRef: ShareableRef\n ): ShareableSyncDataHolderRef {\n throw new Error(\n '[Reanimated] makeSynchronizedDataHolder is not available in JSReanimated.'\n );\n }\n\n getDataSynchronously(_ref: ShareableSyncDataHolderRef): T {\n throw new Error(\n '[Reanimated] getDataSynchronously is not available in JSReanimated.'\n );\n }\n\n getViewProp(\n _viewTag: string,\n _propName: string,\n _callback?: (result: T) => void\n ): Promise {\n throw new Error(\n '[Reanimated] getViewProp is not available in JSReanimated.'\n );\n }\n\n configureProps() {\n throw new Error(\n '[Reanimated] configureProps is not available in JSReanimated.'\n );\n }\n}\n\nenum Platform {\n WEB_IOS = 'web iOS',\n WEB_ANDROID = 'web Android',\n WEB = 'web',\n UNKNOWN = 'unknown',\n}\n\ndeclare global {\n interface Navigator {\n userAgent?: string;\n vendor?: string;\n }\n}\n","import JSReanimated from './JSReanimated';\nimport type { StyleProps } from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\nimport { isWeb } from '../PlatformChecker';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet createReactDOMStyle: (style: any) => any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet createTransformValue: (transform: any) => any;\n\nif (isWeb()) {\n try {\n createReactDOMStyle =\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle').default;\n } catch (e) {}\n\n try {\n // React Native Web 0.19+\n createTransformValue =\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('react-native-web/dist/exports/StyleSheet/preprocess').createTransformValue;\n } catch (e) {}\n}\n\nconst reanimatedJS = new JSReanimated();\n\nglobal._makeShareableClone = () => {\n throw new Error(\n '[Reanimated] _makeShareableClone should never be called in JSReanimated.'\n );\n};\n\nglobal._scheduleOnJS = () => {\n throw new Error(\n '[Reanimated] _scheduleOnJS should never be called in JSReanimated.'\n );\n};\n\ninterface JSReanimatedComponent {\n previousStyle: StyleProps;\n setNativeProps?: (style: StyleProps) => void;\n style?: StyleProps;\n props: Record;\n _touchableNode: {\n setAttribute: (key: string, props: unknown) => void;\n };\n}\n\nexport const _updatePropsJS = (\n updates: StyleProps | AnimatedStyle,\n viewRef: { _component?: JSReanimatedComponent }\n): void => {\n if (viewRef._component) {\n const component = viewRef._component;\n const [rawStyles] = Object.keys(updates).reduce(\n (acc: [StyleProps, AnimatedStyle], key) => {\n const value = updates[key];\n const index = typeof value === 'function' ? 1 : 0;\n acc[index][key] = value;\n return acc;\n },\n [{}, {}]\n );\n\n if (typeof component.setNativeProps === 'function') {\n // This is the legacy way to update props on React Native Web <= 0.18.\n // Also, some components (e.g. from react-native-svg) don't have styles\n // and always provide setNativeProps function instead (even on React Native Web 0.19+).\n setNativeProps(component, rawStyles);\n } else if (\n createReactDOMStyle !== undefined &&\n component.style !== undefined\n ) {\n // React Native Web 0.19+ no longer provides setNativeProps function,\n // so we need to update DOM nodes directly.\n updatePropsDOM(component, rawStyles);\n } else if (Object.keys(component.props).length > 0) {\n Object.keys(component.props).forEach((key) => {\n if (!rawStyles[key]) {\n return;\n }\n const dashedKey = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());\n component._touchableNode.setAttribute(dashedKey, rawStyles[key]);\n });\n } else {\n console.warn('It is not possible to manipulate component');\n }\n }\n};\n\nconst setNativeProps = (\n component: JSReanimatedComponent,\n style: StyleProps\n): void => {\n const previousStyle = component.previousStyle ? component.previousStyle : {};\n const currentStyle = { ...previousStyle, ...style };\n component.previousStyle = currentStyle;\n component.setNativeProps?.({ style: currentStyle });\n};\n\nconst updatePropsDOM = (\n component: JSReanimatedComponent,\n style: StyleProps\n): void => {\n const previousStyle = component.previousStyle ? component.previousStyle : {};\n const currentStyle = { ...previousStyle, ...style };\n component.previousStyle = currentStyle;\n\n const domStyle = createReactDOMStyle(currentStyle);\n if (Array.isArray(domStyle.transform) && createTransformValue !== undefined) {\n domStyle.transform = createTransformValue(domStyle.transform);\n }\n for (const key in domStyle) {\n (component.style as StyleProps)[key] = domStyle[key];\n }\n};\n\nexport default reanimatedJS;\n","import { withDelay } from '../../animation';\nimport type {\n EntryExitAnimationFunction,\n AnimationFunction,\n LayoutAnimationFunction,\n} from './commonTypes';\n\nexport class BaseAnimationBuilder {\n durationV?: number;\n delayV?: number;\n randomizeDelay = false;\n callbackV?: (finished: boolean) => void;\n\n static createInstance: (\n this: T\n ) => InstanceType;\n\n build = (): EntryExitAnimationFunction | LayoutAnimationFunction => {\n throw Error('Unimplemented method in child class.');\n };\n\n static duration(\n this: T,\n durationMs: number\n ): InstanceType {\n const instance = this.createInstance();\n return instance.duration(durationMs);\n }\n\n duration(durationMs: number): this {\n this.durationV = durationMs;\n return this;\n }\n\n static delay(\n this: T,\n delayMs: number\n ): InstanceType {\n const instance = this.createInstance();\n return instance.delay(delayMs);\n }\n\n delay(delayMs: number): this {\n this.delayV = delayMs;\n return this;\n }\n\n static withCallback(\n this: T,\n callback: (finished: boolean) => void\n ): InstanceType {\n const instance = this.createInstance();\n return instance.withCallback(callback);\n }\n\n withCallback(callback: (finsihed: boolean) => void): this {\n this.callbackV = callback;\n return this;\n }\n\n // 300ms is the default animation duration. If any animation has different default has to override this method.\n static getDuration(): number {\n return 300;\n }\n\n getDuration(): number {\n return this.durationV ?? 300;\n }\n\n static randomDelay(\n this: T\n ): InstanceType {\n const instance = this.createInstance();\n return instance.randomDelay();\n }\n\n randomDelay(): this {\n this.randomizeDelay = true;\n return this;\n }\n\n // when randomizeDelay is set to true, randomize delay between 0 and provided value (or 1000ms if delay is not provided)\n getDelay(): number {\n return this.randomizeDelay\n ? Math.random() * (this.delayV ?? 1000)\n : this.delayV ?? 0;\n }\n\n getDelayFunction(): AnimationFunction {\n const isDelayProvided = this.randomizeDelay || this.delayV;\n return isDelayProvided\n ? withDelay\n : (_, animation) => {\n 'worklet';\n return animation;\n };\n }\n\n static build(\n this: T\n ): EntryExitAnimationFunction | LayoutAnimationFunction {\n const instance = this.createInstance();\n return instance.build();\n }\n}\n","import { withTiming, withSpring } from '../../animation';\nimport type {\n AnimationFunction,\n BaseBuilderAnimationConfig,\n LayoutAnimationAndConfig,\n} from './commonTypes';\nimport type { EasingFunction } from '../../Easing';\nimport { BaseAnimationBuilder } from './BaseAnimationBuilder';\nimport type { StyleProps } from '../../commonTypes';\n\nexport class ComplexAnimationBuilder extends BaseAnimationBuilder {\n easingV?: EasingFunction;\n rotateV?: string;\n type?: AnimationFunction;\n dampingV?: number;\n dampingRatioV?: number;\n massV?: number;\n stiffnessV?: number;\n overshootClampingV?: number;\n restDisplacementThresholdV?: number;\n restSpeedThresholdV?: number;\n initialValues?: StyleProps;\n\n static createInstance: (\n this: T\n ) => InstanceType;\n\n static easing(\n this: T,\n easingFunction: EasingFunction\n ) {\n const instance = this.createInstance();\n return instance.easing(easingFunction);\n }\n\n easing(easingFunction: EasingFunction): this {\n this.easingV = easingFunction;\n return this;\n }\n\n static rotate(\n this: T,\n degree: string\n ) {\n const instance = this.createInstance();\n return instance.rotate(degree);\n }\n\n rotate(degree: string): this {\n this.rotateV = degree;\n return this;\n }\n\n static springify(\n this: T,\n duration?: number\n ): ComplexAnimationBuilder {\n const instance = this.createInstance();\n return instance.springify(duration);\n }\n\n springify(duration?: number): this {\n this.durationV = duration;\n this.type = withSpring as AnimationFunction;\n return this;\n }\n\n static dampingRatio(\n this: T,\n dampingRatio: number\n ) {\n const instance = this.createInstance();\n return instance.dampingRatio(dampingRatio);\n }\n\n dampingRatio(dampingRatio: number): this {\n this.dampingRatioV = dampingRatio;\n return this;\n }\n\n static damping(\n this: T,\n damping: number\n ) {\n const instance = this.createInstance();\n return instance.damping(damping);\n }\n\n damping(damping: number): this {\n this.dampingV = damping;\n return this;\n }\n\n static mass(this: T, mass: number) {\n const instance = this.createInstance();\n return instance.mass(mass);\n }\n\n mass(mass: number): this {\n this.massV = mass;\n return this;\n }\n\n static stiffness(\n this: T,\n stiffness: number\n ) {\n const instance = this.createInstance();\n return instance.stiffness(stiffness);\n }\n\n stiffness(stiffness: number): this {\n this.stiffnessV = stiffness;\n return this;\n }\n\n static overshootClamping(\n this: T,\n overshootClamping: number\n ) {\n const instance = this.createInstance();\n return instance.overshootClamping(overshootClamping);\n }\n\n overshootClamping(overshootClamping: number): this {\n this.overshootClampingV = overshootClamping;\n return this;\n }\n\n static restDisplacementThreshold(\n this: T,\n restDisplacementThreshold: number\n ) {\n const instance = this.createInstance();\n return instance.restDisplacementThreshold(restDisplacementThreshold);\n }\n\n restDisplacementThreshold(restDisplacementThreshold: number) {\n this.restDisplacementThresholdV = restDisplacementThreshold;\n return this;\n }\n\n static restSpeedThreshold(\n this: T,\n restSpeedThreshold: number\n ) {\n const instance = this.createInstance();\n return instance.restSpeedThreshold(restSpeedThreshold);\n }\n\n restSpeedThreshold(restSpeedThreshold: number): this {\n this.restSpeedThresholdV = restSpeedThreshold;\n return this;\n }\n\n static withInitialValues(\n this: T,\n values: StyleProps\n ) {\n const instance = this.createInstance();\n return instance.withInitialValues(values);\n }\n\n withInitialValues(values: StyleProps): this {\n this.initialValues = values;\n return this;\n }\n\n getAnimationAndConfig(): LayoutAnimationAndConfig {\n const duration = this.durationV;\n const easing = this.easingV;\n const rotate = this.rotateV;\n const type = this.type ? this.type : (withTiming as AnimationFunction);\n const damping = this.dampingV;\n const dampingRatio = this.dampingRatioV;\n const mass = this.massV;\n const stiffness = this.stiffnessV;\n const overshootClamping = this.overshootClampingV;\n const restDisplacementThreshold = this.restDisplacementThresholdV;\n const restSpeedThreshold = this.restSpeedThresholdV;\n\n const animation = type;\n\n const config: BaseBuilderAnimationConfig = {};\n\n function maybeSetConfigValue(\n value: BaseBuilderAnimationConfig[Key],\n variableName: Key\n ) {\n if (value) {\n config[variableName] = value;\n }\n }\n\n if (type === withTiming) {\n maybeSetConfigValue(easing, 'easing');\n }\n\n (\n [\n { variableName: 'damping', value: damping },\n { variableName: 'dampingRatio', value: dampingRatio },\n { variableName: 'mass', value: mass },\n { variableName: 'stiffness', value: stiffness },\n { variableName: 'overshootClamping', value: overshootClamping },\n {\n variableName: 'restDisplacementThreshold',\n value: restDisplacementThreshold,\n },\n { variableName: 'restSpeedThreshold', value: restSpeedThreshold },\n { variableName: 'duration', value: duration },\n { variableName: 'rotate', value: rotate },\n ] as const\n ).forEach(({ value, variableName }) =>\n maybeSetConfigValue(value, variableName)\n );\n\n return [animation, config];\n }\n}\n","import type { EasingFunction } from '../../Easing';\nimport { Easing } from '../../Easing';\nimport { withDelay, withSequence, withTiming } from '../../animation';\nimport type {\n AnimationFunction,\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n KeyframeProps,\n} from './commonTypes';\nimport type { TransformProperty, StyleProps } from '../../commonTypes';\ninterface KeyframePoint {\n duration: number;\n value: number | string;\n easing?: EasingFunction;\n}\ninterface ParsedKeyframesDefinition {\n initialValues: StyleProps;\n keyframes: Record;\n}\nclass InnerKeyframe implements IEntryExitAnimationBuilder {\n durationV?: number;\n delayV?: number;\n callbackV?: (finished: boolean) => void;\n definitions: Record;\n\n /*\n Keyframe definition should be passed in the constructor as the map\n which keys are between range 0 - 100 (%) and correspond to the point in the animation progress.\n */\n constructor(definitions: Record) {\n this.definitions = definitions;\n }\n\n private parseDefinitions(): ParsedKeyframesDefinition {\n /* \n Each style property contain an array with all their key points: \n value, duration of transition to that value, and optional easing function (defaults to Linear)\n */\n const parsedKeyframes: Record = {};\n /*\n Parsing keyframes 'from' and 'to'.\n */\n if (this.definitions.from) {\n if (this.definitions['0']) {\n throw Error(\n \"You cannot provide both keyframe 0 and 'from' as they both specified initial values\"\n );\n }\n this.definitions['0'] = this.definitions.from;\n delete this.definitions.from;\n }\n if (this.definitions.to) {\n if (this.definitions['100']) {\n throw Error(\n \"You cannot provide both keyframe 100 and 'to' as they both specified values at the end of the animation.\"\n );\n }\n this.definitions['100'] = this.definitions.to;\n delete this.definitions.to;\n }\n /* \n One of the assumptions is that keyframe 0 is required to properly set initial values.\n Every other keyframe should contain properties from the set provided as initial values.\n */\n if (!this.definitions['0']) {\n throw Error(\n \"Please provide 0, or 'from' keyframe with initial state of your object.\"\n );\n }\n const initialValues: StyleProps = this.definitions['0'] as StyleProps;\n /*\n Initialize parsedKeyframes for properties provided in initial keyframe\n */\n Object.keys(initialValues).forEach((styleProp: string) => {\n if (styleProp === 'transform') {\n initialValues[styleProp]?.forEach((transformStyle, index) => {\n Object.keys(transformStyle).forEach((transformProp: string) => {\n parsedKeyframes[index.toString() + '_transform:' + transformProp] =\n [];\n });\n });\n } else {\n parsedKeyframes[styleProp] = [];\n }\n });\n\n const duration: number = this.durationV ? this.durationV : 500;\n const animationKeyPoints: Array = Array.from(\n Object.keys(this.definitions)\n );\n\n const getAnimationDuration = (\n key: string,\n currentKeyPoint: number\n ): number => {\n const maxDuration = (currentKeyPoint / 100) * duration;\n const currentDuration = parsedKeyframes[key].reduce(\n (acc: number, value: KeyframePoint) => acc + value.duration,\n 0\n );\n return maxDuration - currentDuration;\n };\n\n /* \n Other keyframes can't contain properties that were not specified in initial keyframe.\n */\n const addKeyPoint = ({\n key,\n value,\n currentKeyPoint,\n easing,\n }: {\n key: string;\n value: string | number;\n currentKeyPoint: number;\n easing?: EasingFunction;\n }): void => {\n if (!(key in parsedKeyframes)) {\n throw Error(\n \"Keyframe can contain only that set of properties that were provide with initial values (keyframe 0 or 'from')\"\n );\n }\n parsedKeyframes[key].push({\n duration: getAnimationDuration(key, currentKeyPoint),\n value: value,\n easing: easing,\n });\n };\n animationKeyPoints\n .filter((value: string) => parseInt(value) !== 0)\n .sort((a: string, b: string) => parseInt(a) - parseInt(b))\n .forEach((keyPoint: string) => {\n if (parseInt(keyPoint) < 0 || parseInt(keyPoint) > 100) {\n throw Error('Keyframe should be in between range 0 - 100.');\n }\n const keyframe: KeyframeProps = this.definitions[keyPoint];\n const easing = keyframe.easing;\n delete keyframe.easing;\n const addKeyPointWith = (key: string, value: string | number) =>\n addKeyPoint({\n key,\n value,\n currentKeyPoint: parseInt(keyPoint),\n easing,\n });\n Object.keys(keyframe).forEach((key: string) => {\n if (key === 'transform') {\n keyframe[key]?.forEach(\n (transformStyle: { [key: string]: any }, index) => {\n Object.keys(transformStyle).forEach((transformProp: string) => {\n addKeyPointWith(\n index.toString() + '_transform:' + transformProp,\n transformStyle[transformProp]\n );\n });\n }\n );\n } else {\n addKeyPointWith(key, keyframe[key]);\n }\n });\n });\n return { initialValues: initialValues, keyframes: parsedKeyframes };\n }\n\n duration(durationMs: number): InnerKeyframe {\n this.durationV = durationMs;\n return this;\n }\n\n delay(delayMs: number): InnerKeyframe {\n this.delayV = delayMs;\n return this;\n }\n\n withCallback(callback: (finsihed: boolean) => void): InnerKeyframe {\n this.callbackV = callback;\n return this;\n }\n\n private getDelayFunction(): AnimationFunction {\n const delay = this.delayV;\n return delay\n ? withDelay\n : (_, animation) => {\n 'worklet';\n return animation;\n };\n }\n\n build = (): EntryExitAnimationFunction => {\n const delay = this.delayV;\n const delayFunction = this.getDelayFunction();\n const { keyframes, initialValues } = this.parseDefinitions();\n const callback = this.callbackV;\n\n return () => {\n 'worklet';\n const animations: StyleProps = {};\n\n /* \n For each style property, an animations sequence is created that corresponds with its key points.\n Transform style properties require special handling because of their nested structure.\n */\n const addAnimation = (key: string) => {\n const keyframePoints = keyframes[key];\n // in case if property was only passed as initial value\n if (keyframePoints.length === 0) return;\n const animation = delayFunction(\n delay,\n keyframePoints.length === 1\n ? withTiming(keyframePoints[0].value, {\n duration: keyframePoints[0].duration,\n easing: keyframePoints[0].easing\n ? keyframePoints[0].easing\n : Easing.linear,\n })\n : withSequence.apply(\n this,\n keyframePoints.map((keyframePoint: KeyframePoint) =>\n withTiming(keyframePoint.value, {\n duration: keyframePoint.duration,\n easing: keyframePoint.easing\n ? keyframePoint.easing\n : Easing.linear,\n })\n )\n )\n );\n if (key.includes('transform')) {\n if (!('transform' in animations)) {\n animations.transform = [];\n }\n animations.transform?.push({\n [key.split(':')[1]]: animation,\n });\n } else {\n animations[key] = animation;\n }\n };\n Object.keys(initialValues).forEach((key: string) => {\n if (key.includes('transform')) {\n initialValues[key].forEach(\n (transformProp: Record, index: number) => {\n Object.keys(transformProp).forEach((transformPropKey: string) => {\n addAnimation(\n index.toString() + '_transform:' + transformPropKey\n );\n });\n }\n );\n } else {\n addAnimation(key);\n }\n });\n return {\n animations: animations,\n initialValues: initialValues,\n callback: callback,\n };\n };\n };\n}\n\n// TODO TYPESCRIPT This is a temporary type to get rid of .d.ts file.\nexport declare class ReanimatedKeyframe {\n constructor(definitions: Record);\n duration(durationMs: number): ReanimatedKeyframe;\n delay(delayMs: number): ReanimatedKeyframe;\n withCallback(callback: (finished: boolean) => void): ReanimatedKeyframe;\n}\n\n// TODO TYPESCRIPT This temporary cast is to get rid of .d.ts file.\nexport const Keyframe = InnerKeyframe as unknown as typeof ReanimatedKeyframe;\n","import type { EasingFunction } from '../../Easing';\nimport type { StyleProps } from '../../commonTypes';\n\nexport interface KeyframeProps extends StyleProps {\n easing?: EasingFunction;\n [key: string]: any;\n}\n\nexport type LayoutAnimation = {\n initialValues: StyleProps;\n animations: StyleProps;\n callback?: (finished: boolean) => void;\n};\n\nexport type AnimationFunction = (a?: any, b?: any, c?: any) => any; // this is just a temporary mock\n\nexport interface EntryAnimationsValues {\n targetOriginX: number;\n targetOriginY: number;\n targetWidth: number;\n targetHeight: number;\n targetGlobalOriginX: number;\n targetGlobalOriginY: number;\n windowWidth: number;\n windowHeight: number;\n}\n\nexport interface ExitAnimationsValues {\n currentOriginX: number;\n currentOriginY: number;\n currentWidth: number;\n currentHeight: number;\n currentGlobalOriginX: number;\n currentGlobalOriginY: number;\n windowWidth: number;\n windowHeight: number;\n}\n\nexport type EntryExitAnimationFunction =\n | ((targetValues: EntryAnimationsValues) => LayoutAnimation)\n | ((targetValues: ExitAnimationsValues) => LayoutAnimation)\n | (() => LayoutAnimation);\n\nexport type AnimationConfigFunction = (targetValues: T) => LayoutAnimation;\n\nexport interface LayoutAnimationsValues {\n [key: string]: number | number[];\n currentOriginX: number;\n currentOriginY: number;\n currentWidth: number;\n currentHeight: number;\n currentGlobalOriginX: number;\n currentGlobalOriginY: number;\n targetOriginX: number;\n targetOriginY: number;\n targetWidth: number;\n targetHeight: number;\n targetGlobalOriginX: number;\n targetGlobalOriginY: number;\n windowWidth: number;\n windowHeight: number;\n}\n\nexport interface SharedTransitionAnimationsValues\n extends LayoutAnimationsValues {\n currentTransformMatrix: number[];\n targetTransformMatrix: number[];\n}\n\nexport type SharedTransitionAnimationsFunction = (\n values: SharedTransitionAnimationsValues\n) => LayoutAnimation;\n\nexport enum LayoutAnimationType {\n ENTERING = 1,\n EXITING = 2,\n LAYOUT = 3,\n SHARED_ELEMENT_TRANSITION = 4,\n SHARED_ELEMENT_TRANSITION_PROGRESS = 5,\n}\n\nexport type LayoutAnimationFunction = (\n targetValues: LayoutAnimationsValues\n) => LayoutAnimation;\n\nexport type LayoutAnimationStartFunction = (\n tag: number,\n type: LayoutAnimationType,\n yogaValues: LayoutAnimationsValues,\n config: LayoutAnimationFunction\n) => void;\n\nexport interface ILayoutAnimationBuilder {\n build: () => LayoutAnimationFunction;\n}\n\nexport interface BaseLayoutAnimationConfig {\n duration?: number;\n easing?: EasingFunction;\n type?: AnimationFunction;\n damping?: number;\n dampingRatio?: number;\n mass?: number;\n stiffness?: number;\n overshootClamping?: number;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n}\n\nexport interface BaseBuilderAnimationConfig extends BaseLayoutAnimationConfig {\n rotate?: number | string;\n}\n\nexport type LayoutAnimationAndConfig = [\n AnimationFunction,\n BaseBuilderAnimationConfig\n];\n\nexport interface IEntryExitAnimationBuilder {\n build: () => EntryExitAnimationFunction;\n}\n\nexport interface IEntryAnimationBuilder {\n build: () => AnimationConfigFunction;\n}\n\nexport interface IExitAnimationBuilder {\n build: () => AnimationConfigFunction;\n}\n\nexport type ProgressAnimationCallback = (\n viewTag: number,\n progress: number\n) => void;\n\nexport type ProgressAnimation = (\n viewTag: number,\n values: SharedTransitionAnimationsValues,\n progress: number\n) => void;\n\nexport type CustomProgressAnimation = (\n values: SharedTransitionAnimationsValues,\n progress: number\n) => StyleProps;\n\nexport enum SharedTransitionType {\n ANIMATION = 'animation',\n PROGRESS_ANIMATION = 'progressAnimation',\n}\n\nexport type EntryExitAnimationsValues =\n | EntryAnimationsValues\n | ExitAnimationsValues;\n","export { BaseAnimationBuilder } from './BaseAnimationBuilder';\nexport { ComplexAnimationBuilder } from './ComplexAnimationBuilder';\nexport { Keyframe } from './Keyframe';\nexport { LayoutAnimationType, SharedTransitionType } from './commonTypes';\nexport type {\n LayoutAnimation,\n AnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n EntryExitAnimationFunction,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n LayoutAnimationsValues,\n LayoutAnimationFunction,\n LayoutAnimationStartFunction,\n ILayoutAnimationBuilder,\n BaseLayoutAnimationConfig,\n BaseBuilderAnimationConfig,\n LayoutAnimationAndConfig,\n IEntryExitAnimationBuilder,\n} from './commonTypes';\n","import type {\n EntryExitAnimationFunction,\n EntryExitAnimationsValues,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport { withSequence, withTiming } from '../../animation';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nexport class BounceIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceIn() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n scale: delayFunction(\n delay,\n withSequence(\n withTiming(1.2, { duration: duration * 0.55 }),\n withTiming(0.9, { duration: duration * 0.15 }),\n withTiming(1.1, { duration: duration * 0.15 }),\n withTiming(1, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceInDown() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(-20, { duration: duration * 0.55 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [\n {\n translateY: values.windowHeight,\n },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceInUp() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(20, { duration: duration * 0.55 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: -values.windowHeight }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceInLeft() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(20, { duration: duration * 0.55 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: -values.windowWidth }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceInRight() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(-20, { duration: duration * 0.55 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: values.windowWidth }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceOut() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n scale: delayFunction(\n delay,\n withSequence(\n withTiming(1.1, { duration: duration * 0.15 }),\n withTiming(0.9, { duration: duration * 0.15 }),\n withTiming(1.2, { duration: duration * 0.15 }),\n withTiming(0, { duration: duration * 0.55 })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceOutDown() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-20, { duration: duration * 0.15 }),\n withTiming(values.windowHeight, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceOutUp() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n withSequence(\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(20, { duration: duration * 0.15 }),\n withTiming(-values.windowHeight, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceOutLeft() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(20, { duration: duration * 0.15 }),\n withTiming(-values.windowWidth, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class BounceOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new BounceOutRight() as InstanceType;\n }\n\n static getDuration(): number {\n return 600;\n }\n\n getDuration(): number {\n return this.durationV ?? 600;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n withSequence(\n withTiming(-10, { duration: duration * 0.15 }),\n withTiming(10, { duration: duration * 0.15 }),\n withTiming(-20, { duration: duration * 0.15 }),\n withTiming(values.windowWidth, {\n duration: duration * 0.55,\n })\n )\n ),\n },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class FadeIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeIn() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n },\n initialValues: {\n opacity: 0,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeInRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: 25 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeInLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: -25 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeInUp() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateY: -25 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeInDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeInDown() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateY: 25 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeOut() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n },\n initialValues: {\n opacity: 1,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeOutRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateX: delayFunction(delay, animation(25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeOutLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateX: delayFunction(delay, animation(-25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeOutUp() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateY: delayFunction(delay, animation(-25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FadeOutDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadeOutDown() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n const delay = this.getDelay();\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { translateY: delayFunction(delay, animation(25, config)) },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class FlipInXUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInXUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '90deg' },\n { translateY: -targetValues.targetHeight },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: 500 },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInYLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInYLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '-90deg' },\n { translateX: -targetValues.targetWidth },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInXDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInXDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '-90deg' },\n { translateY: targetValues.targetHeight },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInYRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInYRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '90deg' },\n { translateX: targetValues.targetWidth },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInEasyX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInEasyX() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateX: '90deg' }],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipInEasyY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipInEasyY() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateY: '90deg' }],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutXUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutXUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '0deg' },\n { translateY: 0 },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('90deg', config)) },\n {\n translateY: delayFunction(\n delay,\n animation(-targetValues.currentHeight, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutYLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutYLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '0deg' },\n { translateX: 0 },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(-targetValues.currentWidth, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutXDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutXDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateX: '0deg' },\n { translateY: 0 },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('-90deg', config)) },\n {\n translateY: delayFunction(\n delay,\n animation(targetValues.currentHeight, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutYRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutYRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (targetValues) => {\n 'worklet';\n return {\n initialValues: {\n transform: [\n { perspective: 500 },\n { rotateY: '0deg' },\n { translateX: 0 },\n ],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(targetValues.currentWidth, config)\n ),\n },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutEasyX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutEasyX() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateX: '0deg' }],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateX: delayFunction(delay, animation('90deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class FlipOutEasyY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FlipOutEasyY() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n initialValues: {\n transform: [{ perspective: 500 }, { rotateY: '0deg' }],\n ...initialValues,\n },\n animations: {\n transform: [\n { perspective: delayFunction(delay, animation(500, config)) },\n { rotateY: delayFunction(delay, animation('90deg', config)) },\n ],\n },\n callback: callback,\n };\n };\n };\n}\n","import { withSequence, withTiming } from '../../animation';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport type {\n EntryExitAnimationsValues,\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class LightSpeedInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new LightSpeedInRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, withTiming(1, { duration: duration })),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(0, { ...config, duration: duration * 0.7 })\n ),\n },\n {\n skewX: delayFunction(\n delay,\n withSequence(\n withTiming('10deg', { duration: duration * 0.7 }),\n withTiming('-5deg', { duration: duration * 0.15 }),\n withTiming('0deg', { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: values.windowWidth }, { skewX: '-45deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new LightSpeedInLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const duration = this.getDuration();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, withTiming(1, { duration: duration })),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(0, { ...config, duration: duration * 0.7 })\n ),\n },\n {\n skewX: delayFunction(\n delay,\n withSequence(\n withTiming('-10deg', { duration: duration * 0.7 }),\n withTiming('5deg', { duration: duration * 0.15 }),\n withTiming('0deg', { duration: duration * 0.15 })\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [{ translateX: -values.windowWidth }, { skewX: '45deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new LightSpeedOutRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(values.windowWidth, config)\n ),\n },\n {\n skewX: delayFunction(delay, animation('-45deg', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }, { skewX: '0deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class LightSpeedOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new LightSpeedOutLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(-values.windowWidth, config)\n ),\n },\n {\n skewX: delayFunction(delay, animation('45deg', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ translateX: 0 }, { skewX: '0deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport type {\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class PinwheelIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new PinwheelIn() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n {\n scale: delayFunction(delay, animation(1, config)),\n },\n {\n rotate: delayFunction(delay, animation('0', config)),\n },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n {\n scale: 0,\n },\n {\n rotate: '5',\n },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class PinwheelOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new PinwheelOut() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n {\n scale: delayFunction(delay, animation(0, config)),\n },\n {\n rotate: delayFunction(delay, animation('5', config)),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [\n {\n scale: 1,\n },\n {\n rotate: '0',\n },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport type {\n EntryExitAnimationsValues,\n EntryExitAnimationFunction,\n IEntryExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class RollInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RollInLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0), config) },\n { rotate: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n initialValues: {\n transform: [\n { translateX: -values.windowWidth },\n { rotate: '-180deg' },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RollInRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { rotate: delayFunction(delay, animation('0deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: values.windowWidth }, { rotate: '180deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RollOutLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(-values.windowWidth, config)\n ),\n },\n { rotate: delayFunction(delay, animation('-180deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { rotate: '0deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RollOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RollOutRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(values.windowWidth, config)\n ),\n },\n { rotate: delayFunction(delay, animation('180deg', config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { rotate: '0deg' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport type {\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\n\nexport class RotateInDownLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateInDownLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '-90deg' },\n { translateX: values.targetWidth / 2 - values.targetHeight / 2 },\n { translateY: -(values.targetWidth / 2 - values.targetHeight / 2) },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInDownRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateInDownRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '90deg' },\n { translateX: -(values.targetWidth / 2 - values.targetHeight / 2) },\n { translateY: -(values.targetWidth / 2 - values.targetHeight / 2) },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInUpLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateInUpLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '90deg' },\n { translateX: values.targetWidth / 2 - values.targetHeight / 2 },\n { translateY: values.targetWidth / 2 - values.targetHeight / 2 },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateInUpRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateInUpRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(1, config)),\n transform: [\n { rotate: delayFunction(delay, animation('0deg', config)) },\n { translateX: delayFunction(delay, animation(0, config)) },\n { translateY: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n opacity: 0,\n transform: [\n { rotate: '-90deg' },\n { translateX: -(values.targetWidth / 2 - values.targetHeight / 2) },\n { translateY: values.targetWidth / 2 - values.targetHeight / 2 },\n ],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutDownLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateOutDownLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutDownRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateOutDownRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutUpLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateOutUpLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('-90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n values.currentWidth / 2 - values.currentHeight / 2,\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class RotateOutUpRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new RotateOutUpRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n opacity: delayFunction(delay, animation(0, config)),\n transform: [\n { rotate: delayFunction(delay, animation('90deg', config)) },\n {\n translateX: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n {\n translateY: delayFunction(\n delay,\n animation(\n -(values.currentWidth / 2 - values.currentHeight / 2),\n config\n )\n ),\n },\n ],\n },\n initialValues: {\n opacity: 1,\n transform: [{ rotate: '0deg' }, { translateX: 0 }, { translateY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n EntryAnimationsValues,\n ExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class SlideInRight\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideInRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n },\n initialValues: {\n originX: values.targetOriginX + values.windowWidth,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInLeft\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideInLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n },\n initialValues: {\n originX: values.targetOriginX - values.windowWidth,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutRight\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideOutRight() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(\n Math.max(\n values.currentOriginX + values.windowWidth,\n values.windowWidth\n ),\n config\n )\n ),\n },\n initialValues: {\n originX: values.currentOriginX,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutLeft\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideOutLeft() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originX: delayFunction(\n delay,\n animation(\n Math.min(\n values.currentOriginX - values.windowWidth,\n -values.windowWidth\n ),\n config\n )\n ),\n },\n initialValues: {\n originX: values.currentOriginX,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideInUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n },\n initialValues: {\n originY: -values.windowHeight,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideInDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideInDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n },\n initialValues: {\n originY: values.targetOriginY + values.windowHeight,\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideOutUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(\n Math.min(\n values.currentOriginY - values.windowHeight,\n -values.windowHeight\n ),\n config\n )\n ),\n },\n initialValues: { originY: values.currentOriginY, ...initialValues },\n callback: callback,\n };\n };\n };\n}\n\nexport class SlideOutDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new SlideOutDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n originY: delayFunction(\n delay,\n animation(\n Math.max(\n values.currentOriginY + values.windowHeight,\n values.windowHeight\n ),\n config\n )\n ),\n },\n initialValues: { originY: values.currentOriginY, ...initialValues },\n callback: callback,\n };\n };\n };\n}\n","import type {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class StretchInX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new StretchInX() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleX: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scaleX: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchInY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new StretchInY() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleY: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scaleY: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchOutX\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new StretchOutX() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleX: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scaleX: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class StretchOutY\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new StretchOutY() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scaleY: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scaleY: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n IEntryExitAnimationBuilder,\n EntryExitAnimationFunction,\n EntryAnimationsValues,\n ExitAnimationsValues,\n EntryExitAnimationsValues,\n AnimationConfigFunction,\n IEntryAnimationBuilder,\n IExitAnimationBuilder,\n} from '../animationBuilder/commonTypes';\nimport type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\n\nexport class ZoomIn\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomIn() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scale: delayFunction(delay, animation(1, config)) }],\n },\n initialValues: {\n transform: [{ scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInRotate\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInRotate() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const rotate = this.rotateV ? this.rotateV : '0.3';\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { scale: delayFunction(delay, animation(1, config)) },\n { rotate: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ scale: 0 }, { rotate: rotate }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: -values.windowWidth }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateX: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: values.windowWidth }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInUp() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: -values.windowHeight }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInDown() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: values.windowHeight }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInEasyUp\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInEasyUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: -values.targetHeight }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomInEasyDown\n extends ComplexAnimationBuilder\n implements IEntryAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomInEasyDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n { translateY: delayFunction(delay, animation(0, config)) },\n { scale: delayFunction(delay, animation(1, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: values.targetHeight }, { scale: 0 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOut\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOut() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [{ scale: delayFunction(delay, animation(0, config)) }],\n },\n initialValues: {\n transform: [{ scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutRotate\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutRotate() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const rotate = this.rotateV ? this.rotateV : '0.3';\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return () => {\n 'worklet';\n return {\n animations: {\n transform: [\n { scale: delayFunction(delay, animation(0, config)) },\n { rotate: delayFunction(delay, animation(rotate, config)) },\n ],\n },\n initialValues: {\n transform: [{ scale: 1 }, { rotate: '0' }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutLeft\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutLeft() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(-values.windowWidth, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutRight\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutRight() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateX: delayFunction(\n delay,\n animation(values.windowWidth, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateX: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutUp\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutUp() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(-values.windowHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutDown\n extends ComplexAnimationBuilder\n implements IEntryExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutDown() as InstanceType;\n }\n\n build = (): EntryExitAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values: EntryExitAnimationsValues) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(values.windowHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutEasyUp\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutEasyUp() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(-values.currentHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport class ZoomOutEasyDown\n extends ComplexAnimationBuilder\n implements IExitAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new ZoomOutEasyDown() as InstanceType;\n }\n\n build = (): AnimationConfigFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const delay = this.getDelay();\n const callback = this.callbackV;\n const initialValues = this.initialValues;\n\n return (values) => {\n 'worklet';\n return {\n animations: {\n transform: [\n {\n translateY: delayFunction(\n delay,\n animation(values.currentHeight, config)\n ),\n },\n { scale: delayFunction(delay, animation(0, config)) },\n ],\n },\n initialValues: {\n transform: [{ translateY: 0 }, { scale: 1 }],\n ...initialValues,\n },\n callback: callback,\n };\n };\n };\n}\n","export * from './Flip';\nexport * from './Stretch';\nexport * from './Fade';\nexport * from './Slide';\nexport * from './Zoom';\nexport * from './Bounce';\nexport * from './Lightspeed';\nexport * from './Pinwheel';\nexport * from './Rotate';\nexport * from './Roll';\n","import type {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nimport type { EasingFunction } from '../../Easing';\nimport { Easing } from '../../Easing';\nimport { withTiming } from '../../animation';\n\nexport class CurvedTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n easingXV: EasingFunction = Easing.in(Easing.ease);\n easingYV: EasingFunction = Easing.out(Easing.ease);\n easingWidthV: EasingFunction = Easing.in(Easing.exp);\n easingHeightV: EasingFunction = Easing.out(Easing.exp);\n\n static createInstance(\n this: T\n ): InstanceType {\n return new CurvedTransition() as InstanceType;\n }\n\n static easingX(easing: EasingFunction): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingX(easing);\n }\n\n easingX(easing: EasingFunction): CurvedTransition {\n this.easingXV = easing;\n return this;\n }\n\n static easingY(easing: EasingFunction): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingY(easing);\n }\n\n easingY(easing: EasingFunction): CurvedTransition {\n this.easingYV = easing;\n return this;\n }\n\n static easingWidth(easing: EasingFunction): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingWidth(easing);\n }\n\n easingWidth(easing: EasingFunction): CurvedTransition {\n this.easingWidthV = easing;\n return this;\n }\n\n static easingHeight(easing: EasingFunction): CurvedTransition {\n const instance = this.createInstance();\n return instance.easingHeight(easing);\n }\n\n easingHeight(easing: EasingFunction): CurvedTransition {\n this.easingHeightV = easing;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = this.durationV ?? 300;\n const easing = {\n easingX: this.easingXV,\n easingY: this.easingYV,\n easingWidth: this.easingWidthV,\n easingHeight: this.easingHeightV,\n };\n\n return (values) => {\n 'worklet';\n\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withTiming(values.targetOriginX, {\n duration,\n easing: easing.easingX,\n })\n ),\n originY: delayFunction(\n delay,\n withTiming(values.targetOriginY, {\n duration,\n easing: easing.easingY,\n })\n ),\n width: delayFunction(\n delay,\n withTiming(values.targetWidth, {\n duration,\n easing: easing.easingWidth,\n })\n ),\n height: delayFunction(\n delay,\n withTiming(values.targetHeight, {\n duration,\n easing: easing.easingHeight,\n })\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n ILayoutAnimationBuilder,\n LayoutAnimationsValues,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nimport { withSequence, withTiming } from '../../animation';\nimport { FadeIn, FadeOut } from '../defaultAnimations/Fade';\nimport type {\n StyleProps,\n TransformProperty,\n AnimationObject,\n} from '../../commonTypes';\n\nexport class EntryExitTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n enteringV: BaseAnimationBuilder | typeof BaseAnimationBuilder = FadeIn;\n\n exitingV: BaseAnimationBuilder | typeof BaseAnimationBuilder = FadeOut;\n\n static createInstance(\n this: T\n ): InstanceType {\n return new EntryExitTransition() as InstanceType;\n }\n\n static entering(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n const instance = this.createInstance();\n return instance.entering(animation);\n }\n\n entering(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n this.enteringV = animation;\n return this;\n }\n\n static exiting(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n const instance = this.createInstance();\n return instance.exiting(animation);\n }\n\n exiting(\n animation: BaseAnimationBuilder | typeof BaseAnimationBuilder\n ): EntryExitTransition {\n this.exitingV = animation;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n // @ts-ignore Calling `.build()` both static and instance methods works fine here, but `this` types are incompatible. They are not used though, so it's fine.\n const enteringAnimation = this.enteringV.build();\n // @ts-ignore Calling `.build()` both static and instance methods works fine here, but `this` types are incompatible. They are not used though, so it's fine.\n const exitingAnimation = this.exitingV.build();\n const exitingDuration = this.exitingV.getDuration();\n\n return (values) => {\n 'worklet';\n const enteringValues = enteringAnimation(values);\n const exitingValues = exitingAnimation(values);\n const animations: StyleProps = {\n transform: [],\n };\n\n for (const prop of Object.keys(exitingValues.animations)) {\n if (prop === 'transform') {\n exitingValues.animations[prop]?.forEach((value, index) => {\n for (const transformProp of Object.keys(value)) {\n animations.transform?.push({\n [transformProp]: delayFunction(\n delay,\n withSequence(\n value[transformProp as keyof TransformProperty],\n withTiming(\n exitingValues.initialValues.transform\n ? exitingValues.initialValues.transform[index][\n transformProp as keyof TransformProperty\n ]\n : 0,\n { duration: 0 }\n )\n )\n ),\n } as TransformProperty);\n }\n });\n } else {\n const sequence =\n enteringValues.animations[prop] !== undefined\n ? [\n exitingValues.animations[prop],\n withTiming(enteringValues.initialValues[prop], {\n duration: 0,\n }),\n enteringValues.animations[prop],\n ]\n : [\n exitingValues.animations[prop],\n withTiming(\n Object.keys(values).includes(prop)\n ? values[prop as keyof LayoutAnimationsValues]\n : exitingValues.initialValues[prop],\n { duration: 0 }\n ),\n ];\n\n animations[prop] = delayFunction(delay, withSequence(...sequence));\n }\n }\n for (const prop of Object.keys(enteringValues.animations)) {\n if (prop === 'transform') {\n enteringValues.animations[prop]?.forEach((value, index) => {\n for (const transformProp of Object.keys(value)) {\n animations.transform?.push({\n [transformProp]: delayFunction(\n delay + exitingDuration,\n withSequence(\n withTiming(\n enteringValues.initialValues.transform\n ? enteringValues.initialValues.transform[index][\n transformProp as keyof TransformProperty\n ]\n : 0,\n { duration: exitingDuration }\n ),\n value[transformProp as keyof TransformProperty]\n )\n ),\n } as TransformProperty);\n }\n });\n } else if (animations[prop] !== undefined) {\n // it was already added in the previous loop\n continue;\n } else {\n animations[prop] = delayFunction(\n delay,\n withSequence(\n withTiming(enteringValues.initialValues[prop], { duration: 0 }),\n enteringValues.animations[prop]\n )\n );\n }\n }\n\n const mergedTransform = (\n exitingValues.initialValues.transform ?? []\n ).concat(\n (enteringValues.animations.transform ?? []).map((value) => {\n const objectKeys = Object.keys(value);\n if (objectKeys?.length < 1) {\n console.error(\n `[Reanimated]: \\${value} is not a valid Transform object`\n );\n return value;\n }\n const transformProp = objectKeys[0];\n const current = (\n value[transformProp as keyof TransformProperty] as AnimationObject\n ).current;\n if (typeof current === 'string') {\n if (current.includes('deg'))\n return {\n [transformProp]: '0deg',\n } as unknown as TransformProperty;\n else\n return {\n [transformProp]: '0',\n } as unknown as TransformProperty;\n } else if (transformProp.includes('translate')) {\n return { [transformProp]: 0 } as unknown as TransformProperty;\n } else {\n return { [transformProp]: 1 } as unknown as TransformProperty;\n }\n })\n );\n\n return {\n initialValues: {\n ...exitingValues.initialValues,\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n transform: mergedTransform,\n },\n animations: {\n originX: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetOriginX, { duration: exitingDuration })\n ),\n originY: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetOriginY, { duration: exitingDuration })\n ),\n width: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetWidth, { duration: exitingDuration })\n ),\n height: delayFunction(\n delay + exitingDuration,\n withTiming(values.targetHeight, { duration: exitingDuration })\n ),\n ...animations,\n },\n callback: callback,\n };\n };\n };\n}\n\nexport function combineTransition(\n exiting: BaseAnimationBuilder | typeof BaseAnimationBuilder,\n entering: BaseAnimationBuilder | typeof BaseAnimationBuilder\n): EntryExitTransition {\n return EntryExitTransition.entering(entering).exiting(exiting);\n}\n","import { withSequence, withTiming } from '../../animation';\nimport type {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\n\nexport class FadingTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new FadingTransition() as InstanceType;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = this.durationV ?? 500;\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n opacity: 1,\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n opacity: delayFunction(\n delay,\n withSequence(\n withTiming(0, { duration: duration }),\n withTiming(1, { duration: duration })\n )\n ),\n originX: delayFunction(\n delay + duration,\n withTiming(values.targetOriginX, { duration: 50 })\n ),\n originY: delayFunction(\n delay + duration,\n withTiming(values.targetOriginY, { duration: 50 })\n ),\n width: delayFunction(\n delay + duration,\n withTiming(values.targetWidth, { duration: 50 })\n ),\n height: delayFunction(\n delay + duration,\n withTiming(values.targetHeight, { duration: 50 })\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","import type {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { withSequence, withTiming } from '../../animation';\nimport { Easing } from '../../Easing';\nimport { BaseAnimationBuilder } from '../animationBuilder';\nexport class JumpingTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new JumpingTransition() as InstanceType;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const duration = (this.durationV ?? 300) / 2;\n const config = { duration: duration * 2 };\n\n return (values) => {\n 'worklet';\n const d = Math.max(\n Math.abs(values.targetOriginX - values.currentOriginX),\n Math.abs(values.targetOriginY - values.currentOriginY)\n );\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withTiming(values.targetOriginX, config)\n ),\n originY: delayFunction(\n delay,\n withSequence(\n withTiming(\n Math.min(values.targetOriginY, values.currentOriginY) - d,\n {\n duration,\n easing: Easing.out(Easing.exp),\n }\n ),\n withTiming(values.targetOriginY, {\n ...config,\n duration,\n easing: Easing.bounce,\n })\n )\n ),\n width: delayFunction(delay, withTiming(values.targetWidth, config)),\n height: delayFunction(delay, withTiming(values.targetHeight, config)),\n },\n callback: callback,\n };\n };\n };\n}\n","import type { BaseAnimationBuilder } from '../animationBuilder';\nimport { ComplexAnimationBuilder } from '../animationBuilder';\nimport type {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\n\nexport class LinearTransition\n extends ComplexAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n static createInstance(\n this: T\n ): InstanceType {\n return new LinearTransition() as InstanceType;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const [animation, config] = this.getAnimationAndConfig();\n const callback = this.callbackV;\n const delay = this.getDelay();\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n animation(values.targetOriginX, config)\n ),\n originY: delayFunction(\n delay,\n animation(values.targetOriginY, config)\n ),\n width: delayFunction(delay, animation(values.targetWidth, config)),\n height: delayFunction(delay, animation(values.targetHeight, config)),\n },\n callback: callback,\n };\n };\n };\n}\n\nexport const Layout = LinearTransition;\n","import { withSequence, withTiming } from '../../animation';\nimport type {\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from '../animationBuilder/commonTypes';\nimport { BaseAnimationBuilder } from '../animationBuilder';\n\nexport class SequencedTransition\n extends BaseAnimationBuilder\n implements ILayoutAnimationBuilder\n{\n reversed = false;\n\n static createInstance(\n this: T\n ): InstanceType {\n return new SequencedTransition() as InstanceType;\n }\n\n static reverse(): SequencedTransition {\n const instance = SequencedTransition.createInstance();\n return instance.reverse();\n }\n\n reverse(): SequencedTransition {\n this.reversed = !this.reversed;\n return this;\n }\n\n build = (): LayoutAnimationFunction => {\n const delayFunction = this.getDelayFunction();\n const callback = this.callbackV;\n const delay = this.getDelay();\n const sequenceDuration = (this.durationV ?? 500) / 2;\n const config = { duration: sequenceDuration };\n const reverse = this.reversed;\n\n return (values) => {\n 'worklet';\n return {\n initialValues: {\n originX: values.currentOriginX,\n originY: values.currentOriginY,\n width: values.currentWidth,\n height: values.currentHeight,\n },\n animations: {\n originX: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.currentOriginX : values.targetOriginX,\n config\n ),\n withTiming(values.targetOriginX, config)\n )\n ),\n originY: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.targetOriginY : values.currentOriginY,\n config\n ),\n withTiming(values.targetOriginY, config)\n )\n ),\n width: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.currentWidth : values.targetWidth,\n config\n ),\n withTiming(values.targetWidth, config)\n )\n ),\n height: delayFunction(\n delay,\n withSequence(\n withTiming(\n reverse ? values.targetHeight : values.currentHeight,\n config\n ),\n withTiming(values.targetHeight, config)\n )\n ),\n },\n callback: callback,\n };\n };\n };\n}\n","export * from './LinearTransition';\nexport * from './FadingTransition';\nexport * from './SequencedTransition';\nexport * from './JumpingTransition';\nexport * from './CurvedTransition';\nexport * from './EntryExitTransition';\n","import './animationsManager';\nexport * from './animationBuilder';\nexport * from './defaultAnimations';\nexport * from './defaultTransitions';\nexport * from './sharedTransitions';\nexport type { KeyframeProps } from './animationBuilder/commonTypes';\n","import { runOnUIImmediately } from '../../threads';\nimport type { ProgressAnimation } from '../animationBuilder/commonTypes';\nimport { registerEventHandler, unregisterEventHandler } from '../../core';\nimport { Platform } from 'react-native';\n\ntype TransitionProgressEvent = {\n closing: number;\n goingForward: number;\n eventName: string;\n progress: number;\n target: number;\n};\n\nexport class ProgressTransitionManager {\n private _sharedElementCount = 0;\n private _eventHandler = {\n isRegistered: false,\n onTransitionProgress: -1,\n onAppear: -1,\n onDisappear: -1,\n onSwipeDismiss: -1,\n };\n\n public addProgressAnimation(\n viewTag: number,\n progressAnimation: ProgressAnimation\n ) {\n runOnUIImmediately(() => {\n 'worklet';\n global.ProgressTransitionRegister.addProgressAnimation(\n viewTag,\n progressAnimation\n );\n })();\n this.registerEventHandlers();\n }\n\n public removeProgressAnimation(viewTag: number) {\n this.unregisterEventHandlers();\n runOnUIImmediately(() => {\n 'worklet';\n global.ProgressTransitionRegister.removeProgressAnimation(viewTag);\n })();\n }\n\n private registerEventHandlers() {\n this._sharedElementCount++;\n const eventHandler = this._eventHandler;\n if (!eventHandler.isRegistered) {\n eventHandler.isRegistered = true;\n const eventPrefix = Platform.OS === 'android' ? 'on' : 'top';\n let lastProgressValue = -1;\n eventHandler.onTransitionProgress = registerEventHandler(\n eventPrefix + 'TransitionProgress',\n (event: TransitionProgressEvent) => {\n 'worklet';\n const progress = event.progress;\n if (progress === lastProgressValue) {\n // During screen transition, handler receives two events with the same progress\n // value for both screens, but for modals, there is only one event. To optimize\n // performance and avoid unnecessary worklet calls, let's skip the second event.\n return;\n }\n lastProgressValue = progress;\n global.ProgressTransitionRegister.frame(progress);\n }\n );\n eventHandler.onAppear = registerEventHandler(\n eventPrefix + 'Appear',\n () => {\n 'worklet';\n global.ProgressTransitionRegister.onTransitionEnd();\n }\n );\n\n if (Platform.OS === 'android') {\n // onFinishTransitioning event is available only on Android and\n // is used to handle closing modals\n eventHandler.onDisappear = registerEventHandler(\n 'onFinishTransitioning',\n () => {\n 'worklet';\n global.ProgressTransitionRegister.onAndroidFinishTransitioning();\n }\n );\n } else if (Platform.OS === 'ios') {\n // topDisappear event is required to handle closing modals on iOS\n eventHandler.onDisappear = registerEventHandler('topDisappear', () => {\n 'worklet';\n global.ProgressTransitionRegister.onTransitionEnd(true);\n });\n eventHandler.onSwipeDismiss = registerEventHandler(\n 'topGestureCancel',\n () => {\n 'worklet';\n global.ProgressTransitionRegister.onTransitionEnd();\n }\n );\n }\n }\n }\n\n private unregisterEventHandlers(): void {\n this._sharedElementCount--;\n if (this._sharedElementCount === 0) {\n const eventHandler = this._eventHandler;\n eventHandler.isRegistered = false;\n if (eventHandler.onTransitionProgress !== -1) {\n unregisterEventHandler(eventHandler.onTransitionProgress);\n eventHandler.onTransitionProgress = -1;\n }\n if (eventHandler.onAppear !== -1) {\n unregisterEventHandler(eventHandler.onAppear);\n eventHandler.onAppear = -1;\n }\n if (eventHandler.onDisappear !== -1) {\n unregisterEventHandler(eventHandler.onDisappear);\n eventHandler.onDisappear = -1;\n }\n if (eventHandler.onSwipeDismiss !== -1) {\n unregisterEventHandler(eventHandler.onSwipeDismiss);\n eventHandler.onSwipeDismiss = -1;\n }\n }\n }\n}\n\nfunction createProgressTransitionRegister() {\n 'worklet';\n const progressAnimations = new Map();\n const snapshots = new Map();\n const currentTransitions = new Set();\n const toRemove = new Set();\n\n const progressTransitionManager = {\n addProgressAnimation: (\n viewTag: number,\n progressAnimation: ProgressAnimation\n ) => {\n progressAnimations.set(viewTag, progressAnimation);\n },\n removeProgressAnimation: (viewTag: number) => {\n if (progressAnimations.size > 1) {\n // Remove the animation config after the transition is finished\n toRemove.add(viewTag);\n } else {\n progressAnimations.delete(viewTag);\n }\n },\n onTransitionStart: (viewTag: number, snapshot: any) => {\n snapshots.set(viewTag, snapshot);\n currentTransitions.add(viewTag);\n // set initial style for re-parented components\n progressTransitionManager.frame(0);\n },\n frame: (progress: number) => {\n for (const viewTag of currentTransitions) {\n const progressAnimation = progressAnimations.get(viewTag);\n const snapshot = snapshots.get(viewTag);\n progressAnimation!(viewTag, snapshot, progress);\n }\n },\n onAndroidFinishTransitioning: () => {\n if (toRemove.size > 0) {\n // it should be ran only on modal closing\n progressTransitionManager.onTransitionEnd();\n }\n },\n onTransitionEnd: (removeViews = false) => {\n for (const viewTag of currentTransitions) {\n _notifyAboutEnd(viewTag, removeViews);\n }\n currentTransitions.clear();\n snapshots.clear();\n if (toRemove.size > 0) {\n for (const viewTag of toRemove) {\n progressAnimations.delete(viewTag);\n }\n toRemove.clear();\n }\n },\n };\n return progressTransitionManager;\n}\n\nrunOnUIImmediately(() => {\n 'worklet';\n global.ProgressTransitionRegister = createProgressTransitionRegister();\n})();\n\nexport type ProgressTransitionRegister = ReturnType<\n typeof createProgressTransitionRegister\n>;\n","import { withTiming } from '../../animation';\nimport type {\n SharedTransitionAnimationsFunction,\n SharedTransitionAnimationsValues,\n CustomProgressAnimation,\n ProgressAnimation,\n} from '../animationBuilder/commonTypes';\nimport {\n LayoutAnimationType,\n SharedTransitionType,\n} from '../animationBuilder/commonTypes';\nimport type { StyleProps } from '../../commonTypes';\nimport { configureLayoutAnimations } from '../../core';\nimport { ProgressTransitionManager } from './ProgressTransitionManager';\n\nconst supportedProps = [\n 'width',\n 'height',\n 'originX',\n 'originY',\n 'transform',\n 'borderRadius',\n];\n\ntype AnimationFactory = (\n values: SharedTransitionAnimationsValues\n) => StyleProps;\n\nexport class SharedTransition {\n private _customAnimationFactory: AnimationFactory | null = null;\n private _animation: SharedTransitionAnimationsFunction | null = null;\n private _transitionDuration = 500;\n private _customProgressAnimation?: ProgressAnimation = undefined;\n private _progressAnimation?: ProgressAnimation = undefined;\n private _defaultTransitionType?: SharedTransitionType = undefined;\n private static _progressTransitionManager = new ProgressTransitionManager();\n\n public custom(customAnimationFactory: AnimationFactory): SharedTransition {\n this._customAnimationFactory = customAnimationFactory;\n return this;\n }\n\n public progressAnimation(\n progressAnimationCallback: CustomProgressAnimation\n ): SharedTransition {\n this._customProgressAnimation = (viewTag, values, progress) => {\n 'worklet';\n const newStyles = progressAnimationCallback(values, progress);\n _notifyAboutProgress(viewTag, newStyles, true);\n };\n return this;\n }\n\n public duration(duration: number): SharedTransition {\n this._transitionDuration = duration;\n return this;\n }\n\n public defaultTransitionType(\n transitionType: SharedTransitionType\n ): SharedTransition {\n this._defaultTransitionType = transitionType;\n return this;\n }\n\n public registerTransition(\n viewTag: number,\n sharedTransitionTag: string\n ): void {\n const transitionAnimation = this.getTransitionAnimation();\n const progressAnimation = this.getProgressAnimation();\n if (!this._defaultTransitionType) {\n if (this._customAnimationFactory && !this._customProgressAnimation) {\n this._defaultTransitionType = SharedTransitionType.ANIMATION;\n } else {\n this._defaultTransitionType = SharedTransitionType.PROGRESS_ANIMATION;\n }\n }\n const layoutAnimationType =\n this._defaultTransitionType === SharedTransitionType.ANIMATION\n ? LayoutAnimationType.SHARED_ELEMENT_TRANSITION\n : LayoutAnimationType.SHARED_ELEMENT_TRANSITION_PROGRESS;\n configureLayoutAnimations(\n viewTag,\n layoutAnimationType,\n transitionAnimation,\n sharedTransitionTag\n );\n SharedTransition._progressTransitionManager.addProgressAnimation(\n viewTag,\n progressAnimation\n );\n }\n\n public unregisterTransition(viewTag: number): void {\n SharedTransition._progressTransitionManager.removeProgressAnimation(\n viewTag\n );\n }\n\n private getTransitionAnimation(): SharedTransitionAnimationsFunction {\n if (!this._animation) {\n this.buildAnimation();\n }\n return this._animation!;\n }\n\n private getProgressAnimation(): ProgressAnimation {\n if (!this._progressAnimation) {\n this.buildProgressAnimation();\n }\n return this._progressAnimation!;\n }\n\n private buildAnimation() {\n const animationFactory = this._customAnimationFactory;\n const transitionDuration = this._transitionDuration;\n this._animation = (values: SharedTransitionAnimationsValues) => {\n 'worklet';\n let animations: {\n [key: string]: any;\n } = {};\n const initialValues: {\n [key: string]: any;\n } = {};\n\n if (animationFactory) {\n animations = animationFactory(values);\n for (const key in animations) {\n if (!supportedProps.includes(key)) {\n throw Error(`The prop '${key}' is not supported yet.`);\n }\n }\n } else {\n for (const propName of supportedProps) {\n if (propName === 'transform') {\n const matrix = values.targetTransformMatrix;\n animations.transformMatrix = withTiming(matrix, {\n duration: transitionDuration,\n });\n } else {\n const keyToTargetValue =\n 'target' + propName.charAt(0).toUpperCase() + propName.slice(1);\n animations[propName] = withTiming(values[keyToTargetValue], {\n duration: transitionDuration,\n });\n }\n }\n }\n\n for (const propName in animations) {\n if (propName === 'transform') {\n initialValues.transformMatrix = values.currentTransformMatrix;\n } else {\n const keyToCurrentValue =\n 'current' + propName.charAt(0).toUpperCase() + propName.slice(1);\n initialValues[propName] = values[keyToCurrentValue];\n }\n }\n\n return { initialValues, animations };\n };\n }\n\n private buildProgressAnimation() {\n if (this._customProgressAnimation) {\n this._progressAnimation = this._customProgressAnimation;\n return;\n }\n this._progressAnimation = (viewTag, values, progress) => {\n 'worklet';\n const newStyles: { [key: string]: number | number[] } = {};\n for (const propertyName of supportedProps) {\n if (propertyName === 'transform') {\n // this is not the perfect solution, but at this moment it just interpolates the whole\n // matrix instead of interpolating scale, translate, rotate, etc. separately\n const currentMatrix = values.currentTransformMatrix as number[];\n const targetMatrix = values.targetTransformMatrix as number[];\n const newMatrix = new Array(9);\n for (let i = 0; i < 9; i++) {\n newMatrix[i] =\n progress * (targetMatrix[i] - currentMatrix[i]) +\n currentMatrix[i];\n }\n newStyles.transformMatrix = newMatrix;\n } else {\n // PropertyName == propertyName with capitalized fist letter, (width -> Width)\n const PropertyName =\n propertyName.charAt(0).toUpperCase() + propertyName.slice(1);\n const currentValue = values['current' + PropertyName] as number;\n const targetValue = values['target' + PropertyName] as number;\n newStyles[propertyName] =\n progress * (targetValue - currentValue) + currentValue;\n }\n }\n _notifyAboutProgress(viewTag, newStyles, true);\n };\n }\n\n // static builder methods\n\n public static custom(\n customAnimationFactory: AnimationFactory\n ): SharedTransition {\n return new SharedTransition().custom(customAnimationFactory);\n }\n\n public static duration(duration: number): SharedTransition {\n return new SharedTransition().duration(duration);\n }\n\n public static progressAnimation(\n progressAnimationCallback: CustomProgressAnimation\n ): SharedTransition {\n return new SharedTransition().progressAnimation(progressAnimationCallback);\n }\n\n public static defaultTransitionType(\n transitionType: SharedTransitionType\n ): SharedTransition {\n return new SharedTransition().defaultTransitionType(transitionType);\n }\n}\n","export * from './SharedTransition';\nexport * from './ProgressTransitionManager';\n","import type { SharedValue } from './commonTypes';\nimport { isJest } from './PlatformChecker';\nimport { runOnUI } from './threads';\nimport { isSharedValue } from './utils';\n\nconst IS_JEST = isJest();\n\ntype Mapper = {\n id: number;\n dirty: boolean;\n worklet: () => void;\n inputs: SharedValue[];\n outputs?: SharedValue[];\n};\n\nfunction createMapperRegistry() {\n 'worklet';\n const mappers = new Map();\n let sortedMappers: Mapper[] = [];\n\n let runRequested = false;\n let processingMappers = false;\n\n function updateMappersOrder() {\n // sort mappers topologically\n // the algorithm here takes adventage of a fact that the topological order\n // of a transposed graph is a reverse topological order of the original graph\n // The graph in our case consists of mappers and an edge between two mappers\n // A and B exists if there is a shared value that's on A's output lists and on\n // B's input list.\n //\n // We don't need however to calculate that graph as it is easier to work with\n // the transposed version of it that can be calculated ad-hoc. For the transposed\n // version to be traversed we use \"pre\" map that maps share value to mappers that\n // output that shared value. Then we can infer all the outgoing edges for a given\n // mapper simply by scanning it's input list and checking if any of the shared values\n // from that list exists in the \"pre\" map. If they do, then we have an edge between\n // that mapper and the mappers from the \"pre\" list for the given shared value.\n //\n // For topological sorting we use a dfs-based approach that requires the graph to\n // be traversed in dfs order and each node after being processed lands at the\n // beginning of the topological order list. Since we traverse a transposed graph,\n // instead of reversing that order we can use a normal array and push processed\n // mappers to the end. There is no need to reverse that array after we are done.\n const pre = new Map(); // map from sv -> mapper that outputs that sv\n mappers.forEach((mapper) => {\n if (mapper.outputs) {\n for (const output of mapper.outputs) {\n const preMappers = pre.get(output);\n if (preMappers === undefined) {\n pre.set(output, [mapper]);\n } else {\n preMappers.push(mapper);\n }\n }\n }\n });\n const visited = new Set();\n const newOrder: Mapper[] = [];\n function dfs(mapper: Mapper) {\n visited.add(mapper);\n for (const input of mapper.inputs) {\n const preMappers = pre.get(input);\n if (preMappers) {\n for (const preMapper of preMappers) {\n if (!visited.has(preMapper)) {\n dfs(preMapper);\n }\n }\n }\n }\n newOrder.push(mapper);\n }\n mappers.forEach((mapper) => {\n if (!visited.has(mapper)) {\n dfs(mapper);\n }\n });\n sortedMappers = newOrder;\n }\n\n function mapperRun() {\n runRequested = false;\n if (processingMappers) {\n return;\n }\n processingMappers = true;\n if (mappers.size !== sortedMappers.length) {\n updateMappersOrder();\n }\n for (const mapper of sortedMappers) {\n if (mapper.dirty) {\n mapper.dirty = false;\n mapper.worklet();\n }\n }\n processingMappers = false;\n }\n\n function maybeRequestUpdates() {\n if (IS_JEST) {\n // On Jest environment we avoid using queueMicrotask as that'd require test\n // to advance the clock manually. This on other hand would require tests\n // to know how many times mappers need to run. As we don't want tests to\n // make any assumptions on that number it is easier to execute mappers\n // immediately for testing purposes and only expect test to advance timers\n // if they want to make any assertions on the effects of animations being run.\n mapperRun();\n } else if (!runRequested) {\n if (processingMappers) {\n // In general, we should avoid having mappers trigger updates as this may\n // result in unpredictable behavior. Specifically, the updated value can\n // be read by mappers that run later in the same frame but previous mappers\n // would access the old value. Updating mappers during the mapper-run phase\n // breaks the order in which we should execute the mappers. However, doing\n // that is still a possibility and there are some instances where people use\n // the API in that way, hence we need to prevent mapper-run phase falling into\n // an infinite loop. We do that by detecting when mapper-run is requested while\n // we are already in mapper-run phase, and in that case we use `requestAnimationFrame`\n // instead of `queueMicrotask` which will schedule mapper run for the next\n // frame instead of queuing another set of updates in the same frame.\n requestAnimationFrame(mapperRun);\n } else {\n queueMicrotask(mapperRun);\n }\n runRequested = true;\n }\n }\n\n function extractInputs(\n inputs: any,\n resultArray: SharedValue[]\n ): SharedValue[] {\n if (Array.isArray(inputs)) {\n for (const input of inputs) {\n input && extractInputs(input, resultArray);\n }\n } else if (isSharedValue(inputs)) {\n resultArray.push(inputs);\n } else if (Object.getPrototypeOf(inputs) === Object.prototype) {\n // we only extract inputs recursively from \"plain\" objects here, if object\n // is of a derivative class (e.g. HostObject on web, or Map) we don't scan\n // it recursively\n for (const element of Object.values(inputs)) {\n element && extractInputs(element, resultArray);\n }\n }\n return resultArray;\n }\n\n return {\n start: (\n mapperID: number,\n worklet: () => void,\n inputs: SharedValue[],\n outputs?: SharedValue[]\n ) => {\n const mapper = {\n id: mapperID,\n dirty: true,\n worklet,\n inputs: extractInputs(inputs, []),\n outputs,\n };\n mappers.set(mapper.id, mapper);\n sortedMappers = [];\n for (const sv of mapper.inputs) {\n sv.addListener(mapper.id, () => {\n mapper.dirty = true;\n maybeRequestUpdates();\n });\n }\n maybeRequestUpdates();\n },\n stop: (mapperID: number) => {\n const mapper = mappers.get(mapperID);\n if (mapper) {\n mappers.delete(mapper.id);\n sortedMappers = [];\n for (const sv of mapper.inputs) {\n sv.removeListener(mapper.id);\n }\n }\n },\n };\n}\n\nlet MAPPER_ID = 9999;\n\nexport function startMapper(\n worklet: () => void,\n inputs: any[] = [],\n outputs: any[] = []\n): number {\n const mapperID = (MAPPER_ID += 1);\n\n runOnUI(() => {\n let mapperRegistry = global.__mapperRegistry;\n if (mapperRegistry === undefined) {\n mapperRegistry = global.__mapperRegistry = createMapperRegistry();\n }\n mapperRegistry.start(mapperID, worklet, inputs, outputs);\n })();\n\n return mapperID;\n}\n\nexport function stopMapper(mapperID: number): void {\n runOnUI(() => {\n const mapperRegistry = global.__mapperRegistry;\n mapperRegistry?.stop(mapperID);\n })();\n}\n","import NativeReanimatedModule from './NativeReanimated';\nimport type { SharedValue, ShareableSyncDataHolderRef } from './commonTypes';\nimport {\n makeShareableCloneOnUIRecursive,\n makeShareableCloneRecursive,\n registerShareableMapping,\n} from './shareables';\nimport { runOnUI } from './threads';\nimport { valueSetter } from './valueSetter';\n\nexport function makeUIMutable(\n initial: T,\n syncDataHolder?: ShareableSyncDataHolderRef\n) {\n 'worklet';\n\n const listeners = new Map();\n let value = initial;\n\n const self = {\n set value(newValue) {\n valueSetter(self, newValue);\n },\n get value() {\n return value;\n },\n /**\n * _value prop should only be accessed by the valueSetter implementation\n * which may make the decision about updating the mutable value depending\n * on the provided new value. All other places should only attempt to modify\n * the mutable by assigning to value prop directly.\n */\n set _value(newValue: T) {\n value = newValue;\n if (syncDataHolder) {\n _updateDataSynchronously(\n syncDataHolder,\n makeShareableCloneOnUIRecursive(newValue)\n );\n }\n listeners.forEach((listener) => {\n listener(newValue);\n });\n },\n get _value(): T {\n return value;\n },\n addListener: (id: number, listener: (newValue: T) => void) => {\n listeners.set(id, listener);\n },\n removeListener: (id: number) => {\n listeners.delete(id);\n },\n _animation: null,\n _isReanimatedSharedValue: true,\n };\n return self;\n}\n\nexport function makeMutable(\n initial: T,\n oneWayReadsOnly = false\n): SharedValue {\n let value: T = initial;\n let syncDataHolder: ShareableSyncDataHolderRef | undefined;\n if (!oneWayReadsOnly && NativeReanimatedModule.native) {\n // updates are always synchronous when running on web or in Jest environment\n syncDataHolder = NativeReanimatedModule.makeSynchronizedDataHolder(\n makeShareableCloneRecursive(value)\n );\n registerShareableMapping(syncDataHolder);\n }\n const handle = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return makeUIMutable(initial, syncDataHolder);\n },\n });\n // listeners can only work on JS thread on Web and jest environments\n const listeners = NativeReanimatedModule.native ? undefined : new Map();\n const mutable = {\n set value(newValue) {\n if (NativeReanimatedModule.native) {\n runOnUI(() => {\n mutable.value = newValue;\n })();\n } else {\n valueSetter(mutable, newValue);\n }\n },\n get value() {\n if (syncDataHolder) {\n return NativeReanimatedModule.getDataSynchronously(syncDataHolder);\n }\n return value;\n },\n set _value(newValue: T) {\n if (NativeReanimatedModule.native) {\n throw new Error(\n 'Setting `_value` directly is only possible on the UI runtime'\n );\n }\n value = newValue;\n listeners!.forEach((listener) => {\n listener(newValue);\n });\n },\n get _value(): T {\n if (NativeReanimatedModule.native) {\n throw new Error(\n 'Reading from `_value` directly is only possible on the UI runtime'\n );\n }\n return value;\n },\n modify: (modifier: (value: T) => T) => {\n runOnUI(() => {\n mutable.value = modifier(mutable.value);\n })();\n },\n addListener: (id: number, listener: (value: T) => void) => {\n if (NativeReanimatedModule.native) {\n throw new Error('adding listeners is only possible on the UI runtime');\n }\n listeners!.set(id, listener);\n },\n removeListener: (id: number) => {\n if (NativeReanimatedModule.native) {\n throw new Error(\n 'removing listeners is only possible on the UI runtime'\n );\n }\n listeners!.delete(id);\n },\n _isReanimatedSharedValue: true,\n };\n registerShareableMapping(mutable, handle);\n return mutable;\n}\n\nexport function makeRemote(initial: T = {} as T): T {\n const handle = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return initial;\n },\n });\n registerShareableMapping(initial, handle);\n return initial;\n}\n","// RNRender is not used for web. An export is still defined to eliminate warnings from bundlers such as esbuild.\nmodule.exports = null;\n","import { jsVersion } from './jsVersion';\n\nexport function checkCppVersion() {\n const cppVersion = global._REANIMATED_VERSION_CPP;\n if (cppVersion === undefined) {\n throw new Error(\n `[Reanimated] Couldn't determine the version of the native part of Reanimated. Did you forget to re-build the app after upgrading react-native-reanimated? If you use Expo Go, you must use the exact version which is bundled into Expo SDK.`\n );\n }\n const ok = matchVersion(jsVersion, cppVersion);\n if (!ok) {\n throw new Error(\n `[Reanimated] Mismatch between JavaScript part (${jsVersion}) and native part of Reanimated (${cppVersion}). Did you forget to re-build the app after upgrading react-native-reanimated? If you use Expo Go, you must downgrade to ${cppVersion} which is bundled into Expo SDK.`\n );\n }\n}\n\n// This is used only in test files, therefore it is reported by ts-prune (which is desired)\n// ts-prune-ignore-next\nexport function matchVersion(version1: string, version2: string) {\n if (version1.match(/^\\d+\\.\\d+\\.\\d+$/) && version2.match(/^\\d+\\.\\d+\\.\\d+$/)) {\n // x.y.z, compare only major and minor, skip patch\n const [major1, minor1] = version1.split('.');\n const [major2, minor2] = version2.split('.');\n return major1 === major2 && minor1 === minor2;\n } else {\n // alpha, beta or rc, compare everything\n return version1 === version2;\n }\n}\n","/**\n * We hardcode the version of Reanimated here in order to compare it\n * with the version used to build the native part of the library in runtime.\n * Remember to keep this in sync with the version declared in `package.json`\n */\nexport const jsVersion = '3.4.2';\n","export function getUseOfValueInStyleWarning() {\n return (\n \"It looks like you might be using shared value's .value inside reanimated inline style. \" +\n 'If you want a component to update when shared value changes you should use the shared value' +\n ' directly instead of its current state represented by `.value`. See documentation here: ' +\n 'https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/animations#animations-in-inline-styles'\n );\n}\n","import NativeReanimatedModule from './NativeReanimated';\nimport type { ShareableRef, WorkletFunction } from './commonTypes';\nimport { shouldBeUseWeb } from './PlatformChecker';\nimport { registerWorkletStackDetails } from './errors';\nimport { jsVersion } from './platform-specific/jsVersion';\n\n// for web/chrome debugger/jest environments this file provides a stub implementation\n// where no shareable references are used. Instead, the objects themselves are used\n// instead of shareable references, because of the fact that we don't have to deal with\n// runnning the code on separate VMs.\nconst USE_STUB_IMPLEMENTATION = shouldBeUseWeb();\n\nconst _shareableCache = new WeakMap<\n Record,\n ShareableRef | symbol\n>();\n// the below symbol is used to represent a mapping from the value to itself\n// this is used to allow for a converted shareable to be passed to makeShareableClone\nconst _shareableFlag = Symbol('shareable flag');\n\nconst MAGIC_KEY = 'REANIMATED_MAGIC_KEY';\n\nfunction isHostObject(value: NonNullable): boolean {\n // We could use JSI to determine whether an object is a host object, however\n // the below workaround works well and is way faster than an additional JSI call.\n // We use the fact that host objects have broken implementation of `hasOwnProperty`\n // and hence return true for all `in` checks regardless of the key we ask for.\n return MAGIC_KEY in value;\n}\n\nexport function registerShareableMapping(\n shareable: any,\n shareableRef?: ShareableRef\n): void {\n if (USE_STUB_IMPLEMENTATION) {\n return;\n }\n _shareableCache.set(shareable, shareableRef || _shareableFlag);\n}\n\nfunction isPlainJSObject(object: object) {\n return Object.getPrototypeOf(object) === Object.prototype;\n}\n\n// The below object is used as a replacement for objects that cannot be transferred\n// as shareable values. In makeShareableCloneRecursive we detect if an object is of\n// a plain Object.prototype and only allow such objects to be transferred. This lets\n// us avoid all sorts of react internals from leaking into the UI runtime. To make it\n// possible to catch errors when someone actually tries to access such object on the UI\n// runtime, we use the below Proxy object which is instantiated on the UI runtime and\n// throws whenever someone tries to access its fields.\nconst INACCESSIBLE_OBJECT = {\n __init: () => {\n 'worklet';\n return new Proxy(\n {},\n {\n get: (_: any, prop: string | symbol) => {\n if (prop === '_isReanimatedSharedValue') {\n // not very happy about this check here, but we need to allow for\n // \"inaccessible\" objects to be tested with isSharedValue check\n // as it is being used in the mappers when extracing inputs recursively.\n // Apparently we can't check if a key exists there as HostObjects always\n // return true for such tests, so the only possibility for us is to\n // actually access that key and see if it is set to true. We therefore\n // need to allow for this key to be accessed here.\n return false;\n }\n throw new Error(\n `Trying to access property \\`${String(\n prop\n )}\\` of an object which cannot be sent to the UI runtime.`\n );\n },\n set: () => {\n throw new Error(\n 'Trying to write to an object which cannot be sent to the UI runtime.'\n );\n },\n }\n );\n },\n};\n\nconst DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD = 30;\n// Below variable stores object that we process in makeShareableCloneRecursive at the specified depth.\n// We use it to check if later on the function reenters with the same object\nlet processedObjectAtThresholdDepth: any;\n\nexport function makeShareableCloneRecursive(\n value: any,\n shouldPersistRemote = false,\n depth = 0\n): ShareableRef {\n if (USE_STUB_IMPLEMENTATION) {\n return value;\n }\n if (depth >= DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) {\n // if we reach certain recursion depth we suspect that we are dealing with a cyclic object.\n // this type of objects are not supported and cannot be trasferred as shareable, so we\n // implement a simple detection mechanism that remembers the value at a given depth and\n // tests whether we try reenter this method later on with the same value. If that happens\n // we throw an appropriate error.\n if (depth === DETECT_CYCLIC_OBJECT_DEPTH_THRESHOLD) {\n processedObjectAtThresholdDepth = value;\n } else if (value === processedObjectAtThresholdDepth) {\n throw new Error(\n 'Trying to convert a cyclic object to a shareable. This is not supported.'\n );\n }\n } else {\n processedObjectAtThresholdDepth = undefined;\n }\n // This one actually may be worth to be moved to c++, we also need similar logic to run on the UI thread\n const type = typeof value;\n const isTypeObject = type === 'object';\n const isTypeFunction = type === 'function';\n if ((isTypeObject || isTypeFunction) && value !== null) {\n const cached = _shareableCache.get(value);\n if (cached === _shareableFlag) {\n return value;\n } else if (cached !== undefined) {\n return cached as ShareableRef;\n } else {\n let toAdapt: any;\n if (Array.isArray(value)) {\n toAdapt = value.map((element) =>\n makeShareableCloneRecursive(element, shouldPersistRemote, depth + 1)\n );\n } else if (isTypeFunction && value.__workletHash === undefined) {\n // this is a remote function\n toAdapt = value;\n } else if (isHostObject(value)) {\n // for host objects we pass the reference to the object as shareable and\n // then recreate new host object wrapping the same instance on the UI thread.\n // there is no point of iterating over keys as we do for regular objects.\n toAdapt = value;\n } else if (isPlainJSObject(value) || isTypeFunction) {\n toAdapt = {};\n if (value.__workletHash !== undefined) {\n // we are converting a worklet\n if (__DEV__) {\n const babelVersion = value.__initData.version;\n if (babelVersion === undefined) {\n throw new Error(`[Reanimated] Unknown version of Reanimated Babel plugin.\n1. Try resetting your Metro bundler cache with \\`yarn start --reset-cache\\`, \\`npm start -- --reset-cache\\` or \\`expo start -c\\` and run the app again.\n2. Make sure that none of your dependencies contains already transformed worklets bundled with an outdated version of the Reanimated Babel plugin.\n3. Using release bundle with debug build of the app is not supported.\nOffending code was: \\`${getWorkletCode(value)}\\``);\n } else if (babelVersion !== jsVersion) {\n throw new Error(`[Reanimated] Mismatch between JavaScript code version and Reanimated Babel plugin version (${jsVersion} vs. ${babelVersion}). \n1. Try resetting your Metro bundler cache with \\`yarn start --reset-cache\\`, \\`npm start -- --reset-cache\\` or \\`expo start -c\\` and run the app again.\n2. Make sure that none of your dependencies contains already transformed worklets bundled with an outdated version of the Reanimated Babel plugin.\nOffending code was: \\`${getWorkletCode(value)}\\``);\n }\n registerWorkletStackDetails(\n value.__workletHash,\n value.__stackDetails\n );\n delete value.__stackDetails;\n } else if (value.__stackDetails) {\n // Detected debug version of the worklet in release bundle. This\n // might lead to unexpected issues or errors. Probably one of user\n // dependencies provided transpiled code with debug version of the\n // Reanimated plugin.\n throw new Error(\n '[Reanimated] Using dev bundle in a release app build is not supported. Visit https://github.com/software-mansion/react-native-reanimated/issues/4737 to find more information on how to fix this issue.'\n );\n }\n // to save on transferring static __initData field of worklet structure\n // we request shareable value to persist its UI counterpart. This means\n // that the __initData field that contains long strings represeting the\n // worklet code, source map, and location, will always be\n // serialized/deserialized once.\n toAdapt.__initData = makeShareableCloneRecursive(\n value.__initData,\n true,\n depth + 1\n );\n delete value.__initData;\n }\n\n for (const [key, element] of Object.entries(value)) {\n toAdapt[key] = makeShareableCloneRecursive(\n element,\n shouldPersistRemote,\n depth + 1\n );\n }\n } else if (value instanceof RegExp) {\n const pattern = value.source;\n const flags = value.flags;\n const handle = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return new RegExp(pattern, flags);\n },\n });\n registerShareableMapping(value, handle);\n return handle as ShareableRef;\n } else {\n // This is reached for object types that are not of plain Object.prototype.\n // We don't support such objects from being transferred as shareables to\n // the UI runtime and hence we replace them with \"inaccessible object\"\n // which is implemented as a Proxy object that throws on any attempt\n // of accessing its fields. We argue that such objects can sometimes leak\n // as attributes of objects being captured by worklets but should never\n // be used on the UI runtime regardless. If they are being accessed, the user\n // will get an appropriate error message.\n const inaccessibleObject =\n makeShareableCloneRecursive(INACCESSIBLE_OBJECT);\n _shareableCache.set(value, inaccessibleObject);\n return inaccessibleObject;\n }\n if (__DEV__) {\n // we freeze objects that are transformed to shareable. This should help\n // detect issues when someone modifies data after it's been converted to\n // shareable. Meaning that they may be doing a faulty assumption in their\n // code expecting that the updates are going to automatically populate to\n // the object sent to the UI thread. If the user really wants some objects\n // to be mutable they should use shared values instead.\n Object.freeze(value);\n }\n const adopted = NativeReanimatedModule.makeShareableClone(\n toAdapt,\n shouldPersistRemote\n );\n _shareableCache.set(value, adopted);\n _shareableCache.set(adopted, _shareableFlag);\n return adopted;\n }\n }\n return NativeReanimatedModule.makeShareableClone(value, shouldPersistRemote);\n}\n\nconst WORKLET_CODE_THRESHOLD = 255;\n\nfunction getWorkletCode(value: WorkletFunction) {\n // @ts-ignore this is fine\n const code = value?.__initData?.code;\n if (!code) {\n return 'unknown';\n }\n if (code.length > WORKLET_CODE_THRESHOLD) {\n return `${code.substring(0, WORKLET_CODE_THRESHOLD)}...`;\n }\n return code;\n}\n\nexport function makeShareableCloneOnUIRecursive(value: T): ShareableRef {\n 'worklet';\n if (USE_STUB_IMPLEMENTATION) {\n // @ts-ignore web is an interesting place where we don't run a secondary VM on the UI thread\n // see more details in the comment where USE_STUB_IMPLEMENTATION is defined.\n return value;\n }\n function cloneRecursive(value: T): ShareableRef {\n const type = typeof value;\n if ((type === 'object' || type === 'function') && value !== null) {\n let toAdapt: any;\n if (Array.isArray(value)) {\n toAdapt = value.map((element) => cloneRecursive(element));\n } else if (value !== undefined) {\n toAdapt = {};\n for (const [key, element] of Object.entries(\n value as Record\n )) {\n toAdapt[key] = cloneRecursive(element);\n }\n }\n return _makeShareableClone(toAdapt);\n }\n return _makeShareableClone(value);\n }\n return cloneRecursive(value);\n}\n\nexport function makeShareable(value: T): T {\n if (USE_STUB_IMPLEMENTATION) {\n return value;\n }\n const handle = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return value;\n },\n });\n registerShareableMapping(value, handle);\n return value;\n}\n","import NativeReanimatedModule from './NativeReanimated';\nimport { isJest, shouldBeUseWeb } from './PlatformChecker';\nimport type { ComplexWorkletFunction } from './commonTypes';\nimport {\n makeShareableCloneOnUIRecursive,\n makeShareableCloneRecursive,\n} from './shareables';\n\nconst IS_JEST = isJest();\nconst IS_NATIVE = !shouldBeUseWeb();\n\nlet _runOnUIQueue: Array<[ComplexWorkletFunction, any[]]> = [];\n\nexport function setupMicrotasks() {\n 'worklet';\n\n let microtasksQueue: Array<() => void> = [];\n let isExecutingMicrotasksQueue = false;\n global.queueMicrotask = (callback: () => void) => {\n microtasksQueue.push(callback);\n };\n\n global.__callMicrotasks = () => {\n if (isExecutingMicrotasksQueue) {\n return;\n }\n try {\n isExecutingMicrotasksQueue = true;\n for (let index = 0; index < microtasksQueue.length; index += 1) {\n // we use classic 'for' loop because the size of the currentTasks array may change while executing some of the callbacks due to queueMicrotask calls\n microtasksQueue[index]();\n }\n microtasksQueue = [];\n global._maybeFlushUIUpdatesQueue();\n } finally {\n isExecutingMicrotasksQueue = false;\n }\n };\n}\n\nfunction callMicrotasksOnUIThread() {\n 'worklet';\n global.__callMicrotasks();\n}\n\nexport const callMicrotasks = IS_NATIVE\n ? callMicrotasksOnUIThread\n : () => {\n // on web flushing is a noop as immediates are handled by the browser\n };\n\n/**\n * Schedule a worklet to execute on the UI runtime. This method does not schedule the work immediately but instead\n * waits for other worklets to be scheduled within the same JS loop. It uses queueMicrotask to schedule all the worklets\n * at once making sure they will run within the same frame boundaries on the UI thread.\n */\nexport function runOnUI(\n worklet: ComplexWorkletFunction\n): (...args: A) => void {\n 'worklet';\n if (__DEV__ && IS_NATIVE && _WORKLET) {\n throw new Error(\n 'runOnUI() cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'\n );\n }\n if (__DEV__ && IS_NATIVE && worklet.__workletHash === undefined) {\n throw new Error('runOnUI() can only be used on worklets');\n }\n return (...args) => {\n if (IS_JEST) {\n // Mocking time in Jest is tricky as both requestAnimationFrame and queueMicrotask\n // callbacks run on the same queue and can be interleaved. There is no way\n // to flush particular queue in Jest and the only control over mocked timers\n // is by using jest.advanceTimersByTime() method which advances all types\n // of timers including immediate and animation callbacks. Ideally we'd like\n // to have some way here to schedule work along with React updates, but\n // that's not possible, and hence in Jest environment instead of using scheduling\n // mechanism we just schedule the work ommiting the queue. This is ok for the\n // uses that we currently have but may not be ok for future tests that we write.\n NativeReanimatedModule.scheduleOnUI(\n makeShareableCloneRecursive(() => {\n 'worklet';\n worklet(...args);\n })\n );\n return;\n }\n if (__DEV__) {\n // in DEV mode we call shareable conversion here because in case the object\n // can't be converted, we will get a meaningful stack-trace as opposed to the\n // situation when conversion is only done via microtask queue. This does not\n // make the app particularily less efficient as converted objects are cached\n // and for a given worklet the conversion only happens once.\n makeShareableCloneRecursive(worklet);\n makeShareableCloneRecursive(args);\n }\n _runOnUIQueue.push([worklet, args]);\n if (_runOnUIQueue.length === 1) {\n queueMicrotask(() => {\n const queue = _runOnUIQueue;\n _runOnUIQueue = [];\n NativeReanimatedModule.scheduleOnUI(\n makeShareableCloneRecursive(() => {\n 'worklet';\n queue.forEach(([worklet, args]) => {\n worklet(...args);\n });\n callMicrotasks();\n })\n );\n });\n }\n };\n}\n\n/**\n * Schedule a worklet to execute on the UI runtime skipping batching mechanism.\n */\nexport function runOnUIImmediately(\n worklet: ComplexWorkletFunction\n): (...args: A) => void {\n 'worklet';\n if (__DEV__ && IS_NATIVE && _WORKLET) {\n throw new Error(\n 'runOnUIImmediately() cannot be called on the UI runtime. Please call the function synchronously or use `queueMicrotask` or `requestAnimationFrame` instead.'\n );\n }\n if (__DEV__ && IS_NATIVE && worklet.__workletHash === undefined) {\n throw new Error('runOnUIImmediately() can only be used on worklets');\n }\n return (...args) => {\n NativeReanimatedModule.scheduleOnUI(\n makeShareableCloneRecursive(() => {\n 'worklet';\n worklet(...args);\n })\n );\n };\n}\n\nif (__DEV__ && IS_NATIVE) {\n const f = () => {\n 'worklet';\n };\n // @ts-ignore plugin\n if (f.__workletHash === undefined) {\n throw new Error(\n 'Failed to create a worklet. Did you forget to add Reanimated Babel plugin in babel.config.js? See installation docs at https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation#babel-plugin.'\n );\n }\n}\n\nfunction runWorkletOnJS(\n worklet: ComplexWorkletFunction,\n ...args: A\n): void {\n // remote function that calls a worklet synchronously on the JS runtime\n worklet(...args);\n}\n\nexport function runOnJS(\n fun: ComplexWorkletFunction\n): (...args: A) => void {\n 'worklet';\n if (!IS_NATIVE || !_WORKLET) {\n // if we are already on the JS thread, we just schedule the worklet on the JS queue\n return (...args) => queueMicrotask(args.length ? () => fun(...args) : fun);\n }\n if (fun.__workletHash) {\n // if `fun` is a worklet, we schedule a call of a remote function `runWorkletOnJS`\n // and pass the worklet as a first argument followed by original arguments\n return (...args) => runOnJS(runWorkletOnJS)(fun, ...args);\n }\n if (fun.__remoteFunction) {\n // in development mode the function provided as `fun` throws an error message\n // such that when someone accidentally calls it directly on the UI runtime, they\n // see that they should use `runOnJS` instead. To facilitate that we put the\n // reference to the original remote function in the `__remoteFunction` property.\n fun = fun.__remoteFunction;\n }\n return (...args) => {\n _scheduleOnJS(\n fun,\n args.length > 0\n ? (makeShareableCloneOnUIRecursive(args) as unknown as unknown[])\n : undefined\n );\n };\n}\n","import type { Component } from 'react';\nimport { measure } from './NativeMethods';\nimport type { AnimatedRef } from './hook/commonTypes';\nimport type { SharedValue } from './commonTypes';\n\nexport interface ComponentCoords {\n x: number;\n y: number;\n}\n\n/**\n * Given an absolute position and a component ref, returns the relative\n * position in the component's local coordinate space.\n */\nexport function getRelativeCoords(\n parentAnimatedRef: AnimatedRef,\n absoluteX: number,\n absoluteY: number\n): ComponentCoords | null {\n 'worklet';\n const parentCoords = measure(parentAnimatedRef);\n if (parentCoords === null) {\n return null;\n }\n return {\n x: absoluteX - parentCoords.x,\n y: absoluteY - parentCoords.y,\n };\n}\n\nexport function isSharedValue(value: any): value is SharedValue {\n 'worklet';\n return value?._isReanimatedSharedValue === true;\n}\n","import type { AnimationObject, AnimatableValue } from './commonTypes';\nimport type { Descriptor } from './hook/commonTypes';\n\nexport function valueSetter(sv: any, value: any): void {\n 'worklet';\n const previousAnimation = sv._animation;\n if (previousAnimation) {\n previousAnimation.cancelled = true;\n sv._animation = null;\n }\n if (\n typeof value === 'function' ||\n (value !== null &&\n typeof value === 'object' &&\n (value as AnimationObject).onFrame !== undefined)\n ) {\n const animation: AnimationObject =\n typeof value === 'function'\n ? (value as () => AnimationObject)()\n : (value as AnimationObject);\n // prevent setting again to the same value\n // and triggering the mappers that treat this value as an input\n // this happens when the animation's target value(stored in animation.current until animation.onStart is called) is set to the same value as a current one(this._value)\n // built in animations that are not higher order(withTiming, withSpring) hold target value in .current\n if (sv._value === animation.current && !animation.isHigherOrder) {\n animation.callback && animation.callback(true);\n return;\n }\n // animated set\n const initializeAnimation = (timestamp: number) => {\n animation.onStart(animation, sv.value, timestamp, previousAnimation);\n };\n const currentTimestamp = global.__frameTimestamp || performance.now();\n initializeAnimation(currentTimestamp);\n const step = (timestamp: number) => {\n if (animation.cancelled) {\n animation.callback && animation.callback(false /* finished */);\n return;\n }\n const finished = animation.onFrame(animation, timestamp);\n animation.finished = true;\n animation.timestamp = timestamp;\n sv._value = animation.current;\n if (finished) {\n animation.callback && animation.callback(true /* finished */);\n } else {\n requestAnimationFrame(step);\n }\n };\n\n sv._animation = animation;\n\n step(currentTimestamp);\n } else {\n // prevent setting again to the same value\n // and triggering the mappers that treat this value as an input\n if (sv._value === value) {\n return;\n }\n sv._value = value as Descriptor | AnimatableValue;\n }\n}\n","/**\n * imported from react-native\n */\n\nimport type { MutableRefObject } from 'react';\n\n/**\n * This is a helper function for when a component needs to be able to forward a ref\n * to a child component, but still needs to have access to that component as part of\n * its implementation.\n *\n * Its main use case is in wrappers for native components.\n *\n * Usage:\n *\n * class MyView extends React.Component {\n * _nativeRef = null;\n *\n * _setNativeRef = setAndForwardRef({\n * getForwardedRef: () => this.props.forwardedRef,\n * setLocalRef: ref => {\n * this._nativeRef = ref;\n * },\n * });\n *\n * render() {\n * return ;\n * }\n * }\n *\n * const MyViewWithRef = React.forwardRef((props, ref) => (\n * \n * ));\n *\n * module.exports = MyViewWithRef;\n */\n\ntype ForwardedRef = () => MutableRefObject | ((ref: T) => void);\n\nfunction setAndForwardRef({\n getForwardedRef,\n setLocalRef,\n}: {\n getForwardedRef: ForwardedRef;\n setLocalRef: (ref: T) => void;\n}): (ref: T) => void {\n return function forwardRef(ref: T) {\n const forwardedRef = getForwardedRef();\n\n setLocalRef(ref);\n\n // Forward to user ref prop (if one has been specified)\n if (typeof forwardedRef === 'function') {\n // Handle function-based refs. String-based refs are handled as functions.\n forwardedRef(ref);\n } else if (typeof forwardedRef === 'object' && forwardedRef != null) {\n // Handle createRef-based refs\n forwardedRef.current = ref;\n }\n };\n}\n\nexport default setAndForwardRef;\n","import type { EdgeInsets, Metrics } from './SafeArea.types';\n\nexport const initialWindowMetrics: Metrics | null = null;\n\n/**\n * @deprecated\n */\nexport const initialWindowSafeAreaInsets: EdgeInsets | null = null;\n","/* eslint-env browser */\n\nimport * as React from 'react';\nimport { View } from 'react-native';\nimport type { NativeSafeAreaProviderProps } from './SafeArea.types';\n\n/**\n * TODO:\n * Currently insets and frame are based on the window and are not\n * relative to the provider view. This is inconsistent with iOS and Android.\n * However in most cases if the provider view covers the screen this is not\n * an issue.\n */\n\nconst CSSTransitions: Record = {\n WebkitTransition: 'webkitTransitionEnd',\n Transition: 'transitionEnd',\n MozTransition: 'transitionend',\n MSTransition: 'msTransitionEnd',\n OTransition: 'oTransitionEnd',\n};\n\nexport function NativeSafeAreaProvider({\n children,\n style,\n onInsetsChange,\n}: NativeSafeAreaProviderProps) {\n React.useEffect(() => {\n // Skip for SSR.\n if (typeof document === 'undefined') {\n return;\n }\n\n const element = createContextElement();\n document.body.appendChild(element);\n const onEnd = () => {\n const { paddingTop, paddingBottom, paddingLeft, paddingRight } =\n window.getComputedStyle(element);\n\n const insets = {\n top: paddingTop ? parseInt(paddingTop, 10) : 0,\n bottom: paddingBottom ? parseInt(paddingBottom, 10) : 0,\n left: paddingLeft ? parseInt(paddingLeft, 10) : 0,\n right: paddingRight ? parseInt(paddingRight, 10) : 0,\n };\n const frame = {\n x: 0,\n y: 0,\n width: document.documentElement.offsetWidth,\n height: document.documentElement.offsetHeight,\n };\n // @ts-ignore: missing properties\n onInsetsChange({ nativeEvent: { insets, frame } });\n };\n element.addEventListener(getSupportedTransitionEvent(), onEnd);\n onEnd();\n return () => {\n document.body.removeChild(element);\n element.removeEventListener(getSupportedTransitionEvent(), onEnd);\n };\n }, [onInsetsChange]);\n\n return {children};\n}\n\nlet _supportedTransitionEvent: string | null | undefined = null;\nfunction getSupportedTransitionEvent(): string {\n if (_supportedTransitionEvent != null) {\n return _supportedTransitionEvent;\n }\n const element = document.createElement('invalidtype');\n\n _supportedTransitionEvent = CSSTransitions.Transition;\n for (const key in CSSTransitions) {\n if (element.style[key as keyof CSSStyleDeclaration] !== undefined) {\n _supportedTransitionEvent = CSSTransitions[key];\n break;\n }\n }\n return _supportedTransitionEvent as string;\n}\n\ntype CssEnv = 'constant' | 'env';\n\nlet _supportedEnv: CssEnv | null = null;\nfunction getSupportedEnv(): CssEnv {\n if (_supportedEnv !== null) {\n return _supportedEnv;\n }\n const { CSS } = window;\n if (\n CSS &&\n CSS.supports &&\n CSS.supports('top: constant(safe-area-inset-top)')\n ) {\n _supportedEnv = 'constant';\n } else {\n _supportedEnv = 'env';\n }\n return _supportedEnv;\n}\n\nfunction getInset(side: string): string {\n return `${getSupportedEnv()}(safe-area-inset-${side})`;\n}\n\nfunction createContextElement(): HTMLElement {\n const element = document.createElement('div');\n const { style } = element;\n style.position = 'fixed';\n style.left = '0';\n style.top = '0';\n style.width = '0';\n style.height = '0';\n style.zIndex = '-1';\n style.overflow = 'hidden';\n style.visibility = 'hidden';\n // Bacon: Anything faster than this and the callback will be invoked too early with the wrong insets\n style.transitionDuration = '0.05s';\n style.transitionProperty = 'padding';\n style.transitionDelay = '0s';\n style.paddingTop = getInset('top');\n style.paddingBottom = getInset('bottom');\n style.paddingLeft = getInset('left');\n style.paddingRight = getInset('right');\n return element;\n}\n","import * as React from 'react';\nimport { Dimensions, StyleSheet, ViewProps } from 'react-native';\nimport { NativeSafeAreaProvider } from './NativeSafeAreaProvider';\nimport type {\n EdgeInsets,\n InsetChangedEvent,\n Metrics,\n Rect,\n} from './SafeArea.types';\n\nconst isDev = process.env.NODE_ENV !== 'production';\n\nexport const SafeAreaInsetsContext = React.createContext(\n null,\n);\nif (isDev) {\n SafeAreaInsetsContext.displayName = 'SafeAreaInsetsContext';\n}\n\nexport const SafeAreaFrameContext = React.createContext(null);\nif (isDev) {\n SafeAreaFrameContext.displayName = 'SafeAreaFrameContext';\n}\n\nexport interface SafeAreaProviderProps extends ViewProps {\n children?: React.ReactNode;\n initialMetrics?: Metrics | null;\n /**\n * @deprecated\n */\n initialSafeAreaInsets?: EdgeInsets | null;\n}\n\nexport function SafeAreaProvider({\n children,\n initialMetrics,\n initialSafeAreaInsets,\n style,\n ...others\n}: SafeAreaProviderProps) {\n const parentInsets = useParentSafeAreaInsets();\n const parentFrame = useParentSafeAreaFrame();\n const [insets, setInsets] = React.useState(\n initialMetrics?.insets ?? initialSafeAreaInsets ?? parentInsets ?? null,\n );\n const [frame, setFrame] = React.useState(\n initialMetrics?.frame ??\n parentFrame ?? {\n // Backwards compat so we render anyway if we don't have frame.\n x: 0,\n y: 0,\n width: Dimensions.get('window').width,\n height: Dimensions.get('window').height,\n },\n );\n const onInsetsChange = React.useCallback(\n (event: InsetChangedEvent) => {\n const {\n nativeEvent: { frame: nextFrame, insets: nextInsets },\n } = event;\n\n if (\n // Backwards compat with old native code that won't send frame.\n nextFrame &&\n (nextFrame.height !== frame.height ||\n nextFrame.width !== frame.width ||\n nextFrame.x !== frame.x ||\n nextFrame.y !== frame.y)\n ) {\n setFrame(nextFrame);\n }\n\n if (\n !insets ||\n nextInsets.bottom !== insets.bottom ||\n nextInsets.left !== insets.left ||\n nextInsets.right !== insets.right ||\n nextInsets.top !== insets.top\n ) {\n setInsets(nextInsets);\n }\n },\n [frame, insets],\n );\n\n return (\n \n {insets != null ? (\n \n \n {children}\n \n \n ) : null}\n \n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1 },\n});\n\nfunction useParentSafeAreaInsets(): EdgeInsets | null {\n return React.useContext(SafeAreaInsetsContext);\n}\n\nfunction useParentSafeAreaFrame(): Rect | null {\n return React.useContext(SafeAreaFrameContext);\n}\n\nconst NO_INSETS_ERROR =\n 'No safe area value available. Make sure you are rendering `` at the top of your app.';\n\nexport function useSafeAreaInsets(): EdgeInsets {\n const insets = React.useContext(SafeAreaInsetsContext);\n if (insets == null) {\n throw new Error(NO_INSETS_ERROR);\n }\n return insets;\n}\n\nexport function useSafeAreaFrame(): Rect {\n const frame = React.useContext(SafeAreaFrameContext);\n if (frame == null) {\n throw new Error(NO_INSETS_ERROR);\n }\n return frame;\n}\n\nexport type WithSafeAreaInsetsProps = {\n insets: EdgeInsets;\n};\n\nexport function withSafeAreaInsets(\n WrappedComponent: React.ComponentType,\n): React.ForwardRefExoticComponent<\n React.PropsWithoutRef & React.RefAttributes\n> {\n return React.forwardRef((props: T, ref: React.Ref) => {\n const insets = useSafeAreaInsets();\n return ;\n });\n}\n\n/**\n * @deprecated\n */\nexport function useSafeArea(): EdgeInsets {\n return useSafeAreaInsets();\n}\n\n/**\n * @deprecated\n */\nexport const SafeAreaConsumer = SafeAreaInsetsContext.Consumer;\n\n/**\n * @deprecated\n */\nexport const SafeAreaContext = SafeAreaInsetsContext;\n","import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from './SafeAreaContext';\nimport type {\n Edge,\n NativeSafeAreaViewInstance,\n NativeSafeAreaViewProps,\n} from './SafeArea.types';\n\n// prettier-ignore\nconst TOP = 0b1000,\n RIGHT = 0b0100,\n BOTTOM = 0b0010,\n LEFT = 0b0001,\n ALL = 0b1111;\n\n/* eslint-disable no-bitwise */\n\nconst edgeBitmaskMap: Record = {\n top: TOP,\n right: RIGHT,\n bottom: BOTTOM,\n left: LEFT,\n};\n\nexport const SafeAreaView = React.forwardRef<\n NativeSafeAreaViewInstance,\n NativeSafeAreaViewProps\n>(({ style = {}, mode, edges, ...rest }, ref) => {\n const insets = useSafeAreaInsets();\n\n const edgeBitmask =\n edges != null\n ? Array.isArray(edges)\n ? edges.reduce(\n (acc: number, edge: Edge) => acc | edgeBitmaskMap[edge],\n 0,\n )\n : Object.keys(edges).reduce(\n (acc, edge) => acc | edgeBitmaskMap[edge as Edge],\n 0,\n )\n : ALL;\n\n const appliedStyle = React.useMemo(() => {\n const insetTop = edgeBitmask & TOP ? insets.top : 0;\n const insetRight = edgeBitmask & RIGHT ? insets.right : 0;\n const insetBottom = edgeBitmask & BOTTOM ? insets.bottom : 0;\n const insetLeft = edgeBitmask & LEFT ? insets.left : 0;\n\n const flatStyle = StyleSheet.flatten(style) as Record;\n\n if (mode === 'margin') {\n const {\n margin = 0,\n marginVertical = margin,\n marginHorizontal = margin,\n marginTop = marginVertical,\n marginRight = marginHorizontal,\n marginBottom = marginVertical,\n marginLeft = marginHorizontal,\n } = flatStyle;\n\n const marginStyle = {\n marginTop: marginTop + insetTop,\n marginRight: marginRight + insetRight,\n marginBottom: marginBottom + insetBottom,\n marginLeft: marginLeft + insetLeft,\n };\n\n return [style, marginStyle];\n } else {\n const {\n padding = 0,\n paddingVertical = padding,\n paddingHorizontal = padding,\n paddingTop = paddingVertical,\n paddingRight = paddingHorizontal,\n paddingBottom = paddingVertical,\n paddingLeft = paddingHorizontal,\n } = flatStyle;\n\n const paddingStyle = {\n paddingTop: paddingTop + insetTop,\n paddingRight: paddingRight + insetRight,\n paddingBottom: paddingBottom + insetBottom,\n paddingLeft: paddingLeft + insetLeft,\n };\n\n return [style, paddingStyle];\n }\n }, [style, insets, mode, edgeBitmask]);\n\n return ;\n});\n","export { default } from './PanResponderAdapter';\n","import * as React from 'react';\nimport {\n Animated,\n PanResponder,\n Keyboard,\n StyleSheet,\n GestureResponderEvent,\n PanResponderGestureState,\n I18nManager,\n View,\n} from 'react-native';\nimport useAnimatedValue from './useAnimatedValue';\nimport type {\n NavigationState,\n Route,\n Layout,\n EventEmitterProps,\n PagerProps,\n Listener,\n} from './types';\n\ntype Props = PagerProps & {\n layout: Layout;\n onIndexChange: (index: number) => void;\n navigationState: NavigationState;\n children: (\n props: EventEmitterProps & {\n // Animated value which represents the state of current index\n // It can include fractional digits as it represents the intermediate value\n position: Animated.AnimatedInterpolation;\n // Function to actually render the content of the pager\n // The parent component takes care of rendering\n render: (children: React.ReactNode) => React.ReactNode;\n // Callback to call when switching the tab\n // The tab switch animation is performed even if the index in state is unchanged\n jumpTo: (key: string) => void;\n }\n ) => React.ReactElement;\n};\n\nconst DEAD_ZONE = 12;\n\nconst DefaultTransitionSpec = {\n timing: Animated.spring,\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n};\n\nexport default function PanResponderAdapter({\n layout,\n keyboardDismissMode = 'auto',\n swipeEnabled = true,\n navigationState,\n onIndexChange,\n onSwipeStart,\n onSwipeEnd,\n children,\n style,\n animationEnabled = false,\n}: Props) {\n const { routes, index } = navigationState;\n\n const panX = useAnimatedValue(0);\n\n const listenersRef = React.useRef([]);\n\n const navigationStateRef = React.useRef(navigationState);\n const layoutRef = React.useRef(layout);\n const onIndexChangeRef = React.useRef(onIndexChange);\n\n const currentIndexRef = React.useRef(index);\n const pendingIndexRef = React.useRef();\n\n const swipeVelocityThreshold = 0.15;\n const swipeDistanceThreshold = layout.width / 1.75;\n\n const jumpToIndex = React.useCallback(\n (index: number, animate = animationEnabled) => {\n const offset = -index * layoutRef.current.width;\n\n const { timing, ...transitionConfig } = DefaultTransitionSpec;\n\n if (animate) {\n Animated.parallel([\n timing(panX, {\n ...transitionConfig,\n toValue: offset,\n useNativeDriver: false,\n }),\n ]).start(({ finished }) => {\n if (finished) {\n onIndexChangeRef.current(index);\n pendingIndexRef.current = undefined;\n }\n });\n pendingIndexRef.current = index;\n } else {\n panX.setValue(offset);\n onIndexChangeRef.current(index);\n pendingIndexRef.current = undefined;\n }\n },\n [animationEnabled, panX]\n );\n\n React.useEffect(() => {\n navigationStateRef.current = navigationState;\n layoutRef.current = layout;\n onIndexChangeRef.current = onIndexChange;\n });\n\n React.useEffect(() => {\n const offset = -navigationStateRef.current.index * layout.width;\n\n panX.setValue(offset);\n }, [layout.width, panX]);\n\n React.useEffect(() => {\n if (keyboardDismissMode === 'auto') {\n Keyboard.dismiss();\n }\n\n if (layout.width && currentIndexRef.current !== index) {\n currentIndexRef.current = index;\n jumpToIndex(index);\n }\n }, [jumpToIndex, keyboardDismissMode, layout.width, index]);\n\n const isMovingHorizontally = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n return (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy * 2) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy * 2)\n );\n };\n\n const canMoveScreen = (\n event: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n if (swipeEnabled === false) {\n return false;\n }\n\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n return (\n isMovingHorizontally(event, gestureState) &&\n ((diffX >= DEAD_ZONE && currentIndexRef.current > 0) ||\n (diffX <= -DEAD_ZONE && currentIndexRef.current < routes.length - 1))\n );\n };\n\n const startGesture = () => {\n onSwipeStart?.();\n\n if (keyboardDismissMode === 'on-drag') {\n Keyboard.dismiss();\n }\n\n panX.stopAnimation();\n // @ts-expect-error: _value is private, but docs use it as well\n panX.setOffset(panX._value);\n };\n\n const respondToGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n const diffX = I18nManager.isRTL ? -gestureState.dx : gestureState.dx;\n\n if (\n // swiping left\n (diffX > 0 && index <= 0) ||\n // swiping right\n (diffX < 0 && index >= routes.length - 1)\n ) {\n return;\n }\n\n if (layout.width) {\n // @ts-expect-error: _offset is private, but docs use it as well\n const position = (panX._offset + diffX) / -layout.width;\n const next =\n position > index ? Math.ceil(position) : Math.floor(position);\n\n if (next !== index) {\n listenersRef.current.forEach((listener) => listener(next));\n }\n }\n\n panX.setValue(diffX);\n };\n\n const finishGesture = (\n _: GestureResponderEvent,\n gestureState: PanResponderGestureState\n ) => {\n panX.flattenOffset();\n\n onSwipeEnd?.();\n\n const currentIndex =\n typeof pendingIndexRef.current === 'number'\n ? pendingIndexRef.current\n : currentIndexRef.current;\n\n let nextIndex = currentIndex;\n\n if (\n Math.abs(gestureState.dx) > Math.abs(gestureState.dy) &&\n Math.abs(gestureState.vx) > Math.abs(gestureState.vy) &&\n (Math.abs(gestureState.dx) > swipeDistanceThreshold ||\n Math.abs(gestureState.vx) > swipeVelocityThreshold)\n ) {\n nextIndex = Math.round(\n Math.min(\n Math.max(\n 0,\n I18nManager.isRTL\n ? currentIndex + gestureState.dx / Math.abs(gestureState.dx)\n : currentIndex - gestureState.dx / Math.abs(gestureState.dx)\n ),\n routes.length - 1\n )\n );\n\n currentIndexRef.current = nextIndex;\n }\n\n if (!isFinite(nextIndex)) {\n nextIndex = currentIndex;\n }\n\n jumpToIndex(nextIndex, true);\n };\n\n // TODO: use the listeners\n const addEnterListener = React.useCallback((listener: Listener) => {\n listenersRef.current.push(listener);\n\n return () => {\n const index = listenersRef.current.indexOf(listener);\n\n if (index > -1) {\n listenersRef.current.splice(index, 1);\n }\n };\n }, []);\n\n const jumpTo = React.useCallback(\n (key: string) => {\n const index = navigationStateRef.current.routes.findIndex(\n (route: { key: string }) => route.key === key\n );\n\n jumpToIndex(index);\n },\n [jumpToIndex]\n );\n\n const panResponder = PanResponder.create({\n onMoveShouldSetPanResponder: canMoveScreen,\n onMoveShouldSetPanResponderCapture: canMoveScreen,\n onPanResponderGrant: startGesture,\n onPanResponderMove: respondToGesture,\n onPanResponderTerminate: finishGesture,\n onPanResponderRelease: finishGesture,\n onPanResponderTerminationRequest: () => true,\n });\n\n const maxTranslate = layout.width * (routes.length - 1);\n const translateX = Animated.multiply(\n panX.interpolate({\n inputRange: [-maxTranslate, 0],\n outputRange: [-maxTranslate, 0],\n extrapolate: 'clamp',\n }),\n I18nManager.isRTL ? -1 : 1\n );\n\n const position = React.useMemo(\n () => (layout.width ? Animated.divide(panX, -layout.width) : null),\n [layout.width, panX]\n );\n\n return children({\n position: position ?? new Animated.Value(index),\n addEnterListener,\n jumpTo,\n render: (children) => (\n \n {React.Children.map(children, (child, i) => {\n const route = routes[i];\n const focused = i === index;\n\n return (\n \n {focused || layout.width ? child : null}\n \n );\n })}\n \n ),\n });\n}\n\nconst styles = StyleSheet.create({\n sheet: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n});\n","import * as React from 'react';\nimport { Platform, Pressable, PressableProps } from 'react-native';\n\nexport type Props = PressableProps & {\n pressColor?: string;\n pressOpacity?: number;\n children: React.ReactNode;\n};\n\nconst ANDROID_VERSION_LOLLIPOP = 21;\nconst ANDROID_SUPPORTS_RIPPLE =\n Platform.OS === 'android' && Platform.Version >= ANDROID_VERSION_LOLLIPOP;\n\n/**\n * PlatformPressable provides an abstraction on top of TouchableNativeFeedback and\n * TouchableOpacity to handle platform differences.\n *\n * On Android, you can pass the props of TouchableNativeFeedback.\n * On other platforms, you can pass the props of TouchableOpacity.\n */\nexport default function PlatformPressable({\n android_ripple,\n pressColor = 'rgba(0, 0, 0, .32)',\n pressOpacity,\n style,\n ...rest\n}: Props) {\n return (\n [\n { opacity: pressed && !ANDROID_SUPPORTS_RIPPLE ? pressOpacity : 1 },\n typeof style === 'function' ? style({ pressed }) : style,\n ]}\n {...rest}\n />\n );\n}\n","import * as React from 'react';\nimport type { SceneRendererProps } from './types';\n\ntype SceneProps = {\n route: any;\n} & Omit;\n\nconst SceneComponent = React.memo(\n } & SceneProps>({\n component,\n ...rest\n }: T) => {\n return React.createElement(component, rest);\n }\n);\n\nexport default function SceneMap(scenes: {\n [key: string]: React.ComponentType;\n}) {\n return ({ route, jumpTo, position }: SceneProps) => (\n \n );\n}\n","import * as React from 'react';\nimport { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport type {\n SceneRendererProps,\n EventEmitterProps,\n NavigationState,\n Route,\n} from './types';\n\ntype Props = SceneRendererProps &\n EventEmitterProps & {\n navigationState: NavigationState;\n lazy: boolean;\n lazyPreloadDistance: number;\n index: number;\n children: (props: { loading: boolean }) => React.ReactNode;\n style?: StyleProp;\n };\n\nexport default function SceneView({\n children,\n navigationState,\n lazy,\n layout,\n index,\n lazyPreloadDistance,\n addEnterListener,\n style,\n}: Props) {\n const [isLoading, setIsLoading] = React.useState(\n Math.abs(navigationState.index - index) > lazyPreloadDistance\n );\n\n if (\n isLoading &&\n Math.abs(navigationState.index - index) <= lazyPreloadDistance\n ) {\n // Always render the route when it becomes focused\n setIsLoading(false);\n }\n\n React.useEffect(() => {\n const handleEnter = (value: number) => {\n // If we're entering the current route, we need to load it\n if (value === index) {\n setIsLoading((prevState) => {\n if (prevState) {\n return false;\n }\n return prevState;\n });\n }\n };\n\n let unsubscribe: (() => void) | undefined;\n let timer: NodeJS.Timeout;\n\n if (lazy && isLoading) {\n // If lazy mode is enabled, listen to when we enter screens\n unsubscribe = addEnterListener(handleEnter);\n } else if (isLoading) {\n // If lazy mode is not enabled, render the scene with a delay if not loaded already\n // This improves the initial startup time as the scene is no longer blocking\n timer = setTimeout(() => setIsLoading(false), 0);\n }\n\n return () => {\n unsubscribe?.();\n clearTimeout(timer);\n };\n }, [addEnterListener, index, isLoading, lazy]);\n\n const focused = navigationState.index === index;\n\n return (\n \n {\n // Only render the route only if it's either focused or layout is available\n // When layout is not available, we must not render unfocused routes\n // so that the focused route can fill the screen\n focused || layout.width ? children({ loading: isLoading }) : null\n }\n \n );\n}\n\nconst styles = StyleSheet.create({\n route: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n","import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n ViewStyle,\n TextStyle,\n LayoutChangeEvent,\n I18nManager,\n Platform,\n FlatList,\n ListRenderItemInfo,\n} from 'react-native';\nimport TabBarItem, { Props as TabBarItemProps } from './TabBarItem';\nimport TabBarIndicator, { Props as IndicatorProps } from './TabBarIndicator';\nimport type {\n Route,\n Scene,\n SceneRendererProps,\n NavigationState,\n Layout,\n Event,\n} from './types';\nimport useAnimatedValue from './useAnimatedValue';\n\nexport type Props = SceneRendererProps & {\n navigationState: NavigationState;\n scrollEnabled?: boolean;\n bounces?: boolean;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText?: (scene: Scene) => string | undefined;\n getAccessible?: (scene: Scene) => boolean | undefined;\n getAccessibilityLabel?: (scene: Scene) => string | undefined;\n getTestID?: (scene: Scene) => string | undefined;\n renderLabel?: (\n scene: Scene & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderIcon?: (\n scene: Scene & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderBadge?: (scene: Scene) => React.ReactNode;\n renderIndicator?: (props: IndicatorProps) => React.ReactNode;\n renderTabBarItem?: (\n props: TabBarItemProps & { key: string }\n ) => React.ReactElement;\n onTabPress?: (scene: Scene & Event) => void;\n onTabLongPress?: (scene: Scene) => void;\n tabStyle?: StyleProp;\n indicatorStyle?: StyleProp;\n indicatorContainerStyle?: StyleProp;\n labelStyle?: StyleProp;\n contentContainerStyle?: StyleProp;\n style?: StyleProp;\n gap?: number;\n};\n\ntype FlattenedTabWidth = string | number | undefined;\n\nconst Separator = ({ width }: { width: number }) => {\n return ;\n};\n\nconst getFlattenedTabWidth = (style: StyleProp) => {\n const tabStyle = StyleSheet.flatten(style);\n\n return tabStyle?.width;\n};\n\nconst getComputedTabWidth = (\n index: number,\n layout: Layout,\n routes: Route[],\n scrollEnabled: boolean | undefined,\n tabWidths: { [key: string]: number },\n flattenedWidth: FlattenedTabWidth\n) => {\n if (flattenedWidth === 'auto') {\n return tabWidths[routes[index].key] || 0;\n }\n\n switch (typeof flattenedWidth) {\n case 'number':\n return flattenedWidth;\n case 'string':\n if (flattenedWidth.endsWith('%')) {\n const width = parseFloat(flattenedWidth);\n if (Number.isFinite(width)) {\n return layout.width * (width / 100);\n }\n }\n }\n\n if (scrollEnabled) {\n return (layout.width / 5) * 2;\n }\n return layout.width / routes.length;\n};\n\nconst getMaxScrollDistance = (tabBarWidth: number, layoutWidth: number) =>\n tabBarWidth - layoutWidth;\n\nconst getTranslateX = (\n scrollAmount: Animated.Value,\n maxScrollDistance: number\n) =>\n Animated.multiply(\n Platform.OS === 'android' && I18nManager.isRTL\n ? Animated.add(maxScrollDistance, Animated.multiply(scrollAmount, -1))\n : scrollAmount,\n I18nManager.isRTL ? 1 : -1\n );\n\nconst getTabBarWidth = ({\n navigationState,\n layout,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n tabWidths,\n}: Pick, 'navigationState' | 'gap' | 'layout' | 'scrollEnabled'> & {\n tabWidths: Record;\n flattenedTabWidth: FlattenedTabWidth;\n}) => {\n const { routes } = navigationState;\n\n return routes.reduce(\n (acc, _, i) =>\n acc +\n (i > 0 ? gap ?? 0 : 0) +\n getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n flattenedTabWidth\n ),\n 0\n );\n};\n\nconst normalizeScrollValue = ({\n layout,\n navigationState,\n gap,\n scrollEnabled,\n tabWidths,\n value,\n flattenedTabWidth,\n}: Pick, 'layout' | 'navigationState' | 'gap' | 'scrollEnabled'> & {\n tabWidths: Record;\n value: number;\n flattenedTabWidth: FlattenedTabWidth;\n}) => {\n const tabBarWidth = getTabBarWidth({\n layout,\n navigationState,\n tabWidths,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n });\n const maxDistance = getMaxScrollDistance(tabBarWidth, layout.width);\n const scrollValue = Math.max(Math.min(value, maxDistance), 0);\n\n if (Platform.OS === 'android' && I18nManager.isRTL) {\n // On Android, scroll value is not applied in reverse in RTL\n // so we need to manually adjust it to apply correct value\n return maxDistance - scrollValue;\n }\n\n return scrollValue;\n};\n\nconst getScrollAmount = ({\n layout,\n navigationState,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n tabWidths,\n}: Pick, 'layout' | 'navigationState' | 'scrollEnabled' | 'gap'> & {\n tabWidths: Record;\n flattenedTabWidth: FlattenedTabWidth;\n}) => {\n const centerDistance = Array.from({\n length: navigationState.index + 1,\n }).reduce((total, _, i) => {\n const tabWidth = getComputedTabWidth(\n i,\n layout,\n navigationState.routes,\n scrollEnabled,\n tabWidths,\n flattenedTabWidth\n );\n\n // To get the current index centered we adjust scroll amount by width of indexes\n // 0 through (i - 1) and add half the width of current index i\n return (\n total +\n (navigationState.index === i\n ? (tabWidth + (gap ?? 0)) / 2\n : tabWidth + (gap ?? 0))\n );\n }, 0);\n\n const scrollAmount = centerDistance - layout.width / 2;\n\n return normalizeScrollValue({\n layout,\n navigationState,\n tabWidths,\n value: scrollAmount,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n });\n};\n\nconst getLabelTextDefault = ({ route }: Scene) => route.title;\n\nconst getAccessibleDefault = ({ route }: Scene) =>\n typeof route.accessible !== 'undefined' ? route.accessible : true;\n\nconst getAccessibilityLabelDefault = ({ route }: Scene) =>\n typeof route.accessibilityLabel === 'string'\n ? route.accessibilityLabel\n : typeof route.title === 'string'\n ? route.title\n : undefined;\n\nconst renderIndicatorDefault = (props: IndicatorProps) => (\n \n);\n\nconst getTestIdDefault = ({ route }: Scene) => route.testID;\n\nexport default function TabBar({\n getLabelText = getLabelTextDefault,\n getAccessible = getAccessibleDefault,\n getAccessibilityLabel = getAccessibilityLabelDefault,\n getTestID = getTestIdDefault,\n renderIndicator = renderIndicatorDefault,\n gap = 0,\n scrollEnabled,\n jumpTo,\n navigationState,\n position,\n activeColor,\n bounces,\n contentContainerStyle,\n inactiveColor,\n indicatorContainerStyle,\n indicatorStyle,\n labelStyle,\n onTabLongPress,\n onTabPress,\n pressColor,\n pressOpacity,\n renderBadge,\n renderIcon,\n renderLabel,\n renderTabBarItem,\n style,\n tabStyle,\n}: Props) {\n const [layout, setLayout] = React.useState({ width: 0, height: 0 });\n const [tabWidths, setTabWidths] = React.useState>({});\n const flatListRef = React.useRef(null);\n const isFirst = React.useRef(true);\n const scrollAmount = useAnimatedValue(0);\n const measuredTabWidths = React.useRef>({});\n\n const { routes } = navigationState;\n const flattenedTabWidth = getFlattenedTabWidth(tabStyle);\n const isWidthDynamic = flattenedTabWidth === 'auto';\n const scrollOffset = getScrollAmount({\n layout,\n navigationState,\n tabWidths,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n });\n\n const hasMeasuredTabWidths =\n Boolean(layout.width) &&\n routes.every((r) => typeof tabWidths[r.key] === 'number');\n\n React.useEffect(() => {\n if (isFirst.current) {\n isFirst.current = false;\n return;\n }\n\n if (isWidthDynamic && !hasMeasuredTabWidths) {\n // When tab width is dynamic, only adjust the scroll once we have all tab widths and layout\n return;\n }\n\n if (scrollEnabled) {\n flatListRef.current?.scrollToOffset({\n offset: scrollOffset,\n animated: true,\n });\n }\n }, [hasMeasuredTabWidths, isWidthDynamic, scrollEnabled, scrollOffset]);\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n setLayout((layout) =>\n layout.width === width && layout.height === height\n ? layout\n : { width, height }\n );\n };\n\n const tabBarWidth = getTabBarWidth({\n layout,\n navigationState,\n tabWidths,\n gap,\n scrollEnabled,\n flattenedTabWidth,\n });\n\n const separatorsWidth = Math.max(0, routes.length - 1) * gap;\n const separatorPercent = (separatorsWidth / tabBarWidth) * 100;\n const tabBarWidthPercent = `${routes.length * 40}%`;\n\n const translateX = React.useMemo(\n () =>\n getTranslateX(\n scrollAmount,\n getMaxScrollDistance(tabBarWidth, layout.width)\n ),\n [layout.width, scrollAmount, tabBarWidth]\n );\n\n const renderItem = React.useCallback(\n ({ item: route, index }: ListRenderItemInfo) => {\n const props: TabBarItemProps & { key: string } = {\n key: route.key,\n position: position,\n route: route,\n navigationState: navigationState,\n getAccessibilityLabel: getAccessibilityLabel,\n getAccessible: getAccessible,\n getLabelText: getLabelText,\n getTestID: getTestID,\n renderBadge: renderBadge,\n renderIcon: renderIcon,\n renderLabel: renderLabel,\n activeColor: activeColor,\n inactiveColor: inactiveColor,\n pressColor: pressColor,\n pressOpacity: pressOpacity,\n onLayout: isWidthDynamic\n ? (e: LayoutChangeEvent) => {\n measuredTabWidths.current[route.key] = e.nativeEvent.layout.width;\n\n // When we have measured widths for all of the tabs, we should updates the state\n // We avoid doing separate setState for each layout since it triggers multiple renders and slows down app\n if (\n routes.every(\n (r) => typeof measuredTabWidths.current[r.key] === 'number'\n )\n ) {\n setTabWidths({ ...measuredTabWidths.current });\n }\n }\n : undefined,\n onPress: () => {\n const event: Scene & Event = {\n route,\n defaultPrevented: false,\n preventDefault: () => {\n event.defaultPrevented = true;\n },\n };\n\n onTabPress?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n jumpTo(route.key);\n },\n onLongPress: () => onTabLongPress?.({ route }),\n labelStyle: labelStyle,\n style: tabStyle,\n // Calculate the deafult width for tab for FlatList to work\n defaultTabWidth: !isWidthDynamic\n ? getComputedTabWidth(\n index,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n getFlattenedTabWidth(tabStyle)\n )\n : undefined,\n };\n\n return (\n <>\n {gap > 0 && index > 0 ? : null}\n {renderTabBarItem ? (\n renderTabBarItem(props)\n ) : (\n \n )}\n \n );\n },\n [\n activeColor,\n gap,\n getAccessibilityLabel,\n getAccessible,\n getLabelText,\n getTestID,\n inactiveColor,\n isWidthDynamic,\n jumpTo,\n labelStyle,\n layout,\n navigationState,\n onTabLongPress,\n onTabPress,\n position,\n pressColor,\n pressOpacity,\n renderBadge,\n renderIcon,\n renderLabel,\n renderTabBarItem,\n routes,\n scrollEnabled,\n tabStyle,\n tabWidths,\n ]\n );\n\n const keyExtractor = React.useCallback((item: T) => item.key, []);\n\n const contentContainerStyleMemoized = React.useMemo(\n () => [\n styles.tabContent,\n scrollEnabled\n ? {\n width:\n tabBarWidth > separatorsWidth ? tabBarWidth : tabBarWidthPercent,\n }\n : styles.container,\n contentContainerStyle,\n ],\n [\n contentContainerStyle,\n scrollEnabled,\n separatorsWidth,\n tabBarWidth,\n tabBarWidthPercent,\n ]\n );\n\n const handleScroll = React.useMemo(\n () =>\n Animated.event(\n [\n {\n nativeEvent: {\n contentOffset: { x: scrollAmount },\n },\n },\n ],\n { useNativeDriver: true }\n ),\n [scrollAmount]\n );\n\n return (\n \n separatorsWidth\n ? { width: tabBarWidth - separatorsWidth }\n : scrollEnabled\n ? { width: tabBarWidthPercent }\n : null,\n indicatorContainerStyle,\n ]}\n >\n {renderIndicator({\n position,\n layout,\n navigationState,\n jumpTo,\n width: isWidthDynamic\n ? 'auto'\n : `${(100 - separatorPercent) / routes.length}%`,\n style: indicatorStyle,\n getTabWidth: (i: number) =>\n getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n flattenedTabWidth\n ),\n gap,\n })}\n \n \n []}\n keyExtractor={keyExtractor}\n horizontal\n accessibilityRole=\"tablist\"\n keyboardShouldPersistTaps=\"handled\"\n scrollEnabled={scrollEnabled}\n bounces={bounces}\n alwaysBounceHorizontal={false}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n automaticallyAdjustContentInsets={false}\n overScrollMode=\"never\"\n contentContainerStyle={contentContainerStyleMemoized}\n scrollEventThrottle={16}\n renderItem={renderItem}\n onScroll={handleScroll}\n ref={flatListRef}\n />\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n scroll: {\n overflow: Platform.select({ default: 'scroll', web: undefined }),\n },\n tabBar: {\n backgroundColor: '#2196f3',\n elevation: 4,\n shadowColor: 'black',\n shadowOpacity: 0.1,\n shadowRadius: StyleSheet.hairlineWidth,\n shadowOffset: {\n height: StyleSheet.hairlineWidth,\n width: 0,\n },\n zIndex: 1,\n },\n tabContent: {\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n indicatorContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n});\n","import * as React from 'react';\nimport {\n Animated,\n Easing,\n StyleSheet,\n I18nManager,\n StyleProp,\n ViewStyle,\n Platform,\n} from 'react-native';\n\nimport type { Route, SceneRendererProps, NavigationState } from './types';\nimport useAnimatedValue from './useAnimatedValue';\n\nexport type GetTabWidth = (index: number) => number;\n\nexport type Props = SceneRendererProps & {\n navigationState: NavigationState;\n width: string | number;\n style?: StyleProp;\n getTabWidth: GetTabWidth;\n gap?: number;\n};\n\nconst getTranslateX = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n getTabWidth: GetTabWidth,\n gap?: number\n) => {\n const inputRange = routes.map((_, i) => i);\n\n // every index contains widths at all previous indices\n const outputRange = routes.reduce((acc, _, i) => {\n if (i === 0) return [0];\n return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];\n }, []);\n\n const translateX = position.interpolate({\n inputRange,\n outputRange,\n extrapolate: 'clamp',\n });\n\n return Animated.multiply(translateX, I18nManager.isRTL ? -1 : 1);\n};\n\nexport default function TabBarIndicator({\n getTabWidth,\n layout,\n navigationState,\n position,\n width,\n gap,\n style,\n}: Props) {\n const isIndicatorShown = React.useRef(false);\n const isWidthDynamic = width === 'auto';\n\n const opacity = useAnimatedValue(isWidthDynamic ? 0 : 1);\n\n const hasMeasuredTabWidths =\n Boolean(layout.width) &&\n navigationState.routes.every((_, i) => getTabWidth(i));\n\n React.useEffect(() => {\n const fadeInIndicator = () => {\n if (\n !isIndicatorShown.current &&\n isWidthDynamic &&\n // We should fade-in the indicator when we have widths for all the tab items\n hasMeasuredTabWidths\n ) {\n isIndicatorShown.current = true;\n\n Animated.timing(opacity, {\n toValue: 1,\n duration: 150,\n easing: Easing.in(Easing.linear),\n useNativeDriver: true,\n }).start();\n }\n };\n\n fadeInIndicator();\n\n return () => opacity.stopAnimation();\n }, [hasMeasuredTabWidths, isWidthDynamic, opacity]);\n\n const { routes } = navigationState;\n\n const transform = [];\n\n if (layout.width) {\n const translateX =\n routes.length > 1 ? getTranslateX(position, routes, getTabWidth, gap) : 0;\n\n transform.push({ translateX });\n }\n\n if (width === 'auto') {\n const inputRange = routes.map((_, i) => i);\n const outputRange = inputRange.map(getTabWidth);\n\n transform.push(\n {\n scaleX:\n routes.length > 1\n ? position.interpolate({\n inputRange,\n outputRange,\n extrapolate: 'clamp',\n })\n : outputRange[0],\n },\n { translateX: 0.5 }\n );\n }\n\n return (\n \n );\n}\n\nconst styles = StyleSheet.create({\n indicator: {\n backgroundColor: '#ffeb3b',\n position: 'absolute',\n left: 0,\n bottom: 0,\n right: 0,\n height: 2,\n },\n});\n","import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n LayoutChangeEvent,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport useLatestCallback from 'use-latest-callback';\nimport PlatformPressable from './PlatformPressable';\nimport type { Scene, Route, NavigationState } from './types';\n\nexport type Props = {\n position: Animated.AnimatedInterpolation;\n route: T;\n navigationState: NavigationState;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene) => string | undefined;\n getAccessible: (scene: Scene) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene) => string | undefined;\n getTestID: (scene: Scene) => string | undefined;\n renderLabel?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderIcon?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderBadge?: (scene: Scene) => React.ReactNode;\n onLayout?: (event: LayoutChangeEvent) => void;\n onPress: () => void;\n onLongPress: () => void;\n defaultTabWidth?: number;\n labelStyle?: StyleProp;\n style: StyleProp;\n};\n\nconst DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';\nconst DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';\n\nconst getActiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routesLength: number,\n tabIndex: number\n) => {\n if (routesLength > 1) {\n const inputRange = Array.from({ length: routesLength }, (_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === tabIndex ? 1 : 0)),\n });\n } else {\n return 1;\n }\n};\n\nconst getInactiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routesLength: number,\n tabIndex: number\n) => {\n if (routesLength > 1) {\n const inputRange = Array.from({ length: routesLength }, (_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i: number) => (i === tabIndex ? 0 : 1)),\n });\n } else {\n return 0;\n }\n};\n\ntype TabBarItemInternalProps = Omit<\n Props,\n 'navigationState'\n> & {\n isFocused: boolean;\n index: number;\n routesLength: number;\n};\n\nconst TabBarItemInternal = ({\n getAccessibilityLabel,\n getAccessible,\n getLabelText,\n getTestID,\n onLongPress,\n onPress,\n isFocused,\n position,\n route,\n style,\n inactiveColor: inactiveColorCustom,\n activeColor: activeColorCustom,\n labelStyle,\n onLayout,\n index: tabIndex,\n pressColor,\n pressOpacity,\n renderBadge,\n renderIcon,\n defaultTabWidth,\n routesLength,\n renderLabel: renderLabelCustom,\n}: TabBarItemInternalProps) => {\n const labelColorFromStyle = StyleSheet.flatten(labelStyle || {}).color;\n\n const activeColor =\n activeColorCustom !== undefined\n ? activeColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_ACTIVE_COLOR;\n const inactiveColor =\n inactiveColorCustom !== undefined\n ? inactiveColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_INACTIVE_COLOR;\n\n const activeOpacity = getActiveOpacity(position, routesLength, tabIndex);\n const inactiveOpacity = getInactiveOpacity(position, routesLength, tabIndex);\n\n let icon: React.ReactNode | null = null;\n let label: React.ReactNode | null = null;\n\n if (renderIcon) {\n const activeIcon = renderIcon({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveIcon = renderIcon({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n if (inactiveIcon != null && activeIcon != null) {\n icon = (\n \n \n {inactiveIcon}\n \n \n {activeIcon}\n \n \n );\n }\n }\n\n const renderLabel =\n renderLabelCustom !== undefined\n ? renderLabelCustom\n : (labelProps: { route: T; color: string }) => {\n const labelText = getLabelText({ route: labelProps.route });\n\n if (typeof labelText === 'string') {\n return (\n \n {labelText}\n \n );\n }\n\n return labelText;\n };\n\n if (renderLabel) {\n const activeLabel = renderLabel({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveLabel = renderLabel({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n label = (\n \n \n {inactiveLabel}\n \n \n {activeLabel}\n \n \n );\n }\n\n const tabStyle = StyleSheet.flatten(style);\n const isWidthSet = tabStyle?.width !== undefined;\n\n const tabContainerStyle: ViewStyle | null = isWidthSet\n ? null\n : { width: defaultTabWidth };\n\n const scene = { route };\n\n let accessibilityLabel = getAccessibilityLabel(scene);\n\n accessibilityLabel =\n typeof accessibilityLabel !== 'undefined'\n ? accessibilityLabel\n : getLabelText(scene);\n\n const badge = renderBadge ? renderBadge(scene) : null;\n\n return (\n \n \n {icon}\n {label}\n {badge != null ? {badge} : null}\n \n \n );\n};\n\nconst MemoizedTabBarItemInternal = React.memo(\n TabBarItemInternal\n) as typeof TabBarItemInternal;\n\nfunction TabBarItem(props: Props) {\n const { onPress, onLongPress, onLayout, navigationState, route, ...rest } =\n props;\n const onPressLatest = useLatestCallback(onPress);\n const onLongPressLatest = useLatestCallback(onLongPress);\n const onLayoutLatest = useLatestCallback(onLayout ? onLayout : () => {});\n\n const tabIndex = navigationState.routes.indexOf(route);\n\n return (\n \n );\n}\n\nexport default TabBarItem;\n\nconst styles = StyleSheet.create({\n label: {\n margin: 4,\n backgroundColor: 'transparent',\n textTransform: 'uppercase',\n },\n icon: {\n margin: 2,\n },\n item: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n minHeight: 48,\n },\n badge: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n pressable: {\n // The label is not pressable on Windows\n // Adding backgroundColor: 'transparent' seems to fix it\n backgroundColor: 'transparent',\n },\n});\n","import * as React from 'react';\nimport {\n StyleSheet,\n View,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n} from 'react-native';\nimport TabBar from './TabBar';\nimport SceneView from './SceneView';\nimport Pager from './Pager';\nimport type {\n Layout,\n NavigationState,\n Route,\n SceneRendererProps,\n PagerProps,\n} from './types';\n\nexport type Props = PagerProps & {\n onIndexChange: (index: number) => void;\n navigationState: NavigationState;\n renderScene: (props: SceneRendererProps & { route: T }) => React.ReactNode;\n renderLazyPlaceholder?: (props: { route: T }) => React.ReactNode;\n renderTabBar?: (\n props: SceneRendererProps & { navigationState: NavigationState }\n ) => React.ReactNode;\n tabBarPosition?: 'top' | 'bottom';\n initialLayout?: Partial;\n lazy?: ((props: { route: T }) => boolean) | boolean;\n lazyPreloadDistance?: number;\n sceneContainerStyle?: StyleProp;\n pagerStyle?: StyleProp;\n style?: StyleProp;\n};\n\nexport default function TabView({\n onIndexChange,\n navigationState,\n renderScene,\n initialLayout,\n keyboardDismissMode = 'auto',\n lazy = false,\n lazyPreloadDistance = 0,\n onSwipeStart,\n onSwipeEnd,\n renderLazyPlaceholder = () => null,\n renderTabBar = (props) => ,\n sceneContainerStyle,\n pagerStyle,\n style,\n swipeEnabled = true,\n tabBarPosition = 'top',\n animationEnabled = true,\n}: Props) {\n const [layout, setLayout] = React.useState({\n width: 0,\n height: 0,\n ...initialLayout,\n });\n\n const jumpToIndex = (index: number) => {\n if (index !== navigationState.index) {\n onIndexChange(index);\n }\n };\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n setLayout((prevLayout) => {\n if (prevLayout.width === width && prevLayout.height === height) {\n return prevLayout;\n }\n\n return { height, width };\n });\n };\n\n return (\n \n \n {({ position, render, addEnterListener, jumpTo }) => {\n // All of the props here must not change between re-renders\n // This is crucial to optimizing the routes with PureComponent\n const sceneRendererProps = {\n position,\n layout,\n jumpTo,\n };\n\n return (\n \n {tabBarPosition === 'top' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n {render(\n navigationState.routes.map((route, i) => {\n return (\n \n {({ loading }) =>\n loading\n ? renderLazyPlaceholder({ route })\n : renderScene({\n ...sceneRendererProps,\n route,\n })\n }\n \n );\n })\n )}\n {tabBarPosition === 'bottom' &&\n renderTabBar({\n ...sceneRendererProps,\n navigationState,\n })}\n \n );\n }}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n pager: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n","export { default as TabBar } from './TabBar';\nexport type { Props as TabBarProps } from './TabBar';\n\nexport { default as TabView } from './TabView';\nexport type { Props as TabViewProps } from './TabView';\n\nexport { default as TabBarIndicator } from './TabBarIndicator';\nexport type { Props as TabBarIndicatorProps } from './TabBarIndicator';\n\nexport { default as TabBarItem } from './TabBarItem';\nexport type { Props as TabBarItemProps } from './TabBarItem';\n\nexport { default as SceneMap } from './SceneMap';\n\nexport type { Route, NavigationState, SceneRendererProps } from './types';\n","import * as React from 'react';\nimport { Animated } from 'react-native';\n\nexport default function useAnimatedValue(initialValue: number) {\n const lazyRef = React.useRef();\n\n if (lazyRef.current === undefined) {\n lazyRef.current = new Animated.Value(initialValue);\n }\n\n return lazyRef.current as Animated.Value;\n}\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../modules/canUseDom';\nfunction isScreenReaderEnabled() {\n return new Promise((resolve, reject) => {\n resolve(true);\n });\n}\nvar prefersReducedMotionMedia = canUseDOM && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\nfunction isReduceMotionEnabled() {\n return new Promise((resolve, reject) => {\n resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);\n });\n}\nfunction addChangeListener(fn) {\n if (prefersReducedMotionMedia != null) {\n prefersReducedMotionMedia.addEventListener != null ? prefersReducedMotionMedia.addEventListener('change', fn) : prefersReducedMotionMedia.addListener(fn);\n }\n}\nfunction removeChangeListener(fn) {\n if (prefersReducedMotionMedia != null) {\n prefersReducedMotionMedia.removeEventListener != null ? prefersReducedMotionMedia.removeEventListener('change', fn) : prefersReducedMotionMedia.removeListener(fn);\n }\n}\nvar handlers = {};\nvar AccessibilityInfo = {\n /**\n * Query whether a screen reader is currently enabled.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a screen reader is enabled and `false` otherwise.\n */\n isScreenReaderEnabled,\n /**\n * Query whether the user prefers reduced motion.\n *\n * Returns a promise which resolves to a boolean.\n * The result is `true` when a screen reader is enabled and `false` otherwise.\n */\n isReduceMotionEnabled,\n /**\n * Deprecated\n */\n fetch: isScreenReaderEnabled,\n /**\n * Add an event handler. Supported events: reduceMotionChanged\n */\n addEventListener: function addEventListener(eventName, handler) {\n if (eventName === 'reduceMotionChanged') {\n if (!prefersReducedMotionMedia) {\n return;\n }\n var listener = event => {\n handler(event.matches);\n };\n addChangeListener(listener);\n handlers[handler] = listener;\n }\n return {\n remove: () => AccessibilityInfo.removeEventListener(eventName, handler)\n };\n },\n /**\n * Set accessibility focus to a react component.\n */\n setAccessibilityFocus: function setAccessibilityFocus(reactTag) {},\n /**\n * Post a string to be announced by the screen reader.\n */\n announceForAccessibility: function announceForAccessibility(announcement) {},\n /**\n * Remove an event handler.\n */\n removeEventListener: function removeEventListener(eventName, handler) {\n if (eventName === 'reduceMotionChanged') {\n var listener = handlers[handler];\n if (!listener || !prefersReducedMotionMedia) {\n return;\n }\n removeChangeListener(listener);\n }\n return;\n }\n};\nexport default AccessibilityInfo;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animating\", \"color\", \"hidesWhenStopped\", \"size\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar createSvgCircle = style => /*#__PURE__*/React.createElement(\"circle\", {\n cx: \"16\",\n cy: \"16\",\n fill: \"none\",\n r: \"14\",\n strokeWidth: \"4\",\n style: style\n});\nvar ActivityIndicator = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _props$animating = props.animating,\n animating = _props$animating === void 0 ? true : _props$animating,\n _props$color = props.color,\n color = _props$color === void 0 ? '#1976D2' : _props$color,\n _props$hidesWhenStopp = props.hidesWhenStopped,\n hidesWhenStopped = _props$hidesWhenStopp === void 0 ? true : _props$hidesWhenStopp,\n _props$size = props.size,\n size = _props$size === void 0 ? 'small' : _props$size,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var svg = /*#__PURE__*/React.createElement(\"svg\", {\n height: \"100%\",\n viewBox: \"0 0 32 32\",\n width: \"100%\"\n }, createSvgCircle({\n stroke: color,\n opacity: 0.2\n }), createSvgCircle({\n stroke: color,\n strokeDasharray: 80,\n strokeDashoffset: 60\n }));\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-valuemax\": 1,\n \"aria-valuemin\": 0,\n ref: forwardedRef,\n role: \"progressbar\",\n style: [styles.container, style]\n }), /*#__PURE__*/React.createElement(View, {\n children: svg,\n style: [typeof size === 'number' ? {\n height: size,\n width: size\n } : indicatorSizes[size], styles.animation, !animating && styles.animationPause, !animating && hidesWhenStopped && styles.hidesWhenStopped]\n }));\n});\nActivityIndicator.displayName = 'ActivityIndicator';\nvar styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n justifyContent: 'center'\n },\n hidesWhenStopped: {\n visibility: 'hidden'\n },\n animation: {\n animationDuration: '0.75s',\n animationKeyframes: [{\n '0%': {\n transform: 'rotate(0deg)'\n },\n '100%': {\n transform: 'rotate(360deg)'\n }\n }],\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite'\n },\n animationPause: {\n animationPlayState: 'paused'\n }\n});\nvar indicatorSizes = StyleSheet.create({\n small: {\n width: 20,\n height: 20\n },\n large: {\n width: 36,\n height: 36\n }\n});\nexport default ActivityIndicator;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nclass Alert {\n static alert() {}\n}\nexport default Alert;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Animated from '../../vendor/react-native/Animated/Animated';\nexport default Animated;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar RootTagContext = /*#__PURE__*/React.createContext(null);\nvar AppContainer = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var children = props.children,\n WrapperComponent = props.WrapperComponent;\n var innerView = /*#__PURE__*/React.createElement(View, {\n children: children,\n key: 1,\n style: styles.appContainer\n });\n if (WrapperComponent) {\n innerView = /*#__PURE__*/React.createElement(WrapperComponent, null, innerView);\n }\n return /*#__PURE__*/React.createElement(RootTagContext.Provider, {\n value: props.rootTag\n }, /*#__PURE__*/React.createElement(View, {\n ref: forwardedRef,\n style: styles.appContainer\n }, innerView));\n});\nAppContainer.displayName = 'AppContainer';\nexport default AppContainer;\nvar styles = StyleSheet.create({\n appContainer: {\n flex: 1,\n pointerEvents: 'box-none'\n }\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport renderApplication, { getApplication as _getApplication } from './renderApplication';\nvar emptyObject = {};\nvar runnables = {};\nvar componentProviderInstrumentationHook = component => component();\nvar wrapperComponentProvider;\n\n/**\n * `AppRegistry` is the JS entry point to running all React Native apps.\n */\nexport default class AppRegistry {\n static getAppKeys() {\n return Object.keys(runnables);\n }\n static getApplication(appKey, appParameters) {\n invariant(runnables[appKey] && runnables[appKey].getApplication, \"Application \" + appKey + \" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n return runnables[appKey].getApplication(appParameters);\n }\n static registerComponent(appKey, componentProvider) {\n runnables[appKey] = {\n getApplication: appParameters => _getApplication(componentProviderInstrumentationHook(componentProvider), appParameters ? appParameters.initialProps : emptyObject, wrapperComponentProvider && wrapperComponentProvider(appParameters)),\n run: appParameters => renderApplication(componentProviderInstrumentationHook(componentProvider), wrapperComponentProvider && wrapperComponentProvider(appParameters), appParameters.callback, {\n hydrate: appParameters.hydrate || false,\n initialProps: appParameters.initialProps || emptyObject,\n mode: appParameters.mode || 'concurrent',\n rootTag: appParameters.rootTag\n })\n };\n return appKey;\n }\n static registerConfig(config) {\n config.forEach(_ref => {\n var appKey = _ref.appKey,\n component = _ref.component,\n run = _ref.run;\n if (run) {\n AppRegistry.registerRunnable(appKey, run);\n } else {\n invariant(component, 'No component provider passed in');\n AppRegistry.registerComponent(appKey, component);\n }\n });\n }\n\n // TODO: fix style sheet creation when using this method\n static registerRunnable(appKey, run) {\n runnables[appKey] = {\n run\n };\n return appKey;\n }\n static runApplication(appKey, appParameters) {\n var isDevelopment = process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';\n if (isDevelopment) {\n var params = _objectSpread({}, appParameters);\n params.rootTag = \"#\" + params.rootTag.id;\n console.log(\"Running application \\\"\" + appKey + \"\\\" with appParams:\\n\", params, \"\\nDevelopment-level warnings: \" + (isDevelopment ? 'ON' : 'OFF') + \".\" + (\"\\nPerformance optimizations: \" + (isDevelopment ? 'OFF' : 'ON') + \".\"));\n }\n invariant(runnables[appKey] && runnables[appKey].run, \"Application \\\"\" + appKey + \"\\\" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n return runnables[appKey].run(appParameters);\n }\n static setComponentProviderInstrumentationHook(hook) {\n componentProviderInstrumentationHook = hook;\n }\n static setWrapperComponentProvider(provider) {\n wrapperComponentProvider = provider;\n }\n static unmountApplicationComponentAtRootTag(rootTag) {\n unmountComponentAtNode(rootTag);\n }\n}","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AppContainer from './AppContainer';\nimport invariant from 'fbjs/lib/invariant';\nimport renderLegacy, { hydrateLegacy, render, hydrate } from '../render';\nimport StyleSheet from '../StyleSheet';\nimport React from 'react';\nexport default function renderApplication(RootComponent, WrapperComponent, callback, options) {\n var shouldHydrate = options.hydrate,\n initialProps = options.initialProps,\n mode = options.mode,\n rootTag = options.rootTag;\n var renderFn = shouldHydrate ? mode === 'concurrent' ? hydrate : hydrateLegacy : mode === 'concurrent' ? render : renderLegacy;\n invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);\n return renderFn( /*#__PURE__*/React.createElement(AppContainer, {\n WrapperComponent: WrapperComponent,\n ref: callback,\n rootTag: rootTag\n }, /*#__PURE__*/React.createElement(RootComponent, initialProps)), rootTag);\n}\nexport function getApplication(RootComponent, initialProps, WrapperComponent) {\n var element = /*#__PURE__*/React.createElement(AppContainer, {\n WrapperComponent: WrapperComponent,\n rootTag: {}\n }, /*#__PURE__*/React.createElement(RootComponent, initialProps));\n // Don't escape CSS text\n var getStyleElement = props => {\n var sheet = StyleSheet.getSheet();\n return /*#__PURE__*/React.createElement(\"style\", _extends({}, props, {\n dangerouslySetInnerHTML: {\n __html: sheet.textContent\n },\n id: sheet.id\n }));\n };\n return {\n element,\n getStyleElement\n };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport canUseDOM from '../../modules/canUseDom';\n\n// Android 4.4 browser\nvar isPrefixed = canUseDOM && !document.hasOwnProperty('hidden') && document.hasOwnProperty('webkitHidden');\nvar EVENT_TYPES = ['change', 'memoryWarning'];\nvar VISIBILITY_CHANGE_EVENT = isPrefixed ? 'webkitvisibilitychange' : 'visibilitychange';\nvar VISIBILITY_STATE_PROPERTY = isPrefixed ? 'webkitVisibilityState' : 'visibilityState';\nvar AppStates = {\n BACKGROUND: 'background',\n ACTIVE: 'active'\n};\nvar changeEmitter = null;\nexport default class AppState {\n static get currentState() {\n if (!AppState.isAvailable) {\n return AppStates.ACTIVE;\n }\n switch (document[VISIBILITY_STATE_PROPERTY]) {\n case 'hidden':\n case 'prerender':\n case 'unloaded':\n return AppStates.BACKGROUND;\n default:\n return AppStates.ACTIVE;\n }\n }\n static addEventListener(type, handler) {\n if (AppState.isAvailable) {\n invariant(EVENT_TYPES.indexOf(type) !== -1, 'Trying to subscribe to unknown event: \"%s\"', type);\n if (type === 'change') {\n if (!changeEmitter) {\n changeEmitter = new EventEmitter();\n document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {\n if (changeEmitter) {\n changeEmitter.emit('change', AppState.currentState);\n }\n }, false);\n }\n return changeEmitter.addListener(type, handler);\n }\n }\n }\n}\nAppState.isAvailable = canUseDOM && document[VISIBILITY_STATE_PROPERTY];","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../modules/canUseDom';\nfunction getQuery() {\n return canUseDOM && window.matchMedia != null ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n}\nvar query = getQuery();\nvar listenerMapping = new WeakMap();\nvar Appearance = {\n getColorScheme() {\n return query && query.matches ? 'dark' : 'light';\n },\n addChangeListener(listener) {\n var mappedListener = listenerMapping.get(listener);\n if (!mappedListener) {\n mappedListener = _ref => {\n var matches = _ref.matches;\n listener({\n colorScheme: matches ? 'dark' : 'light'\n });\n };\n listenerMapping.set(listener, mappedListener);\n }\n if (query) {\n query.addListener(mappedListener);\n }\n function remove() {\n var mappedListener = listenerMapping.get(listener);\n if (query && mappedListener) {\n query.removeListener(mappedListener);\n }\n listenerMapping.delete(listener);\n }\n return {\n remove\n };\n }\n};\nexport default Appearance;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction emptyFunction() {}\nvar BackHandler = {\n exitApp: emptyFunction,\n addEventListener() {\n console.error('BackHandler is not supported on web and should not be used.');\n return {\n remove: emptyFunction\n };\n },\n removeEventListener: emptyFunction\n};\nexport default BackHandler;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport TouchableOpacity from '../TouchableOpacity';\nimport Text from '../Text';\nimport { warnOnce } from '../../modules/warnOnce';\nvar Button = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n warnOnce('Button', 'Button is deprecated. Please use Pressable.');\n var accessibilityLabel = props.accessibilityLabel,\n color = props.color,\n disabled = props.disabled,\n onPress = props.onPress,\n testID = props.testID,\n title = props.title;\n return /*#__PURE__*/React.createElement(TouchableOpacity, {\n accessibilityLabel: accessibilityLabel,\n accessibilityRole: \"button\",\n disabled: disabled,\n focusable: !disabled,\n onPress: onPress,\n ref: forwardedRef,\n style: [styles.button, color && {\n backgroundColor: color\n }, disabled && styles.buttonDisabled],\n testID: testID\n }, /*#__PURE__*/React.createElement(Text, {\n style: [styles.text, disabled && styles.textDisabled]\n }, title));\n});\nButton.displayName = 'Button';\nvar styles = StyleSheet.create({\n button: {\n backgroundColor: '#2196F3',\n borderRadius: 2\n },\n text: {\n color: '#fff',\n fontWeight: '500',\n padding: 8,\n textAlign: 'center',\n textTransform: 'uppercase'\n },\n buttonDisabled: {\n backgroundColor: '#dfdfdf'\n },\n textDisabled: {\n color: '#a1a1a1'\n }\n});\nexport default Button;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-readonly\", \"color\", \"disabled\", \"onChange\", \"onValueChange\", \"readOnly\", \"style\", \"value\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar CheckBox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var ariaReadOnly = props['aria-readonly'],\n color = props.color,\n disabled = props.disabled,\n onChange = props.onChange,\n onValueChange = props.onValueChange,\n readOnly = props.readOnly,\n style = props.style,\n value = props.value,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n function handleChange(event) {\n var value = event.nativeEvent.target.checked;\n event.nativeEvent.value = value;\n onChange && onChange(event);\n onValueChange && onValueChange(value);\n }\n var fakeControl = /*#__PURE__*/React.createElement(View, {\n style: [styles.fakeControl, value && styles.fakeControlChecked,\n // custom color\n value && color && {\n backgroundColor: color,\n borderColor: color\n }, disabled && styles.fakeControlDisabled, value && disabled && styles.fakeControlCheckedAndDisabled]\n });\n var nativeControl = createElement('input', {\n checked: value,\n disabled: disabled,\n onChange: handleChange,\n readOnly: readOnly === true || ariaReadOnly === true || other.accessibilityReadOnly === true,\n ref: forwardedRef,\n style: [styles.nativeControl, styles.cursorInherit],\n type: 'checkbox'\n });\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-disabled\": disabled,\n \"aria-readonly\": ariaReadOnly,\n style: [styles.root, style, disabled && styles.cursorDefault]\n }), fakeControl, nativeControl);\n});\nCheckBox.displayName = 'CheckBox';\nvar styles = StyleSheet.create({\n root: {\n cursor: 'pointer',\n height: 16,\n userSelect: 'none',\n width: 16\n },\n cursorDefault: {\n cursor: 'default'\n },\n cursorInherit: {\n cursor: 'inherit'\n },\n fakeControl: {\n alignItems: 'center',\n backgroundColor: '#fff',\n borderColor: '#657786',\n borderRadius: 2,\n borderStyle: 'solid',\n borderWidth: 2,\n height: '100%',\n justifyContent: 'center',\n width: '100%'\n },\n fakeControlChecked: {\n backgroundColor: '#009688',\n backgroundImage: 'url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\")',\n backgroundRepeat: 'no-repeat',\n borderColor: '#009688'\n },\n fakeControlDisabled: {\n borderColor: '#CCD6DD'\n },\n fakeControlCheckedAndDisabled: {\n backgroundColor: '#AAB8C2',\n borderColor: '#AAB8C2'\n },\n nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n margin: 0,\n appearance: 'none',\n padding: 0,\n width: '100%'\n })\n});\nexport default CheckBox;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar clipboardAvailable;\nexport default class Clipboard {\n static isAvailable() {\n if (clipboardAvailable === undefined) {\n clipboardAvailable = typeof document.queryCommandSupported === 'function' && document.queryCommandSupported('copy');\n }\n return clipboardAvailable;\n }\n static getString() {\n return Promise.resolve('');\n }\n static setString(text) {\n var success = false;\n var body = document.body;\n if (body) {\n // add the text to a hidden node\n var node = document.createElement('span');\n node.textContent = text;\n node.style.opacity = '0';\n node.style.position = 'absolute';\n node.style.whiteSpace = 'pre-wrap';\n node.style.userSelect = 'auto';\n body.appendChild(node);\n\n // select the text\n var selection = window.getSelection();\n selection.removeAllRanges();\n var range = document.createRange();\n range.selectNodeContents(node);\n selection.addRange(range);\n\n // attempt to copy\n try {\n document.execCommand('copy');\n success = true;\n } catch (e) {}\n\n // remove selection and node\n selection.removeAllRanges();\n body.removeChild(node);\n }\n return success;\n }\n}","import RCTDeviceEventEmitter from '../../vendor/react-native/EventEmitter/RCTDeviceEventEmitter';\nexport default RCTDeviceEventEmitter;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar dimensions = {\n window: {\n fontScale: 1,\n height: 0,\n scale: 1,\n width: 0\n },\n screen: {\n fontScale: 1,\n height: 0,\n scale: 1,\n width: 0\n }\n};\nvar listeners = {};\nvar shouldInit = canUseDOM;\nfunction update() {\n if (!canUseDOM) {\n return;\n }\n var win = window;\n var height;\n var width;\n\n /**\n * iOS does not update viewport dimensions on keyboard open/close.\n * window.visualViewport(https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport)\n * is used instead of document.documentElement.clientHeight (which remains as a fallback)\n */\n if (win.visualViewport) {\n var visualViewport = win.visualViewport;\n /**\n * We are multiplying by scale because height and width from visual viewport\n * also react to pinch zoom, and become smaller when zoomed. But it is not desired\n * behaviour, since originally documentElement client height and width were used,\n * and they do not react to pinch zoom.\n */\n height = Math.round(visualViewport.height * visualViewport.scale);\n width = Math.round(visualViewport.width * visualViewport.scale);\n } else {\n var docEl = win.document.documentElement;\n height = docEl.clientHeight;\n width = docEl.clientWidth;\n }\n dimensions.window = {\n fontScale: 1,\n height,\n scale: win.devicePixelRatio || 1,\n width\n };\n dimensions.screen = {\n fontScale: 1,\n height: win.screen.height,\n scale: win.devicePixelRatio || 1,\n width: win.screen.width\n };\n}\nfunction handleResize() {\n update();\n if (Array.isArray(listeners['change'])) {\n listeners['change'].forEach(handler => handler(dimensions));\n }\n}\nexport default class Dimensions {\n static get(dimension) {\n if (shouldInit) {\n shouldInit = false;\n update();\n }\n invariant(dimensions[dimension], \"No dimension set for key \" + dimension);\n return dimensions[dimension];\n }\n static set(initialDimensions) {\n if (initialDimensions) {\n if (canUseDOM) {\n invariant(false, 'Dimensions cannot be set in the browser');\n } else {\n if (initialDimensions.screen != null) {\n dimensions.screen = initialDimensions.screen;\n }\n if (initialDimensions.window != null) {\n dimensions.window = initialDimensions.window;\n }\n }\n }\n }\n static addEventListener(type, handler) {\n listeners[type] = listeners[type] || [];\n listeners[type].push(handler);\n return {\n remove: () => {\n this.removeEventListener(type, handler);\n }\n };\n }\n static removeEventListener(type, handler) {\n if (Array.isArray(listeners[type])) {\n listeners[type] = listeners[type].filter(_handler => _handler !== handler);\n }\n }\n}\nif (canUseDOM) {\n if (window.visualViewport) {\n window.visualViewport.addEventListener('resize', handleResize, false);\n } else {\n window.addEventListener('resize', handleResize, false);\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Easing from '../../vendor/react-native/Animated/Easing';\nexport default Easing;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport FlatList from '../../vendor/react-native/FlatList';\nexport default FlatList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar I18nManager = {\n allowRTL() {\n return;\n },\n forceRTL() {\n return;\n },\n getConstants() {\n return {\n isRTL: false\n };\n }\n};\nexport default I18nManager;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"blurRadius\", \"defaultSource\", \"draggable\", \"onError\", \"onLayout\", \"onLoad\", \"onLoadEnd\", \"onLoadStart\", \"pointerEvents\", \"source\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport { getAssetByID } from '../../modules/AssetRegistry';\nimport { createBoxShadowValue } from '../StyleSheet/preprocess';\nimport ImageLoader from '../../modules/ImageLoader';\nimport PixelRatio from '../PixelRatio';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar ERRORED = 'ERRORED';\nvar LOADED = 'LOADED';\nvar LOADING = 'LOADING';\nvar IDLE = 'IDLE';\nvar _filterId = 0;\nvar svgDataUriPattern = /^(data:image\\/svg\\+xml;utf8,)(.*)/;\nfunction createTintColorSVG(tintColor, id) {\n return tintColor && id != null ? /*#__PURE__*/React.createElement(\"svg\", {\n style: {\n position: 'absolute',\n height: 0,\n visibility: 'hidden',\n width: 0\n }\n }, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"tint-\" + id,\n suppressHydrationWarning: true\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodColor: \"\" + tintColor,\n key: tintColor\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"SourceAlpha\",\n operator: \"atop\"\n })))) : null;\n}\nfunction extractNonStandardStyleProps(style, blurRadius, filterId, tintColorProp) {\n var flatStyle = StyleSheet.flatten(style);\n var filter = flatStyle.filter,\n resizeMode = flatStyle.resizeMode,\n shadowOffset = flatStyle.shadowOffset,\n tintColor = flatStyle.tintColor;\n if (flatStyle.resizeMode) {\n warnOnce('Image.style.resizeMode', 'Image: style.resizeMode is deprecated. Please use props.resizeMode.');\n }\n if (flatStyle.tintColor) {\n warnOnce('Image.style.tintColor', 'Image: style.tintColor is deprecated. Please use props.tintColor.');\n }\n\n // Add CSS filters\n // React Native exposes these features as props and proprietary styles\n var filters = [];\n var _filter = null;\n if (filter) {\n filters.push(filter);\n }\n if (blurRadius) {\n filters.push(\"blur(\" + blurRadius + \"px)\");\n }\n if (shadowOffset) {\n var shadowString = createBoxShadowValue(flatStyle);\n if (shadowString) {\n filters.push(\"drop-shadow(\" + shadowString + \")\");\n }\n }\n if ((tintColorProp || tintColor) && filterId != null) {\n filters.push(\"url(#tint-\" + filterId + \")\");\n }\n if (filters.length > 0) {\n _filter = filters.join(' ');\n }\n return [resizeMode, _filter, tintColor];\n}\nfunction resolveAssetDimensions(source) {\n if (typeof source === 'number') {\n var _getAssetByID = getAssetByID(source),\n _height = _getAssetByID.height,\n _width = _getAssetByID.width;\n return {\n height: _height,\n width: _width\n };\n } else if (source != null && !Array.isArray(source) && typeof source === 'object') {\n var _height2 = source.height,\n _width2 = source.width;\n return {\n height: _height2,\n width: _width2\n };\n }\n}\nfunction resolveAssetUri(source) {\n var uri = null;\n if (typeof source === 'number') {\n // get the URI from the packager\n var asset = getAssetByID(source);\n if (asset == null) {\n throw new Error(\"Image: asset with ID \\\"\" + source + \"\\\" could not be found. Please check the image source or packager.\");\n }\n var scale = asset.scales[0];\n if (asset.scales.length > 1) {\n var preferredScale = PixelRatio.get();\n // Get the scale which is closest to the preferred scale\n scale = asset.scales.reduce((prev, curr) => Math.abs(curr - preferredScale) < Math.abs(prev - preferredScale) ? curr : prev);\n }\n var scaleSuffix = scale !== 1 ? \"@\" + scale + \"x\" : '';\n uri = asset ? asset.httpServerLocation + \"/\" + asset.name + scaleSuffix + \".\" + asset.type : '';\n } else if (typeof source === 'string') {\n uri = source;\n } else if (source && typeof source.uri === 'string') {\n uri = source.uri;\n }\n if (uri) {\n var match = uri.match(svgDataUriPattern);\n // inline SVG markup may contain characters (e.g., #, \") that need to be escaped\n if (match) {\n var prefix = match[1],\n svg = match[2];\n var encodedSvg = encodeURIComponent(svg);\n return \"\" + prefix + encodedSvg;\n }\n }\n return uri;\n}\nvar Image = /*#__PURE__*/React.forwardRef((props, ref) => {\n var ariaLabel = props['aria-label'],\n blurRadius = props.blurRadius,\n defaultSource = props.defaultSource,\n draggable = props.draggable,\n onError = props.onError,\n onLayout = props.onLayout,\n onLoad = props.onLoad,\n onLoadEnd = props.onLoadEnd,\n onLoadStart = props.onLoadStart,\n pointerEvents = props.pointerEvents,\n source = props.source,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n if (props.children) {\n throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.');\n }\n }\n var _React$useState = React.useState(() => {\n var uri = resolveAssetUri(source);\n if (uri != null) {\n var isLoaded = ImageLoader.has(uri);\n if (isLoaded) {\n return LOADED;\n }\n }\n return IDLE;\n }),\n state = _React$useState[0],\n updateState = _React$useState[1];\n var _React$useState2 = React.useState({}),\n layout = _React$useState2[0],\n updateLayout = _React$useState2[1];\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hiddenImageRef = React.useRef(null);\n var filterRef = React.useRef(_filterId++);\n var requestRef = React.useRef(null);\n var shouldDisplaySource = state === LOADED || state === LOADING && defaultSource == null;\n var _extractNonStandardSt = extractNonStandardStyleProps(style, blurRadius, filterRef.current, props.tintColor),\n _resizeMode = _extractNonStandardSt[0],\n filter = _extractNonStandardSt[1],\n _tintColor = _extractNonStandardSt[2];\n var resizeMode = props.resizeMode || _resizeMode || 'cover';\n var tintColor = props.tintColor || _tintColor;\n var selectedSource = shouldDisplaySource ? source : defaultSource;\n var displayImageUri = resolveAssetUri(selectedSource);\n var imageSizeStyle = resolveAssetDimensions(selectedSource);\n var backgroundImage = displayImageUri ? \"url(\\\"\" + displayImageUri + \"\\\")\" : null;\n var backgroundSize = getBackgroundSize();\n\n // Accessibility image allows users to trigger the browser's image context menu\n var hiddenImage = displayImageUri ? createElement('img', {\n alt: ariaLabel || '',\n style: styles.accessibilityImage$raw,\n draggable: draggable || false,\n ref: hiddenImageRef,\n src: displayImageUri\n }) : null;\n function getBackgroundSize() {\n if (hiddenImageRef.current != null && (resizeMode === 'center' || resizeMode === 'repeat')) {\n var _hiddenImageRef$curre = hiddenImageRef.current,\n naturalHeight = _hiddenImageRef$curre.naturalHeight,\n naturalWidth = _hiddenImageRef$curre.naturalWidth;\n var _height3 = layout.height,\n _width3 = layout.width;\n if (naturalHeight && naturalWidth && _height3 && _width3) {\n var scaleFactor = Math.min(1, _width3 / naturalWidth, _height3 / naturalHeight);\n var x = Math.ceil(scaleFactor * naturalWidth);\n var y = Math.ceil(scaleFactor * naturalHeight);\n return x + \"px \" + y + \"px\";\n }\n }\n }\n function handleLayout(e) {\n if (resizeMode === 'center' || resizeMode === 'repeat' || onLayout) {\n var _layout = e.nativeEvent.layout;\n onLayout && onLayout(e);\n updateLayout(_layout);\n }\n }\n\n // Image loading\n var uri = resolveAssetUri(source);\n React.useEffect(() => {\n abortPendingRequest();\n if (uri != null) {\n updateState(LOADING);\n if (onLoadStart) {\n onLoadStart();\n }\n requestRef.current = ImageLoader.load(uri, function load(e) {\n updateState(LOADED);\n if (onLoad) {\n onLoad(e);\n }\n if (onLoadEnd) {\n onLoadEnd();\n }\n }, function error() {\n updateState(ERRORED);\n if (onError) {\n onError({\n nativeEvent: {\n error: \"Failed to load resource \" + uri + \" (404)\"\n }\n });\n }\n if (onLoadEnd) {\n onLoadEnd();\n }\n });\n }\n function abortPendingRequest() {\n if (requestRef.current != null) {\n ImageLoader.abort(requestRef.current);\n requestRef.current = null;\n }\n }\n return abortPendingRequest;\n }, [uri, requestRef, updateState, onError, onLoad, onLoadEnd, onLoadStart]);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n \"aria-label\": ariaLabel,\n onLayout: handleLayout,\n pointerEvents: pointerEvents,\n ref: ref,\n style: [styles.root, hasTextAncestor && styles.inline, imageSizeStyle, style, styles.undo,\n // TEMP: avoid deprecated shadow props regression\n // until Image refactored to use createElement.\n {\n boxShadow: null\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.image, resizeModeStyles[resizeMode], {\n backgroundImage,\n filter\n }, backgroundSize != null && {\n backgroundSize\n }],\n suppressHydrationWarning: true\n }), hiddenImage, createTintColorSVG(tintColor, filterRef.current));\n});\nImage.displayName = 'Image';\n\n// $FlowIgnore: This is the correct type, but casting makes it unhappy since the variables aren't defined yet\nvar ImageWithStatics = Image;\nImageWithStatics.getSize = function (uri, success, failure) {\n ImageLoader.getSize(uri, success, failure);\n};\nImageWithStatics.prefetch = function (uri) {\n return ImageLoader.prefetch(uri);\n};\nImageWithStatics.queryCache = function (uris) {\n return ImageLoader.queryCache(uris);\n};\nvar styles = StyleSheet.create({\n root: {\n flexBasis: 'auto',\n overflow: 'hidden',\n zIndex: 0\n },\n inline: {\n display: 'inline-flex'\n },\n undo: {\n // These styles are converted to CSS filters applied to the\n // element displaying the background image.\n blurRadius: null,\n shadowColor: null,\n shadowOpacity: null,\n shadowOffset: null,\n shadowRadius: null,\n tintColor: null,\n // These styles are not supported\n overlayColor: null,\n resizeMode: null\n },\n image: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n backgroundColor: 'transparent',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: '100%',\n width: '100%',\n zIndex: -1\n }),\n accessibilityImage$raw: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n opacity: 0,\n width: '100%',\n zIndex: -1\n })\n});\nvar resizeModeStyles = StyleSheet.create({\n center: {\n backgroundSize: 'auto'\n },\n contain: {\n backgroundSize: 'contain'\n },\n cover: {\n backgroundSize: 'cover'\n },\n none: {\n backgroundPosition: '0',\n backgroundSize: 'auto'\n },\n repeat: {\n backgroundPosition: '0',\n backgroundRepeat: 'repeat',\n backgroundSize: 'auto'\n },\n stretch: {\n backgroundSize: '100% 100%'\n }\n});\nexport default ImageWithStatics;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"style\", \"imageStyle\", \"imageRef\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport Image from '../Image';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\n\n/**\n * Very simple drop-in replacement for which supports nesting views.\n */\nvar ImageBackground = /*#__PURE__*/forwardRef((props, forwardedRef) => {\n var children = props.children,\n _props$style = props.style,\n style = _props$style === void 0 ? emptyObject : _props$style,\n imageStyle = props.imageStyle,\n imageRef = props.imageRef,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var _StyleSheet$flatten = StyleSheet.flatten(style),\n height = _StyleSheet$flatten.height,\n width = _StyleSheet$flatten.width;\n return /*#__PURE__*/React.createElement(View, {\n ref: forwardedRef,\n style: style\n }, /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n ref: imageRef,\n style: [{\n // Temporary Workaround:\n // Current (imperfect yet) implementation of overwrites width and height styles\n // (which is not quite correct), and these styles conflict with explicitly set styles\n // of and with our internal layout model here.\n // So, we have to proxy/reapply these styles explicitly for actual component.\n // This workaround should be removed after implementing proper support of\n // intrinsic content size of the .\n width,\n height,\n zIndex: -1\n }, StyleSheet.absoluteFill, imageStyle]\n })), children);\n});\nImageBackground.displayName = 'ImageBackground';\nexport default ImageBackground;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass TaskQueue {\n constructor(_ref) {\n var onMoreTasks = _ref.onMoreTasks;\n this._onMoreTasks = onMoreTasks;\n this._queueStack = [{\n tasks: [],\n popable: true\n }];\n }\n enqueue(task) {\n this._getCurrentQueue().push(task);\n }\n enqueueTasks(tasks) {\n tasks.forEach(task => this.enqueue(task));\n }\n cancelTasks(tasksToCancel) {\n this._queueStack = this._queueStack.map(queue => _objectSpread(_objectSpread({}, queue), {}, {\n tasks: queue.tasks.filter(task => tasksToCancel.indexOf(task) === -1)\n })).filter((queue, idx) => queue.tasks.length > 0 || idx === 0);\n }\n hasTasksToProcess() {\n return this._getCurrentQueue().length > 0;\n }\n\n /**\n * Executes the next task in the queue.\n */\n processNext() {\n var queue = this._getCurrentQueue();\n if (queue.length) {\n var task = queue.shift();\n try {\n if (typeof task === 'object' && task.gen) {\n this._genPromise(task);\n } else if (typeof task === 'object' && task.run) {\n task.run();\n } else {\n invariant(typeof task === 'function', 'Expected Function, SimpleTask, or PromiseTask, but got:\\n' + JSON.stringify(task, null, 2));\n task();\n }\n } catch (e) {\n e.message = 'TaskQueue: Error with task ' + (task.name || '') + ': ' + e.message;\n throw e;\n }\n }\n }\n _getCurrentQueue() {\n var stackIdx = this._queueStack.length - 1;\n var queue = this._queueStack[stackIdx];\n if (queue.popable && queue.tasks.length === 0 && stackIdx > 0) {\n this._queueStack.pop();\n return this._getCurrentQueue();\n } else {\n return queue.tasks;\n }\n }\n _genPromise(task) {\n var length = this._queueStack.push({\n tasks: [],\n popable: false\n });\n var stackIdx = length - 1;\n var stackItem = this._queueStack[stackIdx];\n task.gen().then(() => {\n stackItem.popable = true;\n this.hasTasksToProcess() && this._onMoreTasks();\n }).catch(ex => {\n setTimeout(() => {\n ex.message = \"TaskQueue: Error resolving Promise in task \" + task.name + \": \" + ex.message;\n throw ex;\n }, 0);\n });\n }\n}\nexport default TaskQueue;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport TaskQueue from './TaskQueue';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport requestIdleCallback from '../../modules/requestIdleCallback';\nvar _emitter = new EventEmitter();\nvar InteractionManager = {\n Events: {\n interactionStart: 'interactionStart',\n interactionComplete: 'interactionComplete'\n },\n /**\n * Schedule a function to run after all interactions have completed.\n */\n runAfterInteractions(task) {\n var tasks = [];\n var promise = new Promise(resolve => {\n _scheduleUpdate();\n if (task) {\n tasks.push(task);\n }\n tasks.push({\n run: resolve,\n name: 'resolve ' + (task && task.name || '?')\n });\n _taskQueue.enqueueTasks(tasks);\n });\n return {\n then: promise.then.bind(promise),\n done: promise.then.bind(promise),\n cancel: () => {\n _taskQueue.cancelTasks(tasks);\n }\n };\n },\n /**\n * Notify manager that an interaction has started.\n */\n createInteractionHandle() {\n _scheduleUpdate();\n var handle = ++_inc;\n _addInteractionSet.add(handle);\n return handle;\n },\n /**\n * Notify manager that an interaction has completed.\n */\n clearInteractionHandle(handle) {\n invariant(!!handle, 'Must provide a handle to clear.');\n _scheduleUpdate();\n _addInteractionSet.delete(handle);\n _deleteInteractionSet.add(handle);\n },\n addListener: _emitter.addListener.bind(_emitter),\n /**\n *\n * @param deadline\n */\n setDeadline(deadline) {\n _deadline = deadline;\n }\n};\nvar _interactionSet = new Set();\nvar _addInteractionSet = new Set();\nvar _deleteInteractionSet = new Set();\nvar _taskQueue = new TaskQueue({\n onMoreTasks: _scheduleUpdate\n});\nvar _nextUpdateHandle = 0;\nvar _inc = 0;\nvar _deadline = -1;\n\n/**\n * Schedule an asynchronous update to the interaction state.\n */\nfunction _scheduleUpdate() {\n if (!_nextUpdateHandle) {\n if (_deadline > 0) {\n _nextUpdateHandle = setTimeout(_processUpdate);\n } else {\n _nextUpdateHandle = requestIdleCallback(_processUpdate);\n }\n }\n}\n\n/**\n * Notify listeners, process queue, etc\n */\nfunction _processUpdate() {\n _nextUpdateHandle = 0;\n var interactionCount = _interactionSet.size;\n _addInteractionSet.forEach(handle => _interactionSet.add(handle));\n _deleteInteractionSet.forEach(handle => _interactionSet.delete(handle));\n var nextInteractionCount = _interactionSet.size;\n if (interactionCount !== 0 && nextInteractionCount === 0) {\n _emitter.emit(InteractionManager.Events.interactionComplete);\n } else if (interactionCount === 0 && nextInteractionCount !== 0) {\n _emitter.emit(InteractionManager.Events.interactionStart);\n }\n if (nextInteractionCount === 0) {\n // It seems that we can't know the running time of the current event loop,\n // we can only calculate the running time of the current task queue.\n var begin = Date.now();\n while (_taskQueue.hasTasksToProcess()) {\n _taskQueue.processNext();\n if (_deadline > 0 && Date.now() - begin >= _deadline) {\n _scheduleUpdate();\n break;\n }\n }\n }\n _addInteractionSet.clear();\n _deleteInteractionSet.clear();\n}\nexport default InteractionManager;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nvar Keyboard = {\n addListener() {\n return {\n remove: () => {}\n };\n },\n dismiss() {\n dismissKeyboard();\n },\n removeAllListeners() {},\n removeListener() {}\n};\nexport default Keyboard;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"behavior\", \"contentContainerStyle\", \"keyboardVerticalOffset\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nclass KeyboardAvoidingView extends React.Component {\n constructor() {\n super(...arguments);\n this.frame = null;\n this.onLayout = event => {\n this.frame = event.nativeEvent.layout;\n };\n }\n relativeKeyboardHeight(keyboardFrame) {\n var frame = this.frame;\n if (!frame || !keyboardFrame) {\n return 0;\n }\n var keyboardY = keyboardFrame.screenY - (this.props.keyboardVerticalOffset || 0);\n return Math.max(frame.y + frame.height - keyboardY, 0);\n }\n onKeyboardChange(event) {}\n render() {\n var _this$props = this.props,\n behavior = _this$props.behavior,\n contentContainerStyle = _this$props.contentContainerStyle,\n keyboardVerticalOffset = _this$props.keyboardVerticalOffset,\n rest = _objectWithoutPropertiesLoose(_this$props, _excluded);\n return /*#__PURE__*/React.createElement(View, _extends({\n onLayout: this.onLayout\n }, rest));\n }\n}\nexport default KeyboardAvoidingView;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport LayoutAnimation from '../../vendor/react-native/LayoutAnimation';\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar initialURL = canUseDOM ? window.location.href : '';\nclass Linking {\n constructor() {\n this._eventCallbacks = {};\n }\n _dispatchEvent(event) {\n for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n data[_key - 1] = arguments[_key];\n }\n var listeners = this._eventCallbacks[event];\n if (listeners != null && Array.isArray(listeners)) {\n listeners.map(listener => {\n listener(...data);\n });\n }\n }\n\n /**\n * Adds a event listener for the specified event. The callback will be called when the\n * said event is dispatched.\n */\n addEventListener(eventType, callback) {\n var _this = this;\n if (!_this._eventCallbacks[eventType]) {\n _this._eventCallbacks[eventType] = [callback];\n }\n _this._eventCallbacks[eventType].push(callback);\n return {\n remove() {\n var callbacks = _this._eventCallbacks[eventType];\n var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n _this._eventCallbacks[eventType] = filteredCallbacks;\n }\n };\n }\n\n /**\n * Removes a previously added event listener for the specified event. The callback must\n * be the same object as the one passed to `addEventListener`.\n */\n removeEventListener(eventType, callback) {\n console.error(\"Linking.removeEventListener('\" + eventType + \"', ...): Method has been \" + 'deprecated. Please instead use `remove()` on the subscription ' + 'returned by `Linking.addEventListener`.');\n var callbacks = this._eventCallbacks[eventType];\n var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n this._eventCallbacks[eventType] = filteredCallbacks;\n }\n canOpenURL() {\n return Promise.resolve(true);\n }\n getInitialURL() {\n return Promise.resolve(initialURL);\n }\n\n /**\n * Try to open the given url in a secure fashion. The method returns a Promise object.\n * If a target is passed (including undefined) that target will be used, otherwise '_blank'.\n * If the url opens, the promise is resolved. If not, the promise is rejected.\n * Dispatches the `onOpen` event if `url` is opened successfully.\n */\n openURL(url, target) {\n if (arguments.length === 1) {\n target = '_blank';\n }\n try {\n open(url, target);\n this._dispatchEvent('onOpen', url);\n return Promise.resolve();\n } catch (e) {\n return Promise.reject(e);\n }\n }\n _validateURL(url) {\n invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n invariant(url, 'Invalid URL: cannot be empty');\n }\n}\nvar open = (url, target) => {\n if (canUseDOM) {\n var urlToOpen = new URL(url, window.location).toString();\n if (urlToOpen.indexOf('tel:') === 0) {\n window.location = urlToOpen;\n } else {\n window.open(urlToOpen, target, 'noopener');\n }\n }\n};\nexport default new Linking();","/**\n * Copyright (c) 2016-present, Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar LogBox = {\n ignoreLogs() {},\n ignoreAllLogs() {},\n uninstall() {},\n install() {}\n};\nexport default LogBox;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport createElement from '../createElement';\nvar ANIMATION_DURATION = 300;\nfunction getAnimationStyle(animationType, visible) {\n if (animationType === 'slide') {\n return visible ? animatedSlideInStyles : animatedSlideOutStyles;\n }\n if (animationType === 'fade') {\n return visible ? animatedFadeInStyles : animatedFadeOutStyles;\n }\n return visible ? styles.container : styles.hidden;\n}\nfunction ModalAnimation(props) {\n var animationType = props.animationType,\n children = props.children,\n onDismiss = props.onDismiss,\n onShow = props.onShow,\n visible = props.visible;\n var _React$useState = React.useState(false),\n isRendering = _React$useState[0],\n setIsRendering = _React$useState[1];\n var wasVisible = React.useRef(false);\n var isAnimated = animationType && animationType !== 'none';\n var animationEndCallback = React.useCallback(e => {\n if (e && e.currentTarget !== e.target) {\n // If the event was generated for something NOT this element we\n // should ignore it as it's not relevant to us\n return;\n }\n if (visible) {\n if (onShow) {\n onShow();\n }\n } else {\n setIsRendering(false);\n if (onDismiss) {\n onDismiss();\n }\n }\n }, [onDismiss, onShow, visible]);\n React.useEffect(() => {\n if (visible) {\n setIsRendering(true);\n }\n if (visible !== wasVisible.current && !isAnimated) {\n // Manually call `animationEndCallback` if no animation is used\n animationEndCallback();\n }\n wasVisible.current = visible;\n }, [isAnimated, visible, animationEndCallback]);\n return isRendering || visible ? createElement('div', {\n style: isRendering ? getAnimationStyle(animationType, visible) : styles.hidden,\n onAnimationEnd: animationEndCallback,\n children\n }) : null;\n}\nvar styles = StyleSheet.create({\n container: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n zIndex: 9999\n },\n animatedIn: {\n animationDuration: ANIMATION_DURATION + \"ms\",\n animationTimingFunction: 'ease-in'\n },\n animatedOut: {\n pointerEvents: 'none',\n animationDuration: ANIMATION_DURATION + \"ms\",\n animationTimingFunction: 'ease-out'\n },\n fadeIn: {\n opacity: 1,\n animationKeyframes: {\n '0%': {\n opacity: 0\n },\n '100%': {\n opacity: 1\n }\n }\n },\n fadeOut: {\n opacity: 0,\n animationKeyframes: {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n }\n },\n slideIn: {\n transform: 'translateY(0%)',\n animationKeyframes: {\n '0%': {\n transform: 'translateY(100%)'\n },\n '100%': {\n transform: 'translateY(0%)'\n }\n }\n },\n slideOut: {\n transform: 'translateY(100%)',\n animationKeyframes: {\n '0%': {\n transform: 'translateY(0%)'\n },\n '100%': {\n transform: 'translateY(100%)'\n }\n }\n },\n hidden: {\n opacity: 0\n }\n});\nvar animatedSlideInStyles = [styles.container, styles.animatedIn, styles.slideIn];\nvar animatedSlideOutStyles = [styles.container, styles.animatedOut, styles.slideOut];\nvar animatedFadeInStyles = [styles.container, styles.animatedIn, styles.fadeIn];\nvar animatedFadeOutStyles = [styles.container, styles.animatedOut, styles.fadeOut];\nexport default ModalAnimation;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"active\", \"children\", \"onRequestClose\", \"transparent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport StyleSheet from '../StyleSheet';\nimport canUseDOM from '../../modules/canUseDom';\nvar ModalContent = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var active = props.active,\n children = props.children,\n onRequestClose = props.onRequestClose,\n transparent = props.transparent,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n React.useEffect(() => {\n if (canUseDOM) {\n var closeOnEscape = e => {\n if (active && e.key === 'Escape') {\n e.stopPropagation();\n if (onRequestClose) {\n onRequestClose();\n }\n }\n };\n document.addEventListener('keyup', closeOnEscape, false);\n return () => document.removeEventListener('keyup', closeOnEscape, false);\n }\n }, [active, onRequestClose]);\n var style = React.useMemo(() => {\n return [styles.modal, transparent ? styles.modalTransparent : styles.modalOpaque];\n }, [transparent]);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n \"aria-modal\": true,\n ref: forwardedRef,\n role: active ? 'dialog' : null,\n style: style\n }), /*#__PURE__*/React.createElement(View, {\n style: styles.container\n }, children));\n});\nvar styles = StyleSheet.create({\n modal: {\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n },\n modalTransparent: {\n backgroundColor: 'transparent'\n },\n modalOpaque: {\n backgroundColor: 'white'\n },\n container: {\n top: 0,\n flex: 1\n }\n});\nexport default ModalContent;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport UIManager from '../UIManager';\nimport canUseDOM from '../../modules/canUseDom';\n\n/**\n * This Component is used to \"wrap\" the modal we're opening\n * so that changing focus via tab will never leave the document.\n *\n * This allows us to properly trap the focus within a modal\n * even if the modal is at the start or end of a document.\n */\n\nvar FocusBracket = () => {\n return createElement('div', {\n role: 'none',\n tabIndex: 0,\n style: styles.focusBracket\n });\n};\nfunction attemptFocus(element) {\n if (!canUseDOM) {\n return false;\n }\n try {\n element.focus();\n } catch (e) {\n // Do nothing\n }\n return document.activeElement === element;\n}\nfunction focusFirstDescendant(element) {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (attemptFocus(child) || focusFirstDescendant(child)) {\n return true;\n }\n }\n return false;\n}\nfunction focusLastDescendant(element) {\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\n var child = element.childNodes[i];\n if (attemptFocus(child) || focusLastDescendant(child)) {\n return true;\n }\n }\n return false;\n}\nvar ModalFocusTrap = _ref => {\n var active = _ref.active,\n children = _ref.children;\n var trapElementRef = React.useRef();\n var focusRef = React.useRef({\n trapFocusInProgress: false,\n lastFocusedElement: null\n });\n React.useEffect(() => {\n if (canUseDOM) {\n var trapFocus = () => {\n // We should not trap focus if:\n // - The modal hasn't fully initialized with an HTMLElement ref\n // - Focus is already in the process of being trapped (e.g., we're refocusing)\n // - isTrapActive prop being falsey tells us to do nothing\n if (trapElementRef.current == null || focusRef.current.trapFocusInProgress || !active) {\n return;\n }\n try {\n focusRef.current.trapFocusInProgress = true;\n if (document.activeElement instanceof Node && !trapElementRef.current.contains(document.activeElement)) {\n // To handle keyboard focusing we can make an assumption here.\n // If you're tabbing through the focusable elements, the previously\n // active element will either be the first or the last.\n // If the previously selected element is the \"first\" descendant\n // and we're leaving it - this means that we should be looping\n // around to the other side of the modal.\n var hasFocused = focusFirstDescendant(trapElementRef.current);\n if (focusRef.current.lastFocusedElement === document.activeElement) {\n hasFocused = focusLastDescendant(trapElementRef.current);\n }\n // If we couldn't focus a new element then we need to focus onto the trap target\n if (!hasFocused && trapElementRef.current != null && document.activeElement) {\n UIManager.focus(trapElementRef.current);\n }\n }\n } finally {\n focusRef.current.trapFocusInProgress = false;\n }\n focusRef.current.lastFocusedElement = document.activeElement;\n };\n\n // Call the trapFocus callback at least once when this modal has been activated.\n trapFocus();\n document.addEventListener('focus', trapFocus, true);\n return () => document.removeEventListener('focus', trapFocus, true);\n }\n }, [active]);\n\n // To be fully compliant with WCAG we need to refocus element that triggered opening modal\n // after closing it\n React.useEffect(function () {\n if (canUseDOM) {\n var lastFocusedElementOutsideTrap = document.activeElement;\n return function () {\n if (lastFocusedElementOutsideTrap && document.contains(lastFocusedElementOutsideTrap)) {\n UIManager.focus(lastFocusedElementOutsideTrap);\n }\n };\n }\n }, []);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FocusBracket, null), /*#__PURE__*/React.createElement(View, {\n ref: trapElementRef\n }, children), /*#__PURE__*/React.createElement(FocusBracket, null));\n};\nexport default ModalFocusTrap;\nvar styles = StyleSheet.create({\n focusBracket: {\n outlineStyle: 'none'\n }\n});","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDOM from '../../modules/canUseDom';\nfunction ModalPortal(props) {\n var children = props.children;\n var elementRef = React.useRef(null);\n if (canUseDOM && !elementRef.current) {\n var element = document.createElement('div');\n if (element && document.body) {\n document.body.appendChild(element);\n elementRef.current = element;\n }\n }\n React.useEffect(() => {\n if (canUseDOM) {\n return () => {\n if (document.body && elementRef.current) {\n document.body.removeChild(elementRef.current);\n elementRef.current = null;\n }\n };\n }\n }, []);\n return elementRef.current && canUseDOM ? /*#__PURE__*/ReactDOM.createPortal(children, elementRef.current) : null;\n}\nexport default ModalPortal;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationType\", \"children\", \"onDismiss\", \"onRequestClose\", \"onShow\", \"transparent\", \"visible\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport ModalPortal from './ModalPortal';\nimport ModalAnimation from './ModalAnimation';\nimport ModalContent from './ModalContent';\nimport ModalFocusTrap from './ModalFocusTrap';\nvar uniqueModalIdentifier = 0;\nvar activeModalStack = [];\nvar activeModalListeners = {};\nfunction notifyActiveModalListeners() {\n if (activeModalStack.length === 0) {\n return;\n }\n var activeModalId = activeModalStack[activeModalStack.length - 1];\n activeModalStack.forEach(modalId => {\n if (modalId in activeModalListeners) {\n activeModalListeners[modalId](modalId === activeModalId);\n }\n });\n}\nfunction removeActiveModal(modalId) {\n if (modalId in activeModalListeners) {\n // Before removing this listener we should probably tell it\n // that it's no longer the active modal for sure.\n activeModalListeners[modalId](false);\n delete activeModalListeners[modalId];\n }\n var index = activeModalStack.indexOf(modalId);\n if (index !== -1) {\n activeModalStack.splice(index, 1);\n notifyActiveModalListeners();\n }\n}\nfunction addActiveModal(modalId, listener) {\n removeActiveModal(modalId);\n activeModalStack.push(modalId);\n activeModalListeners[modalId] = listener;\n notifyActiveModalListeners();\n}\nvar Modal = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var animationType = props.animationType,\n children = props.children,\n onDismiss = props.onDismiss,\n onRequestClose = props.onRequestClose,\n onShow = props.onShow,\n transparent = props.transparent,\n _props$visible = props.visible,\n visible = _props$visible === void 0 ? true : _props$visible,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n // Set a unique model identifier so we can correctly route\n // dismissals and check the layering of modals.\n var modalId = React.useMemo(() => uniqueModalIdentifier++, []);\n var _React$useState = React.useState(false),\n isActive = _React$useState[0],\n setIsActive = _React$useState[1];\n var onDismissCallback = React.useCallback(() => {\n removeActiveModal(modalId);\n if (onDismiss) {\n onDismiss();\n }\n }, [modalId, onDismiss]);\n var onShowCallback = React.useCallback(() => {\n addActiveModal(modalId, setIsActive);\n if (onShow) {\n onShow();\n }\n }, [modalId, onShow]);\n React.useEffect(() => {\n return () => removeActiveModal(modalId);\n }, [modalId]);\n return /*#__PURE__*/React.createElement(ModalPortal, null, /*#__PURE__*/React.createElement(ModalAnimation, {\n animationType: animationType,\n onDismiss: onDismissCallback,\n onShow: onShowCallback,\n visible: visible\n }, /*#__PURE__*/React.createElement(ModalFocusTrap, {\n active: isActive\n }, /*#__PURE__*/React.createElement(ModalContent, _extends({}, rest, {\n active: isActive,\n onRequestClose: onRequestClose,\n ref: forwardedRef,\n transparent: transparent\n }), children))));\n});\nexport default Modal;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport NativeEventEmitter from '../../vendor/react-native/EventEmitter/NativeEventEmitter';\nexport default NativeEventEmitter;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../UIManager';\n\n// NativeModules shim\nvar NativeModules = {\n UIManager\n};\nexport default NativeModules;","import PanResponder from '../../vendor/react-native/PanResponder';\nexport default PanResponder;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createElement from '../createElement';\nexport default function PickerItem(props) {\n var color = props.color,\n label = props.label,\n testID = props.testID,\n value = props.value;\n var style = {\n color\n };\n return createElement('option', {\n children: label,\n style,\n testID,\n value\n });\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"enabled\", \"onValueChange\", \"selectedValue\", \"style\", \"testID\", \"itemStyle\", \"mode\", \"prompt\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport PickerItem from './PickerItem';\nimport StyleSheet from '../StyleSheet';\nvar Picker = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var children = props.children,\n enabled = props.enabled,\n onValueChange = props.onValueChange,\n selectedValue = props.selectedValue,\n style = props.style,\n testID = props.testID,\n itemStyle = props.itemStyle,\n mode = props.mode,\n prompt = props.prompt,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = React.useRef(null);\n function handleChange(e) {\n var _e$target = e.target,\n selectedIndex = _e$target.selectedIndex,\n value = _e$target.value;\n if (onValueChange) {\n onValueChange(value, selectedIndex);\n }\n }\n\n // $FlowFixMe\n var supportedProps = _objectSpread({\n children,\n disabled: enabled === false ? true : undefined,\n onChange: handleChange,\n style: [styles.initial, style],\n testID,\n value: selectedValue\n }, other);\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n return createElement('select', supportedProps);\n});\n\n// $FlowFixMe\nPicker.Item = PickerItem;\nvar styles = StyleSheet.create({\n initial: {\n fontFamily: 'System',\n fontSize: 'inherit',\n margin: 0\n }\n});\nexport default Picker;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Dimensions from '../Dimensions';\n\n/**\n * PixelRatio gives access to the device pixel density.\n */\nexport default class PixelRatio {\n /**\n * Returns the device pixel density.\n */\n static get() {\n return Dimensions.get('window').scale;\n }\n\n /**\n * No equivalent for Web\n */\n static getFontScale() {\n return Dimensions.get('window').fontScale || PixelRatio.get();\n }\n\n /**\n * Converts a layout size (dp) to pixel size (px).\n * Guaranteed to return an integer number.\n */\n static getPixelSizeForLayoutSize(layoutSize) {\n return Math.round(layoutSize * PixelRatio.get());\n }\n\n /**\n * Rounds a layout size (dp) to the nearest layout size that corresponds to\n * an integer number of pixels. For example, on a device with a PixelRatio\n * of 3, `PixelRatio.roundToNearestPixel(8.4) = 8.33`, which corresponds to\n * exactly (8.33 * 3) = 25 pixels.\n */\n static roundToNearestPixel(layoutSize) {\n var ratio = PixelRatio.get();\n return Math.round(layoutSize * ratio) / ratio;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar Platform = {\n OS: 'web',\n select: obj => 'web' in obj ? obj.web : obj.default,\n get isTesting() {\n if (process.env.NODE_ENV === 'test') {\n return true;\n }\n return false;\n }\n};\nexport default Platform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"delayLongPress\", \"delayPressIn\", \"delayPressOut\", \"disabled\", \"onBlur\", \"onContextMenu\", \"onFocus\", \"onHoverIn\", \"onHoverOut\", \"onKeyDown\", \"onLongPress\", \"onPress\", \"onPressMove\", \"onPressIn\", \"onPressOut\", \"style\", \"tabIndex\", \"testOnly_hovered\", \"testOnly_pressed\"];\nimport * as React from 'react';\nimport { forwardRef, memo, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport useHover from '../../modules/useHover';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n/**\n * Component used to build display components that should respond to whether the\n * component is currently pressed or not.\n */\nfunction Pressable(props, forwardedRef) {\n var children = props.children,\n delayLongPress = props.delayLongPress,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n disabled = props.disabled,\n onBlur = props.onBlur,\n onContextMenu = props.onContextMenu,\n onFocus = props.onFocus,\n onHoverIn = props.onHoverIn,\n onHoverOut = props.onHoverOut,\n onKeyDown = props.onKeyDown,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressMove = props.onPressMove,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n style = props.style,\n tabIndex = props.tabIndex,\n testOnly_hovered = props.testOnly_hovered,\n testOnly_pressed = props.testOnly_pressed,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var _useForceableState = useForceableState(testOnly_hovered === true),\n hovered = _useForceableState[0],\n setHovered = _useForceableState[1];\n var _useForceableState2 = useForceableState(false),\n focused = _useForceableState2[0],\n setFocused = _useForceableState2[1];\n var _useForceableState3 = useForceableState(testOnly_pressed === true),\n pressed = _useForceableState3[0],\n setPressed = _useForceableState3[1];\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var pressConfig = useMemo(() => ({\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n disabled,\n onLongPress,\n onPress,\n onPressChange: setPressed,\n onPressStart: onPressIn,\n onPressMove,\n onPressEnd: onPressOut\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressMove, onPressOut, setPressed]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var onContextMenuPress = pressEventHandlers.onContextMenu,\n onKeyDownPress = pressEventHandlers.onKeyDown;\n useHover(hostRef, {\n contain: true,\n disabled,\n onHoverChange: setHovered,\n onHoverStart: onHoverIn,\n onHoverEnd: onHoverOut\n });\n var interactionState = {\n hovered,\n focused,\n pressed\n };\n var blurHandler = React.useCallback(e => {\n if (e.nativeEvent.target === hostRef.current) {\n setFocused(false);\n if (onBlur != null) {\n onBlur(e);\n }\n }\n }, [hostRef, setFocused, onBlur]);\n var focusHandler = React.useCallback(e => {\n if (e.nativeEvent.target === hostRef.current) {\n setFocused(true);\n if (onFocus != null) {\n onFocus(e);\n }\n }\n }, [hostRef, setFocused, onFocus]);\n var contextMenuHandler = React.useCallback(e => {\n if (onContextMenuPress != null) {\n onContextMenuPress(e);\n }\n if (onContextMenu != null) {\n onContextMenu(e);\n }\n }, [onContextMenu, onContextMenuPress]);\n var keyDownHandler = React.useCallback(e => {\n if (onKeyDownPress != null) {\n onKeyDownPress(e);\n }\n if (onKeyDown != null) {\n onKeyDown(e);\n }\n }, [onKeyDown, onKeyDownPress]);\n var _tabIndex;\n if (tabIndex !== undefined) {\n _tabIndex = tabIndex;\n } else {\n _tabIndex = disabled ? -1 : 0;\n }\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n \"aria-disabled\": disabled,\n onBlur: blurHandler,\n onContextMenu: contextMenuHandler,\n onFocus: focusHandler,\n onKeyDown: keyDownHandler,\n ref: setRef,\n style: [disabled ? styles.disabled : styles.active, typeof style === 'function' ? style(interactionState) : style],\n tabIndex: _tabIndex\n }), typeof children === 'function' ? children(interactionState) : children);\n}\nfunction useForceableState(forced) {\n var _useState = useState(false),\n bool = _useState[0],\n setBool = _useState[1];\n return [bool || forced, setBool];\n}\nvar styles = StyleSheet.create({\n active: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n },\n disabled: {\n pointerEvents: 'box-none'\n }\n});\nvar MemoedPressable = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(Pressable));\nMemoedPressable.displayName = 'Pressable';\nexport default MemoedPressable;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"color\", \"indeterminate\", \"progress\", \"trackColor\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar ProgressBar = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _props$color = props.color,\n color = _props$color === void 0 ? '#1976D2' : _props$color,\n _props$indeterminate = props.indeterminate,\n indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n _props$progress = props.progress,\n progress = _props$progress === void 0 ? 0 : _props$progress,\n _props$trackColor = props.trackColor,\n trackColor = _props$trackColor === void 0 ? 'transparent' : _props$trackColor,\n style = props.style,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var percentageProgress = progress * 100;\n var width = indeterminate ? '25%' : percentageProgress + \"%\";\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n \"aria-valuemax\": 100,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": indeterminate ? null : percentageProgress,\n ref: ref,\n role: \"progressbar\",\n style: [styles.track, style, {\n backgroundColor: trackColor\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [{\n backgroundColor: color,\n width\n }, styles.progress, indeterminate && styles.animation]\n }));\n});\nProgressBar.displayName = 'ProgressBar';\nvar styles = StyleSheet.create({\n track: {\n forcedColorAdjust: 'none',\n height: 5,\n overflow: 'hidden',\n userSelect: 'none',\n zIndex: 0\n },\n progress: {\n forcedColorAdjust: 'none',\n height: '100%',\n zIndex: -1\n },\n animation: {\n animationDuration: '1s',\n animationKeyframes: [{\n '0%': {\n transform: 'translateX(-100%)'\n },\n '100%': {\n transform: 'translateX(400%)'\n }\n }],\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite'\n }\n});\nexport default ProgressBar;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"colors\", \"enabled\", \"onRefresh\", \"progressBackgroundColor\", \"progressViewOffset\", \"refreshing\", \"size\", \"tintColor\", \"title\", \"titleColor\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../View';\nimport React from 'react';\nfunction RefreshControl(props) {\n var colors = props.colors,\n enabled = props.enabled,\n onRefresh = props.onRefresh,\n progressBackgroundColor = props.progressBackgroundColor,\n progressViewOffset = props.progressViewOffset,\n refreshing = props.refreshing,\n size = props.size,\n tintColor = props.tintColor,\n title = props.title,\n titleColor = props.titleColor,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/React.createElement(View, rest);\n}\nexport default RefreshControl;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport canUseDOM from '../../modules/canUseDom';\nvar cssFunction = function () {\n if (canUseDOM && window.CSS && window.CSS.supports && window.CSS.supports('top: constant(safe-area-inset-top)')) {\n return 'constant';\n }\n return 'env';\n}();\nvar SafeAreaView = /*#__PURE__*/React.forwardRef((props, ref) => {\n var style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n ref: ref,\n style: [styles.root, style]\n }));\n});\nSafeAreaView.displayName = 'SafeAreaView';\nvar styles = StyleSheet.create({\n root: {\n paddingTop: cssFunction + \"(safe-area-inset-top)\",\n paddingRight: cssFunction + \"(safe-area-inset-right)\",\n paddingBottom: cssFunction + \"(safe-area-inset-bottom)\",\n paddingLeft: cssFunction + \"(safe-area-inset-left)\"\n }\n});\nexport default SafeAreaView;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"onScroll\", \"onTouchMove\", \"onWheel\", \"scrollEnabled\", \"scrollEventThrottle\", \"showsHorizontalScrollIndicator\", \"showsVerticalScrollIndicator\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport useMergeRefs from '../../modules/useMergeRefs';\nfunction normalizeScrollEvent(e) {\n return {\n nativeEvent: {\n contentOffset: {\n get x() {\n return e.target.scrollLeft;\n },\n get y() {\n return e.target.scrollTop;\n }\n },\n contentSize: {\n get height() {\n return e.target.scrollHeight;\n },\n get width() {\n return e.target.scrollWidth;\n }\n },\n layoutMeasurement: {\n get height() {\n return e.target.offsetHeight;\n },\n get width() {\n return e.target.offsetWidth;\n }\n }\n },\n timeStamp: Date.now()\n };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n var timeSinceLastTick = Date.now() - lastTick;\n return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\n\n/**\n * Encapsulates the Web-specific scroll throttling and disabling logic\n */\nvar ScrollViewBase = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var onScroll = props.onScroll,\n onTouchMove = props.onTouchMove,\n onWheel = props.onWheel,\n _props$scrollEnabled = props.scrollEnabled,\n scrollEnabled = _props$scrollEnabled === void 0 ? true : _props$scrollEnabled,\n _props$scrollEventThr = props.scrollEventThrottle,\n scrollEventThrottle = _props$scrollEventThr === void 0 ? 0 : _props$scrollEventThr,\n showsHorizontalScrollIndicator = props.showsHorizontalScrollIndicator,\n showsVerticalScrollIndicator = props.showsVerticalScrollIndicator,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var scrollState = React.useRef({\n isScrolling: false,\n scrollLastTick: 0\n });\n var scrollTimeout = React.useRef(null);\n var scrollRef = React.useRef(null);\n function createPreventableScrollHandler(handler) {\n return e => {\n if (scrollEnabled) {\n if (handler) {\n handler(e);\n }\n }\n };\n }\n function handleScroll(e) {\n e.stopPropagation();\n if (e.target === scrollRef.current) {\n e.persist();\n // A scroll happened, so the scroll resets the scrollend timeout.\n if (scrollTimeout.current != null) {\n clearTimeout(scrollTimeout.current);\n }\n scrollTimeout.current = setTimeout(() => {\n handleScrollEnd(e);\n }, 100);\n if (scrollState.current.isScrolling) {\n // Scroll last tick may have changed, check if we need to notify\n if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n handleScrollTick(e);\n }\n } else {\n // Weren't scrolling, so we must have just started\n handleScrollStart(e);\n }\n }\n }\n function handleScrollStart(e) {\n scrollState.current.isScrolling = true;\n handleScrollTick(e);\n }\n function handleScrollTick(e) {\n scrollState.current.scrollLastTick = Date.now();\n if (onScroll) {\n onScroll(normalizeScrollEvent(e));\n }\n }\n function handleScrollEnd(e) {\n scrollState.current.isScrolling = false;\n if (onScroll) {\n onScroll(normalizeScrollEvent(e));\n }\n }\n var hideScrollbar = showsHorizontalScrollIndicator === false || showsVerticalScrollIndicator === false;\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n onScroll: handleScroll,\n onTouchMove: createPreventableScrollHandler(onTouchMove),\n onWheel: createPreventableScrollHandler(onWheel),\n ref: useMergeRefs(scrollRef, forwardedRef),\n style: [style, !scrollEnabled && styles.scrollDisabled, hideScrollbar && styles.hideScrollbar]\n }));\n});\n\n// Chrome doesn't support e.preventDefault in this case; touch-action must be\n// used to disable scrolling.\n// https://developers.google.com/web/updates/2017/01/scrolling-intervention\nvar styles = StyleSheet.create({\n scrollDisabled: {\n overflowX: 'hidden',\n overflowY: 'hidden',\n touchAction: 'none'\n },\n hideScrollbar: {\n scrollbarWidth: 'none'\n }\n});\nexport default ScrollViewBase;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"contentContainerStyle\", \"horizontal\", \"onContentSizeChange\", \"refreshControl\", \"stickyHeaderIndices\", \"pagingEnabled\", \"forwardedRef\", \"keyboardDismissMode\", \"onScroll\", \"centerContent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Dimensions from '../Dimensions';\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nimport invariant from 'fbjs/lib/invariant';\nimport mergeRefs from '../../modules/mergeRefs';\nimport Platform from '../Platform';\nimport ScrollViewBase from './ScrollViewBase';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport React from 'react';\nimport warning from 'fbjs/lib/warning';\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nclass ScrollView extends React.Component {\n constructor() {\n super(...arguments);\n this._scrollNodeRef = null;\n this._innerViewRef = null;\n this.isTouching = false;\n this.lastMomentumScrollBeginTime = 0;\n this.lastMomentumScrollEndTime = 0;\n this.observedScrollSinceBecomingResponder = false;\n this.becameResponderWhileAnimating = false;\n this.scrollResponderHandleScrollShouldSetResponder = () => {\n return this.isTouching;\n };\n this.scrollResponderHandleStartShouldSetResponderCapture = e => {\n // First see if we want to eat taps while the keyboard is up\n // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n // if (!this.props.keyboardShouldPersistTaps &&\n // currentlyFocusedTextInput != null &&\n // e.target !== currentlyFocusedTextInput) {\n // return true;\n // }\n return this.scrollResponderIsAnimating();\n };\n this.scrollResponderHandleTerminationRequest = () => {\n return !this.observedScrollSinceBecomingResponder;\n };\n this.scrollResponderHandleTouchEnd = e => {\n var nativeEvent = e.nativeEvent;\n this.isTouching = nativeEvent.touches.length !== 0;\n this.props.onTouchEnd && this.props.onTouchEnd(e);\n };\n this.scrollResponderHandleResponderRelease = e => {\n this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n // By default scroll views will unfocus a textField\n // if another touch occurs outside of it\n var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.observedScrollSinceBecomingResponder && !this.becameResponderWhileAnimating) {\n this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n TextInputState.blurTextInput(currentlyFocusedTextInput);\n }\n };\n this.scrollResponderHandleScroll = e => {\n this.observedScrollSinceBecomingResponder = true;\n this.props.onScroll && this.props.onScroll(e);\n };\n this.scrollResponderHandleResponderGrant = e => {\n this.observedScrollSinceBecomingResponder = false;\n this.props.onResponderGrant && this.props.onResponderGrant(e);\n this.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n };\n this.scrollResponderHandleScrollBeginDrag = e => {\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n this.scrollResponderHandleScrollEndDrag = e => {\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n this.scrollResponderHandleMomentumScrollBegin = e => {\n this.lastMomentumScrollBeginTime = Date.now();\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n this.scrollResponderHandleMomentumScrollEnd = e => {\n this.lastMomentumScrollEndTime = Date.now();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n this.scrollResponderHandleTouchStart = e => {\n this.isTouching = true;\n this.props.onTouchStart && this.props.onTouchStart(e);\n };\n this.scrollResponderHandleTouchMove = e => {\n this.props.onTouchMove && this.props.onTouchMove(e);\n };\n this.scrollResponderIsAnimating = () => {\n var now = Date.now();\n var timeSinceLastMomentumScrollEnd = now - this.lastMomentumScrollEndTime;\n var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.lastMomentumScrollEndTime < this.lastMomentumScrollBeginTime;\n return isAnimating;\n };\n this.scrollResponderScrollTo = (x, y, animated) => {\n if (typeof x === 'number') {\n console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref = x || emptyObject;\n x = _ref.x;\n y = _ref.y;\n animated = _ref.animated;\n }\n var node = this.getScrollableNode();\n var left = x || 0;\n var top = y || 0;\n if (node != null) {\n if (typeof node.scroll === 'function') {\n node.scroll({\n top,\n left,\n behavior: !animated ? 'auto' : 'smooth'\n });\n } else {\n node.scrollLeft = left;\n node.scrollTop = top;\n }\n }\n };\n this.scrollResponderZoomTo = (rect, animated) => {\n if (Platform.OS !== 'ios') {\n invariant('zoomToRect is not implemented');\n }\n };\n this.scrollResponderScrollNativeHandleToKeyboard = (nodeHandle, additionalOffset, preventNegativeScrollOffset) => {\n this.additionalScrollOffset = additionalOffset || 0;\n this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n UIManager.measureLayout(nodeHandle, this.getInnerViewNode(), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n };\n this.scrollResponderInputMeasureAndScrollToKeyboard = (left, top, width, height) => {\n var keyboardScreenY = Dimensions.get('window').height;\n if (this.keyboardWillOpenTo) {\n keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n }\n var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset;\n\n // By default, this can scroll with negative offset, pulling the content\n // down so that the target component's bottom meets the keyboard's top.\n // If requested otherwise, cap the offset at 0 minimum to avoid content\n // shifting down.\n if (this.preventNegativeScrollOffset) {\n scrollOffsetY = Math.max(0, scrollOffsetY);\n }\n this.scrollResponderScrollTo({\n x: 0,\n y: scrollOffsetY,\n animated: true\n });\n this.additionalOffset = 0;\n this.preventNegativeScrollOffset = false;\n };\n this.scrollResponderKeyboardWillShow = e => {\n this.keyboardWillOpenTo = e;\n this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n };\n this.scrollResponderKeyboardWillHide = e => {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n };\n this.scrollResponderKeyboardDidShow = e => {\n // TODO(7693961): The event for DidShow is not available on iOS yet.\n // Use the one from WillShow and do not assign.\n if (e) {\n this.keyboardWillOpenTo = e;\n }\n this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n };\n this.scrollResponderKeyboardDidHide = e => {\n this.keyboardWillOpenTo = null;\n this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n };\n this.flashScrollIndicators = () => {\n this.scrollResponderFlashScrollIndicators();\n };\n this.getScrollResponder = () => {\n return this;\n };\n this.getScrollableNode = () => {\n return this._scrollNodeRef;\n };\n this.getInnerViewRef = () => {\n return this._innerViewRef;\n };\n this.getInnerViewNode = () => {\n return this._innerViewRef;\n };\n this.getNativeScrollRef = () => {\n return this._scrollNodeRef;\n };\n this.scrollTo = (y, x, animated) => {\n if (typeof y === 'number') {\n console.warn('`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, animated: true})` instead.');\n } else {\n var _ref2 = y || emptyObject;\n x = _ref2.x;\n y = _ref2.y;\n animated = _ref2.animated;\n }\n this.scrollResponderScrollTo({\n x: x || 0,\n y: y || 0,\n animated: animated !== false\n });\n };\n this.scrollToEnd = options => {\n // Default to true\n var animated = (options && options.animated) !== false;\n var horizontal = this.props.horizontal;\n var scrollResponderNode = this.getScrollableNode();\n var x = horizontal ? scrollResponderNode.scrollWidth : 0;\n var y = horizontal ? 0 : scrollResponderNode.scrollHeight;\n this.scrollResponderScrollTo({\n x,\n y,\n animated\n });\n };\n this._handleContentOnLayout = e => {\n var _e$nativeEvent$layout = e.nativeEvent.layout,\n width = _e$nativeEvent$layout.width,\n height = _e$nativeEvent$layout.height;\n this.props.onContentSizeChange(width, height);\n };\n this._handleScroll = e => {\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.onScroll && this.props.scrollEventThrottle == null) {\n console.log('You specified `onScroll` on a but not ' + '`scrollEventThrottle`. You will only receive one event. ' + 'Using `16` you get all the events but be aware that it may ' + \"cause frame drops, use a bigger number if you don't need as \" + 'much precision.');\n }\n }\n if (this.props.keyboardDismissMode === 'on-drag') {\n dismissKeyboard();\n }\n this.scrollResponderHandleScroll(e);\n };\n this._setInnerViewRef = node => {\n this._innerViewRef = node;\n };\n this._setScrollNodeRef = node => {\n this._scrollNodeRef = node;\n // ScrollView needs to add more methods to the hostNode in addition to those\n // added by `usePlatformMethods`. This is temporarily until an API like\n // `ScrollView.scrollTo(hostNode, { x, y })` is added to React Native.\n if (node != null) {\n node.getScrollResponder = this.getScrollResponder;\n node.getInnerViewNode = this.getInnerViewNode;\n node.getInnerViewRef = this.getInnerViewRef;\n node.getNativeScrollRef = this.getNativeScrollRef;\n node.getScrollableNode = this.getScrollableNode;\n node.scrollTo = this.scrollTo;\n node.scrollToEnd = this.scrollToEnd;\n node.flashScrollIndicators = this.flashScrollIndicators;\n node.scrollResponderZoomTo = this.scrollResponderZoomTo;\n node.scrollResponderScrollNativeHandleToKeyboard = this.scrollResponderScrollNativeHandleToKeyboard;\n }\n var ref = mergeRefs(this.props.forwardedRef);\n ref(node);\n };\n }\n /**\n * Merely touch starting is not sufficient for a scroll view to become the\n * responder. Being the \"responder\" means that the very next touch move/end\n * event will result in an action/movement.\n *\n * Invoke this from an `onStartShouldSetResponder` event.\n *\n * `onStartShouldSetResponder` is used when the next move/end will trigger\n * some UI movement/action, but when you want to yield priority to views\n * nested inside of the view.\n *\n * There may be some cases where scroll views actually should return `true`\n * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n * that gives priority to nested views.\n *\n * - If a single tap on the scroll view triggers an action such as\n * recentering a map style view yet wants to give priority to interaction\n * views inside (such as dropped pins or labels), then we would return true\n * from this method when there is a single touch.\n *\n * - Similar to the previous case, if a two finger \"tap\" should trigger a\n * zoom, we would check the `touches` count, and if `>= 2`, we would return\n * true.\n *\n */\n scrollResponderHandleStartShouldSetResponder() {\n return false;\n }\n\n /**\n * There are times when the scroll view wants to become the responder\n * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n * that *doesn't* give priority to nested views (hence the capture phase):\n *\n * - Currently animating.\n * - Tapping anywhere that is not the focused input, while the keyboard is\n * up (which should dismiss the keyboard).\n *\n * Invoke this from an `onStartShouldSetResponderCapture` event.\n */\n\n /**\n * Invoke this from an `onResponderReject` event.\n *\n * Some other element is not yielding its role as responder. Normally, we'd\n * just disable the `UIScrollView`, but a touch has already began on it, the\n * `UIScrollView` will not accept being disabled after that. The easiest\n * solution for now is to accept the limitation of disallowing this\n * altogether. To improve this, find a way to disable the `UIScrollView` after\n * a touch has already started.\n */\n scrollResponderHandleResponderReject() {\n warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n }\n\n /**\n * We will allow the scroll view to give up its lock iff it acquired the lock\n * during an animation. This is a very useful default that happens to satisfy\n * many common user experiences.\n *\n * - Stop a scroll on the left edge, then turn that into an outer view's\n * backswipe.\n * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n * view dismiss.\n * - However, without catching the scroll view mid-bounce (while it is\n * motionless), if you drag far enough for the scroll view to become\n * responder (and therefore drag the scroll view a bit), any backswipe\n * navigation of a swipe gesture higher in the view hierarchy, should be\n * rejected.\n */\n\n /**\n * Displays the scroll indicators momentarily.\n */\n scrollResponderFlashScrollIndicators() {}\n\n /**\n * This method should be used as the callback to onFocus in a TextInputs'\n * parent view. Note that any module using this mixin needs to return\n * the parent view's ref in getScrollViewRef() in order to use this method.\n * @param {any} nodeHandle The TextInput node handle\n * @param {number} additionalOffset The scroll view's top \"contentInset\".\n * Default is 0.\n * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n * down to make it meet the keyboard's top. Default is false.\n */\n\n scrollResponderTextInputFocusError(e) {\n console.error('Error measuring text field: ', e);\n }\n\n /**\n * Warning, this may be called several times for a single keyboard opening.\n * It's best to store the information in this method and then take any action\n * at a later point (either in `keyboardDidShow` or other).\n *\n * Here's the order that events occur in:\n * - focus\n * - willShow {startCoordinates, endCoordinates} several times\n * - didShow several times\n * - blur\n * - willHide {startCoordinates, endCoordinates} several times\n * - didHide several times\n *\n * The `ScrollResponder` providesModule callbacks for each of these events.\n * Even though any user could have easily listened to keyboard events\n * themselves, using these `props` callbacks ensures that ordering of events\n * is consistent - and not dependent on the order that the keyboard events are\n * subscribed to. This matters when telling the scroll view to scroll to where\n * the keyboard is headed - the scroll responder better have been notified of\n * the keyboard destination before being instructed to scroll to where the\n * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n * will work.\n *\n * WARNING: These callbacks will fire even if a keyboard is displayed in a\n * different navigation pane. Filter out the events to determine if they are\n * relevant to you. (For example, only if you receive these callbacks after\n * you had explicitly focused a node etc).\n */\n\n render() {\n var _this$props = this.props,\n contentContainerStyle = _this$props.contentContainerStyle,\n horizontal = _this$props.horizontal,\n onContentSizeChange = _this$props.onContentSizeChange,\n refreshControl = _this$props.refreshControl,\n stickyHeaderIndices = _this$props.stickyHeaderIndices,\n pagingEnabled = _this$props.pagingEnabled,\n forwardedRef = _this$props.forwardedRef,\n keyboardDismissMode = _this$props.keyboardDismissMode,\n onScroll = _this$props.onScroll,\n centerContent = _this$props.centerContent,\n other = _objectWithoutPropertiesLoose(_this$props, _excluded);\n if (process.env.NODE_ENV !== 'production' && this.props.style) {\n var style = StyleSheet.flatten(this.props.style);\n var childLayoutProps = ['alignItems', 'justifyContent'].filter(prop => style && style[prop] !== undefined);\n invariant(childLayoutProps.length === 0, \"ScrollView child layout (\" + JSON.stringify(childLayoutProps) + \") \" + 'must be applied through the contentContainerStyle prop.');\n }\n var contentSizeChangeProps = {};\n if (onContentSizeChange) {\n contentSizeChangeProps = {\n onLayout: this._handleContentOnLayout\n };\n }\n var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n var children = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(this.props.children, (child, i) => {\n var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n if (child != null && (isSticky || pagingEnabled)) {\n return /*#__PURE__*/React.createElement(View, {\n style: [isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild]\n }, child);\n } else {\n return child;\n }\n }) : this.props.children;\n var contentContainer = /*#__PURE__*/React.createElement(View, _extends({}, contentSizeChangeProps, {\n children: children,\n collapsable: false,\n ref: this._setInnerViewRef,\n style: [horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle]\n }));\n var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n var props = _objectSpread(_objectSpread({}, other), {}, {\n style: [baseStyle, pagingEnabled && pagingEnabledStyle, this.props.style],\n onTouchStart: this.scrollResponderHandleTouchStart,\n onTouchMove: this.scrollResponderHandleTouchMove,\n onTouchEnd: this.scrollResponderHandleTouchEnd,\n onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag,\n onScrollEndDrag: this.scrollResponderHandleScrollEndDrag,\n onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin,\n onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd,\n onStartShouldSetResponder: this.scrollResponderHandleStartShouldSetResponder,\n onStartShouldSetResponderCapture: this.scrollResponderHandleStartShouldSetResponderCapture,\n onScrollShouldSetResponder: this.scrollResponderHandleScrollShouldSetResponder,\n onScroll: this._handleScroll,\n onResponderGrant: this.scrollResponderHandleResponderGrant,\n onResponderTerminationRequest: this.scrollResponderHandleTerminationRequest,\n onResponderTerminate: this.scrollResponderHandleTerminate,\n onResponderRelease: this.scrollResponderHandleResponderRelease,\n onResponderReject: this.scrollResponderHandleResponderReject\n });\n var ScrollViewClass = ScrollViewBase;\n invariant(ScrollViewClass !== undefined, 'ScrollViewClass must not be undefined');\n var scrollView = /*#__PURE__*/React.createElement(ScrollViewClass, _extends({}, props, {\n ref: this._setScrollNodeRef\n }), contentContainer);\n if (refreshControl) {\n return /*#__PURE__*/React.cloneElement(refreshControl, {\n style: props.style\n }, scrollView);\n }\n return scrollView;\n }\n}\nvar commonStyle = {\n flexGrow: 1,\n flexShrink: 1,\n // Enable hardware compositing in modern browsers.\n // Creates a new layer with its own backing surface that can significantly\n // improve scroll performance.\n transform: 'translateZ(0)',\n // iOS native scrolling\n WebkitOverflowScrolling: 'touch'\n};\nvar styles = StyleSheet.create({\n baseVertical: _objectSpread(_objectSpread({}, commonStyle), {}, {\n flexDirection: 'column',\n overflowX: 'hidden',\n overflowY: 'auto'\n }),\n baseHorizontal: _objectSpread(_objectSpread({}, commonStyle), {}, {\n flexDirection: 'row',\n overflowX: 'auto',\n overflowY: 'hidden'\n }),\n contentContainerHorizontal: {\n flexDirection: 'row'\n },\n contentContainerCenterContent: {\n justifyContent: 'center',\n flexGrow: 1\n },\n stickyHeader: {\n position: 'sticky',\n top: 0,\n zIndex: 10\n },\n pagingEnabledHorizontal: {\n scrollSnapType: 'x mandatory'\n },\n pagingEnabledVertical: {\n scrollSnapType: 'y mandatory'\n },\n pagingEnabledChild: {\n scrollSnapAlign: 'start'\n }\n});\nvar ForwardedScrollView = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n return /*#__PURE__*/React.createElement(ScrollView, _extends({}, props, {\n forwardedRef: forwardedRef\n }));\n});\nForwardedScrollView.displayName = 'ScrollView';\nexport default ForwardedScrollView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport SectionList from '../../vendor/react-native/SectionList';\nexport default SectionList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass Share {\n static share(content, options) {\n if (options === void 0) {\n options = {};\n }\n invariant(typeof content === 'object' && content !== null, 'Content to share must be a valid object');\n invariant(typeof content.url === 'string' || typeof content.message === 'string', 'At least one of URL and message is required');\n invariant(typeof options === 'object' && options !== null, 'Options must be a valid object');\n invariant(!content.title || typeof content.title === 'string', 'Invalid title: title should be a string.');\n if (window.navigator.share !== undefined) {\n return window.navigator.share({\n title: content.title,\n text: content.message,\n url: content.url\n });\n } else {\n return Promise.reject(new Error('Share is not supported in this browser'));\n }\n }\n\n /**\n * The content was successfully shared.\n */\n static get sharedAction() {\n return 'sharedAction';\n }\n\n /**\n * The dialog has been dismissed.\n * @platform ios\n */\n static get dismissedAction() {\n return 'dismissedAction';\n }\n}\nexport default Share;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar emptyFunction = () => {};\nfunction StatusBar() {\n return null;\n}\nStatusBar.setBackgroundColor = emptyFunction;\nStatusBar.setBarStyle = emptyFunction;\nStatusBar.setHidden = emptyFunction;\nStatusBar.setNetworkActivityIndicatorVisible = emptyFunction;\nStatusBar.setTranslucent = emptyFunction;\nexport default StatusBar;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport canUseDOM from '../../../modules/canUseDom';\n/**\n * The browser implements the CSS cascade, where the order of properties is a\n * factor in determining which styles to paint. React Native is different. It\n * gives giving precedence to the more specific style property. For example,\n * the value of `paddingTop` takes precedence over that of `padding`.\n *\n * This module creates mutally exclusive style declarations by expanding all of\n * React Native's supported shortform properties (e.g. `padding`) to their\n * longfrom equivalents.\n */\n\nvar emptyObject = {};\nvar supportsCSS3TextDecoration = !canUseDOM || window.CSS != null && window.CSS.supports != null && (window.CSS.supports('text-decoration-line', 'none') || window.CSS.supports('-webkit-text-decoration-line', 'none'));\nvar MONOSPACE_FONT_STACK = 'monospace,monospace';\nvar SYSTEM_FONT_STACK = '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif';\nvar STYLE_SHORT_FORM_EXPANSIONS = {\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n borderInlineColor: ['borderRightColor', 'borderLeftColor'],\n borderRadius: ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n borderInlineStyle: ['borderRightStyle', 'borderLeftStyle'],\n borderWidth: ['borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'],\n borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n borderInlineWidth: ['borderRightWidth', 'borderLeftWidth'],\n insetBlock: ['top', 'bottom'],\n insetInline: ['left', 'right'],\n marginBlock: ['marginTop', 'marginBottom'],\n marginInline: ['marginRight', 'marginLeft'],\n paddingBlock: ['paddingTop', 'paddingBottom'],\n paddingInline: ['paddingRight', 'paddingLeft'],\n overflow: ['overflowX', 'overflowY'],\n overscrollBehavior: ['overscrollBehaviorX', 'overscrollBehaviorY'],\n borderBlockStartColor: ['borderTopColor'],\n borderBlockStartStyle: ['borderTopStyle'],\n borderBlockStartWidth: ['borderTopWidth'],\n borderBlockEndColor: ['borderBottomColor'],\n borderBlockEndStyle: ['borderBottomStyle'],\n borderBlockEndWidth: ['borderBottomWidth'],\n //borderInlineStartColor: ['borderLeftColor'],\n //borderInlineStartStyle: ['borderLeftStyle'],\n //borderInlineStartWidth: ['borderLeftWidth'],\n //borderInlineEndColor: ['borderRightColor'],\n //borderInlineEndStyle: ['borderRightStyle'],\n //borderInlineEndWidth: ['borderRightWidth'],\n borderEndStartRadius: ['borderBottomLeftRadius'],\n borderEndEndRadius: ['borderBottomRightRadius'],\n borderStartStartRadius: ['borderTopLeftRadius'],\n borderStartEndRadius: ['borderTopRightRadius'],\n insetBlockEnd: ['bottom'],\n insetBlockStart: ['top'],\n //insetInlineEnd: ['right'],\n //insetInlineStart: ['left'],\n marginBlockStart: ['marginTop'],\n marginBlockEnd: ['marginBottom'],\n //marginInlineStart: ['marginLeft'],\n //marginInlineEnd: ['marginRight'],\n paddingBlockStart: ['paddingTop'],\n paddingBlockEnd: ['paddingBottom']\n //paddingInlineStart: ['marginLeft'],\n //paddingInlineEnd: ['marginRight'],\n};\n\n/**\n * Reducer\n */\n\nvar createReactDOMStyle = (style, isInline) => {\n if (!style) {\n return emptyObject;\n }\n var resolvedStyle = {};\n var _loop = function _loop() {\n var value = style[prop];\n if (\n // Ignore everything with a null value\n value == null) {\n return \"continue\";\n }\n if (prop === 'backgroundClip') {\n // TODO: remove once this issue is fixed\n // https://github.com/rofrischmann/inline-style-prefixer/issues/159\n if (value === 'text') {\n resolvedStyle.backgroundClip = value;\n resolvedStyle.WebkitBackgroundClip = value;\n }\n } else if (prop === 'flex') {\n if (value === -1) {\n resolvedStyle.flexGrow = 0;\n resolvedStyle.flexShrink = 1;\n resolvedStyle.flexBasis = 'auto';\n } else {\n resolvedStyle.flex = value;\n }\n } else if (prop === 'font') {\n resolvedStyle[prop] = value.replace('System', SYSTEM_FONT_STACK);\n } else if (prop === 'fontFamily') {\n if (value.indexOf('System') > -1) {\n var stack = value.split(/,\\s*/);\n stack[stack.indexOf('System')] = SYSTEM_FONT_STACK;\n resolvedStyle[prop] = stack.join(',');\n } else if (value === 'monospace') {\n resolvedStyle[prop] = MONOSPACE_FONT_STACK;\n } else {\n resolvedStyle[prop] = value;\n }\n } else if (prop === 'textDecorationLine') {\n // use 'text-decoration' for browsers that only support CSS2\n // text-decoration (e.g., IE, Edge)\n if (!supportsCSS3TextDecoration) {\n resolvedStyle.textDecoration = value;\n } else {\n resolvedStyle.textDecorationLine = value;\n }\n } else if (prop === 'writingDirection') {\n resolvedStyle.direction = value;\n } else {\n var _value = normalizeValueWithProperty(style[prop], prop);\n var longFormProperties = STYLE_SHORT_FORM_EXPANSIONS[prop];\n if (isInline && prop === 'inset') {\n if (style.insetInline == null) {\n resolvedStyle.left = _value;\n resolvedStyle.right = _value;\n }\n if (style.insetBlock == null) {\n resolvedStyle.top = _value;\n resolvedStyle.bottom = _value;\n }\n } else if (isInline && prop === 'margin') {\n if (style.marginInline == null) {\n resolvedStyle.marginLeft = _value;\n resolvedStyle.marginRight = _value;\n }\n if (style.marginBlock == null) {\n resolvedStyle.marginTop = _value;\n resolvedStyle.marginBottom = _value;\n }\n } else if (isInline && prop === 'padding') {\n if (style.paddingInline == null) {\n resolvedStyle.paddingLeft = _value;\n resolvedStyle.paddingRight = _value;\n }\n if (style.paddingBlock == null) {\n resolvedStyle.paddingTop = _value;\n resolvedStyle.paddingBottom = _value;\n }\n } else if (longFormProperties) {\n longFormProperties.forEach((longForm, i) => {\n // The value of any longform property in the original styles takes\n // precedence over the shortform's value.\n if (style[longForm] == null) {\n resolvedStyle[longForm] = _value;\n }\n });\n } else {\n resolvedStyle[prop] = _value;\n }\n }\n };\n for (var prop in style) {\n var _ret = _loop();\n if (_ret === \"continue\") continue;\n }\n return resolvedStyle;\n};\nexport default createReactDOMStyle;","/* eslint-disable */\n\n/**\n * JS Implementation of MurmurHash2\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n *\n * \n */\n\nfunction murmurhash2_32_gc(str, seed) {\n var l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n while (l >= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n k ^= k >>> 24;\n k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n l -= 4;\n ++i;\n }\n switch (l) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n }\n h ^= h >>> 13;\n h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n h ^= h >>> 15;\n return h >>> 0;\n}\nvar hash = str => murmurhash2_32_gc(str, 1).toString(36);\nexport default hash;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase();\n}\nfunction hyphenateStyleName(name) {\n if (name in cache) {\n return cache[name];\n }\n var hName = name.replace(uppercasePattern, toHyphenLower);\n return cache[name] = msPattern.test(hName) ? '-' + hName : hName;\n}\nexport default hyphenateStyleName;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationKeyframes\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createReactDOMStyle from './createReactDOMStyle';\nimport hash from './hash';\nimport hyphenateStyleName from './hyphenateStyleName';\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport prefixStyles from '../../../modules/prefixStyles';\nvar cache = new Map();\nvar emptyObject = {};\nvar classicGroup = 1;\nvar atomicGroup = 3;\nvar customGroup = {\n borderColor: 2,\n borderRadius: 2,\n borderStyle: 2,\n borderWidth: 2,\n display: 2,\n flex: 2,\n inset: 2,\n margin: 2,\n overflow: 2,\n overscrollBehavior: 2,\n padding: 2,\n insetBlock: 2.1,\n insetInline: 2.1,\n marginInline: 2.1,\n marginBlock: 2.1,\n paddingInline: 2.1,\n paddingBlock: 2.1,\n borderBlockStartColor: 2.2,\n borderBlockStartStyle: 2.2,\n borderBlockStartWidth: 2.2,\n borderBlockEndColor: 2.2,\n borderBlockEndStyle: 2.2,\n borderBlockEndWidth: 2.2,\n borderInlineStartColor: 2.2,\n borderInlineStartStyle: 2.2,\n borderInlineStartWidth: 2.2,\n borderInlineEndColor: 2.2,\n borderInlineEndStyle: 2.2,\n borderInlineEndWidth: 2.2,\n borderEndStartRadius: 2.2,\n borderEndEndRadius: 2.2,\n borderStartStartRadius: 2.2,\n borderStartEndRadius: 2.2,\n insetBlockEnd: 2.2,\n insetBlockStart: 2.2,\n insetInlineEnd: 2.2,\n insetInlineStart: 2.2,\n marginBlockStart: 2.2,\n marginBlockEnd: 2.2,\n marginInlineStart: 2.2,\n marginInlineEnd: 2.2,\n paddingBlockStart: 2.2,\n paddingBlockEnd: 2.2,\n paddingInlineStart: 2.2,\n paddingInlineEnd: 2.2\n};\nvar borderTopLeftRadius = 'borderTopLeftRadius';\nvar borderTopRightRadius = 'borderTopRightRadius';\nvar borderBottomLeftRadius = 'borderBottomLeftRadius';\nvar borderBottomRightRadius = 'borderBottomRightRadius';\nvar borderLeftColor = 'borderLeftColor';\nvar borderLeftStyle = 'borderLeftStyle';\nvar borderLeftWidth = 'borderLeftWidth';\nvar borderRightColor = 'borderRightColor';\nvar borderRightStyle = 'borderRightStyle';\nvar borderRightWidth = 'borderRightWidth';\nvar right = 'right';\nvar marginLeft = 'marginLeft';\nvar marginRight = 'marginRight';\nvar paddingLeft = 'paddingLeft';\nvar paddingRight = 'paddingRight';\nvar left = 'left';\n\n// Map of LTR property names to their BiDi equivalent.\nvar PROPERTIES_FLIP = {\n [borderTopLeftRadius]: borderTopRightRadius,\n [borderTopRightRadius]: borderTopLeftRadius,\n [borderBottomLeftRadius]: borderBottomRightRadius,\n [borderBottomRightRadius]: borderBottomLeftRadius,\n [borderLeftColor]: borderRightColor,\n [borderLeftStyle]: borderRightStyle,\n [borderLeftWidth]: borderRightWidth,\n [borderRightColor]: borderLeftColor,\n [borderRightStyle]: borderLeftStyle,\n [borderRightWidth]: borderLeftWidth,\n [left]: right,\n [marginLeft]: marginRight,\n [marginRight]: marginLeft,\n [paddingLeft]: paddingRight,\n [paddingRight]: paddingLeft,\n [right]: left\n};\n\n// Map of I18N property names to their LTR equivalent.\nvar PROPERTIES_I18N = {\n borderStartStartRadius: borderTopLeftRadius,\n borderStartEndRadius: borderTopRightRadius,\n borderEndStartRadius: borderBottomLeftRadius,\n borderEndEndRadius: borderBottomRightRadius,\n borderInlineStartColor: borderLeftColor,\n borderInlineStartStyle: borderLeftStyle,\n borderInlineStartWidth: borderLeftWidth,\n borderInlineEndColor: borderRightColor,\n borderInlineEndStyle: borderRightStyle,\n borderInlineEndWidth: borderRightWidth,\n insetInlineEnd: right,\n insetInlineStart: left,\n marginInlineStart: marginLeft,\n marginInlineEnd: marginRight,\n paddingInlineStart: paddingLeft,\n paddingInlineEnd: paddingRight\n};\nvar PROPERTIES_VALUE = ['clear', 'float', 'textAlign'];\nexport function atomic(style) {\n var compiledStyle = {\n $$css: true\n };\n var compiledRules = [];\n function atomicCompile(srcProp, prop, value) {\n var valueString = stringifyValueWithProperty(value, prop);\n var cacheKey = prop + valueString;\n var cachedResult = cache.get(cacheKey);\n var identifier;\n if (cachedResult != null) {\n identifier = cachedResult[0];\n compiledRules.push(cachedResult[1]);\n } else {\n var v = srcProp !== prop ? cacheKey : valueString;\n identifier = createIdentifier('r', srcProp, v);\n var order = customGroup[srcProp] || atomicGroup;\n var rules = createAtomicRules(identifier, prop, value);\n var orderedRules = [rules, order];\n compiledRules.push(orderedRules);\n cache.set(cacheKey, [identifier, orderedRules]);\n }\n return identifier;\n }\n Object.keys(style).sort().forEach(srcProp => {\n var value = style[srcProp];\n if (value != null) {\n var localizeableValue;\n // BiDi flip values\n if (PROPERTIES_VALUE.indexOf(srcProp) > -1) {\n var _left = atomicCompile(srcProp, srcProp, 'left');\n var _right = atomicCompile(srcProp, srcProp, 'right');\n if (value === 'start') {\n localizeableValue = [_left, _right];\n } else if (value === 'end') {\n localizeableValue = [_right, _left];\n }\n }\n // BiDi flip properties\n var propPolyfill = PROPERTIES_I18N[srcProp];\n if (propPolyfill != null) {\n var ltr = atomicCompile(srcProp, propPolyfill, value);\n var rtl = atomicCompile(srcProp, PROPERTIES_FLIP[propPolyfill], value);\n localizeableValue = [ltr, rtl];\n }\n // BiDi flip transitionProperty value\n if (srcProp === 'transitionProperty') {\n var values = Array.isArray(value) ? value : [value];\n var polyfillIndices = [];\n for (var i = 0; i < values.length; i++) {\n var val = values[i];\n if (typeof val === 'string' && PROPERTIES_I18N[val] != null) {\n polyfillIndices.push(i);\n }\n }\n if (polyfillIndices.length > 0) {\n var ltrPolyfillValues = [...values];\n var rtlPolyfillValues = [...values];\n polyfillIndices.forEach(i => {\n var ltrVal = ltrPolyfillValues[i];\n if (typeof ltrVal === 'string') {\n var ltrPolyfill = PROPERTIES_I18N[ltrVal];\n var rtlPolyfill = PROPERTIES_FLIP[ltrPolyfill];\n ltrPolyfillValues[i] = ltrPolyfill;\n rtlPolyfillValues[i] = rtlPolyfill;\n var _ltr = atomicCompile(srcProp, srcProp, ltrPolyfillValues);\n var _rtl = atomicCompile(srcProp, srcProp, rtlPolyfillValues);\n localizeableValue = [_ltr, _rtl];\n }\n });\n }\n }\n if (localizeableValue == null) {\n localizeableValue = atomicCompile(srcProp, srcProp, value);\n } else {\n compiledStyle['$$css$localize'] = true;\n }\n compiledStyle[srcProp] = localizeableValue;\n }\n });\n return [compiledStyle, compiledRules];\n}\n\n/**\n * Compile simple style object to classic CSS rules.\n * No support for 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function classic(style, name) {\n var compiledStyle = {\n $$css: true\n };\n var compiledRules = [];\n var animationKeyframes = style.animationKeyframes,\n rest = _objectWithoutPropertiesLoose(style, _excluded);\n var identifier = createIdentifier('css', name, JSON.stringify(style));\n var selector = \".\" + identifier;\n var animationName;\n if (animationKeyframes != null) {\n var _processKeyframesValu = processKeyframesValue(animationKeyframes),\n animationNames = _processKeyframesValu[0],\n keyframesRules = _processKeyframesValu[1];\n animationName = animationNames.join(',');\n compiledRules.push(...keyframesRules);\n }\n var block = createDeclarationBlock(_objectSpread(_objectSpread({}, rest), {}, {\n animationName\n }));\n compiledRules.push(\"\" + selector + block);\n compiledStyle[identifier] = identifier;\n return [compiledStyle, [[compiledRules, classicGroup]]];\n}\n\n/**\n * Compile simple style object to inline DOM styles.\n * No support for 'animationKeyframes', 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function inline(originalStyle, isRTL) {\n var style = originalStyle || emptyObject;\n var frozenProps = {};\n var nextStyle = {};\n var _loop = function _loop() {\n var originalValue = style[originalProp];\n var prop = originalProp;\n var value = originalValue;\n if (!Object.prototype.hasOwnProperty.call(style, originalProp) || originalValue == null) {\n return \"continue\";\n }\n\n // BiDi flip values\n if (PROPERTIES_VALUE.indexOf(originalProp) > -1) {\n if (originalValue === 'start') {\n value = isRTL ? 'right' : 'left';\n } else if (originalValue === 'end') {\n value = isRTL ? 'left' : 'right';\n }\n }\n // BiDi flip properties\n var propPolyfill = PROPERTIES_I18N[originalProp];\n if (propPolyfill != null) {\n prop = isRTL ? PROPERTIES_FLIP[propPolyfill] : propPolyfill;\n }\n // BiDi flip transitionProperty value\n if (originalProp === 'transitionProperty') {\n // $FlowFixMe\n var originalValues = Array.isArray(originalValue) ? originalValue : [originalValue];\n originalValues.forEach((val, i) => {\n if (typeof val === 'string') {\n var valuePolyfill = PROPERTIES_I18N[val];\n if (valuePolyfill != null) {\n originalValues[i] = isRTL ? PROPERTIES_FLIP[valuePolyfill] : valuePolyfill;\n value = originalValues.join(' ');\n }\n }\n });\n }\n\n // Create finalized style\n if (!frozenProps[prop]) {\n nextStyle[prop] = value;\n }\n if (prop === originalProp) {\n frozenProps[prop] = true;\n }\n\n // if (PROPERTIES_I18N.hasOwnProperty(originalProp)) {\n // frozenProps[prop] = true;\n //}\n };\n for (var originalProp in style) {\n var _ret = _loop();\n if (_ret === \"continue\") continue;\n }\n return createReactDOMStyle(nextStyle, true);\n}\n\n/**\n * Create a value string that normalizes different input values with a common\n * output.\n */\nexport function stringifyValueWithProperty(value, property) {\n // e.g., 0 => '0px', 'black' => 'rgba(0,0,0,1)'\n var normalizedValue = normalizeValueWithProperty(value, property);\n return typeof normalizedValue !== 'string' ? JSON.stringify(normalizedValue || '') : normalizedValue;\n}\n\n/**\n * Create the Atomic CSS rules needed for a given StyleSheet rule.\n * Translates StyleSheet declarations to CSS.\n */\nfunction createAtomicRules(identifier, property, value) {\n var rules = [];\n var selector = \".\" + identifier;\n\n // Handle non-standard properties and object values that require multiple\n // CSS rules to be created.\n switch (property) {\n case 'animationKeyframes':\n {\n var _processKeyframesValu2 = processKeyframesValue(value),\n animationNames = _processKeyframesValu2[0],\n keyframesRules = _processKeyframesValu2[1];\n var block = createDeclarationBlock({\n animationName: animationNames.join(',')\n });\n rules.push(\"\" + selector + block, ...keyframesRules);\n break;\n }\n\n // Equivalent to using '::placeholder'\n case 'placeholderTextColor':\n {\n var _block = createDeclarationBlock({\n color: value,\n opacity: 1\n });\n rules.push(selector + \"::-webkit-input-placeholder\" + _block, selector + \"::-moz-placeholder\" + _block, selector + \":-ms-input-placeholder\" + _block, selector + \"::placeholder\" + _block);\n break;\n }\n\n // Polyfill for additional 'pointer-events' values\n // See d13f78622b233a0afc0c7a200c0a0792c8ca9e58\n case 'pointerEvents':\n {\n var finalValue = value;\n if (value === 'auto' || value === 'box-only') {\n finalValue = 'auto!important';\n if (value === 'box-only') {\n var _block2 = createDeclarationBlock({\n pointerEvents: 'none'\n });\n rules.push(selector + \">*\" + _block2);\n }\n } else if (value === 'none' || value === 'box-none') {\n finalValue = 'none!important';\n if (value === 'box-none') {\n var _block3 = createDeclarationBlock({\n pointerEvents: 'auto'\n });\n rules.push(selector + \">*\" + _block3);\n }\n }\n var _block4 = createDeclarationBlock({\n pointerEvents: finalValue\n });\n rules.push(\"\" + selector + _block4);\n break;\n }\n\n // Polyfill for draft spec\n // https://drafts.csswg.org/css-scrollbars-1/\n case 'scrollbarWidth':\n {\n if (value === 'none') {\n rules.push(selector + \"::-webkit-scrollbar{display:none}\");\n }\n var _block5 = createDeclarationBlock({\n scrollbarWidth: value\n });\n rules.push(\"\" + selector + _block5);\n break;\n }\n default:\n {\n var _block6 = createDeclarationBlock({\n [property]: value\n });\n rules.push(\"\" + selector + _block6);\n break;\n }\n }\n return rules;\n}\n\n/**\n * Creates a CSS declaration block from a StyleSheet object.\n */\nfunction createDeclarationBlock(style) {\n var domStyle = prefixStyles(createReactDOMStyle(style));\n var declarationsString = Object.keys(domStyle).map(property => {\n var value = domStyle[property];\n var prop = hyphenateStyleName(property);\n // The prefixer may return an array of values:\n // { display: [ '-webkit-flex', 'flex' ] }\n // to represent \"fallback\" declarations\n // { display: -webkit-flex; display: flex; }\n if (Array.isArray(value)) {\n return value.map(v => prop + \":\" + v).join(';');\n } else {\n return prop + \":\" + value;\n }\n })\n // Once properties are hyphenated, this will put the vendor\n // prefixed and short-form properties first in the list.\n .sort().join(';');\n return \"{\" + declarationsString + \";}\";\n}\n\n/**\n * An identifier is associated with a unique set of styles.\n */\nfunction createIdentifier(prefix, name, key) {\n var hashedString = hash(name + key);\n return process.env.NODE_ENV !== 'production' ? prefix + \"-\" + name + \"-\" + hashedString : prefix + \"-\" + hashedString;\n}\n\n/**\n * Create individual CSS keyframes rules.\n */\nfunction createKeyframes(keyframes) {\n var prefixes = ['-webkit-', ''];\n var identifier = createIdentifier('r', 'animation', JSON.stringify(keyframes));\n var steps = '{' + Object.keys(keyframes).map(stepName => {\n var rule = keyframes[stepName];\n var block = createDeclarationBlock(rule);\n return \"\" + stepName + block;\n }).join('') + '}';\n var rules = prefixes.map(prefix => {\n return \"@\" + prefix + \"keyframes \" + identifier + steps;\n });\n return [identifier, rules];\n}\n\n/**\n * Create CSS keyframes rules and names from a StyleSheet keyframes object.\n */\nfunction processKeyframesValue(keyframesValue) {\n if (typeof keyframesValue === 'number') {\n throw new Error(\"Invalid CSS keyframes type: \" + typeof keyframesValue);\n }\n var animationNames = [];\n var rules = [];\n var value = Array.isArray(keyframesValue) ? keyframesValue : [keyframesValue];\n value.forEach(keyframes => {\n if (typeof keyframes === 'string') {\n // Support external animation libraries (identifiers only)\n animationNames.push(keyframes);\n } else {\n // Create rules for each of the keyframes\n var _createKeyframes = createKeyframes(keyframes),\n identifier = _createKeyframes[0],\n keyframesRules = _createKeyframes[1];\n animationNames.push(identifier);\n rules.push(...keyframesRules);\n }\n });\n return [animationNames, rules];\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isWebColor from '../../../modules/isWebColor';\nimport processColor from '../../../exports/processColor';\nvar normalizeColor = function normalizeColor(color, opacity) {\n if (opacity === void 0) {\n opacity = 1;\n }\n if (color == null) return;\n if (typeof color === 'string' && isWebColor(color)) {\n return color;\n }\n var colorInt = processColor(color);\n if (colorInt != null) {\n var r = colorInt >> 16 & 255;\n var g = colorInt >> 8 & 255;\n var b = colorInt & 255;\n var a = (colorInt >> 24 & 255) / 255;\n var alpha = (a * opacity).toFixed(2);\n return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + alpha + \")\";\n }\n};\nexport default normalizeColor;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport unitlessNumbers from './unitlessNumbers';\nimport normalizeColor from './normalizeColor';\nvar colorProps = {\n backgroundColor: true,\n borderColor: true,\n borderTopColor: true,\n borderRightColor: true,\n borderBottomColor: true,\n borderLeftColor: true,\n color: true,\n shadowColor: true,\n textDecorationColor: true,\n textShadowColor: true\n};\nexport default function normalizeValueWithProperty(value, property) {\n var returnValue = value;\n if ((property == null || !unitlessNumbers[property]) && typeof value === 'number') {\n returnValue = value + \"px\";\n } else if (property != null && colorProps[property]) {\n returnValue = normalizeColor(value);\n }\n return returnValue;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n animationIterationCount: true,\n aspectRatio: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexOrder: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n fontWeight: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowGap: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnGap: true,\n gridColumnStart: true,\n lineClamp: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true,\n // transform types\n scale: true,\n scaleX: true,\n scaleY: true,\n scaleZ: true,\n // RN properties\n shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n prefixes.forEach(prefix => {\n unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../../modules/canUseDom';\n\n// $FlowFixMe: HTMLStyleElement is incorrectly typed - https://github.com/facebook/flow/issues/2696\nexport default function createCSSStyleSheet(id, rootNode, textContent) {\n if (canUseDOM) {\n var root = rootNode != null ? rootNode : document;\n var element = root.getElementById(id);\n if (element == null) {\n element = document.createElement('style');\n element.setAttribute('id', id);\n if (typeof textContent === 'string') {\n element.appendChild(document.createTextNode(textContent));\n }\n if (root instanceof ShadowRoot) {\n root.insertBefore(element, root.firstChild);\n } else {\n var head = root.head;\n if (head) {\n head.insertBefore(element, head.firstChild);\n }\n }\n }\n // $FlowFixMe: HTMLElement is incorrectly typed\n return element.sheet;\n } else {\n return null;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar slice = Array.prototype.slice;\n\n/**\n * Order-based insertion of CSS.\n *\n * Each rule is associated with a numerically defined group.\n * Groups are ordered within the style sheet according to their number, with the\n * lowest first.\n *\n * Groups are implemented using marker rules. The selector of the first rule of\n * each group is used only to encode the group number for hydration. An\n * alternative implementation could rely on CSSMediaRule, allowing groups to be\n * treated as a sub-sheet, but the Edge implementation of CSSMediaRule is\n * broken.\n * https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule\n * https://gist.github.com/necolas/aa0c37846ad6bd3b05b727b959e82674\n */\nexport default function createOrderedCSSStyleSheet(sheet) {\n var groups = {};\n var selectors = {};\n\n /**\n * Hydrate approximate record from any existing rules in the sheet.\n */\n if (sheet != null) {\n var group;\n slice.call(sheet.cssRules).forEach((cssRule, i) => {\n var cssText = cssRule.cssText;\n // Create record of existing selectors and rules\n if (cssText.indexOf('stylesheet-group') > -1) {\n group = decodeGroupRule(cssRule);\n groups[group] = {\n start: i,\n rules: [cssText]\n };\n } else {\n var selectorText = getSelectorText(cssText);\n if (selectorText != null) {\n selectors[selectorText] = true;\n groups[group].rules.push(cssText);\n }\n }\n });\n }\n function sheetInsert(sheet, group, text) {\n var orderedGroups = getOrderedGroups(groups);\n var groupIndex = orderedGroups.indexOf(group);\n var nextGroupIndex = groupIndex + 1;\n var nextGroup = orderedGroups[nextGroupIndex];\n // Insert rule before the next group, or at the end of the stylesheet\n var position = nextGroup != null && groups[nextGroup].start != null ? groups[nextGroup].start : sheet.cssRules.length;\n var isInserted = insertRuleAt(sheet, text, position);\n if (isInserted) {\n // Set the starting index of the new group\n if (groups[group].start == null) {\n groups[group].start = position;\n }\n // Increment the starting index of all subsequent groups\n for (var i = nextGroupIndex; i < orderedGroups.length; i += 1) {\n var groupNumber = orderedGroups[i];\n var previousStart = groups[groupNumber].start || 0;\n groups[groupNumber].start = previousStart + 1;\n }\n }\n return isInserted;\n }\n var OrderedCSSStyleSheet = {\n /**\n * The textContent of the style sheet.\n */\n getTextContent() {\n return getOrderedGroups(groups).map(group => {\n var rules = groups[group].rules;\n // Sorting provides deterministic order of styles in group for\n // build-time extraction of the style sheet.\n var marker = rules.shift();\n rules.sort();\n rules.unshift(marker);\n return rules.join('\\n');\n }).join('\\n');\n },\n /**\n * Insert a rule into the style sheet\n */\n insert(cssText, groupValue) {\n var group = Number(groupValue);\n\n // Create a new group.\n if (groups[group] == null) {\n var markerRule = encodeGroupRule(group);\n // Create the internal record.\n groups[group] = {\n start: null,\n rules: [markerRule]\n };\n // Update CSSOM.\n if (sheet != null) {\n sheetInsert(sheet, group, markerRule);\n }\n }\n\n // selectorText is more reliable than cssText for insertion checks. The\n // browser excludes vendor-prefixed properties and rewrites certain values\n // making cssText more likely to be different from what was inserted.\n var selectorText = getSelectorText(cssText);\n if (selectorText != null && selectors[selectorText] == null) {\n // Update the internal records.\n selectors[selectorText] = true;\n groups[group].rules.push(cssText);\n // Update CSSOM.\n if (sheet != null) {\n var isInserted = sheetInsert(sheet, group, cssText);\n if (!isInserted) {\n // Revert internal record change if a rule was rejected (e.g.,\n // unrecognized pseudo-selector)\n groups[group].rules.pop();\n }\n }\n }\n }\n };\n return OrderedCSSStyleSheet;\n}\n\n/**\n * Helper functions\n */\n\nfunction encodeGroupRule(group) {\n return \"[stylesheet-group=\\\"\" + group + \"\\\"]{}\";\n}\nvar groupPattern = /[\"']/g;\nfunction decodeGroupRule(cssRule) {\n return Number(cssRule.selectorText.split(groupPattern)[1]);\n}\nfunction getOrderedGroups(obj) {\n return Object.keys(obj).map(Number).sort((a, b) => a > b ? 1 : -1);\n}\nvar selectorPattern = /\\s*([,])\\s*/g;\nfunction getSelectorText(cssText) {\n var selector = cssText.split('{')[0].trim();\n return selector !== '' ? selector.replace(selectorPattern, '$1') : null;\n}\nfunction insertRuleAt(root, cssText, position) {\n try {\n // $FlowFixMe: Flow is missing CSSOM types needed to type 'root'.\n root.insertRule(cssText, position);\n return true;\n } catch (e) {\n // JSDOM doesn't support `CSSSMediaRule#insertRule`.\n // Also ignore errors that occur from attempting to insert vendor-prefixed selectors.\n return false;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport canUseDOM from '../../../modules/canUseDom';\nimport createCSSStyleSheet from './createCSSStyleSheet';\nimport createOrderedCSSStyleSheet from './createOrderedCSSStyleSheet';\nvar defaultId = 'react-native-stylesheet';\nvar roots = new WeakMap();\nvar sheets = [];\nvar initialRules = [\n// minimal top-level reset\n'html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);}', 'body{margin:0;}',\n// minimal form pseudo-element reset\n'button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}', 'input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;}'];\nexport function createSheet(root, id) {\n if (id === void 0) {\n id = defaultId;\n }\n var sheet;\n if (canUseDOM) {\n var rootNode = root != null ? root.getRootNode() : document;\n // Create the initial style sheet\n if (sheets.length === 0) {\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n initialRules.forEach(rule => {\n sheet.insert(rule, 0);\n });\n roots.set(rootNode, sheets.length);\n sheets.push(sheet);\n } else {\n var index = roots.get(rootNode);\n if (index == null) {\n var initialSheet = sheets[0];\n // If we're creating a new sheet, populate it with existing styles\n var textContent = initialSheet != null ? initialSheet.getTextContent() : '';\n // Cast rootNode to 'any' because Flow types for getRootNode are wrong\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id, rootNode, textContent));\n roots.set(rootNode, sheets.length);\n sheets.push(sheet);\n } else {\n sheet = sheets[index];\n }\n }\n } else {\n // Create the initial style sheet\n if (sheets.length === 0) {\n sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n initialRules.forEach(rule => {\n sheet.insert(rule, 0);\n });\n sheets.push(sheet);\n } else {\n sheet = sheets[0];\n }\n }\n return {\n getTextContent() {\n return sheet.getTextContent();\n },\n id,\n insert(cssText, groupValue) {\n sheets.forEach(s => {\n s.insert(cssText, groupValue);\n });\n }\n };\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"writingDirection\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { atomic, classic, inline } from './compiler';\nimport { createSheet } from './dom';\nimport { localizeStyle } from 'styleq/transform-localize-style';\nimport { preprocess } from './preprocess';\nimport { styleq } from 'styleq';\nimport { validate } from './validate';\nimport canUseDOM from '../../modules/canUseDom';\nvar staticStyleMap = new WeakMap();\nvar sheet = createSheet();\nvar defaultPreprocessOptions = {\n shadow: true,\n textShadow: true\n};\nfunction customStyleq(styles, options) {\n if (options === void 0) {\n options = {};\n }\n var _options = options,\n writingDirection = _options.writingDirection,\n preprocessOptions = _objectWithoutPropertiesLoose(_options, _excluded);\n var isRTL = writingDirection === 'rtl';\n return styleq.factory({\n transform(style) {\n var compiledStyle = staticStyleMap.get(style);\n if (compiledStyle != null) {\n return localizeStyle(compiledStyle, isRTL);\n }\n return preprocess(style, _objectSpread(_objectSpread({}, defaultPreprocessOptions), preprocessOptions));\n }\n })(styles);\n}\nfunction insertRules(compiledOrderedRules) {\n compiledOrderedRules.forEach(_ref => {\n var rules = _ref[0],\n order = _ref[1];\n if (sheet != null) {\n rules.forEach(rule => {\n sheet.insert(rule, order);\n });\n }\n });\n}\nfunction compileAndInsertAtomic(style) {\n var _atomic = atomic(preprocess(style, defaultPreprocessOptions)),\n compiledStyle = _atomic[0],\n compiledOrderedRules = _atomic[1];\n insertRules(compiledOrderedRules);\n return compiledStyle;\n}\nfunction compileAndInsertReset(style, key) {\n var _classic = classic(style, key),\n compiledStyle = _classic[0],\n compiledOrderedRules = _classic[1];\n insertRules(compiledOrderedRules);\n return compiledStyle;\n}\n\n/* ----- API ----- */\n\nvar absoluteFillObject = {\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n};\nvar absoluteFill = create({\n x: _objectSpread({}, absoluteFillObject)\n}).x;\n\n/**\n * create\n */\nfunction create(styles) {\n Object.keys(styles).forEach(key => {\n var styleObj = styles[key];\n // Only compile at runtime if the style is not already compiled\n if (styleObj != null && styleObj.$$css !== true) {\n var compiledStyles;\n if (key.indexOf('$raw') > -1) {\n compiledStyles = compileAndInsertReset(styleObj, key.split('$raw')[0]);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n validate(styleObj);\n styles[key] = Object.freeze(styleObj);\n }\n compiledStyles = compileAndInsertAtomic(styleObj);\n }\n staticStyleMap.set(styleObj, compiledStyles);\n }\n });\n return styles;\n}\n\n/**\n * compose\n */\nfunction compose(style1, style2) {\n if (process.env.NODE_ENV !== 'production') {\n /* eslint-disable prefer-rest-params */\n var len = arguments.length;\n if (len > 2) {\n var readableStyles = [...arguments].map(a => flatten(a));\n throw new Error(\"StyleSheet.compose() only accepts 2 arguments, received \" + len + \": \" + JSON.stringify(readableStyles));\n }\n /* eslint-enable prefer-rest-params */\n console.warn('StyleSheet.compose(a, b) is deprecated; use array syntax, i.e., [a,b].');\n }\n return [style1, style2];\n}\n\n/**\n * flatten\n */\nfunction flatten() {\n for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n styles[_key] = arguments[_key];\n }\n var flatArray = styles.flat(Infinity);\n var result = {};\n for (var i = 0; i < flatArray.length; i++) {\n var style = flatArray[i];\n if (style != null && typeof style === 'object') {\n // $FlowFixMe\n Object.assign(result, style);\n }\n }\n return result;\n}\n\n/**\n * getSheet\n */\nfunction getSheet() {\n return {\n id: sheet.id,\n textContent: sheet.getTextContent()\n };\n}\n\n/**\n * resolve\n */\n\nfunction StyleSheet(styles, options) {\n if (options === void 0) {\n options = {};\n }\n var isRTL = options.writingDirection === 'rtl';\n var styleProps = customStyleq(styles, options);\n if (Array.isArray(styleProps) && styleProps[1] != null) {\n styleProps[1] = inline(styleProps[1], isRTL);\n }\n return styleProps;\n}\nStyleSheet.absoluteFill = absoluteFill;\nStyleSheet.absoluteFillObject = absoluteFillObject;\nStyleSheet.create = create;\nStyleSheet.compose = compose;\nStyleSheet.flatten = flatten;\nStyleSheet.getSheet = getSheet;\n// `hairlineWidth` is not implemented using screen density as browsers may\n// round sub-pixel values down to `0`, causing the line not to be rendered.\nStyleSheet.hairlineWidth = 1;\nif (canUseDOM && window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle = StyleSheet.flatten;\n}\nvar stylesheet = StyleSheet;\nexport default stylesheet;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from './compiler/normalizeColor';\nimport normalizeValueWithProperty from './compiler/normalizeValueWithProperty';\nimport { warnOnce } from '../../modules/warnOnce';\nvar emptyObject = {};\n\n/**\n * Shadows\n */\n\nvar defaultOffset = {\n height: 0,\n width: 0\n};\nexport var createBoxShadowValue = style => {\n var shadowColor = style.shadowColor,\n shadowOffset = style.shadowOffset,\n shadowOpacity = style.shadowOpacity,\n shadowRadius = style.shadowRadius;\n var _ref = shadowOffset || defaultOffset,\n height = _ref.height,\n width = _ref.width;\n var offsetX = normalizeValueWithProperty(width);\n var offsetY = normalizeValueWithProperty(height);\n var blurRadius = normalizeValueWithProperty(shadowRadius || 0);\n var color = normalizeColor(shadowColor || 'black', shadowOpacity);\n if (color != null && offsetX != null && offsetY != null && blurRadius != null) {\n return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n }\n};\nexport var createTextShadowValue = style => {\n var textShadowColor = style.textShadowColor,\n textShadowOffset = style.textShadowOffset,\n textShadowRadius = style.textShadowRadius;\n var _ref2 = textShadowOffset || defaultOffset,\n height = _ref2.height,\n width = _ref2.width;\n var radius = textShadowRadius || 0;\n var offsetX = normalizeValueWithProperty(width);\n var offsetY = normalizeValueWithProperty(height);\n var blurRadius = normalizeValueWithProperty(radius);\n var color = normalizeValueWithProperty(textShadowColor, 'textShadowColor');\n if (color && (height !== 0 || width !== 0 || radius !== 0) && offsetX != null && offsetY != null && blurRadius != null) {\n return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n }\n};\n\n// { scale: 2 } => 'scale(2)'\n// { translateX: 20 } => 'translateX(20px)'\n// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'\nvar mapTransform = transform => {\n var type = Object.keys(transform)[0];\n var value = transform[type];\n if (type === 'matrix' || type === 'matrix3d') {\n return type + \"(\" + value.join(',') + \")\";\n } else {\n var normalizedValue = normalizeValueWithProperty(value, type);\n return type + \"(\" + normalizedValue + \")\";\n }\n};\nexport var createTransformValue = value => {\n return value.map(mapTransform).join(' ');\n};\nvar PROPERTIES_STANDARD = {\n borderBottomEndRadius: 'borderEndEndRadius',\n borderBottomStartRadius: 'borderEndStartRadius',\n borderTopEndRadius: 'borderStartEndRadius',\n borderTopStartRadius: 'borderStartStartRadius',\n borderEndColor: 'borderInlineEndColor',\n borderEndStyle: 'borderInlineEndStyle',\n borderEndWidth: 'borderInlineEndWidth',\n borderStartColor: 'borderInlineStartColor',\n borderStartStyle: 'borderInlineStartStyle',\n borderStartWidth: 'borderInlineStartWidth',\n end: 'insetInlineEnd',\n marginEnd: 'marginInlineEnd',\n marginHorizontal: 'marginInline',\n marginStart: 'marginInlineStart',\n marginVertical: 'marginBlock',\n paddingEnd: 'paddingInlineEnd',\n paddingHorizontal: 'paddingInline',\n paddingStart: 'paddingInlineStart',\n paddingVertical: 'paddingBlock',\n start: 'insetInlineStart'\n};\nvar ignoredProps = {\n elevation: true,\n overlayColor: true,\n resizeMode: true,\n tintColor: true\n};\n\n/**\n * Preprocess styles\n */\nexport var preprocess = function preprocess(originalStyle, options) {\n if (options === void 0) {\n options = {};\n }\n var style = originalStyle || emptyObject;\n var nextStyle = {};\n\n // Convert shadow styles\n if (options.shadow === true, style.shadowColor != null || style.shadowOffset != null || style.shadowOpacity != null || style.shadowRadius != null) {\n warnOnce('shadowStyles', \"\\\"shadow*\\\" style props are deprecated. Use \\\"boxShadow\\\".\");\n var boxShadowValue = createBoxShadowValue(style);\n if (boxShadowValue != null && nextStyle.boxShadow == null) {\n var boxShadow = style.boxShadow;\n var value = boxShadow ? boxShadow + \", \" + boxShadowValue : boxShadowValue;\n nextStyle.boxShadow = value;\n }\n }\n\n // Convert text shadow styles\n if (options.textShadow === true, style.textShadowColor != null || style.textShadowOffset != null || style.textShadowRadius != null) {\n warnOnce('textShadowStyles', \"\\\"textShadow*\\\" style props are deprecated. Use \\\"textShadow\\\".\");\n var textShadowValue = createTextShadowValue(style);\n if (textShadowValue != null && nextStyle.textShadow == null) {\n var textShadow = style.textShadow;\n var _value = textShadow ? textShadow + \", \" + textShadowValue : textShadowValue;\n nextStyle.textShadow = _value;\n }\n }\n for (var originalProp in style) {\n if (\n // Ignore some React Native styles\n ignoredProps[originalProp] != null || originalProp === 'shadowColor' || originalProp === 'shadowOffset' || originalProp === 'shadowOpacity' || originalProp === 'shadowRadius' || originalProp === 'textShadowColor' || originalProp === 'textShadowOffset' || originalProp === 'textShadowRadius') {\n continue;\n }\n var originalValue = style[originalProp];\n var prop = PROPERTIES_STANDARD[originalProp] || originalProp;\n var _value2 = originalValue;\n if (!Object.prototype.hasOwnProperty.call(style, originalProp) || prop !== originalProp && style[prop] != null) {\n continue;\n }\n if (prop === 'aspectRatio' && typeof _value2 === 'number') {\n nextStyle[prop] = _value2.toString();\n } else if (prop === 'fontVariant') {\n if (Array.isArray(_value2) && _value2.length > 0) {\n warnOnce('fontVariant', '\"fontVariant\" style array value is deprecated. Use space-separated values.');\n _value2 = _value2.join(' ');\n }\n nextStyle[prop] = _value2;\n } else if (prop === 'textAlignVertical') {\n warnOnce('textAlignVertical', '\"textAlignVertical\" style is deprecated. Use \"verticalAlign\".');\n if (style.verticalAlign == null) {\n nextStyle.verticalAlign = _value2 === 'center' ? 'middle' : _value2;\n }\n } else if (prop === 'transform') {\n if (Array.isArray(_value2)) {\n warnOnce('transform', '\"transform\" style array value is deprecated. Use space-separated string functions, e.g., \"scaleX(2) rotateX(15deg)\".');\n _value2 = createTransformValue(_value2);\n }\n nextStyle.transform = _value2;\n } else {\n nextStyle[prop] = _value2;\n }\n }\n\n // $FlowIgnore\n return nextStyle;\n};\nexport default preprocess;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport valueParser from 'postcss-value-parser';\nvar invalidShortforms = {\n background: true,\n borderBottom: true,\n borderLeft: true,\n borderRight: true,\n borderTop: true,\n font: true,\n grid: true,\n outline: true,\n textDecoration: true\n};\nvar invalidMultiValueShortforms = {\n flex: true,\n margin: true,\n padding: true,\n borderColor: true,\n borderRadius: true,\n borderStyle: true,\n borderWidth: true,\n inset: true,\n insetBlock: true,\n insetInline: true,\n marginBlock: true,\n marginInline: true,\n marginHorizontal: true,\n marginVertical: true,\n paddingBlock: true,\n paddingInline: true,\n paddingHorizontal: true,\n paddingVertical: true,\n overflow: true,\n overscrollBehavior: true,\n backgroundPosition: true\n};\nfunction error(message) {\n console.error(message);\n}\nexport function validate(obj) {\n for (var k in obj) {\n var prop = k.trim();\n var value = obj[prop];\n var isInvalid = false;\n if (value === null) {\n continue;\n }\n if (typeof value === 'string' && value.indexOf('!important') > -1) {\n error(\"Invalid style declaration \\\"\" + prop + \":\" + value + \"\\\". Values cannot include \\\"!important\\\"\");\n isInvalid = true;\n } else {\n var suggestion = '';\n if (prop === 'animation' || prop === 'animationName') {\n suggestion = 'Did you mean \"animationKeyframes\"?';\n isInvalid = true;\n } else if (prop === 'direction') {\n suggestion = 'Did you mean \"writingDirection\"?';\n isInvalid = true;\n } else if (invalidShortforms[prop]) {\n suggestion = 'Please use long-form properties.';\n isInvalid = true;\n } else if (invalidMultiValueShortforms[prop]) {\n if (typeof value === 'string' && valueParser(value).nodes.length > 1) {\n suggestion = \"Value is \\\"\" + value + \"\\\" but only single values are supported.\";\n isInvalid = true;\n }\n }\n if (suggestion !== '') {\n error(\"Invalid style property of \\\"\" + prop + \"\\\". \" + suggestion);\n }\n }\n if (isInvalid) {\n delete obj[k];\n }\n }\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"activeThumbColor\", \"activeTrackColor\", \"disabled\", \"onValueChange\", \"style\", \"thumbColor\", \"trackColor\", \"value\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport multiplyStyleLengthValue from '../../modules/multiplyStyleLengthValue';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\nvar thumbDefaultBoxShadow = '0px 1px 3px rgba(0,0,0,0.5)';\nvar thumbFocusedBoxShadow = thumbDefaultBoxShadow + \", 0 0 0 10px rgba(0,0,0,0.1)\";\nvar defaultActiveTrackColor = '#A3D3CF';\nvar defaultTrackColor = '#939393';\nvar defaultDisabledTrackColor = '#D5D5D5';\nvar defaultActiveThumbColor = '#009688';\nvar defaultThumbColor = '#FAFAFA';\nvar defaultDisabledThumbColor = '#BDBDBD';\nvar Switch = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var ariaLabel = props['aria-label'],\n accessibilityLabel = props.accessibilityLabel,\n activeThumbColor = props.activeThumbColor,\n activeTrackColor = props.activeTrackColor,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n onValueChange = props.onValueChange,\n _props$style = props.style,\n style = _props$style === void 0 ? emptyObject : _props$style,\n thumbColor = props.thumbColor,\n trackColor = props.trackColor,\n _props$value = props.value,\n value = _props$value === void 0 ? false : _props$value,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n var thumbRef = React.useRef(null);\n function handleChange(event) {\n if (onValueChange != null) {\n onValueChange(event.nativeEvent.target.checked);\n }\n }\n function handleFocusState(event) {\n var isFocused = event.nativeEvent.type === 'focus';\n var boxShadow = isFocused ? thumbFocusedBoxShadow : thumbDefaultBoxShadow;\n if (thumbRef.current != null) {\n thumbRef.current.style.boxShadow = boxShadow;\n }\n }\n var _StyleSheet$flatten = StyleSheet.flatten(style),\n styleHeight = _StyleSheet$flatten.height,\n styleWidth = _StyleSheet$flatten.width;\n var height = styleHeight || '20px';\n var minWidth = multiplyStyleLengthValue(height, 2);\n var width = styleWidth > minWidth ? styleWidth : minWidth;\n var trackBorderRadius = multiplyStyleLengthValue(height, 0.5);\n var trackCurrentColor = function () {\n if (value === true) {\n if (trackColor != null && typeof trackColor === 'object') {\n return trackColor.true;\n } else {\n return activeTrackColor !== null && activeTrackColor !== void 0 ? activeTrackColor : defaultActiveTrackColor;\n }\n } else {\n if (trackColor != null && typeof trackColor === 'object') {\n return trackColor.false;\n } else {\n return trackColor !== null && trackColor !== void 0 ? trackColor : defaultTrackColor;\n }\n }\n }();\n var thumbCurrentColor = value ? activeThumbColor !== null && activeThumbColor !== void 0 ? activeThumbColor : defaultActiveThumbColor : thumbColor !== null && thumbColor !== void 0 ? thumbColor : defaultThumbColor;\n var thumbHeight = height;\n var thumbWidth = thumbHeight;\n var rootStyle = [styles.root, style, disabled && styles.cursorDefault, {\n height,\n width\n }];\n var disabledTrackColor = function () {\n if (value === true) {\n if (typeof activeTrackColor === 'string' && activeTrackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.true) {\n return trackCurrentColor;\n } else {\n return defaultDisabledTrackColor;\n }\n } else {\n if (typeof trackColor === 'string' && trackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.false) {\n return trackCurrentColor;\n } else {\n return defaultDisabledTrackColor;\n }\n }\n }();\n var disabledThumbColor = function () {\n if (value === true) {\n if (activeThumbColor == null) {\n return defaultDisabledThumbColor;\n } else {\n return thumbCurrentColor;\n }\n } else {\n if (thumbColor == null) {\n return defaultDisabledThumbColor;\n } else {\n return thumbCurrentColor;\n }\n }\n }();\n var trackStyle = [styles.track, {\n backgroundColor: disabled ? disabledTrackColor : trackCurrentColor,\n borderRadius: trackBorderRadius\n }];\n var thumbStyle = [styles.thumb, value && styles.thumbActive, {\n backgroundColor: disabled ? disabledThumbColor : thumbCurrentColor,\n height: thumbHeight,\n marginStart: value ? multiplyStyleLengthValue(thumbWidth, -1) : 0,\n width: thumbWidth\n }];\n var nativeControl = createElement('input', {\n 'aria-label': ariaLabel || accessibilityLabel,\n checked: value,\n disabled: disabled,\n onBlur: handleFocusState,\n onChange: handleChange,\n onFocus: handleFocusState,\n ref: forwardedRef,\n style: [styles.nativeControl, styles.cursorInherit],\n type: 'checkbox',\n role: 'switch'\n });\n return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n style: rootStyle\n }), /*#__PURE__*/React.createElement(View, {\n style: trackStyle\n }), /*#__PURE__*/React.createElement(View, {\n ref: thumbRef,\n style: thumbStyle\n }), nativeControl);\n});\nSwitch.displayName = 'Switch';\nvar styles = StyleSheet.create({\n root: {\n cursor: 'pointer',\n userSelect: 'none'\n },\n cursorDefault: {\n cursor: 'default'\n },\n cursorInherit: {\n cursor: 'inherit'\n },\n track: _objectSpread(_objectSpread({\n forcedColorAdjust: 'none'\n }, StyleSheet.absoluteFillObject), {}, {\n height: '70%',\n margin: 'auto',\n transitionDuration: '0.1s',\n width: '100%'\n }),\n thumb: {\n forcedColorAdjust: 'none',\n alignSelf: 'flex-start',\n borderRadius: '100%',\n boxShadow: thumbDefaultBoxShadow,\n start: '0%',\n transform: 'translateZ(0)',\n transitionDuration: '0.1s'\n },\n thumbActive: {\n insetInlineStart: '100%'\n },\n nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n height: '100%',\n margin: 0,\n appearance: 'none',\n padding: 0,\n width: '100%'\n })\n});\nexport default Switch;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { createContext } from 'react';\nvar TextAncestorContext = /*#__PURE__*/createContext(false);\nexport default TextAncestorContext;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"numberOfLines\", \"onClick\", \"onLayout\", \"onPress\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\", \"selectable\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from './TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n href: true,\n lang: true,\n pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar Text = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var hrefAttrs = props.hrefAttrs,\n numberOfLines = props.numberOfLines,\n onClick = props.onClick,\n onLayout = props.onLayout,\n onPress = props.onPress,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n selectable = props.selectable,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (selectable != null) {\n warnOnce('selectable', 'selectable prop is deprecated. Use styles.userSelect.');\n }\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hostRef = React.useRef(null);\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var handleClick = React.useCallback(e => {\n if (onClick != null) {\n onClick(e);\n } else if (onPress != null) {\n e.stopPropagation();\n onPress(e);\n }\n }, [onClick, onPress]);\n var component = hasTextAncestor ? 'span' : 'div';\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var supportedProps = pickProps(rest);\n supportedProps.dir = componentDirection;\n // 'auto' by default allows browsers to infer writing direction (root elements only)\n if (!hasTextAncestor) {\n supportedProps.dir = componentDirection != null ? componentDirection : 'auto';\n }\n if (onClick || onPress) {\n supportedProps.onClick = handleClick;\n }\n supportedProps.style = [numberOfLines != null && numberOfLines > 1 && {\n WebkitLineClamp: numberOfLines\n }, hasTextAncestor === true ? styles.textHasAncestor$raw : styles.text$raw, numberOfLines === 1 && styles.textOneLine, numberOfLines != null && numberOfLines > 1 && styles.textMultiLine, props.style, selectable === true && styles.selectable, selectable === false && styles.notSelectable, onPress && styles.pressable];\n if (props.href != null) {\n component = 'a';\n if (hrefAttrs != null) {\n var download = hrefAttrs.download,\n rel = hrefAttrs.rel,\n target = hrefAttrs.target;\n if (download != null) {\n supportedProps.download = download;\n }\n if (rel != null) {\n supportedProps.rel = rel;\n }\n if (typeof target === 'string') {\n supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n }\n }\n }\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n var element = createElement(component, supportedProps, {\n writingDirection\n });\n return hasTextAncestor ? element : /*#__PURE__*/React.createElement(TextAncestorContext.Provider, {\n value: true\n }, element);\n});\nText.displayName = 'Text';\nvar textStyle = {\n backgroundColor: 'transparent',\n border: '0 solid black',\n boxSizing: 'border-box',\n color: 'black',\n display: 'inline',\n font: '14px System',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative',\n textAlign: 'start',\n textDecoration: 'none',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word'\n};\nvar styles = StyleSheet.create({\n text$raw: textStyle,\n textHasAncestor$raw: _objectSpread(_objectSpread({}, textStyle), {}, {\n color: 'inherit',\n font: 'inherit',\n textAlign: 'inherit',\n whiteSpace: 'inherit'\n }),\n textOneLine: {\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n },\n // See #13\n textMultiLine: {\n display: '-webkit-box',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n WebkitBoxOrient: 'vertical'\n },\n notSelectable: {\n userSelect: 'none'\n },\n selectable: {\n userSelect: 'text'\n },\n pressable: {\n cursor: 'pointer'\n }\n});\nexport default Text;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useLayoutEffect from '../../modules/useLayoutEffect';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport { getLocaleDirection, useLocaleContext } from '../../modules/useLocale';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport { warnOnce } from '../../modules/warnOnce';\n\n/**\n * Determines whether a 'selection' prop differs from a node's existing\n * selection state.\n */\nvar isSelectionStale = (node, selection) => {\n var selectionEnd = node.selectionEnd,\n selectionStart = node.selectionStart;\n var start = selection.start,\n end = selection.end;\n return start !== selectionStart || end !== selectionEnd;\n};\n\n/**\n * Certain input types do no support 'selectSelectionRange' and will throw an\n * error.\n */\nvar setSelection = (node, selection) => {\n if (isSelectionStale(node, selection)) {\n var start = selection.start,\n end = selection.end;\n try {\n node.setSelectionRange(start, end || start);\n } catch (e) {}\n }\n};\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n autoCapitalize: true,\n autoComplete: true,\n autoCorrect: true,\n autoFocus: true,\n defaultValue: true,\n disabled: true,\n lang: true,\n maxLength: true,\n onChange: true,\n onScroll: true,\n placeholder: true,\n pointerEvents: true,\n readOnly: true,\n rows: true,\n spellCheck: true,\n value: true,\n type: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\n\n// If an Input Method Editor is processing key input, the 'keyCode' is 229.\n// https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\nfunction isEventComposing(nativeEvent) {\n return nativeEvent.isComposing || nativeEvent.keyCode === 229;\n}\nvar focusTimeout = null;\nvar TextInput = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _props$autoCapitalize = props.autoCapitalize,\n autoCapitalize = _props$autoCapitalize === void 0 ? 'sentences' : _props$autoCapitalize,\n autoComplete = props.autoComplete,\n autoCompleteType = props.autoCompleteType,\n _props$autoCorrect = props.autoCorrect,\n autoCorrect = _props$autoCorrect === void 0 ? true : _props$autoCorrect,\n blurOnSubmit = props.blurOnSubmit,\n caretHidden = props.caretHidden,\n clearTextOnFocus = props.clearTextOnFocus,\n dir = props.dir,\n editable = props.editable,\n enterKeyHint = props.enterKeyHint,\n inputMode = props.inputMode,\n keyboardType = props.keyboardType,\n _props$multiline = props.multiline,\n multiline = _props$multiline === void 0 ? false : _props$multiline,\n numberOfLines = props.numberOfLines,\n onBlur = props.onBlur,\n onChange = props.onChange,\n onChangeText = props.onChangeText,\n onContentSizeChange = props.onContentSizeChange,\n onFocus = props.onFocus,\n onKeyPress = props.onKeyPress,\n onLayout = props.onLayout,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChange = props.onSelectionChange,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n onSubmitEditing = props.onSubmitEditing,\n placeholderTextColor = props.placeholderTextColor,\n _props$readOnly = props.readOnly,\n readOnly = _props$readOnly === void 0 ? false : _props$readOnly,\n returnKeyType = props.returnKeyType,\n rows = props.rows,\n _props$secureTextEntr = props.secureTextEntry,\n secureTextEntry = _props$secureTextEntr === void 0 ? false : _props$secureTextEntr,\n selection = props.selection,\n selectTextOnFocus = props.selectTextOnFocus,\n spellCheck = props.spellCheck;\n var type;\n var _inputMode;\n if (inputMode != null) {\n _inputMode = inputMode;\n if (inputMode === 'email') {\n type = 'email';\n } else if (inputMode === 'tel') {\n type = 'tel';\n } else if (inputMode === 'search') {\n type = 'search';\n } else if (inputMode === 'url') {\n type = 'url';\n } else {\n type = 'text';\n }\n } else if (keyboardType != null) {\n warnOnce('keyboardType', 'keyboardType is deprecated. Use inputMode.');\n switch (keyboardType) {\n case 'email-address':\n type = 'email';\n break;\n case 'number-pad':\n case 'numeric':\n _inputMode = 'numeric';\n break;\n case 'decimal-pad':\n _inputMode = 'decimal';\n break;\n case 'phone-pad':\n type = 'tel';\n break;\n case 'search':\n case 'web-search':\n type = 'search';\n break;\n case 'url':\n type = 'url';\n break;\n default:\n type = 'text';\n }\n }\n if (secureTextEntry) {\n type = 'password';\n }\n var dimensions = React.useRef({\n height: null,\n width: null\n });\n var hostRef = React.useRef(null);\n var handleContentSizeChange = React.useCallback(hostNode => {\n if (multiline && onContentSizeChange && hostNode != null) {\n var newHeight = hostNode.scrollHeight;\n var newWidth = hostNode.scrollWidth;\n if (newHeight !== dimensions.current.height || newWidth !== dimensions.current.width) {\n dimensions.current.height = newHeight;\n dimensions.current.width = newWidth;\n onContentSizeChange({\n nativeEvent: {\n contentSize: {\n height: dimensions.current.height,\n width: dimensions.current.width\n }\n }\n });\n }\n }\n }, [multiline, onContentSizeChange]);\n var imperativeRef = React.useMemo(() => hostNode => {\n // TextInput needs to add more methods to the hostNode in addition to those\n // added by `usePlatformMethods`. This is temporarily until an API like\n // `TextInput.clear(hostRef)` is added to React Native.\n if (hostNode != null) {\n hostNode.clear = function () {\n if (hostNode != null) {\n hostNode.value = '';\n }\n };\n hostNode.isFocused = function () {\n return hostNode != null && TextInputState.currentlyFocusedField() === hostNode;\n };\n handleContentSizeChange(hostNode);\n }\n }, [handleContentSizeChange]);\n function handleBlur(e) {\n TextInputState._currentlyFocusedNode = null;\n if (onBlur) {\n e.nativeEvent.text = e.target.value;\n onBlur(e);\n }\n }\n function handleChange(e) {\n var hostNode = e.target;\n var text = hostNode.value;\n e.nativeEvent.text = text;\n handleContentSizeChange(hostNode);\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(text);\n }\n }\n function handleFocus(e) {\n var hostNode = e.target;\n if (onFocus) {\n e.nativeEvent.text = hostNode.value;\n onFocus(e);\n }\n if (hostNode != null) {\n TextInputState._currentlyFocusedNode = hostNode;\n if (clearTextOnFocus) {\n hostNode.value = '';\n }\n if (selectTextOnFocus) {\n // Safari requires selection to occur in a setTimeout\n if (focusTimeout != null) {\n clearTimeout(focusTimeout);\n }\n focusTimeout = setTimeout(() => {\n if (hostNode != null) {\n hostNode.select();\n }\n }, 0);\n }\n }\n }\n function handleKeyDown(e) {\n var hostNode = e.target;\n // Prevent key events bubbling (see #612)\n e.stopPropagation();\n var blurOnSubmitDefault = !multiline;\n var shouldBlurOnSubmit = blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit;\n var nativeEvent = e.nativeEvent;\n var isComposing = isEventComposing(nativeEvent);\n if (onKeyPress) {\n onKeyPress(e);\n }\n if (e.key === 'Enter' && !e.shiftKey &&\n // Do not call submit if composition is occuring.\n !isComposing && !e.isDefaultPrevented()) {\n if ((blurOnSubmit || !multiline) && onSubmitEditing) {\n // prevent \"Enter\" from inserting a newline or submitting a form\n e.preventDefault();\n nativeEvent.text = e.target.value;\n onSubmitEditing(e);\n }\n if (shouldBlurOnSubmit && hostNode != null) {\n setTimeout(() => hostNode.blur(), 0);\n }\n }\n }\n function handleSelectionChange(e) {\n if (onSelectionChange) {\n try {\n var node = e.target;\n var selectionStart = node.selectionStart,\n selectionEnd = node.selectionEnd;\n e.nativeEvent.selection = {\n start: selectionStart,\n end: selectionEnd\n };\n e.nativeEvent.text = e.target.value;\n onSelectionChange(e);\n } catch (e) {}\n }\n }\n useLayoutEffect(() => {\n var node = hostRef.current;\n if (node != null && selection != null) {\n setSelection(node, selection);\n }\n if (document.activeElement === node) {\n TextInputState._currentlyFocusedNode = node;\n }\n }, [hostRef, selection]);\n var component = multiline ? 'textarea' : 'input';\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n var supportedProps = pickProps(props);\n supportedProps.autoCapitalize = autoCapitalize;\n supportedProps.autoComplete = autoComplete || autoCompleteType || 'on';\n supportedProps.autoCorrect = autoCorrect ? 'on' : 'off';\n // 'auto' by default allows browsers to infer writing direction\n supportedProps.dir = dir !== undefined ? dir : 'auto';\n if (returnKeyType != null) {\n warnOnce('returnKeyType', 'returnKeyType is deprecated. Use enterKeyHint.');\n }\n supportedProps.enterKeyHint = enterKeyHint || returnKeyType;\n supportedProps.inputMode = _inputMode;\n supportedProps.onBlur = handleBlur;\n supportedProps.onChange = handleChange;\n supportedProps.onFocus = handleFocus;\n supportedProps.onKeyDown = handleKeyDown;\n supportedProps.onSelect = handleSelectionChange;\n if (editable != null) {\n warnOnce('editable', 'editable is deprecated. Use readOnly.');\n }\n supportedProps.readOnly = readOnly === true || editable === false;\n if (numberOfLines != null) {\n warnOnce('numberOfLines', 'TextInput numberOfLines is deprecated. Use rows.');\n }\n supportedProps.rows = multiline ? rows != null ? rows : numberOfLines : 1;\n supportedProps.spellCheck = spellCheck != null ? spellCheck : autoCorrect;\n supportedProps.style = [{\n '--placeholderTextColor': placeholderTextColor\n }, styles.textinput$raw, styles.placeholder, props.style, caretHidden && styles.caretHidden];\n supportedProps.type = multiline ? undefined : type;\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, imperativeRef, forwardedRef);\n supportedProps.ref = setRef;\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var element = createElement(component, supportedProps, {\n writingDirection\n });\n return element;\n});\nTextInput.displayName = 'TextInput';\n// $FlowFixMe\nTextInput.State = TextInputState;\nvar styles = StyleSheet.create({\n textinput$raw: {\n MozAppearance: 'textfield',\n WebkitAppearance: 'none',\n backgroundColor: 'transparent',\n border: '0 solid black',\n borderRadius: 0,\n boxSizing: 'border-box',\n font: '14px System',\n margin: 0,\n padding: 0,\n resize: 'none'\n },\n placeholder: {\n placeholderTextColor: 'var(--placeholderTextColor)'\n },\n caretHidden: {\n caretColor: 'transparent'\n }\n});\nexport default TextInput;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * PooledClass representing the bounding rectangle of a region.\n */\nfunction BoundingDimensions(width, height) {\n this.width = width;\n this.height = height;\n}\nBoundingDimensions.prototype.destructor = function () {\n this.width = null;\n this.height = null;\n};\nBoundingDimensions.getPooledFromElement = function (element) {\n return BoundingDimensions.getPooled(element.offsetWidth, element.offsetHeight);\n};\nPooledClass.addPoolingTo(BoundingDimensions, twoArgumentPooler);\nexport default BoundingDimensions;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nfunction Position(left, top) {\n this.left = left;\n this.top = top;\n}\nPosition.prototype.destructor = function () {\n this.left = null;\n this.top = null;\n};\nPooledClass.addPoolingTo(Position, twoArgumentPooler);\nexport default Position;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport BoundingDimensions from './BoundingDimensions';\nimport normalizeColor from '@react-native/normalize-color';\nimport Position from './Position';\nimport React from 'react';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar extractSingleTouch = nativeEvent => {\n var touches = nativeEvent.touches;\n var changedTouches = nativeEvent.changedTouches;\n var hasTouches = touches && touches.length > 0;\n var hasChangedTouches = changedTouches && changedTouches.length > 0;\n return !hasTouches && hasChangedTouches ? changedTouches[0] : hasTouches ? touches[0] : nativeEvent;\n};\n\n/**\n * `Touchable`: Taps done right.\n *\n * You hook your `ResponderEventPlugin` events into `Touchable`. `Touchable`\n * will measure time/geometry and tells you when to give feedback to the user.\n *\n * ====================== Touchable Tutorial ===============================\n * The `Touchable` mixin helps you handle the \"press\" interaction. It analyzes\n * the geometry of elements, and observes when another responder (scroll view\n * etc) has stolen the touch lock. It notifies your component when it should\n * give feedback to the user. (bouncing/highlighting/unhighlighting).\n *\n * - When a touch was activated (typically you highlight)\n * - When a touch was deactivated (typically you unhighlight)\n * - When a touch was \"pressed\" - a touch ended while still within the geometry\n * of the element, and no other element (like scroller) has \"stolen\" touch\n * lock (\"responder\") (Typically you bounce the element).\n *\n * A good tap interaction isn't as simple as you might think. There should be a\n * slight delay before showing a highlight when starting a touch. If a\n * subsequent touch move exceeds the boundary of the element, it should\n * unhighlight, but if that same touch is brought back within the boundary, it\n * should rehighlight again. A touch can move in and out of that boundary\n * several times, each time toggling highlighting, but a \"press\" is only\n * triggered if that touch ends while within the element's boundary and no\n * scroller (or anything else) has stolen the lock on touches.\n *\n * To create a new type of component that handles interaction using the\n * `Touchable` mixin, do the following:\n *\n * - Initialize the `Touchable` state.\n *\n * getInitialState: function() {\n * return merge(this.touchableGetInitialState(), yourComponentState);\n * }\n *\n * - Add a method to get your touchable component's node.\n * getTouchableNode: function() {\n * return this.touchableRef.current\n * }\n *\n * - Choose the rendered component who's touches should start the interactive\n * sequence. On that rendered node, forward all `Touchable` responder\n * handlers. You can choose any rendered node you like. Choose a node whose\n * hit target you'd like to instigate the interaction sequence:\n *\n * // In render function:\n * return (\n * \n * \n * Even though the hit detection/interactions are triggered by the\n * wrapping (typically larger) node, we usually end up implementing\n * custom logic that highlights this inner one.\n * \n * \n * );\n *\n * - You may set up your own handlers for each of these events, so long as you\n * also invoke the `touchable*` handlers inside of your custom handler.\n *\n * - Implement the handlers on your component class in order to provide\n * feedback to the user. See documentation for each of these class methods\n * that you should implement.\n *\n * touchableHandlePress: function() {\n * this.performBounceAnimation(); // or whatever you want to do.\n * },\n * touchableHandleActivePressIn: function() {\n * this.beginHighlighting(...); // Whatever you like to convey activation\n * },\n * touchableHandleActivePressOut: function() {\n * this.endHighlighting(...); // Whatever you like to convey deactivation\n * },\n *\n * - There are more advanced methods you can implement (see documentation below):\n * touchableGetHighlightDelayMS: function() {\n * return 20;\n * }\n * // In practice, *always* use a predeclared constant (conserve memory).\n * touchableGetPressRectOffset: function() {\n * return {top: 20, left: 20, right: 20, bottom: 100};\n * }\n */\n\n/**\n * Touchable states.\n */\n\nvar States = {\n NOT_RESPONDER: 'NOT_RESPONDER',\n // Not the responder\n RESPONDER_INACTIVE_PRESS_IN: 'RESPONDER_INACTIVE_PRESS_IN',\n // Responder, inactive, in the `PressRect`\n RESPONDER_INACTIVE_PRESS_OUT: 'RESPONDER_INACTIVE_PRESS_OUT',\n // Responder, inactive, out of `PressRect`\n RESPONDER_ACTIVE_PRESS_IN: 'RESPONDER_ACTIVE_PRESS_IN',\n // Responder, active, in the `PressRect`\n RESPONDER_ACTIVE_PRESS_OUT: 'RESPONDER_ACTIVE_PRESS_OUT',\n // Responder, active, out of `PressRect`\n RESPONDER_ACTIVE_LONG_PRESS_IN: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n // Responder, active, in the `PressRect`, after long press threshold\n RESPONDER_ACTIVE_LONG_PRESS_OUT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n // Responder, active, out of `PressRect`, after long press threshold\n ERROR: 'ERROR'\n};\n/*\n * Quick lookup map for states that are considered to be \"active\"\n */\n\nvar baseStatesConditions = {\n NOT_RESPONDER: false,\n RESPONDER_INACTIVE_PRESS_IN: false,\n RESPONDER_INACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_PRESS_IN: false,\n RESPONDER_ACTIVE_PRESS_OUT: false,\n RESPONDER_ACTIVE_LONG_PRESS_IN: false,\n RESPONDER_ACTIVE_LONG_PRESS_OUT: false,\n ERROR: false\n};\nvar IsActive = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_ACTIVE_PRESS_OUT: true,\n RESPONDER_ACTIVE_PRESS_IN: true\n});\n\n/**\n * Quick lookup for states that are considered to be \"pressing\" and are\n * therefore eligible to result in a \"selection\" if the press stops.\n */\nvar IsPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_INACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_PRESS_IN: true,\n RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\nvar IsLongPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\n\n/**\n * Inputs to the state machine.\n */\nvar Signals = {\n DELAY: 'DELAY',\n RESPONDER_GRANT: 'RESPONDER_GRANT',\n RESPONDER_RELEASE: 'RESPONDER_RELEASE',\n RESPONDER_TERMINATED: 'RESPONDER_TERMINATED',\n ENTER_PRESS_RECT: 'ENTER_PRESS_RECT',\n LEAVE_PRESS_RECT: 'LEAVE_PRESS_RECT',\n LONG_PRESS_DETECTED: 'LONG_PRESS_DETECTED'\n};\n/**\n * Mapping from States x Signals => States\n */\nvar Transitions = {\n NOT_RESPONDER: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.ERROR,\n RESPONDER_TERMINATED: States.ERROR,\n ENTER_PRESS_RECT: States.ERROR,\n LEAVE_PRESS_RECT: States.ERROR,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_INACTIVE_PRESS_IN: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_IN,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_INACTIVE_PRESS_OUT: {\n DELAY: States.RESPONDER_ACTIVE_PRESS_OUT,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_ACTIVE_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n },\n RESPONDER_ACTIVE_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n RESPONDER_ACTIVE_LONG_PRESS_IN: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n },\n RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n DELAY: States.ERROR,\n RESPONDER_GRANT: States.ERROR,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n LONG_PRESS_DETECTED: States.ERROR\n },\n error: {\n DELAY: States.NOT_RESPONDER,\n RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n RESPONDER_RELEASE: States.NOT_RESPONDER,\n RESPONDER_TERMINATED: States.NOT_RESPONDER,\n ENTER_PRESS_RECT: States.NOT_RESPONDER,\n LEAVE_PRESS_RECT: States.NOT_RESPONDER,\n LONG_PRESS_DETECTED: States.NOT_RESPONDER\n }\n};\n\n// ==== Typical Constants for integrating into UI components ====\n// var HIT_EXPAND_PX = 20;\n// var HIT_VERT_OFFSET_PX = 10;\nvar HIGHLIGHT_DELAY_MS = 130;\nvar PRESS_EXPAND_PX = 20;\nvar LONG_PRESS_THRESHOLD = 500;\nvar LONG_PRESS_DELAY_MS = LONG_PRESS_THRESHOLD - HIGHLIGHT_DELAY_MS;\nvar LONG_PRESS_ALLOWED_MOVEMENT = 10;\n\n// Default amount \"active\" region protrudes beyond box\n\n/**\n * By convention, methods prefixed with underscores are meant to be @private,\n * and not @protected. Mixers shouldn't access them - not even to provide them\n * as callback handlers.\n *\n *\n * ========== Geometry =========\n * `Touchable` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * +--------------------------+\n * | | - \"Start\" events in `HitRect` cause `HitRect`\n * | +--------------------+ | to become the responder.\n * | | +--------------+ | | - `HitRect` is typically expanded around\n * | | | | | | the `VisualRect`, but shifted downward.\n * | | | VisualRect | | | - After pressing down, after some delay,\n * | | | | | | and before letting up, the Visual React\n * | | +--------------+ | | will become \"active\". This makes it eligible\n * | | HitRect | | for being highlighted (so long as the\n * | +--------------------+ | press remains in the `PressRect`).\n * | PressRect o |\n * +----------------------|---+\n * Out Region |\n * +-----+ This gap between the `HitRect` and\n * `PressRect` allows a touch to move far away\n * from the original hit rect, and remain\n * highlighted, and eligible for a \"Press\".\n * Customize this via\n * `touchableGetPressRectOffset()`.\n *\n *\n *\n * ======= State Machine =======\n *\n * +-------------+ <---+ RESPONDER_RELEASE\n * |NOT_RESPONDER|\n * +-------------+ <---+ RESPONDER_TERMINATED\n * +\n * | RESPONDER_GRANT (HitRect)\n * v\n * +---------------------------+ DELAY +-------------------------+ T + DELAY +------------------------------+\n * |RESPONDER_INACTIVE_PRESS_IN|+-------->|RESPONDER_ACTIVE_PRESS_IN| +------------> |RESPONDER_ACTIVE_LONG_PRESS_IN|\n * +---------------------------+ +-------------------------+ +------------------------------+\n * + ^ + ^ + ^\n * |LEAVE_ |ENTER_ |LEAVE_ |ENTER_ |LEAVE_ |ENTER_\n * |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT |PRESS_RECT\n * | | | | | |\n * v + v + v +\n * +----------------------------+ DELAY +--------------------------+ +-------------------------------+\n * |RESPONDER_INACTIVE_PRESS_OUT|+------->|RESPONDER_ACTIVE_PRESS_OUT| |RESPONDER_ACTIVE_LONG_PRESS_OUT|\n * +----------------------------+ +--------------------------+ +-------------------------------+\n *\n * T + DELAY => LONG_PRESS_DELAY_MS + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the `touchableHandlePress` abstract method invocation that occurs\n * when a responder is released while in either of the \"Press\" states.\n *\n * The other important side effects are the highlight abstract method\n * invocations (internal callbacks) to be implemented by the mixer.\n *\n *\n * @lends Touchable.prototype\n */\nvar TouchableMixin = {\n // HACK (part 1): basic support for touchable interactions using a keyboard\n componentDidMount: function componentDidMount() {\n warnOnce('TouchableMixin', 'TouchableMixin is deprecated. Please use Pressable.');\n var touchableNode = this.getTouchableNode && this.getTouchableNode();\n if (touchableNode && touchableNode.addEventListener) {\n this._touchableBlurListener = e => {\n if (this._isTouchableKeyboardActive) {\n if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n this.touchableHandleResponderTerminate({\n nativeEvent: e\n });\n }\n this._isTouchableKeyboardActive = false;\n }\n };\n touchableNode.addEventListener('blur', this._touchableBlurListener);\n }\n },\n /**\n * Clear all timeouts on unmount\n */\n componentWillUnmount: function componentWillUnmount() {\n var touchableNode = this.getTouchableNode && this.getTouchableNode();\n if (touchableNode && touchableNode.addEventListener) {\n touchableNode.removeEventListener('blur', this._touchableBlurListener);\n }\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n // Clear DOM nodes\n this.pressInLocation = null;\n this.state.touchable.responderID = null;\n },\n /**\n * It's prefer that mixins determine state in this way, having the class\n * explicitly mix the state in the one and only `getInitialState` method.\n *\n * @return {object} State object to be placed inside of\n * `this.state.touchable`.\n */\n touchableGetInitialState: function touchableGetInitialState() {\n return {\n touchable: {\n touchState: undefined,\n responderID: null\n }\n };\n },\n // ==== Hooks to Gesture Responder system ====\n /**\n * Must return true if embedded in a native platform scroll view.\n */\n touchableHandleResponderTerminationRequest: function touchableHandleResponderTerminationRequest() {\n return !this.props.rejectResponderTermination;\n },\n /**\n * Must return true to start the process of `Touchable`.\n */\n touchableHandleStartShouldSetResponder: function touchableHandleStartShouldSetResponder() {\n return !this.props.disabled;\n },\n /**\n * Return true to cancel press on long press.\n */\n touchableLongPressCancelsPress: function touchableLongPressCancelsPress() {\n return true;\n },\n /**\n * Place as callback for a DOM element's `onResponderGrant` event.\n * @param {SyntheticEvent} e Synthetic event from event system.\n *\n */\n touchableHandleResponderGrant: function touchableHandleResponderGrant(e) {\n var dispatchID = e.currentTarget;\n // Since e is used in a callback invoked on another event loop\n // (as in setTimeout etc), we need to call e.persist() on the\n // event to make sure it doesn't get reused in the event object pool.\n e.persist();\n this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n this.pressOutDelayTimeout = null;\n this.state.touchable.touchState = States.NOT_RESPONDER;\n this.state.touchable.responderID = dispatchID;\n this._receiveSignal(Signals.RESPONDER_GRANT, e);\n var delayMS = this.touchableGetHighlightDelayMS !== undefined ? Math.max(this.touchableGetHighlightDelayMS(), 0) : HIGHLIGHT_DELAY_MS;\n delayMS = isNaN(delayMS) ? HIGHLIGHT_DELAY_MS : delayMS;\n if (delayMS !== 0) {\n this.touchableDelayTimeout = setTimeout(this._handleDelay.bind(this, e), delayMS);\n } else {\n this._handleDelay(e);\n }\n var longDelayMS = this.touchableGetLongPressDelayMS !== undefined ? Math.max(this.touchableGetLongPressDelayMS(), 10) : LONG_PRESS_DELAY_MS;\n longDelayMS = isNaN(longDelayMS) ? LONG_PRESS_DELAY_MS : longDelayMS;\n this.longPressDelayTimeout = setTimeout(this._handleLongDelay.bind(this, e), longDelayMS + delayMS);\n },\n /**\n * Place as callback for a DOM element's `onResponderRelease` event.\n */\n touchableHandleResponderRelease: function touchableHandleResponderRelease(e) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_RELEASE, e);\n },\n /**\n * Place as callback for a DOM element's `onResponderTerminate` event.\n */\n touchableHandleResponderTerminate: function touchableHandleResponderTerminate(e) {\n this.pressInLocation = null;\n this._receiveSignal(Signals.RESPONDER_TERMINATED, e);\n },\n /**\n * Place as callback for a DOM element's `onResponderMove` event.\n */\n touchableHandleResponderMove: function touchableHandleResponderMove(e) {\n // Measurement may not have returned yet.\n if (!this.state.touchable.positionOnActivate) {\n return;\n }\n var positionOnActivate = this.state.touchable.positionOnActivate;\n var dimensionsOnActivate = this.state.touchable.dimensionsOnActivate;\n var pressRectOffset = this.touchableGetPressRectOffset ? this.touchableGetPressRectOffset() : {\n left: PRESS_EXPAND_PX,\n right: PRESS_EXPAND_PX,\n top: PRESS_EXPAND_PX,\n bottom: PRESS_EXPAND_PX\n };\n var pressExpandLeft = pressRectOffset.left;\n var pressExpandTop = pressRectOffset.top;\n var pressExpandRight = pressRectOffset.right;\n var pressExpandBottom = pressRectOffset.bottom;\n var hitSlop = this.touchableGetHitSlop ? this.touchableGetHitSlop() : null;\n if (hitSlop) {\n pressExpandLeft += hitSlop.left || 0;\n pressExpandTop += hitSlop.top || 0;\n pressExpandRight += hitSlop.right || 0;\n pressExpandBottom += hitSlop.bottom || 0;\n }\n var touch = extractSingleTouch(e.nativeEvent);\n var pageX = touch && touch.pageX;\n var pageY = touch && touch.pageY;\n if (this.pressInLocation) {\n var movedDistance = this._getDistanceBetweenPoints(pageX, pageY, this.pressInLocation.pageX, this.pressInLocation.pageY);\n if (movedDistance > LONG_PRESS_ALLOWED_MOVEMENT) {\n this._cancelLongPressDelayTimeout();\n }\n }\n var isTouchWithinActive = pageX > positionOnActivate.left - pressExpandLeft && pageY > positionOnActivate.top - pressExpandTop && pageX < positionOnActivate.left + dimensionsOnActivate.width + pressExpandRight && pageY < positionOnActivate.top + dimensionsOnActivate.height + pressExpandBottom;\n if (isTouchWithinActive) {\n var prevState = this.state.touchable.touchState;\n this._receiveSignal(Signals.ENTER_PRESS_RECT, e);\n var curState = this.state.touchable.touchState;\n if (curState === States.RESPONDER_INACTIVE_PRESS_IN && prevState !== States.RESPONDER_INACTIVE_PRESS_IN) {\n // fix for t7967420\n this._cancelLongPressDelayTimeout();\n }\n } else {\n this._cancelLongPressDelayTimeout();\n this._receiveSignal(Signals.LEAVE_PRESS_RECT, e);\n }\n },\n /**\n * Invoked when the item receives focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * currently has the focus. Most platforms only support a single element being\n * focused at a time, in which case there may have been a previously focused\n * element that was blurred just prior to this. This can be overridden when\n * using `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n touchableHandleFocus: function touchableHandleFocus(e) {\n this.props.onFocus && this.props.onFocus(e);\n },\n /**\n * Invoked when the item loses focus. Mixers might override this to\n * visually distinguish the `VisualRect` so that the user knows that it\n * no longer has focus. Most platforms only support a single element being\n * focused at a time, in which case the focus may have moved to another.\n * This can be overridden when using\n * `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n */\n touchableHandleBlur: function touchableHandleBlur(e) {\n this.props.onBlur && this.props.onBlur(e);\n },\n // ==== Abstract Application Callbacks ====\n\n /**\n * Invoked when the item should be highlighted. Mixers should implement this\n * to visually distinguish the `VisualRect` so that the user knows that\n * releasing a touch will result in a \"selection\" (analog to click).\n *\n * @abstract\n * touchableHandleActivePressIn: function,\n */\n\n /**\n * Invoked when the item is \"active\" (in that it is still eligible to become\n * a \"select\") but the touch has left the `PressRect`. Usually the mixer will\n * want to unhighlight the `VisualRect`. If the user (while pressing) moves\n * back into the `PressRect` `touchableHandleActivePressIn` will be invoked\n * again and the mixer should probably highlight the `VisualRect` again. This\n * event will not fire on an `touchEnd/mouseUp` event, only move events while\n * the user is depressing the mouse/touch.\n *\n * @abstract\n * touchableHandleActivePressOut: function\n */\n\n /**\n * Invoked when the item is \"selected\" - meaning the interaction ended by\n * letting up while the item was either in the state\n * `RESPONDER_ACTIVE_PRESS_IN` or `RESPONDER_INACTIVE_PRESS_IN`.\n *\n * @abstract\n * touchableHandlePress: function\n */\n\n /**\n * Invoked when the item is long pressed - meaning the interaction ended by\n * letting up while the item was in `RESPONDER_ACTIVE_LONG_PRESS_IN`. If\n * `touchableHandleLongPress` is *not* provided, `touchableHandlePress` will\n * be called as it normally is. If `touchableHandleLongPress` is provided, by\n * default any `touchableHandlePress` callback will not be invoked. To\n * override this default behavior, override `touchableLongPressCancelsPress`\n * to return false. As a result, `touchableHandlePress` will be called when\n * lifting up, even if `touchableHandleLongPress` has also been called.\n *\n * @abstract\n * touchableHandleLongPress: function\n */\n\n /**\n * Returns the number of millis to wait before triggering a highlight.\n *\n * @abstract\n * touchableGetHighlightDelayMS: function\n */\n\n /**\n * Returns the amount to extend the `HitRect` into the `PressRect`. Positive\n * numbers mean the size expands outwards.\n *\n * @abstract\n * touchableGetPressRectOffset: function\n */\n\n // ==== Internal Logic ====\n\n /**\n * Measures the `HitRect` node on activation. The Bounding rectangle is with\n * respect to viewport - not page, so adding the `pageXOffset/pageYOffset`\n * should result in points that are in the same coordinate system as an\n * event's `globalX/globalY` data values.\n *\n * - Consider caching this for the lifetime of the component, or possibly\n * being able to share this cache between any `ScrollMap` view.\n *\n * @sideeffects\n * @private\n */\n _remeasureMetricsOnActivation: function _remeasureMetricsOnActivation() {\n var tag = this.state.touchable.responderID;\n if (tag == null) {\n return;\n }\n UIManager.measure(tag, this._handleQueryLayout);\n },\n _handleQueryLayout: function _handleQueryLayout(l, t, w, h, globalX, globalY) {\n //don't do anything UIManager failed to measure node\n if (!l && !t && !w && !h && !globalX && !globalY) {\n return;\n }\n this.state.touchable.positionOnActivate && Position.release(this.state.touchable.positionOnActivate);\n this.state.touchable.dimensionsOnActivate &&\n // $FlowFixMe\n BoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\n this.state.touchable.positionOnActivate = Position.getPooled(globalX, globalY);\n // $FlowFixMe\n this.state.touchable.dimensionsOnActivate = BoundingDimensions.getPooled(w, h);\n },\n _handleDelay: function _handleDelay(e) {\n this.touchableDelayTimeout = null;\n this._receiveSignal(Signals.DELAY, e);\n },\n _handleLongDelay: function _handleLongDelay(e) {\n this.longPressDelayTimeout = null;\n var curState = this.state.touchable.touchState;\n if (curState !== States.RESPONDER_ACTIVE_PRESS_IN && curState !== States.RESPONDER_ACTIVE_LONG_PRESS_IN) {\n console.error('Attempted to transition from state `' + curState + '` to `' + States.RESPONDER_ACTIVE_LONG_PRESS_IN + '`, which is not supported. This is ' + 'most likely due to `Touchable.longPressDelayTimeout` not being cancelled.');\n } else {\n this._receiveSignal(Signals.LONG_PRESS_DETECTED, e);\n }\n },\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n *\n * @param {Signals} signal State machine signal.\n * @throws Error if invalid state transition or unrecognized signal.\n * @sideeffects\n */\n _receiveSignal: function _receiveSignal(signal, e) {\n var responderID = this.state.touchable.responderID;\n var curState = this.state.touchable.touchState;\n var nextState = Transitions[curState] && Transitions[curState][signal];\n if (!responderID && signal === Signals.RESPONDER_RELEASE) {\n return;\n }\n if (!nextState) {\n throw new Error('Unrecognized signal `' + signal + '` or state `' + curState + '` for Touchable responder `' + responderID + '`');\n }\n if (nextState === States.ERROR) {\n throw new Error('Touchable cannot transition from `' + curState + '` to `' + signal + '` for responder `' + responderID + '`');\n }\n if (curState !== nextState) {\n this._performSideEffectsForTransition(curState, nextState, signal, e);\n this.state.touchable.touchState = nextState;\n }\n },\n _cancelLongPressDelayTimeout: function _cancelLongPressDelayTimeout() {\n this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n this.longPressDelayTimeout = null;\n },\n _isHighlight: function _isHighlight(state) {\n return state === States.RESPONDER_ACTIVE_PRESS_IN || state === States.RESPONDER_ACTIVE_LONG_PRESS_IN;\n },\n _savePressInLocation: function _savePressInLocation(e) {\n var touch = extractSingleTouch(e.nativeEvent);\n var pageX = touch && touch.pageX;\n var pageY = touch && touch.pageY;\n var locationX = touch && touch.locationX;\n var locationY = touch && touch.locationY;\n this.pressInLocation = {\n pageX,\n pageY,\n locationX,\n locationY\n };\n },\n _getDistanceBetweenPoints: function _getDistanceBetweenPoints(aX, aY, bX, bY) {\n var deltaX = aX - bX;\n var deltaY = aY - bY;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n },\n /**\n * Will perform a transition between touchable states, and identify any\n * highlighting or unhighlighting that must be performed for this particular\n * transition.\n *\n * @param {States} curState Current Touchable state.\n * @param {States} nextState Next Touchable state.\n * @param {Signal} signal Signal that triggered the transition.\n * @param {Event} e Native event.\n * @sideeffects\n */\n _performSideEffectsForTransition: function _performSideEffectsForTransition(curState, nextState, signal, e) {\n var curIsHighlight = this._isHighlight(curState);\n var newIsHighlight = this._isHighlight(nextState);\n var isFinalSignal = signal === Signals.RESPONDER_TERMINATED || signal === Signals.RESPONDER_RELEASE;\n if (isFinalSignal) {\n this._cancelLongPressDelayTimeout();\n }\n var isInitialTransition = curState === States.NOT_RESPONDER && nextState === States.RESPONDER_INACTIVE_PRESS_IN;\n var isActiveTransition = !IsActive[curState] && IsActive[nextState];\n if (isInitialTransition || isActiveTransition) {\n this._remeasureMetricsOnActivation();\n }\n if (IsPressingIn[curState] && signal === Signals.LONG_PRESS_DETECTED) {\n this.touchableHandleLongPress && this.touchableHandleLongPress(e);\n }\n if (newIsHighlight && !curIsHighlight) {\n this._startHighlight(e);\n } else if (!newIsHighlight && curIsHighlight) {\n this._endHighlight(e);\n }\n if (IsPressingIn[curState] && signal === Signals.RESPONDER_RELEASE) {\n var hasLongPressHandler = !!this.props.onLongPress;\n var pressIsLongButStillCallOnPress = IsLongPressingIn[curState] && (\n // We *are* long pressing.. // But either has no long handler\n !hasLongPressHandler || !this.touchableLongPressCancelsPress()); // or we're told to ignore it.\n\n var shouldInvokePress = !IsLongPressingIn[curState] || pressIsLongButStillCallOnPress;\n if (shouldInvokePress && this.touchableHandlePress) {\n if (!newIsHighlight && !curIsHighlight) {\n // we never highlighted because of delay, but we should highlight now\n this._startHighlight(e);\n this._endHighlight(e);\n }\n this.touchableHandlePress(e);\n }\n }\n this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n this.touchableDelayTimeout = null;\n },\n _playTouchSound: function _playTouchSound() {\n UIManager.playTouchSound();\n },\n _startHighlight: function _startHighlight(e) {\n this._savePressInLocation(e);\n this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);\n },\n _endHighlight: function _endHighlight(e) {\n if (this.touchableHandleActivePressOut) {\n if (this.touchableGetPressOutDelayMS && this.touchableGetPressOutDelayMS()) {\n this.pressOutDelayTimeout = setTimeout(() => {\n this.touchableHandleActivePressOut(e);\n }, this.touchableGetPressOutDelayMS());\n } else {\n this.touchableHandleActivePressOut(e);\n }\n }\n },\n // HACK (part 2): basic support for touchable interactions using a keyboard (including\n // delays and longPress)\n touchableHandleKeyEvent: function touchableHandleKeyEvent(e) {\n var type = e.type,\n key = e.key;\n if (key === 'Enter' || key === ' ') {\n if (type === 'keydown') {\n if (!this._isTouchableKeyboardActive) {\n if (!this.state.touchable.touchState || this.state.touchable.touchState === States.NOT_RESPONDER) {\n this.touchableHandleResponderGrant(e);\n this._isTouchableKeyboardActive = true;\n }\n }\n } else if (type === 'keyup') {\n if (this._isTouchableKeyboardActive) {\n if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n this.touchableHandleResponderRelease(e);\n this._isTouchableKeyboardActive = false;\n }\n }\n }\n e.stopPropagation();\n // prevent the default behaviour unless the Touchable functions as a link\n // and Enter is pressed\n if (!(key === 'Enter' && AccessibilityUtil.propsToAriaRole(this.props) === 'link')) {\n e.preventDefault();\n }\n }\n },\n withoutDefaultFocusAndBlur: {}\n};\n\n/**\n * Provide an optional version of the mixin where `touchableHandleFocus` and\n * `touchableHandleBlur` can be overridden. This allows appropriate defaults to\n * be set on TV platforms, without breaking existing implementations of\n * `Touchable`.\n */\nvar touchableHandleFocus = TouchableMixin.touchableHandleFocus,\n touchableHandleBlur = TouchableMixin.touchableHandleBlur,\n TouchableMixinWithoutDefaultFocusAndBlur = _objectWithoutPropertiesLoose(TouchableMixin, [\"touchableHandleFocus\", \"touchableHandleBlur\"]);\nTouchableMixin.withoutDefaultFocusAndBlur = TouchableMixinWithoutDefaultFocusAndBlur;\nvar Touchable = {\n Mixin: TouchableMixin,\n TOUCH_TARGET_DEBUG: false,\n // Highlights all touchable targets. Toggle with Inspector.\n /**\n * Renders a debugging overlay to visualize touch target with hitSlop (might not work on Android).\n */\n renderDebugView: _ref => {\n var color = _ref.color,\n hitSlop = _ref.hitSlop;\n if (!Touchable.TOUCH_TARGET_DEBUG) {\n return null;\n }\n if (process.env.NODE_ENV !== 'production') {\n throw Error('Touchable.TOUCH_TARGET_DEBUG should not be enabled in prod!');\n }\n var debugHitSlopStyle = {};\n hitSlop = hitSlop || {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n for (var key in hitSlop) {\n debugHitSlopStyle[key] = -hitSlop[key];\n }\n var normalizedColor = normalizeColor(color);\n if (typeof normalizedColor !== 'number') {\n return null;\n }\n var hexColor = '#' + ('00000000' + normalizedColor.toString(16)).substr(-8);\n return /*#__PURE__*/React.createElement(View, {\n pointerEvents: \"none\",\n style: _objectSpread({\n position: 'absolute',\n borderColor: hexColor.slice(0, -2) + '55',\n // More opaque\n borderWidth: 1,\n borderStyle: 'dashed',\n backgroundColor: hexColor.slice(0, -2) + '0F'\n }, debugHitSlopStyle)\n });\n }\n};\nexport default Touchable;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"children\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onHideUnderlay\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"onShowUnderlay\", \"rejectResponderTermination\", \"style\", \"testOnly_pressed\", \"underlayColor\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nfunction createExtraStyles(activeOpacity, underlayColor) {\n return {\n child: {\n opacity: activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.85\n },\n underlay: {\n backgroundColor: underlayColor === undefined ? 'black' : underlayColor\n }\n };\n}\nfunction hasPressHandler(props) {\n return props.onPress != null || props.onPressIn != null || props.onPressOut != null || props.onLongPress != null;\n}\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, which allows\n * the underlay color to show through, darkening or tinting the view.\n *\n * The underlay comes from wrapping the child in a new View, which can affect\n * layout, and sometimes cause unwanted visual artifacts if not used correctly,\n * for example if the backgroundColor of the wrapped view isn't explicitly set\n * to an opaque color.\n *\n * TouchableHighlight must have one child (not zero or more than one).\n * If you wish to have several child components, wrap them in a View.\n */\nfunction TouchableHighlight(props, forwardedRef) {\n warnOnce('TouchableHighlight', 'TouchableHighlight is deprecated. Please use Pressable.');\n var activeOpacity = props.activeOpacity,\n children = props.children,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onHideUnderlay = props.onHideUnderlay,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n onShowUnderlay = props.onShowUnderlay,\n rejectResponderTermination = props.rejectResponderTermination,\n style = props.style,\n testOnly_pressed = props.testOnly_pressed,\n underlayColor = props.underlayColor,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var _useState = useState(testOnly_pressed === true ? createExtraStyles(activeOpacity, underlayColor) : null),\n extraStyles = _useState[0],\n setExtraStyles = _useState[1];\n var showUnderlay = useCallback(() => {\n if (!hasPressHandler(props)) {\n return;\n }\n setExtraStyles(createExtraStyles(activeOpacity, underlayColor));\n if (onShowUnderlay != null) {\n onShowUnderlay();\n }\n }, [activeOpacity, onShowUnderlay, props, underlayColor]);\n var hideUnderlay = useCallback(() => {\n if (testOnly_pressed === true) {\n return;\n }\n if (hasPressHandler(props)) {\n setExtraStyles(null);\n if (onHideUnderlay != null) {\n onHideUnderlay();\n }\n }\n }, [onHideUnderlay, props, testOnly_pressed]);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart(event) {\n showUnderlay();\n if (onPressIn != null) {\n onPressIn(event);\n }\n },\n onPressEnd(event) {\n hideUnderlay();\n if (onPressOut != null) {\n onPressOut(event);\n }\n }\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, showUnderlay, hideUnderlay]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var child = React.Children.only(children);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n accessibilityDisabled: disabled,\n focusable: !disabled && focusable !== false,\n pointerEvents: disabled ? 'box-none' : undefined,\n ref: setRef,\n style: [styles.root, style, !disabled && styles.actionable, extraStyles && extraStyles.underlay]\n }), /*#__PURE__*/React.cloneElement(child, {\n style: [child.props.style, extraStyles && extraStyles.child]\n }));\n}\nvar styles = StyleSheet.create({\n root: {\n userSelect: 'none'\n },\n actionable: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n }\n});\nvar MemoedTouchableHighlight = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableHighlight));\nMemoedTouchableHighlight.displayName = 'TouchableHighlight';\nexport default MemoedTouchableHighlight;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UnimplementedView from '../../modules/UnimplementedView';\nexport default UnimplementedView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"rejectResponderTermination\", \"style\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, dimming it.\n */\nfunction TouchableOpacity(props, forwardedRef) {\n warnOnce('TouchableOpacity', 'TouchableOpacity is deprecated. Please use Pressable.');\n var activeOpacity = props.activeOpacity,\n delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n rejectResponderTermination = props.rejectResponderTermination,\n style = props.style,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n var hostRef = useRef(null);\n var setRef = useMergeRefs(forwardedRef, hostRef);\n var _useState = useState('0s'),\n duration = _useState[0],\n setDuration = _useState[1];\n var _useState2 = useState(null),\n opacityOverride = _useState2[0],\n setOpacityOverride = _useState2[1];\n var setOpacityTo = useCallback((value, duration) => {\n setOpacityOverride(value);\n setDuration(duration ? duration / 1000 + \"s\" : '0s');\n }, [setOpacityOverride, setDuration]);\n var setOpacityActive = useCallback(duration => {\n setOpacityTo(activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.2, duration);\n }, [activeOpacity, setOpacityTo]);\n var setOpacityInactive = useCallback(duration => {\n setOpacityTo(null, duration);\n }, [setOpacityTo]);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart(event) {\n var isGrant = event.dispatchConfig != null ? event.dispatchConfig.registrationName === 'onResponderGrant' : event.type === 'keydown';\n setOpacityActive(isGrant ? 0 : 150);\n if (onPressIn != null) {\n onPressIn(event);\n }\n },\n onPressEnd(event) {\n setOpacityInactive(250);\n if (onPressOut != null) {\n onPressOut(event);\n }\n }\n }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, setOpacityActive, setOpacityInactive]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n accessibilityDisabled: disabled,\n focusable: !disabled && focusable !== false,\n pointerEvents: disabled ? 'box-none' : undefined,\n ref: setRef,\n style: [styles.root, !disabled && styles.actionable, style, opacityOverride != null && {\n opacity: opacityOverride\n }, {\n transitionDuration: duration\n }]\n }));\n}\nvar styles = StyleSheet.create({\n root: {\n transitionProperty: 'opacity',\n transitionDuration: '0.15s',\n userSelect: 'none'\n },\n actionable: {\n cursor: 'pointer',\n touchAction: 'manipulation'\n }\n});\nvar MemoedTouchableOpacity = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableOpacity));\nMemoedTouchableOpacity.displayName = 'TouchableOpacity';\nexport default MemoedTouchableOpacity;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport pick from '../../modules/pick';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = {\n accessibilityDisabled: true,\n accessibilityLabel: true,\n accessibilityLiveRegion: true,\n accessibilityRole: true,\n accessibilityState: true,\n accessibilityValue: true,\n children: true,\n disabled: true,\n focusable: true,\n nativeID: true,\n onBlur: true,\n onFocus: true,\n onLayout: true,\n testID: true\n};\nvar pickProps = props => pick(props, forwardPropsList);\nfunction TouchableWithoutFeedback(props, forwardedRef) {\n warnOnce('TouchableWithoutFeedback', 'TouchableWithoutFeedback is deprecated. Please use Pressable.');\n var delayPressIn = props.delayPressIn,\n delayPressOut = props.delayPressOut,\n delayLongPress = props.delayLongPress,\n disabled = props.disabled,\n focusable = props.focusable,\n onLongPress = props.onLongPress,\n onPress = props.onPress,\n onPressIn = props.onPressIn,\n onPressOut = props.onPressOut,\n rejectResponderTermination = props.rejectResponderTermination;\n var hostRef = useRef(null);\n var pressConfig = useMemo(() => ({\n cancelable: !rejectResponderTermination,\n disabled,\n delayLongPress,\n delayPressStart: delayPressIn,\n delayPressEnd: delayPressOut,\n onLongPress,\n onPress,\n onPressStart: onPressIn,\n onPressEnd: onPressOut\n }), [disabled, delayPressIn, delayPressOut, delayLongPress, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination]);\n var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n var element = React.Children.only(props.children);\n var children = [element.props.children];\n var supportedProps = pickProps(props);\n supportedProps.accessibilityDisabled = disabled;\n supportedProps.focusable = !disabled && focusable !== false;\n supportedProps.ref = useMergeRefs(forwardedRef, hostRef, element.ref);\n var elementProps = Object.assign(supportedProps, pressEventHandlers);\n return /*#__PURE__*/React.cloneElement(element, elementProps, ...children);\n}\nvar MemoedTouchableWithoutFeedback = /*#__PURE__*/React.memo( /*#__PURE__*/React.forwardRef(TouchableWithoutFeedback));\nMemoedTouchableWithoutFeedback.displayName = 'TouchableWithoutFeedback';\nexport default MemoedTouchableWithoutFeedback;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport setValueForStyles from '../../modules/setValueForStyles';\nvar getRect = node => {\n var height = node.offsetHeight;\n var width = node.offsetWidth;\n var left = node.offsetLeft;\n var top = node.offsetTop;\n node = node.offsetParent;\n while (node && node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n left += node.offsetLeft + node.clientLeft - node.scrollLeft;\n top += node.offsetTop + node.clientTop - node.scrollTop;\n node = node.offsetParent;\n }\n top -= window.scrollY;\n left -= window.scrollX;\n return {\n width,\n height,\n top,\n left\n };\n};\nvar measureLayout = (node, relativeToNativeNode, callback) => {\n var relativeNode = relativeToNativeNode || node && node.parentNode;\n if (node && relativeNode) {\n setTimeout(() => {\n if (node.isConnected && relativeNode.isConnected) {\n var relativeRect = getRect(relativeNode);\n var _getRect = getRect(node),\n height = _getRect.height,\n left = _getRect.left,\n top = _getRect.top,\n width = _getRect.width;\n var x = left - relativeRect.left;\n var y = top - relativeRect.top;\n callback(x, y, width, height, left, top);\n }\n }, 0);\n }\n};\nvar elementsToIgnore = {\n A: true,\n BODY: true,\n INPUT: true,\n SELECT: true,\n TEXTAREA: true\n};\nvar UIManager = {\n blur(node) {\n try {\n node.blur();\n } catch (err) {}\n },\n focus(node) {\n try {\n var name = node.nodeName;\n // A tabIndex of -1 allows element to be programmatically focused but\n // prevents keyboard focus. We don't want to set the tabindex value on\n // elements that should not prevent keyboard focus.\n if (node.getAttribute('tabIndex') == null && node.isContentEditable !== true && elementsToIgnore[name] == null) {\n node.setAttribute('tabIndex', '-1');\n }\n node.focus();\n } catch (err) {}\n },\n measure(node, callback) {\n measureLayout(node, null, callback);\n },\n measureInWindow(node, callback) {\n if (node) {\n setTimeout(() => {\n var _getRect2 = getRect(node),\n height = _getRect2.height,\n left = _getRect2.left,\n top = _getRect2.top,\n width = _getRect2.width;\n callback(left, top, width, height);\n }, 0);\n }\n },\n measureLayout(node, relativeToNativeNode, onFail, onSuccess) {\n measureLayout(node, relativeToNativeNode, onSuccess);\n },\n updateView(node, props) {\n for (var prop in props) {\n if (!Object.prototype.hasOwnProperty.call(props, prop)) {\n continue;\n }\n var value = props[prop];\n switch (prop) {\n case 'style':\n {\n setValueForStyles(node, value);\n break;\n }\n case 'class':\n case 'className':\n {\n node.setAttribute('class', value);\n break;\n }\n case 'text':\n case 'value':\n // native platforms use `text` prop to replace text input value\n node.value = value;\n break;\n default:\n node.setAttribute(prop, value);\n }\n }\n },\n configureNextLayoutAnimation(config, onAnimationDidEnd) {\n onAnimationDidEnd();\n },\n // mocks\n setLayoutAnimationEnabledExperimental() {}\n};\nexport default UIManager;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar vibrate = pattern => {\n if ('vibrate' in window.navigator) {\n window.navigator.vibrate(pattern);\n }\n};\nvar Vibration = {\n cancel() {\n vibrate(0);\n },\n vibrate(pattern) {\n if (pattern === void 0) {\n pattern = 400;\n }\n vibrate(pattern);\n }\n};\nexport default Vibration;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"onLayout\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n href: true,\n lang: true,\n onScroll: true,\n onWheel: true,\n pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar View = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var hrefAttrs = props.hrefAttrs,\n onLayout = props.onLayout,\n onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n onResponderEnd = props.onResponderEnd,\n onResponderGrant = props.onResponderGrant,\n onResponderMove = props.onResponderMove,\n onResponderReject = props.onResponderReject,\n onResponderRelease = props.onResponderRelease,\n onResponderStart = props.onResponderStart,\n onResponderTerminate = props.onResponderTerminate,\n onResponderTerminationRequest = props.onResponderTerminationRequest,\n onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = props.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n if (process.env.NODE_ENV !== 'production') {\n React.Children.toArray(props.children).forEach(item => {\n if (typeof item === 'string') {\n console.error(\"Unexpected text node: \" + item + \". A text node cannot be a child of a .\");\n }\n });\n }\n var hasTextAncestor = React.useContext(TextAncestorContext);\n var hostRef = React.useRef(null);\n var _useLocaleContext = useLocaleContext(),\n contextDirection = _useLocaleContext.direction;\n useElementLayout(hostRef, onLayout);\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture\n });\n var component = 'div';\n var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n var componentDirection = props.dir || langDirection;\n var writingDirection = componentDirection || contextDirection;\n var supportedProps = pickProps(rest);\n supportedProps.dir = componentDirection;\n supportedProps.style = [styles.view$raw, hasTextAncestor && styles.inline, props.style];\n if (props.href != null) {\n component = 'a';\n if (hrefAttrs != null) {\n var download = hrefAttrs.download,\n rel = hrefAttrs.rel,\n target = hrefAttrs.target;\n if (download != null) {\n supportedProps.download = download;\n }\n if (rel != null) {\n supportedProps.rel = rel;\n }\n if (typeof target === 'string') {\n supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n }\n }\n }\n var platformMethodsRef = usePlatformMethods(supportedProps);\n var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n supportedProps.ref = setRef;\n return createElement(component, supportedProps, {\n writingDirection\n });\n});\nView.displayName = 'View';\nvar styles = StyleSheet.create({\n view$raw: {\n alignItems: 'stretch',\n backgroundColor: 'transparent',\n border: '0 solid black',\n boxSizing: 'border-box',\n display: 'flex',\n flexBasis: 'auto',\n flexDirection: 'column',\n flexShrink: 0,\n listStyle: 'none',\n margin: 0,\n minHeight: 0,\n minWidth: 0,\n padding: 0,\n position: 'relative',\n textDecoration: 'none',\n zIndex: 0\n },\n inline: {\n display: 'inline-flex'\n }\n});\nexport default View;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport VirtualizedList from '../../vendor/react-native/VirtualizedList';\nexport default VirtualizedList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React from 'react';\nimport UnimplementedView from '../../modules/UnimplementedView';\nfunction YellowBox(props) {\n return /*#__PURE__*/React.createElement(UnimplementedView, props);\n}\nYellowBox.ignoreWarnings = () => {};\nexport default YellowBox;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport createDOMProps from '../../modules/createDOMProps';\nimport React from 'react';\nimport { LocaleProvider } from '../../modules/useLocale';\nvar createElement = (component, props, options) => {\n // Use equivalent platform elements where possible.\n var accessibilityComponent;\n if (component && component.constructor === String) {\n accessibilityComponent = AccessibilityUtil.propsToAccessibilityComponent(props);\n }\n var Component = accessibilityComponent || component;\n var domProps = createDOMProps(Component, props, options);\n var element = /*#__PURE__*/React.createElement(Component, domProps);\n\n // Update locale context if element's writing direction prop changes\n var elementWithLocaleProvider = domProps.dir ? /*#__PURE__*/React.createElement(LocaleProvider, {\n children: element,\n direction: domProps.dir,\n locale: domProps.lang\n }) : element;\n return elementWithLocaleProvider;\n};\nexport default createElement;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { findDOMNode } from 'react-dom';\n\n/**\n * @deprecated imperatively finding the DOM element of a react component has been deprecated in React 18.\n * You should use ref properties on the component instead.\n */\nvar findNodeHandle = component => {\n var node;\n try {\n node = findDOMNode(component);\n } catch (e) {}\n return node;\n};\nexport default findNodeHandle;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from '@react-native/normalize-color';\nvar processColor = color => {\n if (color === undefined || color === null) {\n return color;\n }\n\n // convert number and hex\n var int32Color = normalizeColor(color);\n if (int32Color === undefined || int32Color === null) {\n return undefined;\n }\n int32Color = (int32Color << 24 | int32Color >>> 8) >>> 0;\n return int32Color;\n};\nexport default processColor;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { hydrate as domLegacyHydrate, render as domLegacyRender } from 'react-dom';\nimport { createRoot as domCreateRoot, hydrateRoot as domHydrateRoot } from 'react-dom/client';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport { createSheet } from '../StyleSheet/dom';\nexport function hydrate(element, root) {\n createSheet(root);\n return domHydrateRoot(root, element);\n}\nexport function render(element, root) {\n createSheet(root);\n var reactRoot = domCreateRoot(root);\n reactRoot.render(element);\n return reactRoot;\n}\nexport function hydrateLegacy(element, root, callback) {\n createSheet(root);\n domLegacyHydrate(element, root, callback);\n return {\n unmount: function unmount() {\n return unmountComponentAtNode(root);\n }\n };\n}\nexport default function renderLegacy(element, root, callback) {\n createSheet(root);\n domLegacyRender(element, root, callback);\n return {\n unmount: function unmount() {\n return unmountComponentAtNode(root);\n }\n };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { unmountComponentAtNode } from 'react-dom';\nexport default unmountComponentAtNode;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport Appearance from '../Appearance';\nexport default function useColorScheme() {\n var _React$useState = React.useState(Appearance.getColorScheme()),\n colorScheme = _React$useState[0],\n setColorScheme = _React$useState[1];\n React.useEffect(() => {\n function listener(appearance) {\n setColorScheme(appearance.colorScheme);\n }\n var _Appearance$addChange = Appearance.addChangeListener(listener),\n remove = _Appearance$addChange.remove;\n return remove;\n });\n return colorScheme;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { useLocaleContext } from '../../modules/useLocale';\nexport default useLocaleContext;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport Dimensions from '../Dimensions';\nimport { useEffect, useState } from 'react';\nexport default function useWindowDimensions() {\n var _useState = useState(() => Dimensions.get('window')),\n dims = _useState[0],\n setDims = _useState[1];\n useEffect(() => {\n function handleChange(_ref) {\n var window = _ref.window;\n if (window != null) {\n setDims(window);\n }\n }\n Dimensions.addEventListener('change', handleChange);\n // We might have missed an update between calling `get` in render and\n // `addEventListener` in this handler, so we set it here. If there was\n // no change, React will filter out this update as a no-op.\n setDims(Dimensions.get('window'));\n return () => {\n Dimensions.removeEventListener('change', handleChange);\n };\n }, []);\n return dims;\n}","export { default as unstable_createElement } from './exports/createElement';\nexport { default as findNodeHandle } from './exports/findNodeHandle';\nexport { default as processColor } from './exports/processColor';\nexport { default as render } from './exports/render';\nexport { default as unmountComponentAtNode } from './exports/unmountComponentAtNode';\nexport { default as NativeModules } from './exports/NativeModules';\n\n// APIs\nexport { default as AccessibilityInfo } from './exports/AccessibilityInfo';\nexport { default as Alert } from './exports/Alert';\nexport { default as Animated } from './exports/Animated';\nexport { default as Appearance } from './exports/Appearance';\nexport { default as AppRegistry } from './exports/AppRegistry';\nexport { default as AppState } from './exports/AppState';\nexport { default as BackHandler } from './exports/BackHandler';\nexport { default as Clipboard } from './exports/Clipboard';\nexport { default as Dimensions } from './exports/Dimensions';\nexport { default as Easing } from './exports/Easing';\nexport { default as I18nManager } from './exports/I18nManager';\nexport { default as Keyboard } from './exports/Keyboard';\nexport { default as InteractionManager } from './exports/InteractionManager';\nexport { default as LayoutAnimation } from './exports/LayoutAnimation';\nexport { default as Linking } from './exports/Linking';\nexport { default as NativeEventEmitter } from './exports/NativeEventEmitter';\nexport { default as PanResponder } from './exports/PanResponder';\nexport { default as PixelRatio } from './exports/PixelRatio';\nexport { default as Platform } from './exports/Platform';\nexport { default as Share } from './exports/Share';\nexport { default as StyleSheet } from './exports/StyleSheet';\nexport { default as UIManager } from './exports/UIManager';\nexport { default as Vibration } from './exports/Vibration';\n\n// components\nexport { default as ActivityIndicator } from './exports/ActivityIndicator';\nexport { default as Button } from './exports/Button';\nexport { default as CheckBox } from './exports/CheckBox';\nexport { default as FlatList } from './exports/FlatList';\nexport { default as Image } from './exports/Image';\nexport { default as ImageBackground } from './exports/ImageBackground';\nexport { default as KeyboardAvoidingView } from './exports/KeyboardAvoidingView';\nexport { default as Modal } from './exports/Modal';\nexport { default as Picker } from './exports/Picker';\nexport { default as Pressable } from './exports/Pressable';\nexport { default as ProgressBar } from './exports/ProgressBar';\nexport { default as RefreshControl } from './exports/RefreshControl';\nexport { default as SafeAreaView } from './exports/SafeAreaView';\nexport { default as ScrollView } from './exports/ScrollView';\nexport { default as SectionList } from './exports/SectionList';\nexport { default as StatusBar } from './exports/StatusBar';\nexport { default as Switch } from './exports/Switch';\nexport { default as Text } from './exports/Text';\nexport { default as TextInput } from './exports/TextInput';\nexport { default as Touchable } from './exports/Touchable';\nexport { default as TouchableHighlight } from './exports/TouchableHighlight';\nexport { default as TouchableNativeFeedback } from './exports/TouchableNativeFeedback';\nexport { default as TouchableOpacity } from './exports/TouchableOpacity';\nexport { default as TouchableWithoutFeedback } from './exports/TouchableWithoutFeedback';\nexport { default as View } from './exports/View';\nexport { default as VirtualizedList } from './exports/VirtualizedList';\nexport { default as YellowBox } from './exports/YellowBox';\nexport { default as LogBox } from './exports/LogBox';\n\n// plugins\nexport { default as DeviceEventEmitter } from './exports/DeviceEventEmitter';\n\n// hooks\nexport { default as useColorScheme } from './exports/useColorScheme';\nexport { default as useLocaleContext } from './exports/useLocaleContext';\nexport { default as useWindowDimensions } from './exports/useWindowDimensions';","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isDisabled from './isDisabled';\nimport propsToAccessibilityComponent from './propsToAccessibilityComponent';\nimport propsToAriaRole from './propsToAriaRole';\nvar AccessibilityUtil = {\n isDisabled,\n propsToAccessibilityComponent,\n propsToAriaRole\n};\nexport default AccessibilityUtil;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isDisabled = props => props.disabled || Array.isArray(props.accessibilityStates) && props.accessibilityStates.indexOf('disabled') > -1;\nexport default isDisabled;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport propsToAriaRole from './propsToAriaRole';\nvar roleComponents = {\n article: 'article',\n banner: 'header',\n blockquote: 'blockquote',\n button: 'button',\n code: 'code',\n complementary: 'aside',\n contentinfo: 'footer',\n deletion: 'del',\n emphasis: 'em',\n figure: 'figure',\n insertion: 'ins',\n form: 'form',\n list: 'ul',\n listitem: 'li',\n main: 'main',\n navigation: 'nav',\n paragraph: 'p',\n region: 'section',\n strong: 'strong'\n};\nvar emptyObject = {};\nvar propsToAccessibilityComponent = function propsToAccessibilityComponent(props) {\n if (props === void 0) {\n props = emptyObject;\n }\n // special-case for \"label\" role which doesn't map to an ARIA role\n if (props.accessibilityRole === 'label') {\n return 'label';\n }\n var role = propsToAriaRole(props);\n if (role) {\n if (role === 'heading') {\n var level = props.accessibilityLevel || props['aria-level'];\n if (level != null) {\n return \"h\" + level;\n }\n return 'h1';\n }\n return roleComponents[role];\n }\n};\nexport default propsToAccessibilityComponent;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar accessibilityRoleToWebRole = {\n adjustable: 'slider',\n button: 'button',\n header: 'heading',\n image: 'img',\n imagebutton: null,\n keyboardkey: null,\n label: null,\n link: 'link',\n none: 'presentation',\n search: 'search',\n summary: 'region',\n text: null\n};\nvar propsToAriaRole = _ref => {\n var accessibilityRole = _ref.accessibilityRole,\n role = _ref.role;\n var _role = role || accessibilityRole;\n if (_role) {\n var inferredRole = accessibilityRoleToWebRole[_role];\n if (inferredRole !== null) {\n // ignore roles that don't map to web\n return inferredRole || _role;\n }\n }\n};\nexport default propsToAriaRole;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar assets = [];\nexport function registerAsset(asset) {\n // `push` returns new array length, so the first asset will\n // get id 1 (not 0) to make the value truthy\n return assets.push(asset);\n}\nexport function getAssetByID(assetId) {\n return assets[assetId - 1];\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar dataUriPattern = /^data:/;\nexport class ImageUriCache {\n static has(uri) {\n var entries = ImageUriCache._entries;\n var isDataUri = dataUriPattern.test(uri);\n return isDataUri || Boolean(entries[uri]);\n }\n static add(uri) {\n var entries = ImageUriCache._entries;\n var lastUsedTimestamp = Date.now();\n if (entries[uri]) {\n entries[uri].lastUsedTimestamp = lastUsedTimestamp;\n entries[uri].refCount += 1;\n } else {\n entries[uri] = {\n lastUsedTimestamp,\n refCount: 1\n };\n }\n }\n static remove(uri) {\n var entries = ImageUriCache._entries;\n if (entries[uri]) {\n entries[uri].refCount -= 1;\n }\n // Free up entries when the cache is \"full\"\n ImageUriCache._cleanUpIfNeeded();\n }\n static _cleanUpIfNeeded() {\n var entries = ImageUriCache._entries;\n var imageUris = Object.keys(entries);\n if (imageUris.length + 1 > ImageUriCache._maximumEntries) {\n var leastRecentlyUsedKey;\n var leastRecentlyUsedEntry;\n imageUris.forEach(uri => {\n var entry = entries[uri];\n if ((!leastRecentlyUsedEntry || entry.lastUsedTimestamp < leastRecentlyUsedEntry.lastUsedTimestamp) && entry.refCount === 0) {\n leastRecentlyUsedKey = uri;\n leastRecentlyUsedEntry = entry;\n }\n });\n if (leastRecentlyUsedKey) {\n delete entries[leastRecentlyUsedKey];\n }\n }\n }\n}\nImageUriCache._maximumEntries = 256;\nImageUriCache._entries = {};\nvar id = 0;\nvar requests = {};\nvar ImageLoader = {\n abort(requestId) {\n var image = requests[\"\" + requestId];\n if (image) {\n image.onerror = null;\n image.onload = null;\n image = null;\n delete requests[\"\" + requestId];\n }\n },\n getSize(uri, success, failure) {\n var complete = false;\n var interval = setInterval(callback, 16);\n var requestId = ImageLoader.load(uri, callback, errorCallback);\n function callback() {\n var image = requests[\"\" + requestId];\n if (image) {\n var naturalHeight = image.naturalHeight,\n naturalWidth = image.naturalWidth;\n if (naturalHeight && naturalWidth) {\n success(naturalWidth, naturalHeight);\n complete = true;\n }\n }\n if (complete) {\n ImageLoader.abort(requestId);\n clearInterval(interval);\n }\n }\n function errorCallback() {\n if (typeof failure === 'function') {\n failure();\n }\n ImageLoader.abort(requestId);\n clearInterval(interval);\n }\n },\n has(uri) {\n return ImageUriCache.has(uri);\n },\n load(uri, onLoad, onError) {\n id += 1;\n var image = new window.Image();\n image.onerror = onError;\n image.onload = e => {\n // avoid blocking the main thread\n var onDecode = () => onLoad({\n nativeEvent: e\n });\n if (typeof image.decode === 'function') {\n // Safari currently throws exceptions when decoding svgs.\n // We want to catch that error and allow the load handler\n // to be forwarded to the onLoad handler in this case\n image.decode().then(onDecode, onDecode);\n } else {\n setTimeout(onDecode, 0);\n }\n };\n image.src = uri;\n requests[\"\" + id] = image;\n return id;\n },\n prefetch(uri) {\n return new Promise((resolve, reject) => {\n ImageLoader.load(uri, () => {\n // Add the uri to the cache so it can be immediately displayed when used\n // but also immediately remove it to correctly reflect that it has no active references\n ImageUriCache.add(uri);\n ImageUriCache.remove(uri);\n resolve();\n }, reject);\n });\n },\n queryCache(uris) {\n var result = {};\n uris.forEach(u => {\n if (ImageUriCache.has(u)) {\n result[u] = 'disk/memory';\n }\n });\n return Promise.resolve(result);\n }\n};\nexport default ImageLoader;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\n\n/**\n * This class is responsible for coordinating the \"focused\"\n * state for TextInputs. All calls relating to the keyboard\n * should be funneled through here\n */\nvar TextInputState = {\n /**\n * Internal state\n */\n _currentlyFocusedNode: null,\n /**\n * Returns the ID of the currently focused text field, if one exists\n * If no text field is focused it returns null\n */\n currentlyFocusedField() {\n if (document.activeElement !== this._currentlyFocusedNode) {\n this._currentlyFocusedNode = null;\n }\n return this._currentlyFocusedNode;\n },\n /**\n * @param {Object} TextInputID id of the text field to focus\n * Focuses the specified text field\n * noop if the text field was already focused\n */\n focusTextInput(textFieldNode) {\n if (textFieldNode !== null) {\n this._currentlyFocusedNode = textFieldNode;\n if (document.activeElement !== textFieldNode) {\n UIManager.focus(textFieldNode);\n }\n }\n },\n /**\n * @param {Object} textFieldNode id of the text field to focus\n * Unfocuses the specified text field\n * noop if it wasn't focused\n */\n blurTextInput(textFieldNode) {\n if (textFieldNode !== null) {\n this._currentlyFocusedNode = null;\n if (document.activeElement === textFieldNode) {\n UIManager.blur(textFieldNode);\n }\n }\n }\n};\nexport default TextInputState;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../../exports/View';\nimport React from 'react';\n\n/**\n * Common implementation for a simple stubbed view.\n */\nclass UnimplementedView extends React.Component {\n render() {\n return /*#__PURE__*/React.createElement(View, {\n style: [unimplementedViewStyles, this.props.style]\n }, this.props.children);\n }\n}\nvar unimplementedViewStyles = process.env.NODE_ENV !== 'production' ? {\n alignSelf: 'flex-start',\n borderColor: 'red',\n borderWidth: 1\n} : {};\nexport default UnimplementedView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use strict';\n\nimport canUseDOM from '../canUseDom';\nvar emptyFunction = () => {};\nfunction supportsPassiveEvents() {\n var supported = false;\n // Check if browser supports event with passive listeners\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n if (canUseDOM) {\n try {\n var options = {};\n Object.defineProperty(options, 'passive', {\n get() {\n supported = true;\n return false;\n }\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {}\n }\n return supported;\n}\nvar canUsePassiveEvents = supportsPassiveEvents();\nfunction getOptions(options) {\n if (options == null) {\n return false;\n }\n return canUsePassiveEvents ? options : Boolean(options.capture);\n}\n\n/**\n * Shim generic API compatibility with ReactDOM's synthetic events, without needing the\n * large amount of code ReactDOM uses to do this. Ideally we wouldn't use a synthetic\n * event wrapper at all.\n */\nfunction isPropagationStopped() {\n return this.cancelBubble;\n}\nfunction isDefaultPrevented() {\n return this.defaultPrevented;\n}\nfunction normalizeEvent(event) {\n event.nativeEvent = event;\n event.persist = emptyFunction;\n event.isDefaultPrevented = isDefaultPrevented;\n event.isPropagationStopped = isPropagationStopped;\n return event;\n}\n\n/**\n *\n */\nexport function addEventListener(target, type, listener, options) {\n var opts = getOptions(options);\n var compatListener = e => listener(normalizeEvent(e));\n target.addEventListener(type, compatListener, opts);\n return function removeEventListener() {\n if (target != null) {\n target.removeEventListener(type, compatListener, opts);\n }\n };\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport default canUseDOM;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-activedescendant\", \"accessibilityActiveDescendant\", \"aria-atomic\", \"accessibilityAtomic\", \"aria-autocomplete\", \"accessibilityAutoComplete\", \"aria-busy\", \"accessibilityBusy\", \"aria-checked\", \"accessibilityChecked\", \"aria-colcount\", \"accessibilityColumnCount\", \"aria-colindex\", \"accessibilityColumnIndex\", \"aria-colspan\", \"accessibilityColumnSpan\", \"aria-controls\", \"accessibilityControls\", \"aria-current\", \"accessibilityCurrent\", \"aria-describedby\", \"accessibilityDescribedBy\", \"aria-details\", \"accessibilityDetails\", \"aria-disabled\", \"accessibilityDisabled\", \"aria-errormessage\", \"accessibilityErrorMessage\", \"aria-expanded\", \"accessibilityExpanded\", \"aria-flowto\", \"accessibilityFlowTo\", \"aria-haspopup\", \"accessibilityHasPopup\", \"aria-hidden\", \"accessibilityHidden\", \"aria-invalid\", \"accessibilityInvalid\", \"aria-keyshortcuts\", \"accessibilityKeyShortcuts\", \"aria-label\", \"accessibilityLabel\", \"aria-labelledby\", \"accessibilityLabelledBy\", \"aria-level\", \"accessibilityLevel\", \"aria-live\", \"accessibilityLiveRegion\", \"aria-modal\", \"accessibilityModal\", \"aria-multiline\", \"accessibilityMultiline\", \"aria-multiselectable\", \"accessibilityMultiSelectable\", \"aria-orientation\", \"accessibilityOrientation\", \"aria-owns\", \"accessibilityOwns\", \"aria-placeholder\", \"accessibilityPlaceholder\", \"aria-posinset\", \"accessibilityPosInSet\", \"aria-pressed\", \"accessibilityPressed\", \"aria-readonly\", \"accessibilityReadOnly\", \"aria-required\", \"accessibilityRequired\", \"role\", \"accessibilityRole\", \"aria-roledescription\", \"accessibilityRoleDescription\", \"aria-rowcount\", \"accessibilityRowCount\", \"aria-rowindex\", \"accessibilityRowIndex\", \"aria-rowspan\", \"accessibilityRowSpan\", \"aria-selected\", \"accessibilitySelected\", \"aria-setsize\", \"accessibilitySetSize\", \"aria-sort\", \"accessibilitySort\", \"aria-valuemax\", \"accessibilityValueMax\", \"aria-valuemin\", \"accessibilityValueMin\", \"aria-valuenow\", \"accessibilityValueNow\", \"aria-valuetext\", \"accessibilityValueText\", \"dataSet\", \"focusable\", \"id\", \"nativeID\", \"pointerEvents\", \"style\", \"tabIndex\", \"testID\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AccessibilityUtil from '../AccessibilityUtil';\nimport StyleSheet from '../../exports/StyleSheet';\nimport { warnOnce } from '../warnOnce';\nvar emptyObject = {};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar uppercasePattern = /[A-Z]/g;\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase();\n}\nfunction hyphenateString(str) {\n return str.replace(uppercasePattern, toHyphenLower);\n}\nfunction processIDRefList(idRefList) {\n return isArray(idRefList) ? idRefList.join(' ') : idRefList;\n}\nvar pointerEventsStyles = StyleSheet.create({\n auto: {\n pointerEvents: 'auto'\n },\n 'box-none': {\n pointerEvents: 'box-none'\n },\n 'box-only': {\n pointerEvents: 'box-only'\n },\n none: {\n pointerEvents: 'none'\n }\n});\nvar createDOMProps = (elementType, props, options) => {\n if (!props) {\n props = emptyObject;\n }\n var _props = props,\n ariaActiveDescendant = _props['aria-activedescendant'],\n accessibilityActiveDescendant = _props.accessibilityActiveDescendant,\n ariaAtomic = _props['aria-atomic'],\n accessibilityAtomic = _props.accessibilityAtomic,\n ariaAutoComplete = _props['aria-autocomplete'],\n accessibilityAutoComplete = _props.accessibilityAutoComplete,\n ariaBusy = _props['aria-busy'],\n accessibilityBusy = _props.accessibilityBusy,\n ariaChecked = _props['aria-checked'],\n accessibilityChecked = _props.accessibilityChecked,\n ariaColumnCount = _props['aria-colcount'],\n accessibilityColumnCount = _props.accessibilityColumnCount,\n ariaColumnIndex = _props['aria-colindex'],\n accessibilityColumnIndex = _props.accessibilityColumnIndex,\n ariaColumnSpan = _props['aria-colspan'],\n accessibilityColumnSpan = _props.accessibilityColumnSpan,\n ariaControls = _props['aria-controls'],\n accessibilityControls = _props.accessibilityControls,\n ariaCurrent = _props['aria-current'],\n accessibilityCurrent = _props.accessibilityCurrent,\n ariaDescribedBy = _props['aria-describedby'],\n accessibilityDescribedBy = _props.accessibilityDescribedBy,\n ariaDetails = _props['aria-details'],\n accessibilityDetails = _props.accessibilityDetails,\n ariaDisabled = _props['aria-disabled'],\n accessibilityDisabled = _props.accessibilityDisabled,\n ariaErrorMessage = _props['aria-errormessage'],\n accessibilityErrorMessage = _props.accessibilityErrorMessage,\n ariaExpanded = _props['aria-expanded'],\n accessibilityExpanded = _props.accessibilityExpanded,\n ariaFlowTo = _props['aria-flowto'],\n accessibilityFlowTo = _props.accessibilityFlowTo,\n ariaHasPopup = _props['aria-haspopup'],\n accessibilityHasPopup = _props.accessibilityHasPopup,\n ariaHidden = _props['aria-hidden'],\n accessibilityHidden = _props.accessibilityHidden,\n ariaInvalid = _props['aria-invalid'],\n accessibilityInvalid = _props.accessibilityInvalid,\n ariaKeyShortcuts = _props['aria-keyshortcuts'],\n accessibilityKeyShortcuts = _props.accessibilityKeyShortcuts,\n ariaLabel = _props['aria-label'],\n accessibilityLabel = _props.accessibilityLabel,\n ariaLabelledBy = _props['aria-labelledby'],\n accessibilityLabelledBy = _props.accessibilityLabelledBy,\n ariaLevel = _props['aria-level'],\n accessibilityLevel = _props.accessibilityLevel,\n ariaLive = _props['aria-live'],\n accessibilityLiveRegion = _props.accessibilityLiveRegion,\n ariaModal = _props['aria-modal'],\n accessibilityModal = _props.accessibilityModal,\n ariaMultiline = _props['aria-multiline'],\n accessibilityMultiline = _props.accessibilityMultiline,\n ariaMultiSelectable = _props['aria-multiselectable'],\n accessibilityMultiSelectable = _props.accessibilityMultiSelectable,\n ariaOrientation = _props['aria-orientation'],\n accessibilityOrientation = _props.accessibilityOrientation,\n ariaOwns = _props['aria-owns'],\n accessibilityOwns = _props.accessibilityOwns,\n ariaPlaceholder = _props['aria-placeholder'],\n accessibilityPlaceholder = _props.accessibilityPlaceholder,\n ariaPosInSet = _props['aria-posinset'],\n accessibilityPosInSet = _props.accessibilityPosInSet,\n ariaPressed = _props['aria-pressed'],\n accessibilityPressed = _props.accessibilityPressed,\n ariaReadOnly = _props['aria-readonly'],\n accessibilityReadOnly = _props.accessibilityReadOnly,\n ariaRequired = _props['aria-required'],\n accessibilityRequired = _props.accessibilityRequired,\n ariaRole = _props.role,\n accessibilityRole = _props.accessibilityRole,\n ariaRoleDescription = _props['aria-roledescription'],\n accessibilityRoleDescription = _props.accessibilityRoleDescription,\n ariaRowCount = _props['aria-rowcount'],\n accessibilityRowCount = _props.accessibilityRowCount,\n ariaRowIndex = _props['aria-rowindex'],\n accessibilityRowIndex = _props.accessibilityRowIndex,\n ariaRowSpan = _props['aria-rowspan'],\n accessibilityRowSpan = _props.accessibilityRowSpan,\n ariaSelected = _props['aria-selected'],\n accessibilitySelected = _props.accessibilitySelected,\n ariaSetSize = _props['aria-setsize'],\n accessibilitySetSize = _props.accessibilitySetSize,\n ariaSort = _props['aria-sort'],\n accessibilitySort = _props.accessibilitySort,\n ariaValueMax = _props['aria-valuemax'],\n accessibilityValueMax = _props.accessibilityValueMax,\n ariaValueMin = _props['aria-valuemin'],\n accessibilityValueMin = _props.accessibilityValueMin,\n ariaValueNow = _props['aria-valuenow'],\n accessibilityValueNow = _props.accessibilityValueNow,\n ariaValueText = _props['aria-valuetext'],\n accessibilityValueText = _props.accessibilityValueText,\n dataSet = _props.dataSet,\n focusable = _props.focusable,\n id = _props.id,\n nativeID = _props.nativeID,\n pointerEvents = _props.pointerEvents,\n style = _props.style,\n tabIndex = _props.tabIndex,\n testID = _props.testID,\n domProps = _objectWithoutPropertiesLoose(_props, _excluded);\n if (accessibilityDisabled != null) {\n warnOnce('accessibilityDisabled', \"accessibilityDisabled is deprecated.\");\n }\n var disabled = ariaDisabled || accessibilityDisabled;\n var role = AccessibilityUtil.propsToAriaRole(props);\n\n // ACCESSIBILITY\n if (accessibilityActiveDescendant != null) {\n warnOnce('accessibilityActiveDescendant', \"accessibilityActiveDescendant is deprecated. Use aria-activedescendant.\");\n }\n var _ariaActiveDescendant = ariaActiveDescendant != null ? ariaActiveDescendant : accessibilityActiveDescendant;\n if (_ariaActiveDescendant != null) {\n domProps['aria-activedescendant'] = _ariaActiveDescendant;\n }\n if (accessibilityAtomic != null) {\n warnOnce('accessibilityAtomic', \"accessibilityAtomic is deprecated. Use aria-atomic.\");\n }\n var _ariaAtomic = ariaAtomic != null ? ariaActiveDescendant : accessibilityAtomic;\n if (_ariaAtomic != null) {\n domProps['aria-atomic'] = _ariaAtomic;\n }\n if (accessibilityAutoComplete != null) {\n warnOnce('accessibilityAutoComplete', \"accessibilityAutoComplete is deprecated. Use aria-autocomplete.\");\n }\n var _ariaAutoComplete = ariaAutoComplete != null ? ariaAutoComplete : accessibilityAutoComplete;\n if (_ariaAutoComplete != null) {\n domProps['aria-autocomplete'] = _ariaAutoComplete;\n }\n if (accessibilityBusy != null) {\n warnOnce('accessibilityBusy', \"accessibilityBusy is deprecated. Use aria-busy.\");\n }\n var _ariaBusy = ariaBusy != null ? ariaBusy : accessibilityBusy;\n if (_ariaBusy != null) {\n domProps['aria-busy'] = _ariaBusy;\n }\n if (accessibilityChecked != null) {\n warnOnce('accessibilityChecked', \"accessibilityChecked is deprecated. Use aria-checked.\");\n }\n var _ariaChecked = ariaChecked != null ? ariaChecked : accessibilityChecked;\n if (_ariaChecked != null) {\n domProps['aria-checked'] = _ariaChecked;\n }\n if (accessibilityColumnCount != null) {\n warnOnce('accessibilityColumnCount', \"accessibilityColumnCount is deprecated. Use aria-colcount.\");\n }\n var _ariaColumnCount = ariaColumnCount != null ? ariaColumnCount : accessibilityColumnCount;\n if (_ariaColumnCount != null) {\n domProps['aria-colcount'] = _ariaColumnCount;\n }\n if (accessibilityColumnIndex != null) {\n warnOnce('accessibilityColumnIndex', \"accessibilityColumnIndex is deprecated. Use aria-colindex.\");\n }\n var _ariaColumnIndex = ariaColumnIndex != null ? ariaColumnIndex : accessibilityColumnIndex;\n if (_ariaColumnIndex != null) {\n domProps['aria-colindex'] = _ariaColumnIndex;\n }\n if (accessibilityColumnSpan != null) {\n warnOnce('accessibilityColumnSpan', \"accessibilityColumnSpan is deprecated. Use aria-colspan.\");\n }\n var _ariaColumnSpan = ariaColumnSpan != null ? ariaColumnSpan : accessibilityColumnSpan;\n if (_ariaColumnSpan != null) {\n domProps['aria-colspan'] = _ariaColumnSpan;\n }\n if (accessibilityControls != null) {\n warnOnce('accessibilityControls', \"accessibilityControls is deprecated. Use aria-controls.\");\n }\n var _ariaControls = ariaControls != null ? ariaControls : accessibilityControls;\n if (_ariaControls != null) {\n domProps['aria-controls'] = processIDRefList(_ariaControls);\n }\n if (accessibilityCurrent != null) {\n warnOnce('accessibilityCurrent', \"accessibilityCurrent is deprecated. Use aria-current.\");\n }\n var _ariaCurrent = ariaCurrent != null ? ariaCurrent : accessibilityCurrent;\n if (_ariaCurrent != null) {\n domProps['aria-current'] = _ariaCurrent;\n }\n if (accessibilityDescribedBy != null) {\n warnOnce('accessibilityDescribedBy', \"accessibilityDescribedBy is deprecated. Use aria-describedby.\");\n }\n var _ariaDescribedBy = ariaDescribedBy != null ? ariaDescribedBy : accessibilityDescribedBy;\n if (_ariaDescribedBy != null) {\n domProps['aria-describedby'] = processIDRefList(_ariaDescribedBy);\n }\n if (accessibilityDetails != null) {\n warnOnce('accessibilityDetails', \"accessibilityDetails is deprecated. Use aria-details.\");\n }\n var _ariaDetails = ariaDetails != null ? ariaDetails : accessibilityDetails;\n if (_ariaDetails != null) {\n domProps['aria-details'] = _ariaDetails;\n }\n if (disabled === true) {\n domProps['aria-disabled'] = true;\n // Enhance with native semantics\n if (elementType === 'button' || elementType === 'form' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.disabled = true;\n }\n }\n if (accessibilityErrorMessage != null) {\n warnOnce('accessibilityErrorMessage', \"accessibilityErrorMessage is deprecated. Use aria-errormessage.\");\n }\n var _ariaErrorMessage = ariaErrorMessage != null ? ariaErrorMessage : accessibilityErrorMessage;\n if (_ariaErrorMessage != null) {\n domProps['aria-errormessage'] = _ariaErrorMessage;\n }\n if (accessibilityExpanded != null) {\n warnOnce('accessibilityExpanded', \"accessibilityExpanded is deprecated. Use aria-expanded.\");\n }\n var _ariaExpanded = ariaExpanded != null ? ariaExpanded : accessibilityExpanded;\n if (_ariaExpanded != null) {\n domProps['aria-expanded'] = _ariaExpanded;\n }\n if (accessibilityFlowTo != null) {\n warnOnce('accessibilityFlowTo', \"accessibilityFlowTo is deprecated. Use aria-flowto.\");\n }\n var _ariaFlowTo = ariaFlowTo != null ? ariaFlowTo : accessibilityFlowTo;\n if (_ariaFlowTo != null) {\n domProps['aria-flowto'] = processIDRefList(_ariaFlowTo);\n }\n if (accessibilityHasPopup != null) {\n warnOnce('accessibilityHasPopup', \"accessibilityHasPopup is deprecated. Use aria-haspopup.\");\n }\n var _ariaHasPopup = ariaHasPopup != null ? ariaHasPopup : accessibilityHasPopup;\n if (_ariaHasPopup != null) {\n domProps['aria-haspopup'] = _ariaHasPopup;\n }\n if (accessibilityHidden != null) {\n warnOnce('accessibilityHidden', \"accessibilityHidden is deprecated. Use aria-hidden.\");\n }\n var _ariaHidden = ariaHidden != null ? ariaHidden : accessibilityHidden;\n if (_ariaHidden === true) {\n domProps['aria-hidden'] = _ariaHidden;\n }\n if (accessibilityInvalid != null) {\n warnOnce('accessibilityInvalid', \"accessibilityInvalid is deprecated. Use aria-invalid.\");\n }\n var _ariaInvalid = ariaInvalid != null ? ariaInvalid : accessibilityInvalid;\n if (_ariaInvalid != null) {\n domProps['aria-invalid'] = _ariaInvalid;\n }\n if (accessibilityKeyShortcuts != null) {\n warnOnce('accessibilityKeyShortcuts', \"accessibilityKeyShortcuts is deprecated. Use aria-keyshortcuts.\");\n }\n var _ariaKeyShortcuts = ariaKeyShortcuts != null ? ariaKeyShortcuts : accessibilityKeyShortcuts;\n if (_ariaKeyShortcuts != null) {\n domProps['aria-keyshortcuts'] = processIDRefList(_ariaKeyShortcuts);\n }\n if (accessibilityLabel != null) {\n warnOnce('accessibilityLabel', \"accessibilityLabel is deprecated. Use aria-label.\");\n }\n var _ariaLabel = ariaLabel != null ? ariaLabel : accessibilityLabel;\n if (_ariaLabel != null) {\n domProps['aria-label'] = _ariaLabel;\n }\n if (accessibilityLabelledBy != null) {\n warnOnce('accessibilityLabelledBy', \"accessibilityLabelledBy is deprecated. Use aria-labelledby.\");\n }\n var _ariaLabelledBy = ariaLabelledBy != null ? ariaLabelledBy : accessibilityLabelledBy;\n if (_ariaLabelledBy != null) {\n domProps['aria-labelledby'] = processIDRefList(_ariaLabelledBy);\n }\n if (accessibilityLevel != null) {\n warnOnce('accessibilityLevel', \"accessibilityLevel is deprecated. Use aria-level.\");\n }\n var _ariaLevel = ariaLevel != null ? ariaLevel : accessibilityLevel;\n if (_ariaLevel != null) {\n domProps['aria-level'] = _ariaLevel;\n }\n if (accessibilityLiveRegion != null) {\n warnOnce('accessibilityLiveRegion', \"accessibilityLiveRegion is deprecated. Use aria-live.\");\n }\n var _ariaLive = ariaLive != null ? ariaLive : accessibilityLiveRegion;\n if (_ariaLive != null) {\n domProps['aria-live'] = _ariaLive === 'none' ? 'off' : _ariaLive;\n }\n if (accessibilityModal != null) {\n warnOnce('accessibilityModal', \"accessibilityModal is deprecated. Use aria-modal.\");\n }\n var _ariaModal = ariaModal != null ? ariaModal : accessibilityModal;\n if (_ariaModal != null) {\n domProps['aria-modal'] = _ariaModal;\n }\n if (accessibilityMultiline != null) {\n warnOnce('accessibilityMultiline', \"accessibilityMultiline is deprecated. Use aria-multiline.\");\n }\n var _ariaMultiline = ariaMultiline != null ? ariaMultiline : accessibilityMultiline;\n if (_ariaMultiline != null) {\n domProps['aria-multiline'] = _ariaMultiline;\n }\n if (accessibilityMultiSelectable != null) {\n warnOnce('accessibilityMultiSelectable', \"accessibilityMultiSelectable is deprecated. Use aria-multiselectable.\");\n }\n var _ariaMultiSelectable = ariaMultiSelectable != null ? ariaMultiSelectable : accessibilityMultiSelectable;\n if (_ariaMultiSelectable != null) {\n domProps['aria-multiselectable'] = _ariaMultiSelectable;\n }\n if (accessibilityOrientation != null) {\n warnOnce('accessibilityOrientation', \"accessibilityOrientation is deprecated. Use aria-orientation.\");\n }\n var _ariaOrientation = ariaOrientation != null ? ariaOrientation : accessibilityOrientation;\n if (_ariaOrientation != null) {\n domProps['aria-orientation'] = _ariaOrientation;\n }\n if (accessibilityOwns != null) {\n warnOnce('accessibilityOwns', \"accessibilityOwns is deprecated. Use aria-owns.\");\n }\n var _ariaOwns = ariaOwns != null ? ariaOwns : accessibilityOwns;\n if (_ariaOwns != null) {\n domProps['aria-owns'] = processIDRefList(_ariaOwns);\n }\n if (accessibilityPlaceholder != null) {\n warnOnce('accessibilityPlaceholder', \"accessibilityPlaceholder is deprecated. Use aria-placeholder.\");\n }\n var _ariaPlaceholder = ariaPlaceholder != null ? ariaPlaceholder : accessibilityPlaceholder;\n if (_ariaPlaceholder != null) {\n domProps['aria-placeholder'] = _ariaPlaceholder;\n }\n if (accessibilityPosInSet != null) {\n warnOnce('accessibilityPosInSet', \"accessibilityPosInSet is deprecated. Use aria-posinset.\");\n }\n var _ariaPosInSet = ariaPosInSet != null ? ariaPosInSet : accessibilityPosInSet;\n if (_ariaPosInSet != null) {\n domProps['aria-posinset'] = _ariaPosInSet;\n }\n if (accessibilityPressed != null) {\n warnOnce('accessibilityPressed', \"accessibilityPressed is deprecated. Use aria-pressed.\");\n }\n var _ariaPressed = ariaPressed != null ? ariaPressed : accessibilityPressed;\n if (_ariaPressed != null) {\n domProps['aria-pressed'] = _ariaPressed;\n }\n if (accessibilityReadOnly != null) {\n warnOnce('accessibilityReadOnly', \"accessibilityReadOnly is deprecated. Use aria-readonly.\");\n }\n var _ariaReadOnly = ariaReadOnly != null ? ariaReadOnly : accessibilityReadOnly;\n if (_ariaReadOnly != null) {\n domProps['aria-readonly'] = _ariaReadOnly;\n // Enhance with native semantics\n if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.readOnly = true;\n }\n }\n if (accessibilityRequired != null) {\n warnOnce('accessibilityRequired', \"accessibilityRequired is deprecated. Use aria-required.\");\n }\n var _ariaRequired = ariaRequired != null ? ariaRequired : accessibilityRequired;\n if (_ariaRequired != null) {\n domProps['aria-required'] = _ariaRequired;\n // Enhance with native semantics\n if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n domProps.required = accessibilityRequired;\n }\n }\n if (accessibilityRole != null) {\n warnOnce('accessibilityRole', \"accessibilityRole is deprecated. Use role.\");\n }\n if (role != null) {\n // 'presentation' synonym has wider browser support\n domProps['role'] = role === 'none' ? 'presentation' : role;\n }\n if (accessibilityRoleDescription != null) {\n warnOnce('accessibilityRoleDescription', \"accessibilityRoleDescription is deprecated. Use aria-roledescription.\");\n }\n var _ariaRoleDescription = ariaRoleDescription != null ? ariaRoleDescription : accessibilityRoleDescription;\n if (_ariaRoleDescription != null) {\n domProps['aria-roledescription'] = _ariaRoleDescription;\n }\n if (accessibilityRowCount != null) {\n warnOnce('accessibilityRowCount', \"accessibilityRowCount is deprecated. Use aria-rowcount.\");\n }\n var _ariaRowCount = ariaRowCount != null ? ariaRowCount : accessibilityRowCount;\n if (_ariaRowCount != null) {\n domProps['aria-rowcount'] = _ariaRowCount;\n }\n if (accessibilityRowIndex != null) {\n warnOnce('accessibilityRowIndex', \"accessibilityRowIndex is deprecated. Use aria-rowindex.\");\n }\n var _ariaRowIndex = ariaRowIndex != null ? ariaRowIndex : accessibilityRowIndex;\n if (_ariaRowIndex != null) {\n domProps['aria-rowindex'] = _ariaRowIndex;\n }\n if (accessibilityRowSpan != null) {\n warnOnce('accessibilityRowSpan', \"accessibilityRowSpan is deprecated. Use aria-rowspan.\");\n }\n var _ariaRowSpan = ariaRowSpan != null ? ariaRowSpan : accessibilityRowSpan;\n if (_ariaRowSpan != null) {\n domProps['aria-rowspan'] = _ariaRowSpan;\n }\n if (accessibilitySelected != null) {\n warnOnce('accessibilitySelected', \"accessibilitySelected is deprecated. Use aria-selected.\");\n }\n var _ariaSelected = ariaSelected != null ? ariaSelected : accessibilitySelected;\n if (_ariaSelected != null) {\n domProps['aria-selected'] = _ariaSelected;\n }\n if (accessibilitySetSize != null) {\n warnOnce('accessibilitySetSize', \"accessibilitySetSize is deprecated. Use aria-setsize.\");\n }\n var _ariaSetSize = ariaSetSize != null ? ariaSetSize : accessibilitySetSize;\n if (_ariaSetSize != null) {\n domProps['aria-setsize'] = _ariaSetSize;\n }\n if (accessibilitySort != null) {\n warnOnce('accessibilitySort', \"accessibilitySort is deprecated. Use aria-sort.\");\n }\n var _ariaSort = ariaSort != null ? ariaSort : accessibilitySort;\n if (_ariaSort != null) {\n domProps['aria-sort'] = _ariaSort;\n }\n if (accessibilityValueMax != null) {\n warnOnce('accessibilityValueMax', \"accessibilityValueMax is deprecated. Use aria-valuemax.\");\n }\n var _ariaValueMax = ariaValueMax != null ? ariaValueMax : accessibilityValueMax;\n if (_ariaValueMax != null) {\n domProps['aria-valuemax'] = _ariaValueMax;\n }\n if (accessibilityValueMin != null) {\n warnOnce('accessibilityValueMin', \"accessibilityValueMin is deprecated. Use aria-valuemin.\");\n }\n var _ariaValueMin = ariaValueMin != null ? ariaValueMin : accessibilityValueMin;\n if (_ariaValueMin != null) {\n domProps['aria-valuemin'] = _ariaValueMin;\n }\n if (accessibilityValueNow != null) {\n warnOnce('accessibilityValueNow', \"accessibilityValueNow is deprecated. Use aria-valuenow.\");\n }\n var _ariaValueNow = ariaValueNow != null ? ariaValueNow : accessibilityValueNow;\n if (_ariaValueNow != null) {\n domProps['aria-valuenow'] = _ariaValueNow;\n }\n if (accessibilityValueText != null) {\n warnOnce('accessibilityValueText', \"accessibilityValueText is deprecated. Use aria-valuetext.\");\n }\n var _ariaValueText = ariaValueText != null ? ariaValueText : accessibilityValueText;\n if (_ariaValueText != null) {\n domProps['aria-valuetext'] = _ariaValueText;\n }\n\n // \"dataSet\" replaced with \"data-*\"\n if (dataSet != null) {\n for (var dataProp in dataSet) {\n if (hasOwnProperty.call(dataSet, dataProp)) {\n var dataName = hyphenateString(dataProp);\n var dataValue = dataSet[dataProp];\n if (dataValue != null) {\n domProps[\"data-\" + dataName] = dataValue;\n }\n }\n }\n }\n\n // FOCUS\n if (tabIndex === 0 || tabIndex === '0' || tabIndex === -1 || tabIndex === '-1') {\n domProps.tabIndex = tabIndex;\n } else {\n if (focusable != null) {\n warnOnce('focusable', \"focusable is deprecated.\");\n }\n\n // \"focusable\" indicates that an element may be a keyboard tab-stop.\n if (focusable === false) {\n domProps.tabIndex = '-1';\n }\n if (\n // These native elements are keyboard focusable by default\n elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n if (focusable === false || accessibilityDisabled === true) {\n domProps.tabIndex = '-1';\n }\n } else if (\n // These roles are made keyboard focusable by default\n role === 'button' || role === 'checkbox' || role === 'link' || role === 'radio' || role === 'textbox' || role === 'switch') {\n if (focusable !== false) {\n domProps.tabIndex = '0';\n }\n } else {\n // Everything else must explicitly set the prop\n if (focusable === true) {\n domProps.tabIndex = '0';\n }\n }\n }\n\n // Resolve styles\n if (pointerEvents != null) {\n warnOnce('pointerEvents', \"props.pointerEvents is deprecated. Use style.pointerEvents\");\n }\n var _StyleSheet = StyleSheet([style, pointerEvents && pointerEventsStyles[pointerEvents]], _objectSpread({\n writingDirection: 'ltr'\n }, options)),\n className = _StyleSheet[0],\n inlineStyle = _StyleSheet[1];\n if (className) {\n domProps.className = className;\n }\n if (inlineStyle) {\n domProps.style = inlineStyle;\n }\n\n // OTHER\n // Native element ID\n if (nativeID != null) {\n warnOnce('nativeID', \"nativeID is deprecated. Use id.\");\n }\n var _id = id != null ? id : nativeID;\n if (_id != null) {\n domProps.id = _id;\n }\n // Automated test IDs\n if (testID != null) {\n domProps['data-testid'] = testID;\n }\n if (domProps.type == null && elementType === 'button') {\n domProps.type = 'button';\n }\n return domProps;\n};\nexport default createDOMProps;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport TextInputState from '../TextInputState';\nvar dismissKeyboard = () => {\n TextInputState.blurTextInput(TextInputState.currentlyFocusedField());\n};\nexport default dismissKeyboard;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var defaultProps = {\n children: true,\n dataSet: true,\n dir: true,\n id: true,\n ref: true,\n suppressHydrationWarning: true,\n tabIndex: true,\n testID: true,\n // @deprecated\n focusable: true,\n nativeID: true\n};\nexport var accessibilityProps = {\n 'aria-activedescendant': true,\n 'aria-atomic': true,\n 'aria-autocomplete': true,\n 'aria-busy': true,\n 'aria-checked': true,\n 'aria-colcount': true,\n 'aria-colindex': true,\n 'aria-colspan': true,\n 'aria-controls': true,\n 'aria-current': true,\n 'aria-describedby': true,\n 'aria-details': true,\n 'aria-disabled': true,\n 'aria-errormessage': true,\n 'aria-expanded': true,\n 'aria-flowto': true,\n 'aria-haspopup': true,\n 'aria-hidden': true,\n 'aria-invalid': true,\n 'aria-keyshortcuts': true,\n 'aria-label': true,\n 'aria-labelledby': true,\n 'aria-level': true,\n 'aria-live': true,\n 'aria-modal': true,\n 'aria-multiline': true,\n 'aria-multiselectable': true,\n 'aria-orientation': true,\n 'aria-owns': true,\n 'aria-placeholder': true,\n 'aria-posinset': true,\n 'aria-pressed': true,\n 'aria-readonly': true,\n 'aria-required': true,\n role: true,\n 'aria-roledescription': true,\n 'aria-rowcount': true,\n 'aria-rowindex': true,\n 'aria-rowspan': true,\n 'aria-selected': true,\n 'aria-setsize': true,\n 'aria-sort': true,\n 'aria-valuemax': true,\n 'aria-valuemin': true,\n 'aria-valuenow': true,\n 'aria-valuetext': true,\n // @deprecated\n accessibilityActiveDescendant: true,\n accessibilityAtomic: true,\n accessibilityAutoComplete: true,\n accessibilityBusy: true,\n accessibilityChecked: true,\n accessibilityColumnCount: true,\n accessibilityColumnIndex: true,\n accessibilityColumnSpan: true,\n accessibilityControls: true,\n accessibilityCurrent: true,\n accessibilityDescribedBy: true,\n accessibilityDetails: true,\n accessibilityDisabled: true,\n accessibilityErrorMessage: true,\n accessibilityExpanded: true,\n accessibilityFlowTo: true,\n accessibilityHasPopup: true,\n accessibilityHidden: true,\n accessibilityInvalid: true,\n accessibilityKeyShortcuts: true,\n accessibilityLabel: true,\n accessibilityLabelledBy: true,\n accessibilityLevel: true,\n accessibilityLiveRegion: true,\n accessibilityModal: true,\n accessibilityMultiline: true,\n accessibilityMultiSelectable: true,\n accessibilityOrientation: true,\n accessibilityOwns: true,\n accessibilityPlaceholder: true,\n accessibilityPosInSet: true,\n accessibilityPressed: true,\n accessibilityReadOnly: true,\n accessibilityRequired: true,\n accessibilityRole: true,\n accessibilityRoleDescription: true,\n accessibilityRowCount: true,\n accessibilityRowIndex: true,\n accessibilityRowSpan: true,\n accessibilitySelected: true,\n accessibilitySetSize: true,\n accessibilitySort: true,\n accessibilityValueMax: true,\n accessibilityValueMin: true,\n accessibilityValueNow: true,\n accessibilityValueText: true\n};\nexport var clickProps = {\n onClick: true,\n onAuxClick: true,\n onContextMenu: true,\n onGotPointerCapture: true,\n onLostPointerCapture: true,\n onPointerCancel: true,\n onPointerDown: true,\n onPointerEnter: true,\n onPointerMove: true,\n onPointerLeave: true,\n onPointerOut: true,\n onPointerOver: true,\n onPointerUp: true\n};\nexport var focusProps = {\n onBlur: true,\n onFocus: true\n};\nexport var keyboardProps = {\n onKeyDown: true,\n onKeyDownCapture: true,\n onKeyUp: true,\n onKeyUpCapture: true\n};\nexport var mouseProps = {\n onMouseDown: true,\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseMove: true,\n onMouseOver: true,\n onMouseOut: true,\n onMouseUp: true\n};\nexport var touchProps = {\n onTouchCancel: true,\n onTouchCancelCapture: true,\n onTouchEnd: true,\n onTouchEndCapture: true,\n onTouchMove: true,\n onTouchMoveCapture: true,\n onTouchStart: true,\n onTouchStartCapture: true\n};\nexport var styleProps = {\n style: true\n};","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar getBoundingClientRect = node => {\n if (node != null) {\n var isElement = node.nodeType === 1; /* Node.ELEMENT_NODE */\n if (isElement && typeof node.getBoundingClientRect === 'function') {\n return node.getBoundingClientRect();\n }\n }\n};\nexport default getBoundingClientRect;","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function isSelectionValid() {\n var selection = window.getSelection();\n var string = selection.toString();\n var anchorNode = selection.anchorNode;\n var focusNode = selection.focusNode;\n var isTextNode = anchorNode && anchorNode.nodeType === window.Node.TEXT_NODE || focusNode && focusNode.nodeType === window.Node.TEXT_NODE;\n return string.length >= 1 && string !== '\\n' && isTextNode;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isWebColor = color => color === 'currentcolor' || color === 'currentColor' || color === 'inherit' || color.indexOf('var(') === 0;\nexport default isWebColor;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nexport default function mergeRefs() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return function forwardRef(node) {\n args.forEach(ref => {\n if (ref == null) {\n return;\n }\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n if (typeof ref === 'object') {\n ref.current = node;\n return;\n }\n console.error(\"mergeRefs cannot handle Refs of type boolean, number or string, received ref \" + String(ref));\n });\n };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport canUseDOM from '../canUseDom';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n passive: true\n};\nvar captureOptions = {\n capture: true,\n passive: true\n};\nfunction restoreModality() {\n if (previousModality != null || previousActiveModality != null) {\n if (previousModality != null) {\n modality = previousModality;\n previousModality = null;\n }\n if (previousActiveModality != null) {\n activeModality = previousActiveModality;\n previousActiveModality = null;\n }\n callListeners();\n }\n}\nfunction onBlurWindow() {\n previousModality = modality;\n previousActiveModality = activeModality;\n activeModality = KEYBOARD;\n modality = KEYBOARD;\n callListeners();\n // for fallback events\n isEmulatingMouseEvents = false;\n}\nfunction onFocusWindow() {\n restoreModality();\n}\nfunction onKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n if (modality !== KEYBOARD) {\n modality = KEYBOARD;\n activeModality = KEYBOARD;\n callListeners();\n }\n}\nfunction onVisibilityChange() {\n if (document.visibilityState !== 'hidden') {\n restoreModality();\n }\n}\nfunction onPointerish(event) {\n var eventType = event.type;\n if (supportsPointerEvent()) {\n if (eventType === POINTERDOWN) {\n if (activeModality !== event.pointerType) {\n modality = event.pointerType;\n activeModality = event.pointerType;\n callListeners();\n }\n return;\n }\n if (eventType === POINTERMOVE) {\n if (modality !== event.pointerType) {\n modality = event.pointerType;\n callListeners();\n }\n return;\n }\n }\n // Fallback for non-PointerEvent environment\n else {\n if (!isEmulatingMouseEvents) {\n if (eventType === MOUSEDOWN) {\n if (activeModality !== MOUSE) {\n modality = MOUSE;\n activeModality = MOUSE;\n callListeners();\n }\n }\n if (eventType === MOUSEMOVE) {\n if (modality !== MOUSE) {\n modality = MOUSE;\n callListeners();\n }\n }\n }\n\n // Flag when browser may produce emulated events\n if (eventType === TOUCHSTART) {\n isEmulatingMouseEvents = true;\n if (event.touches && event.touches.length > 1) {\n isEmulatingMouseEvents = false;\n }\n if (activeModality !== TOUCH) {\n modality = TOUCH;\n activeModality = TOUCH;\n callListeners();\n }\n return;\n }\n\n // Remove flag after emulated events are finished or cancelled, and if an\n // event occurs that cuts short a touch event sequence.\n if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n isEmulatingMouseEvents = false;\n }\n }\n}\nif (canUseDOM) {\n // Window events\n addEventListener(window, BLUR, onBlurWindow, bubbleOptions);\n addEventListener(window, FOCUS, onFocusWindow, bubbleOptions);\n // Must be capture phase because 'stopPropagation' might prevent these\n // events bubbling to the document.\n addEventListener(document, KEYDOWN, onKeyDown, captureOptions);\n addEventListener(document, VISIBILITYCHANGE, onVisibilityChange, captureOptions);\n addEventListener(document, POINTERDOWN, onPointerish, captureOptions);\n addEventListener(document, POINTERMOVE, onPointerish, captureOptions);\n // Fallback events\n addEventListener(document, CONTEXTMENU, onPointerish, captureOptions);\n addEventListener(document, MOUSEDOWN, onPointerish, captureOptions);\n addEventListener(document, MOUSEMOVE, onPointerish, captureOptions);\n addEventListener(document, MOUSEUP, onPointerish, captureOptions);\n addEventListener(document, TOUCHCANCEL, onPointerish, captureOptions);\n addEventListener(document, TOUCHMOVE, onPointerish, captureOptions);\n addEventListener(document, TOUCHSTART, onPointerish, captureOptions);\n addEventListener(document, SELECTIONCHANGE, onPointerish, captureOptions);\n addEventListener(document, SCROLL, onPointerish, captureOptions);\n}\nfunction callListeners() {\n var value = {\n activeModality,\n modality\n };\n listeners.forEach(listener => {\n listener(value);\n });\n}\nexport function getActiveModality() {\n return activeModality;\n}\nexport function getModality() {\n return modality;\n}\nexport function addModalityListener(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\nexport function testOnly_resetActiveModality() {\n isEmulatingMouseEvents = false;\n activeModality = KEYBOARD;\n modality = KEYBOARD;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar CSS_UNIT_RE = /^[+-]?\\d*(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?(%|\\w*)/;\nvar getUnit = str => str.match(CSS_UNIT_RE)[1];\nvar isNumeric = n => {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\nvar multiplyStyleLengthValue = (value, multiple) => {\n if (typeof value === 'string') {\n var number = parseFloat(value) * multiple;\n var unit = getUnit(value);\n return \"\" + number + unit;\n } else if (isNumeric(value)) {\n return value * multiple;\n }\n};\nexport default multiplyStyleLengthValue;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function pick(obj, list) {\n var nextObj = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (list[key] === true) {\n nextObj[key] = obj[key];\n }\n }\n }\n return nextObj;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createPrefixer from 'inline-style-prefixer/lib/createPrefixer';\nimport staticData from './static';\nvar prefixAll = createPrefixer(staticData);\nexport default prefixAll;","import backgroundClip from 'inline-style-prefixer/lib/plugins/backgroundClip';\nimport crossFade from 'inline-style-prefixer/lib/plugins/crossFade';\nimport cursor from 'inline-style-prefixer/lib/plugins/cursor';\nimport filter from 'inline-style-prefixer/lib/plugins/filter';\nimport imageSet from 'inline-style-prefixer/lib/plugins/imageSet';\nimport logical from 'inline-style-prefixer/lib/plugins/logical';\nimport position from 'inline-style-prefixer/lib/plugins/position';\nimport sizing from 'inline-style-prefixer/lib/plugins/sizing';\nimport transition from 'inline-style-prefixer/lib/plugins/transition';\nvar w = ['Webkit'];\nvar m = ['Moz'];\nvar wm = ['Webkit', 'Moz'];\nvar wms = ['Webkit', 'ms'];\nvar wmms = ['Webkit', 'Moz', 'ms'];\nexport default {\n plugins: [backgroundClip, crossFade, cursor, filter, imageSet, logical, position, sizing, transition],\n prefixMap: {\n appearance: wmms,\n userSelect: wm,\n textEmphasisPosition: wms,\n textEmphasis: wms,\n textEmphasisStyle: wms,\n textEmphasisColor: wms,\n boxDecorationBreak: wms,\n clipPath: w,\n maskImage: wms,\n maskMode: wms,\n maskRepeat: wms,\n maskPosition: wms,\n maskClip: wms,\n maskOrigin: wms,\n maskSize: wms,\n maskComposite: wms,\n mask: wms,\n maskBorderSource: wms,\n maskBorderMode: wms,\n maskBorderSlice: wms,\n maskBorderWidth: wms,\n maskBorderOutset: wms,\n maskBorderRepeat: wms,\n maskBorder: wms,\n maskType: wms,\n textDecorationStyle: w,\n textDecorationSkip: w,\n textDecorationLine: w,\n textDecorationColor: w,\n filter: w,\n breakAfter: w,\n breakBefore: w,\n breakInside: w,\n columnCount: w,\n columnFill: w,\n columnGap: w,\n columnRule: w,\n columnRuleColor: w,\n columnRuleStyle: w,\n columnRuleWidth: w,\n columns: w,\n columnSpan: w,\n columnWidth: w,\n backdropFilter: w,\n hyphens: w,\n flowInto: w,\n flowFrom: w,\n regionFragment: w,\n textOrientation: w,\n tabSize: m,\n fontKerning: w,\n textSizeAdjust: w\n }\n};","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../canUseDom';\nvar _requestIdleCallback = function _requestIdleCallback(cb, options) {\n return setTimeout(() => {\n var start = Date.now();\n cb({\n didTimeout: false,\n timeRemaining() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nvar _cancelIdleCallback = function _cancelIdleCallback(id) {\n clearTimeout(id);\n};\nvar isSupported = canUseDOM && typeof window.requestIdleCallback !== 'undefined';\nvar requestIdleCallback = isSupported ? window.requestIdleCallback : _requestIdleCallback;\nvar cancelIdleCallback = isSupported ? window.cancelIdleCallback : _cancelIdleCallback;\nexport default requestIdleCallback;\nexport { cancelIdleCallback };","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n * \n */\n\nimport isUnitlessNumber from '../unitlessNumbers';\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n if (isEmpty) {\n return '';\n }\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n}\nexport default dangerousStyleValue;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.3.0\n * \n */\n\nimport dangerousStyleValue from './dangerousStyleValue';\n\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n var isCustomProperty = styleName.indexOf('--') === 0;\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\nexport default setValueForStyles;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n animationIterationCount: true,\n aspectRatio: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n flex: true,\n flexGrow: true,\n flexOrder: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n fontWeight: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowGap: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnGap: true,\n gridColumnStart: true,\n lineClamp: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true,\n // transform types\n scale: true,\n scaleX: true,\n scaleY: true,\n scaleZ: true,\n // RN properties\n shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n prefixes.forEach(prefix => {\n unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport useLayoutEffect from '../useLayoutEffect';\nimport UIManager from '../../exports/UIManager';\nimport canUseDOM from '../canUseDom';\nvar DOM_LAYOUT_HANDLER_NAME = '__reactLayoutHandler';\nvar didWarn = !canUseDOM;\nvar resizeObserver = null;\nfunction getResizeObserver() {\n if (canUseDOM && typeof window.ResizeObserver !== 'undefined') {\n if (resizeObserver == null) {\n resizeObserver = new window.ResizeObserver(function (entries) {\n entries.forEach(entry => {\n var node = entry.target;\n var onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n if (typeof onLayout === 'function') {\n // We still need to measure the view because browsers don't yet provide\n // border-box dimensions in the entry\n UIManager.measure(node, (x, y, width, height, left, top) => {\n var event = {\n // $FlowFixMe\n nativeEvent: {\n layout: {\n x,\n y,\n width,\n height,\n left,\n top\n }\n },\n timeStamp: Date.now()\n };\n Object.defineProperty(event.nativeEvent, 'target', {\n enumerable: true,\n get: () => entry.target\n });\n onLayout(event);\n });\n }\n });\n });\n }\n } else if (!didWarn) {\n if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {\n console.warn('onLayout relies on ResizeObserver which is not supported by your browser. ' + 'Please include a polyfill, e.g., https://github.com/que-etc/resize-observer-polyfill.');\n didWarn = true;\n }\n }\n return resizeObserver;\n}\nexport default function useElementLayout(ref, onLayout) {\n var observer = getResizeObserver();\n useLayoutEffect(() => {\n var node = ref.current;\n if (node != null) {\n node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n }\n }, [ref, onLayout]);\n\n // Observing is done in a separate effect to avoid this effect running\n // when 'onLayout' changes.\n useLayoutEffect(() => {\n var node = ref.current;\n if (node != null && observer != null) {\n if (typeof node[DOM_LAYOUT_HANDLER_NAME] === 'function') {\n observer.observe(node);\n } else {\n observer.unobserve(node);\n }\n }\n return () => {\n if (node != null && observer != null) {\n observer.unobserve(node);\n }\n };\n }, [ref, observer]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport useLayoutEffect from '../useLayoutEffect';\nimport useStable from '../useStable';\n/**\n * This can be used with any event type include custom events.\n *\n * const click = useEvent('click', options);\n * useEffect(() => {\n * click.setListener(target, onClick);\n * return () => click.clear();\n * }).\n */\nexport default function useEvent(eventType, options) {\n var targetListeners = useStable(() => new Map());\n var addListener = useStable(() => {\n return (target, callback) => {\n var removeTargetListener = targetListeners.get(target);\n if (removeTargetListener != null) {\n removeTargetListener();\n }\n if (callback == null) {\n targetListeners.delete(target);\n callback = () => {};\n }\n var removeEventListener = addEventListener(target, eventType, callback, options);\n targetListeners.set(target, removeEventListener);\n return removeEventListener;\n };\n });\n useLayoutEffect(() => {\n return () => {\n targetListeners.forEach(removeListener => {\n removeListener();\n });\n targetListeners.clear();\n };\n }, [targetListeners]);\n return addListener;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { getModality } from '../modality';\nimport useEvent from '../useEvent';\nimport useLayoutEffect from '../useLayoutEffect';\n\n/**\n * Types\n */\n\n/**\n * Implementation\n */\n\nvar emptyObject = {};\nvar opts = {\n passive: true\n};\nvar lockEventType = 'react-gui:hover:lock';\nvar unlockEventType = 'react-gui:hover:unlock';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nfunction dispatchCustomEvent(target, type, payload) {\n var event = document.createEvent('CustomEvent');\n var _ref = payload || emptyObject,\n _ref$bubbles = _ref.bubbles,\n bubbles = _ref$bubbles === void 0 ? true : _ref$bubbles,\n _ref$cancelable = _ref.cancelable,\n cancelable = _ref$cancelable === void 0 ? true : _ref$cancelable,\n detail = _ref.detail;\n event.initCustomEvent(type, bubbles, cancelable, detail);\n target.dispatchEvent(event);\n}\n\n// This accounts for the non-PointerEvent fallback events.\nfunction getPointerType(event) {\n var pointerType = event.pointerType;\n return pointerType != null ? pointerType : getModality();\n}\nexport default function useHover(targetRef, config) {\n var contain = config.contain,\n disabled = config.disabled,\n onHoverStart = config.onHoverStart,\n onHoverChange = config.onHoverChange,\n onHoverUpdate = config.onHoverUpdate,\n onHoverEnd = config.onHoverEnd;\n var canUsePE = supportsPointerEvent();\n var addMoveListener = useEvent(canUsePE ? 'pointermove' : 'mousemove', opts);\n var addEnterListener = useEvent(canUsePE ? 'pointerenter' : 'mouseenter', opts);\n var addLeaveListener = useEvent(canUsePE ? 'pointerleave' : 'mouseleave', opts);\n // These custom events are used to implement the \"contain\" prop.\n var addLockListener = useEvent(lockEventType, opts);\n var addUnlockListener = useEvent(unlockEventType, opts);\n useLayoutEffect(() => {\n var target = targetRef.current;\n if (target !== null) {\n /**\n * End the hover gesture\n */\n var hoverEnd = function hoverEnd(e) {\n if (onHoverEnd != null) {\n onHoverEnd(e);\n }\n if (onHoverChange != null) {\n onHoverChange(false);\n }\n // Remove the listeners once finished.\n addMoveListener(target, null);\n addLeaveListener(target, null);\n };\n\n /**\n * Leave element\n */\n var leaveListener = function leaveListener(e) {\n var target = targetRef.current;\n if (target != null && getPointerType(e) !== 'touch') {\n if (contain) {\n dispatchCustomEvent(target, unlockEventType);\n }\n hoverEnd(e);\n }\n };\n\n /**\n * Move within element\n */\n var moveListener = function moveListener(e) {\n if (getPointerType(e) !== 'touch') {\n if (onHoverUpdate != null) {\n // Not all browsers have these properties\n if (e.x == null) {\n e.x = e.clientX;\n }\n if (e.y == null) {\n e.y = e.clientY;\n }\n onHoverUpdate(e);\n }\n }\n };\n\n /**\n * Start the hover gesture\n */\n var hoverStart = function hoverStart(e) {\n if (onHoverStart != null) {\n onHoverStart(e);\n }\n if (onHoverChange != null) {\n onHoverChange(true);\n }\n // Set the listeners needed for the rest of the hover gesture.\n if (onHoverUpdate != null) {\n addMoveListener(target, !disabled ? moveListener : null);\n }\n addLeaveListener(target, !disabled ? leaveListener : null);\n };\n\n /**\n * Enter element\n */\n var enterListener = function enterListener(e) {\n var target = targetRef.current;\n if (target != null && getPointerType(e) !== 'touch') {\n if (contain) {\n dispatchCustomEvent(target, lockEventType);\n }\n hoverStart(e);\n var lockListener = function lockListener(lockEvent) {\n if (lockEvent.target !== target) {\n hoverEnd(e);\n }\n };\n var unlockListener = function unlockListener(lockEvent) {\n if (lockEvent.target !== target) {\n hoverStart(e);\n }\n };\n addLockListener(target, !disabled ? lockListener : null);\n addUnlockListener(target, !disabled ? unlockListener : null);\n }\n };\n addEnterListener(target, !disabled ? enterListener : null);\n }\n }, [addEnterListener, addMoveListener, addLeaveListener, addLockListener, addUnlockListener, contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd, targetRef]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * useLayoutEffect throws an error on the server. On the few occasions where is\n * problematic, use this hook.\n *\n * \n */\n\nimport { useEffect, useLayoutEffect } from 'react';\nimport canUseDOM from '../canUseDom';\nvar useLayoutEffectImpl = canUseDOM ? useLayoutEffect : useEffect;\nexport default useLayoutEffectImpl;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React, { createContext, useContext } from 'react';\nimport { isLocaleRTL } from './isLocaleRTL';\nvar defaultLocale = {\n direction: 'ltr',\n locale: 'en-US'\n};\nvar LocaleContext = /*#__PURE__*/createContext(defaultLocale);\nexport function getLocaleDirection(locale) {\n return isLocaleRTL(locale) ? 'rtl' : 'ltr';\n}\nexport function LocaleProvider(props) {\n var direction = props.direction,\n locale = props.locale,\n children = props.children;\n var needsContext = direction || locale;\n return needsContext ? /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n children: children,\n value: {\n direction: locale ? getLocaleDirection(locale) : direction,\n locale\n }\n }) : children;\n}\nexport function useLocaleContext() {\n return useContext(LocaleContext);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar rtlScripts = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nvar rtlLangs = new Set(['ae',\n// Avestan\n'ar',\n// Arabic\n'arc',\n// Aramaic\n'bcc',\n// Southern Balochi\n'bqi',\n// Bakthiari\n'ckb',\n// Sorani\n'dv',\n// Dhivehi\n'fa', 'far',\n// Persian\n'glk',\n// Gilaki\n'he', 'iw',\n// Hebrew\n'khw',\n// Khowar\n'ks',\n// Kashmiri\n'ku',\n// Kurdish\n'mzn',\n// Mazanderani\n'nqo',\n// N'Ko\n'pnb',\n// Western Punjabi\n'ps',\n// Pashto\n'sd',\n// Sindhi\n'ug',\n// Uyghur\n'ur',\n// Urdu\n'yi' // Yiddish\n]);\n\nvar cache = new Map();\n\n/**\n * Determine the writing direction of a locale\n */\nexport function isLocaleRTL(locale) {\n var cachedRTL = cache.get(locale);\n if (cachedRTL) {\n return cachedRTL;\n }\n var isRTL = false;\n // $FlowFixMe\n if (Intl.Locale) {\n // $FlowFixMe\n var script = new Intl.Locale(locale).maximize().script;\n isRTL = rtlScripts.has(script);\n } else {\n // Fallback to inferring from language\n var lang = locale.split('-')[0];\n isRTL = rtlLangs.has(lang);\n }\n cache.set(locale, isRTL);\n return isRTL;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport mergeRefs from '../mergeRefs';\nexport default function useMergeRefs() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return React.useMemo(() => mergeRefs(...args),\n // eslint-disable-next-line\n [...args]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\nimport useStable from '../useStable';\n\n/**\n * Adds non-standard methods to the hode element. This is temporarily until an\n * API like `ReactNative.measure(hostRef, callback)` is added to React Native.\n */\nexport default function usePlatformMethods(_ref) {\n var pointerEvents = _ref.pointerEvents,\n style = _ref.style;\n // Avoid creating a new ref on every render.\n var ref = useStable(() => hostNode => {\n if (hostNode != null) {\n hostNode.measure = callback => UIManager.measure(hostNode, callback);\n hostNode.measureLayout = (relativeToNode, success, failure) => UIManager.measureLayout(hostNode, relativeToNode, failure, success);\n hostNode.measureInWindow = callback => UIManager.measureInWindow(hostNode, callback);\n }\n });\n return ref;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar DELAY = 'DELAY';\nvar ERROR = 'ERROR';\nvar LONG_PRESS_DETECTED = 'LONG_PRESS_DETECTED';\nvar NOT_RESPONDER = 'NOT_RESPONDER';\nvar RESPONDER_ACTIVE_LONG_PRESS_START = 'RESPONDER_ACTIVE_LONG_PRESS_START';\nvar RESPONDER_ACTIVE_PRESS_START = 'RESPONDER_ACTIVE_PRESS_START';\nvar RESPONDER_INACTIVE_PRESS_START = 'RESPONDER_INACTIVE_PRESS_START';\nvar RESPONDER_GRANT = 'RESPONDER_GRANT';\nvar RESPONDER_RELEASE = 'RESPONDER_RELEASE';\nvar RESPONDER_TERMINATED = 'RESPONDER_TERMINATED';\nvar Transitions = Object.freeze({\n NOT_RESPONDER: {\n DELAY: ERROR,\n RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n RESPONDER_RELEASE: ERROR,\n RESPONDER_TERMINATED: ERROR,\n LONG_PRESS_DETECTED: ERROR\n },\n RESPONDER_INACTIVE_PRESS_START: {\n DELAY: RESPONDER_ACTIVE_PRESS_START,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: ERROR\n },\n RESPONDER_ACTIVE_PRESS_START: {\n DELAY: ERROR,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n },\n RESPONDER_ACTIVE_LONG_PRESS_START: {\n DELAY: ERROR,\n RESPONDER_GRANT: ERROR,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n },\n ERROR: {\n DELAY: NOT_RESPONDER,\n RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n RESPONDER_RELEASE: NOT_RESPONDER,\n RESPONDER_TERMINATED: NOT_RESPONDER,\n LONG_PRESS_DETECTED: NOT_RESPONDER\n }\n});\nvar getElementRole = element => element.getAttribute('role');\nvar getElementType = element => element.tagName.toLowerCase();\nvar isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isButtonRole = element => getElementRole(element) === 'button';\nvar isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;\nvar isValidKeyPress = event => {\n var key = event.key,\n target = event.target;\n var isSpacebar = key === ' ' || key === 'Spacebar';\n var isButtonish = getElementType(target) === 'button' || isButtonRole(target);\n return key === 'Enter' || isSpacebar && isButtonish;\n};\nvar DEFAULT_LONG_PRESS_DELAY_MS = 450; // 500 - 50\nvar DEFAULT_PRESS_DELAY_MS = 50;\n\n/**\n * =========================== PressResponder Tutorial ===========================\n *\n * The `PressResponder` class helps you create press interactions by analyzing the\n * geometry of elements and observing when another responder (e.g. ScrollView)\n * has stolen the touch lock. It offers hooks for your component to provide\n * interaction feedback to the user:\n *\n * - When a press has activated (e.g. highlight an element)\n * - When a press has deactivated (e.g. un-highlight an element)\n * - When a press sould trigger an action, meaning it activated and deactivated\n * while within the geometry of the element without the lock being stolen.\n *\n * A high quality interaction isn't as simple as you might think. There should\n * be a slight delay before activation. Moving your finger beyond an element's\n * bounds should trigger deactivation, but moving the same finger back within an\n * element's bounds should trigger reactivation.\n *\n * In order to use `PressResponder`, do the following:\n *\n * const pressResponder = new PressResponder(config);\n *\n * 2. Choose the rendered component who should collect the press events. On that\n * element, spread `pressability.getEventHandlers()` into its props.\n *\n * return (\n * \n * );\n *\n * 3. Reset `PressResponder` when your component unmounts.\n *\n * componentWillUnmount() {\n * this.state.pressResponder.reset();\n * }\n *\n * ==================== Implementation Details ====================\n *\n * `PressResponder` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * # Geometry\n *\n * ┌────────────────────────┐\n * │ ┌──────────────────┐ │ - Presses start anywhere within `HitRect`.\n * │ │ ┌────────────┐ │ │\n * │ │ │ VisualRect │ │ │\n * │ │ └────────────┘ │ │ - When pressed down for sufficient amount of time\n * │ │ HitRect │ │ before letting up, `VisualRect` activates.\n * │ └──────────────────┘ │\n * │ Out Region o │\n * └────────────────────│───┘\n * └────── When the press is released outside the `HitRect`,\n * the responder is NOT eligible for a \"press\".\n *\n * # State Machine\n *\n * ┌───────────────┐ ◀──── RESPONDER_RELEASE\n * │ NOT_RESPONDER │\n * └───┬───────────┘ ◀──── RESPONDER_TERMINATED\n * │\n * │ RESPONDER_GRANT (HitRect)\n * │\n * ▼\n * ┌─────────────────────┐ ┌───────────────────┐ ┌───────────────────┐\n * │ RESPONDER_INACTIVE_ │ DELAY │ RESPONDER_ACTIVE_ │ T + DELAY │ RESPONDER_ACTIVE_ │\n * │ PRESS_START ├────────▶ │ PRESS_START ├────────────▶ │ LONG_PRESS_START │\n * └─────────────────────┘ └───────────────────┘ └───────────────────┘\n *\n * T + DELAY => LONG_PRESS_DELAY + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the invocation of `onLongPress`. Only when the browser produces a\n * `click` event is `onPress` invoked.\n */\nexport default class PressResponder {\n constructor(config) {\n this._eventHandlers = null;\n this._isPointerTouch = false;\n this._longPressDelayTimeout = null;\n this._longPressDispatched = false;\n this._pressDelayTimeout = null;\n this._pressOutDelayTimeout = null;\n this._touchState = NOT_RESPONDER;\n this.configure(config);\n }\n configure(config) {\n this._config = config;\n }\n\n /**\n * Resets any pending timers. This should be called on unmount.\n */\n reset() {\n this._cancelLongPressDelayTimeout();\n this._cancelPressDelayTimeout();\n this._cancelPressOutDelayTimeout();\n }\n\n /**\n * Returns a set of props to spread into the interactive element.\n */\n getEventHandlers() {\n if (this._eventHandlers == null) {\n this._eventHandlers = this._createEventHandlers();\n }\n return this._eventHandlers;\n }\n _createEventHandlers() {\n var start = (event, shouldDelay) => {\n event.persist();\n this._cancelPressOutDelayTimeout();\n this._longPressDispatched = false;\n this._selectionTerminated = false;\n this._touchState = NOT_RESPONDER;\n this._isPointerTouch = event.nativeEvent.type === 'touchstart';\n this._receiveSignal(RESPONDER_GRANT, event);\n var delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);\n if (shouldDelay !== false && delayPressStart > 0) {\n this._pressDelayTimeout = setTimeout(() => {\n this._receiveSignal(DELAY, event);\n }, delayPressStart);\n } else {\n this._receiveSignal(DELAY, event);\n }\n var delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);\n this._longPressDelayTimeout = setTimeout(() => {\n this._handleLongPress(event);\n }, delayLongPress + delayPressStart);\n };\n var end = event => {\n this._receiveSignal(RESPONDER_RELEASE, event);\n };\n var keyupHandler = event => {\n var onPress = this._config.onPress;\n var target = event.target;\n if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {\n end(event);\n document.removeEventListener('keyup', keyupHandler);\n var role = target.getAttribute('role');\n var elementType = getElementType(target);\n var isNativeInteractiveElement = role === 'link' || elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea';\n if (onPress != null && !isNativeInteractiveElement) {\n onPress(event);\n }\n }\n };\n return {\n onStartShouldSetResponder: event => {\n var disabled = this._config.disabled;\n if (disabled && isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n if (disabled == null) {\n return true;\n }\n return !disabled;\n },\n onKeyDown: event => {\n var disabled = this._config.disabled;\n var key = event.key,\n target = event.target;\n if (!disabled && isValidKeyPress(event)) {\n if (this._touchState === NOT_RESPONDER) {\n start(event, false);\n // Listen to 'keyup' on document to account for situations where\n // focus is moved to another element during 'keydown'.\n document.addEventListener('keyup', keyupHandler);\n }\n var isSpacebarKey = key === ' ' || key === 'Spacebar';\n var role = getElementRole(target);\n var isButtonLikeRole = role === 'button' || role === 'menuitem';\n if (isSpacebarKey && isButtonLikeRole && getElementType(target) !== 'button') {\n // Prevent spacebar scrolling the window if using non-native button\n event.preventDefault();\n }\n event.stopPropagation();\n }\n },\n onResponderGrant: event => start(event),\n onResponderMove: event => {\n if (this._config.onPressMove != null) {\n this._config.onPressMove(event);\n }\n var touch = getTouchFromResponderEvent(event);\n if (this._touchActivatePosition != null) {\n var deltaX = this._touchActivatePosition.pageX - touch.pageX;\n var deltaY = this._touchActivatePosition.pageY - touch.pageY;\n if (Math.hypot(deltaX, deltaY) > 10) {\n this._cancelLongPressDelayTimeout();\n }\n }\n },\n onResponderRelease: event => end(event),\n onResponderTerminate: event => {\n if (event.nativeEvent.type === 'selectionchange') {\n this._selectionTerminated = true;\n }\n this._receiveSignal(RESPONDER_TERMINATED, event);\n },\n onResponderTerminationRequest: event => {\n var _this$_config = this._config,\n cancelable = _this$_config.cancelable,\n disabled = _this$_config.disabled,\n onLongPress = _this$_config.onLongPress;\n // If `onLongPress` is provided, don't terminate on `contextmenu` as default\n // behavior will be prevented for non-mouse pointers.\n if (!disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === 'contextmenu') {\n return false;\n }\n if (cancelable == null) {\n return true;\n }\n return cancelable;\n },\n // NOTE: this diverges from react-native in 3 significant ways:\n // * The `onPress` callback is not connected to the responder system (the native\n // `click` event must be used but is dispatched in many scenarios where no pointers\n // are on the screen.) Therefore, it's possible for `onPress` to be called without\n // `onPress{Start,End}` being called first.\n // * The `onPress` callback is only be called on the first ancestor of the native\n // `click` target that is using the PressResponder.\n // * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.\n onClick: event => {\n var _this$_config2 = this._config,\n disabled = _this$_config2.disabled,\n onPress = _this$_config2.onPress;\n if (!disabled) {\n // If long press dispatched, cancel default click behavior.\n // If the responder terminated because text was selected during the gesture,\n // cancel the default click behavior.\n event.stopPropagation();\n if (this._longPressDispatched || this._selectionTerminated) {\n event.preventDefault();\n } else if (onPress != null && event.altKey === false) {\n onPress(event);\n }\n } else {\n if (isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n }\n },\n // If `onLongPress` is provided and a touch pointer is being used, prevent the\n // default context menu from opening.\n onContextMenu: event => {\n var _this$_config3 = this._config,\n disabled = _this$_config3.disabled,\n onLongPress = _this$_config3.onLongPress;\n if (!disabled) {\n if (onLongPress != null && this._isPointerTouch && !event.defaultPrevented) {\n event.preventDefault();\n event.stopPropagation();\n }\n } else {\n if (isButtonRole(event.currentTarget)) {\n event.stopPropagation();\n }\n }\n }\n };\n }\n\n /**\n * Receives a state machine signal, performs side effects of the transition\n * and stores the new state. Validates the transition as well.\n */\n _receiveSignal(signal, event) {\n var prevState = this._touchState;\n var nextState = null;\n if (Transitions[prevState] != null) {\n nextState = Transitions[prevState][signal];\n }\n if (this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) {\n return;\n }\n if (nextState == null || nextState === ERROR) {\n console.error(\"PressResponder: Invalid signal \" + signal + \" for state \" + prevState + \" on responder\");\n } else if (prevState !== nextState) {\n this._performTransitionSideEffects(prevState, nextState, signal, event);\n this._touchState = nextState;\n }\n }\n\n /**\n * Performs a transition between touchable states and identify any activations\n * or deactivations (and callback invocations).\n */\n _performTransitionSideEffects(prevState, nextState, signal, event) {\n if (isTerminalSignal(signal)) {\n // Pressable suppression of contextmenu on windows.\n // On Windows, the contextmenu is displayed after pointerup.\n // https://github.com/necolas/react-native-web/issues/2296\n setTimeout(() => {\n this._isPointerTouch = false;\n }, 0);\n this._touchActivatePosition = null;\n this._cancelLongPressDelayTimeout();\n }\n if (isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {\n var onLongPress = this._config.onLongPress;\n // Long press is not supported for keyboards because 'click' can be dispatched\n // immediately (and multiple times) after 'keydown'.\n if (onLongPress != null && event.nativeEvent.key == null) {\n onLongPress(event);\n this._longPressDispatched = true;\n }\n }\n var isPrevActive = isActiveSignal(prevState);\n var isNextActive = isActiveSignal(nextState);\n if (!isPrevActive && isNextActive) {\n this._activate(event);\n } else if (isPrevActive && !isNextActive) {\n this._deactivate(event);\n }\n if (isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {\n var _this$_config4 = this._config,\n _onLongPress = _this$_config4.onLongPress,\n onPress = _this$_config4.onPress;\n if (onPress != null) {\n var isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;\n if (!isPressCanceledByLongPress) {\n // If we never activated (due to delays), activate and deactivate now.\n if (!isNextActive && !isPrevActive) {\n this._activate(event);\n this._deactivate(event);\n }\n }\n }\n }\n this._cancelPressDelayTimeout();\n }\n _activate(event) {\n var _this$_config5 = this._config,\n onPressChange = _this$_config5.onPressChange,\n onPressStart = _this$_config5.onPressStart;\n var touch = getTouchFromResponderEvent(event);\n this._touchActivatePosition = {\n pageX: touch.pageX,\n pageY: touch.pageY\n };\n if (onPressStart != null) {\n onPressStart(event);\n }\n if (onPressChange != null) {\n onPressChange(true);\n }\n }\n _deactivate(event) {\n var _this$_config6 = this._config,\n onPressChange = _this$_config6.onPressChange,\n onPressEnd = _this$_config6.onPressEnd;\n function end() {\n if (onPressEnd != null) {\n onPressEnd(event);\n }\n if (onPressChange != null) {\n onPressChange(false);\n }\n }\n var delayPressEnd = normalizeDelay(this._config.delayPressEnd);\n if (delayPressEnd > 0) {\n this._pressOutDelayTimeout = setTimeout(() => {\n end();\n }, delayPressEnd);\n } else {\n end();\n }\n }\n _handleLongPress(event) {\n if (this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) {\n this._receiveSignal(LONG_PRESS_DETECTED, event);\n }\n }\n _cancelLongPressDelayTimeout() {\n if (this._longPressDelayTimeout != null) {\n clearTimeout(this._longPressDelayTimeout);\n this._longPressDelayTimeout = null;\n }\n }\n _cancelPressDelayTimeout() {\n if (this._pressDelayTimeout != null) {\n clearTimeout(this._pressDelayTimeout);\n this._pressDelayTimeout = null;\n }\n }\n _cancelPressOutDelayTimeout() {\n if (this._pressOutDelayTimeout != null) {\n clearTimeout(this._pressOutDelayTimeout);\n this._pressOutDelayTimeout = null;\n }\n }\n}\nfunction normalizeDelay(delay, min, fallback) {\n if (min === void 0) {\n min = 0;\n }\n if (fallback === void 0) {\n fallback = 0;\n }\n return Math.max(min, delay !== null && delay !== void 0 ? delay : fallback);\n}\nfunction getTouchFromResponderEvent(event) {\n var _event$nativeEvent = event.nativeEvent,\n changedTouches = _event$nativeEvent.changedTouches,\n touches = _event$nativeEvent.touches;\n if (touches != null && touches.length > 0) {\n return touches[0];\n }\n if (changedTouches != null && changedTouches.length > 0) {\n return changedTouches[0];\n }\n return event.nativeEvent;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport PressResponder from './PressResponder';\nimport { useDebugValue, useEffect, useRef } from 'react';\nexport default function usePressEvents(hostRef, config) {\n var pressResponderRef = useRef(null);\n if (pressResponderRef.current == null) {\n pressResponderRef.current = new PressResponder(config);\n }\n var pressResponder = pressResponderRef.current;\n\n // Re-configure to use the current node and configuration.\n useEffect(() => {\n pressResponder.configure(config);\n }, [config, pressResponder]);\n\n // Reset the `pressResponder` when cleanup needs to occur. This is\n // a separate effect because we do not want to rest the responder when `config` changes.\n useEffect(() => {\n return () => {\n pressResponder.reset();\n };\n }, [pressResponder]);\n useDebugValue(config);\n return pressResponder.getEventHandlers();\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var BLUR = 'blur';\nexport var CONTEXT_MENU = 'contextmenu';\nexport var FOCUS_OUT = 'focusout';\nexport var MOUSE_DOWN = 'mousedown';\nexport var MOUSE_MOVE = 'mousemove';\nexport var MOUSE_UP = 'mouseup';\nexport var MOUSE_CANCEL = 'dragstart';\nexport var TOUCH_START = 'touchstart';\nexport var TOUCH_MOVE = 'touchmove';\nexport var TOUCH_END = 'touchend';\nexport var TOUCH_CANCEL = 'touchcancel';\nexport var SCROLL = 'scroll';\nexport var SELECT = 'select';\nexport var SELECTION_CHANGE = 'selectionchange';\nexport function isStartish(eventType) {\n return eventType === TOUCH_START || eventType === MOUSE_DOWN;\n}\nexport function isMoveish(eventType) {\n return eventType === TOUCH_MOVE || eventType === MOUSE_MOVE;\n}\nexport function isEndish(eventType) {\n return eventType === TOUCH_END || eventType === MOUSE_UP || isCancelish(eventType);\n}\nexport function isCancelish(eventType) {\n return eventType === TOUCH_CANCEL || eventType === MOUSE_CANCEL;\n}\nexport function isScroll(eventType) {\n return eventType === SCROLL;\n}\nexport function isSelectionChange(eventType) {\n return eventType === SELECT || eventType === SELECTION_CHANGE;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * RESPONDER EVENT SYSTEM\n *\n * A single, global \"interaction lock\" on views. For a view to be the \"responder\" means\n * that pointer interactions are exclusive to that view and none other. The \"interaction\n * lock\" can be transferred (only) to ancestors of the current \"responder\" as long as\n * pointers continue to be active.\n *\n * Responder being granted:\n *\n * A view can become the \"responder\" after the following events:\n * * \"pointerdown\" (implemented using \"touchstart\", \"mousedown\")\n * * \"pointermove\" (implemented using \"touchmove\", \"mousemove\")\n * * \"scroll\" (while a pointer is down)\n * * \"selectionchange\" (while a pointer is down)\n *\n * If nothing is already the \"responder\", the event propagates to (capture) and from\n * (bubble) the event target until a view returns `true` for\n * `on*ShouldSetResponder(Capture)`.\n *\n * If something is already the responder, the event propagates to (capture) and from\n * (bubble) the lowest common ancestor of the event target and the current \"responder\".\n * Then negotiation happens between the current \"responder\" and a view that wants to\n * become the \"responder\": see the timing diagram below.\n *\n * (NOTE: Scrolled views either automatically become the \"responder\" or release the\n * \"interaction lock\". A native scroll view that isn't built on top of the responder\n * system must result in the current \"responder\" being notified that it no longer has\n * the \"interaction lock\" - the native system has taken over.\n *\n * Responder being released:\n *\n * As soon as there are no more active pointers that *started* inside descendants\n * of the *current* \"responder\", an `onResponderRelease` event is dispatched to the\n * current \"responder\", and the responder lock is released.\n *\n * Typical sequence of events:\n * * startShouldSetResponder\n * * responderGrant/Reject\n * * responderStart\n * * responderMove\n * * responderEnd\n * * responderRelease\n */\n\n/* Negotiation Performed\n +-----------------------+\n / \\\nProcess low level events to + Current Responder + wantsResponderID\ndetermine who to perform negot-| (if any exists at all) |\niation/transition | Otherwise just pass through|\n-------------------------------+----------------------------+------------------+\nBubble to find first ID | |\nto return true:wantsResponderID| |\n | |\n +--------------+ | |\n | onTouchStart | | |\n +------+-------+ none | |\n | return| |\n+-----------v-------------+true| +------------------------+ |\n|onStartShouldSetResponder|----->| onResponderStart (cur) |<-----------+\n+-----------+-------------+ | +------------------------+ | |\n | | | +--------+-------+\n | returned true for| false:REJECT +-------->|onResponderReject\n | wantsResponderID | | | +----------------+\n | (now attempt | +------------------+-----+ |\n | handoff) | | onResponder | |\n +------------------->| TerminationRequest | |\n | +------------------+-----+ |\n | | | +----------------+\n | true:GRANT +-------->|onResponderGrant|\n | | +--------+-------+\n | +------------------------+ | |\n | | onResponderTerminate |<-----------+\n | +------------------+-----+ |\n | | | +----------------+\n | +-------->|onResponderStart|\n | | +----------------+\nBubble to find first ID | |\nto return true:wantsResponderID| |\n | |\n +-------------+ | |\n | onTouchMove | | |\n +------+------+ none | |\n | return| |\n+-----------v-------------+true| +------------------------+ |\n|onMoveShouldSetResponder |----->| onResponderMove (cur) |<-----------+\n+-----------+-------------+ | +------------------------+ | |\n | | | +--------+-------+\n | returned true for| false:REJECT +-------->|onResponderReject\n | wantsResponderID | | | +----------------+\n | (now attempt | +------------------+-----+ |\n | handoff) | | onResponder | |\n +------------------->| TerminationRequest| |\n | +------------------+-----+ |\n | | | +----------------+\n | true:GRANT +-------->|onResponderGrant|\n | | +--------+-------+\n | +------------------------+ | |\n | | onResponderTerminate |<-----------+\n | +------------------+-----+ |\n | | | +----------------+\n | +-------->|onResponderMove |\n | | +----------------+\n | |\n | |\n Some active touch started| |\n inside current responder | +------------------------+ |\n +------------------------->| onResponderEnd | |\n | | +------------------------+ |\n +---+---------+ | |\n | onTouchEnd | | |\n +---+---------+ | |\n | | +------------------------+ |\n +------------------------->| onResponderEnd | |\n No active touches started| +-----------+------------+ |\n inside current responder | | |\n | v |\n | +------------------------+ |\n | | onResponderRelease | |\n | +------------------------+ |\n | |\n + + */\n\nimport createResponderEvent from './createResponderEvent';\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from './ResponderEventTypes';\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from './utils';\nimport { ResponderTouchHistoryStore } from './ResponderTouchHistoryStore';\nimport canUseDOM from '../canUseDom';\n\n/* ------------ TYPES ------------ */\n\nvar emptyObject = {};\n\n/* ------------ IMPLEMENTATION ------------ */\n\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n bubbles: false\n}];\nvar shouldSetResponderEvents = {\n touchstart: startRegistration,\n mousedown: startRegistration,\n touchmove: moveRegistration,\n mousemove: moveRegistration,\n scroll: scrollRegistration\n};\nvar emptyResponder = {\n id: null,\n idPath: null,\n node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n id: null,\n node: null,\n idPath: null\n};\nvar responderTouchHistoryStore = new ResponderTouchHistoryStore();\nfunction changeCurrentResponder(responder) {\n currentResponder = responder;\n}\nfunction getResponderConfig(id) {\n var config = responderListenersMap.get(id);\n return config != null ? config : emptyObject;\n}\n\n/**\n * Process native events\n *\n * A single event listener is used to manage the responder system.\n * All pointers are tracked in the ResponderTouchHistoryStore. Native events\n * are interpreted in terms of the Responder System and checked to see if\n * the responder should be transferred. Each host node that is attached to\n * the Responder System has an ID, which is used to look up its associated\n * callbacks.\n */\nfunction eventListener(domEvent) {\n var eventType = domEvent.type;\n var eventTarget = domEvent.target;\n\n /**\n * Manage emulated events and early bailout.\n * Since PointerEvent is not used yet (lack of support in older Safari), it's\n * necessary to manually manage the mess of browser touch/mouse events.\n * And bailout early for termination events when there is no active responder.\n */\n\n // Flag when browser may produce emulated events\n if (eventType === 'touchstart') {\n isEmulatingMouseEvents = true;\n }\n // Remove flag when browser will not produce emulated events\n if (eventType === 'touchmove' || trackedTouchCount > 1) {\n isEmulatingMouseEvents = false;\n }\n // Ignore various events in particular circumstances\n if (\n // Ignore browser emulated mouse events\n eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents ||\n // Ignore mousemove if a mousedown didn't occur first\n eventType === 'mousemove' && trackedTouchCount < 1) {\n return;\n }\n // Remove flag after emulated events are finished\n if (isEmulatingMouseEvents && eventType === 'mouseup') {\n if (trackedTouchCount === 0) {\n isEmulatingMouseEvents = false;\n }\n return;\n }\n var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n var isMoveEvent = isMoveish(eventType);\n var isEndEvent = isEndish(eventType);\n var isScrollEvent = isScroll(eventType);\n var isSelectionChangeEvent = isSelectionChange(eventType);\n var responderEvent = createResponderEvent(domEvent, responderTouchHistoryStore);\n\n /**\n * Record the state of active pointers\n */\n\n if (isStartEvent || isMoveEvent || isEndEvent) {\n if (domEvent.touches) {\n trackedTouchCount = domEvent.touches.length;\n } else {\n if (isStartEvent) {\n trackedTouchCount = 1;\n } else if (isEndEvent) {\n trackedTouchCount = 0;\n }\n }\n responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n }\n\n /**\n * Responder System logic\n */\n\n var eventPaths = getResponderPaths(domEvent);\n var wasNegotiated = false;\n var wantsResponder;\n\n // If an event occured that might change the current responder...\n if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n // If there is already a responder, prune the event paths to the lowest common ancestor\n // of the existing responder and deepest target of the event.\n var currentResponderIdPath = currentResponder.idPath;\n var eventIdPath = eventPaths.idPath;\n if (currentResponderIdPath != null && eventIdPath != null) {\n var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n if (lowestCommonAncestor != null) {\n var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);\n // Skip the current responder so it doesn't receive unexpected \"shouldSet\" events.\n var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n eventPaths = {\n idPath: eventIdPath.slice(index),\n nodePath: eventPaths.nodePath.slice(index)\n };\n } else {\n eventPaths = null;\n }\n }\n if (eventPaths != null) {\n // If a node wants to become the responder, attempt to transfer.\n wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n if (wantsResponder != null) {\n // Sets responder if none exists, or negotates with existing responder.\n attemptTransfer(responderEvent, wantsResponder);\n wasNegotiated = true;\n }\n }\n }\n\n // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.\n if (currentResponder.id != null && currentResponder.node != null) {\n var _currentResponder = currentResponder,\n id = _currentResponder.id,\n node = _currentResponder.node;\n var _getResponderConfig = getResponderConfig(id),\n onResponderStart = _getResponderConfig.onResponderStart,\n onResponderMove = _getResponderConfig.onResponderMove,\n onResponderEnd = _getResponderConfig.onResponderEnd,\n onResponderRelease = _getResponderConfig.onResponderRelease,\n onResponderTerminate = _getResponderConfig.onResponderTerminate,\n onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n responderEvent.bubbles = false;\n responderEvent.cancelable = false;\n responderEvent.currentTarget = node;\n\n // Start\n if (isStartEvent) {\n if (onResponderStart != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n onResponderStart(responderEvent);\n }\n }\n // Move\n else if (isMoveEvent) {\n if (onResponderMove != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n onResponderMove(responderEvent);\n }\n } else {\n var isTerminateEvent = isCancelish(eventType) ||\n // native context menu\n eventType === 'contextmenu' ||\n // window blur\n eventType === 'blur' && eventTarget === window ||\n // responder (or ancestors) blur\n eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node ||\n // native scroll without using a pointer\n isScrollEvent && trackedTouchCount === 0 ||\n // native scroll on node that is parent of the responder (allow siblings to scroll)\n isScrollEvent && eventTarget.contains(node) && eventTarget !== node ||\n // native select/selectionchange on node\n isSelectionChangeEvent && hasValidSelection(domEvent);\n var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);\n\n // End\n if (isEndEvent) {\n if (onResponderEnd != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n onResponderEnd(responderEvent);\n }\n }\n // Release\n if (isReleaseEvent) {\n if (onResponderRelease != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n onResponderRelease(responderEvent);\n }\n changeCurrentResponder(emptyResponder);\n }\n // Terminate\n if (isTerminateEvent) {\n var shouldTerminate = true;\n\n // Responders can still avoid termination but only for these events.\n if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n // Only call this function is it wasn't already called during negotiation.\n if (wasNegotiated) {\n shouldTerminate = false;\n } else if (onResponderTerminationRequest != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n if (onResponderTerminationRequest(responderEvent) === false) {\n shouldTerminate = false;\n }\n }\n }\n if (shouldTerminate) {\n if (onResponderTerminate != null) {\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n onResponderTerminate(responderEvent);\n }\n changeCurrentResponder(emptyResponder);\n isEmulatingMouseEvents = false;\n trackedTouchCount = 0;\n }\n }\n }\n }\n}\n\n/**\n * Walk the event path to/from the target node. At each node, stop and call the\n * relevant \"shouldSet\" functions for the given event type. If any of those functions\n * call \"stopPropagation\" on the event, stop searching for a responder.\n */\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow\n\n if (shouldSetCallbacks != null) {\n var idPath = eventPaths.idPath,\n nodePath = eventPaths.nodePath;\n var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n var bubbles = shouldSetCallbacks[2].bubbles;\n var check = function check(id, node, callbackName) {\n var config = getResponderConfig(id);\n var shouldSetCallback = config[callbackName];\n if (shouldSetCallback != null) {\n responderEvent.currentTarget = node;\n if (shouldSetCallback(responderEvent) === true) {\n // Start the path from the potential responder\n var prunedIdPath = idPath.slice(idPath.indexOf(id));\n return {\n id,\n node,\n idPath: prunedIdPath\n };\n }\n }\n };\n\n // capture\n for (var i = idPath.length - 1; i >= 0; i--) {\n var id = idPath[i];\n var node = nodePath[i];\n var result = check(id, node, shouldSetCallbackCaptureName);\n if (result != null) {\n return result;\n }\n if (responderEvent.isPropagationStopped() === true) {\n return;\n }\n }\n\n // bubble\n if (bubbles) {\n for (var _i = 0; _i < idPath.length; _i++) {\n var _id = idPath[_i];\n var _node = nodePath[_i];\n var _result = check(_id, _node, shouldSetCallbackBubbleName);\n if (_result != null) {\n return _result;\n }\n if (responderEvent.isPropagationStopped() === true) {\n return;\n }\n }\n } else {\n var _id2 = idPath[0];\n var _node2 = nodePath[0];\n var target = domEvent.target;\n if (target === _node2) {\n return check(_id2, _node2, shouldSetCallbackBubbleName);\n }\n }\n }\n}\n\n/**\n * Attempt to transfer the responder.\n */\nfunction attemptTransfer(responderEvent, wantsResponder) {\n var _currentResponder2 = currentResponder,\n currentId = _currentResponder2.id,\n currentNode = _currentResponder2.node;\n var id = wantsResponder.id,\n node = wantsResponder.node;\n var _getResponderConfig2 = getResponderConfig(id),\n onResponderGrant = _getResponderConfig2.onResponderGrant,\n onResponderReject = _getResponderConfig2.onResponderReject;\n responderEvent.bubbles = false;\n responderEvent.cancelable = false;\n responderEvent.currentTarget = node;\n\n // Set responder\n if (currentId == null) {\n if (onResponderGrant != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n onResponderGrant(responderEvent);\n }\n changeCurrentResponder(wantsResponder);\n }\n // Negotiate with current responder\n else {\n var _getResponderConfig3 = getResponderConfig(currentId),\n onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n var allowTransfer = true;\n if (onResponderTerminationRequest != null) {\n responderEvent.currentTarget = currentNode;\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n if (onResponderTerminationRequest(responderEvent) === false) {\n allowTransfer = false;\n }\n }\n if (allowTransfer) {\n // Terminate existing responder\n if (onResponderTerminate != null) {\n responderEvent.currentTarget = currentNode;\n responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n onResponderTerminate(responderEvent);\n }\n // Grant next responder\n if (onResponderGrant != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n onResponderGrant(responderEvent);\n }\n changeCurrentResponder(wantsResponder);\n } else {\n // Reject responder request\n if (onResponderReject != null) {\n responderEvent.currentTarget = node;\n responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n onResponderReject(responderEvent);\n }\n }\n }\n}\n\n/* ------------ PUBLIC API ------------ */\n\n/**\n * Attach Listeners\n *\n * Use native events as ReactDOM doesn't have a non-plugin API to implement\n * this system.\n */\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = [\n// mouse\n'mousedown', 'mousemove', 'mouseup', 'dragstart',\n// touch\n'touchstart', 'touchmove', 'touchend', 'touchcancel',\n// other\n'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n if (canUseDOM && window.__reactResponderSystemActive == null) {\n window.addEventListener('blur', eventListener);\n documentEventsBubblePhase.forEach(eventType => {\n document.addEventListener(eventType, eventListener);\n });\n documentEventsCapturePhase.forEach(eventType => {\n document.addEventListener(eventType, eventListener, true);\n });\n window.__reactResponderSystemActive = true;\n }\n}\n\n/**\n * Register a node with the ResponderSystem.\n */\nexport function addNode(id, node, config) {\n setResponderId(node, id);\n responderListenersMap.set(id, config);\n}\n\n/**\n * Unregister a node with the ResponderSystem.\n */\nexport function removeNode(id) {\n if (currentResponder.id === id) {\n terminateResponder();\n }\n if (responderListenersMap.has(id)) {\n responderListenersMap.delete(id);\n }\n}\n\n/**\n * Allow the current responder to be terminated from within components to support\n * more complex requirements, such as use with other React libraries for working\n * with scroll views, input views, etc.\n */\nexport function terminateResponder() {\n var _currentResponder3 = currentResponder,\n id = _currentResponder3.id,\n node = _currentResponder3.node;\n if (id != null && node != null) {\n var _getResponderConfig4 = getResponderConfig(id),\n onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n if (onResponderTerminate != null) {\n var event = createResponderEvent({}, responderTouchHistoryStore);\n event.currentTarget = node;\n onResponderTerminate(event);\n }\n changeCurrentResponder(emptyResponder);\n }\n isEmulatingMouseEvents = false;\n trackedTouchCount = 0;\n}\n\n/**\n * Allow unit tests to inspect the current responder in the system.\n * FOR TESTING ONLY.\n */\nexport function getResponderNode() {\n return currentResponder.node;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isStartish, isMoveish, isEndish } from './ResponderEventTypes';\n/**\n * Tracks the position and time of each active touch by `touch.identifier`. We\n * should typically only see IDs in the range of 1-20 because IDs get recycled\n * when touches end and start again.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar MAX_TOUCH_BANK = 20;\nfunction timestampForTouch(touch) {\n // The legacy internal implementation provides \"timeStamp\", which has been\n // renamed to \"timestamp\".\n return touch.timeStamp || touch.timestamp;\n}\n\n/**\n * TODO: Instead of making gestures recompute filtered velocity, we could\n * include a built in velocity computation that can be reused globally.\n */\nfunction createTouchRecord(touch) {\n return {\n touchActive: true,\n startPageX: touch.pageX,\n startPageY: touch.pageY,\n startTimeStamp: timestampForTouch(touch),\n currentPageX: touch.pageX,\n currentPageY: touch.pageY,\n currentTimeStamp: timestampForTouch(touch),\n previousPageX: touch.pageX,\n previousPageY: touch.pageY,\n previousTimeStamp: timestampForTouch(touch)\n };\n}\nfunction resetTouchRecord(touchRecord, touch) {\n touchRecord.touchActive = true;\n touchRecord.startPageX = touch.pageX;\n touchRecord.startPageY = touch.pageY;\n touchRecord.startTimeStamp = timestampForTouch(touch);\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchRecord.previousPageX = touch.pageX;\n touchRecord.previousPageY = touch.pageY;\n touchRecord.previousTimeStamp = timestampForTouch(touch);\n}\nfunction getTouchIdentifier(_ref) {\n var identifier = _ref.identifier;\n if (identifier == null) {\n console.error('Touch object is missing identifier.');\n }\n if (__DEV__) {\n if (identifier > MAX_TOUCH_BANK) {\n console.error('Touch identifier %s is greater than maximum supported %s which causes ' + 'performance issues backfilling array locations for all of the indices.', identifier, MAX_TOUCH_BANK);\n }\n }\n return identifier;\n}\nfunction recordTouchStart(touch, touchHistory) {\n var identifier = getTouchIdentifier(touch);\n var touchRecord = touchHistory.touchBank[identifier];\n if (touchRecord) {\n resetTouchRecord(touchRecord, touch);\n } else {\n touchHistory.touchBank[identifier] = createTouchRecord(touch);\n }\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch, touchHistory) {\n var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n if (touchRecord) {\n touchRecord.touchActive = true;\n touchRecord.previousPageX = touchRecord.currentPageX;\n touchRecord.previousPageY = touchRecord.currentPageY;\n touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n } else {\n console.warn('Cannot record touch move without a touch start.\\n', \"Touch Move: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n }\n}\nfunction recordTouchEnd(touch, touchHistory) {\n var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n if (touchRecord) {\n touchRecord.touchActive = false;\n touchRecord.previousPageX = touchRecord.currentPageX;\n touchRecord.previousPageY = touchRecord.currentPageY;\n touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n touchRecord.currentPageX = touch.pageX;\n touchRecord.currentPageY = touch.pageY;\n touchRecord.currentTimeStamp = timestampForTouch(touch);\n touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n } else {\n console.warn('Cannot record touch end without a touch start.\\n', \"Touch End: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n }\n}\nfunction printTouch(touch) {\n return JSON.stringify({\n identifier: touch.identifier,\n pageX: touch.pageX,\n pageY: touch.pageY,\n timestamp: timestampForTouch(touch)\n });\n}\nfunction printTouchBank(touchHistory) {\n var touchBank = touchHistory.touchBank;\n var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));\n if (touchBank.length > MAX_TOUCH_BANK) {\n printed += ' (original size: ' + touchBank.length + ')';\n }\n return printed;\n}\nexport class ResponderTouchHistoryStore {\n constructor() {\n this._touchHistory = {\n touchBank: [],\n //Array\n numberActiveTouches: 0,\n // If there is only one active touch, we remember its location. This prevents\n // us having to loop through all of the touches all the time in the most\n // common case.\n indexOfSingleActiveTouch: -1,\n mostRecentTimeStamp: 0\n };\n }\n recordTouchTrack(topLevelType, nativeEvent) {\n var touchHistory = this._touchHistory;\n if (isMoveish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchMove(touch, touchHistory));\n } else if (isStartish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchStart(touch, touchHistory));\n touchHistory.numberActiveTouches = nativeEvent.touches.length;\n if (touchHistory.numberActiveTouches === 1) {\n touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier;\n }\n } else if (isEndish(topLevelType)) {\n nativeEvent.changedTouches.forEach(touch => recordTouchEnd(touch, touchHistory));\n touchHistory.numberActiveTouches = nativeEvent.touches.length;\n if (touchHistory.numberActiveTouches === 1) {\n var touchBank = touchHistory.touchBank;\n for (var i = 0; i < touchBank.length; i++) {\n var touchTrackToCheck = touchBank[i];\n if (touchTrackToCheck != null && touchTrackToCheck.touchActive) {\n touchHistory.indexOfSingleActiveTouch = i;\n break;\n }\n }\n if (__DEV__) {\n var activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];\n if (!(activeRecord != null && activeRecord.touchActive)) {\n console.error('Cannot find single active touch.');\n }\n }\n }\n }\n }\n get touchHistory() {\n return this._touchHistory;\n }\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nvar emptyFunction = () => {};\nvar emptyObject = {};\nvar emptyArray = [];\n\n/**\n * Safari produces very large identifiers that would cause the `touchBank` array\n * length to be so large as to crash the browser, if not normalized like this.\n * In the future the `touchBank` should use an object/map instead.\n */\nfunction normalizeIdentifier(identifier) {\n return identifier > 20 ? identifier % 20 : identifier;\n}\n\n/**\n * Converts a native DOM event to a ResponderEvent.\n * Mouse events are transformed into fake touch events.\n */\nexport default function createResponderEvent(domEvent, responderTouchHistoryStore) {\n var rect;\n var propagationWasStopped = false;\n var changedTouches;\n var touches;\n var domEventChangedTouches = domEvent.changedTouches;\n var domEventType = domEvent.type;\n var metaKey = domEvent.metaKey === true;\n var shiftKey = domEvent.shiftKey === true;\n var force = domEventChangedTouches && domEventChangedTouches[0].force || 0;\n var identifier = normalizeIdentifier(domEventChangedTouches && domEventChangedTouches[0].identifier || 0);\n var clientX = domEventChangedTouches && domEventChangedTouches[0].clientX || domEvent.clientX;\n var clientY = domEventChangedTouches && domEventChangedTouches[0].clientY || domEvent.clientY;\n var pageX = domEventChangedTouches && domEventChangedTouches[0].pageX || domEvent.pageX;\n var pageY = domEventChangedTouches && domEventChangedTouches[0].pageY || domEvent.pageY;\n var preventDefault = typeof domEvent.preventDefault === 'function' ? domEvent.preventDefault.bind(domEvent) : emptyFunction;\n var timestamp = domEvent.timeStamp;\n function normalizeTouches(touches) {\n return Array.prototype.slice.call(touches).map(touch => {\n return {\n force: touch.force,\n identifier: normalizeIdentifier(touch.identifier),\n get locationX() {\n return locationX(touch.clientX);\n },\n get locationY() {\n return locationY(touch.clientY);\n },\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target,\n timestamp\n };\n });\n }\n if (domEventChangedTouches != null) {\n changedTouches = normalizeTouches(domEventChangedTouches);\n touches = normalizeTouches(domEvent.touches);\n } else {\n var emulatedTouches = [{\n force,\n identifier,\n get locationX() {\n return locationX(clientX);\n },\n get locationY() {\n return locationY(clientY);\n },\n pageX,\n pageY,\n target: domEvent.target,\n timestamp\n }];\n changedTouches = emulatedTouches;\n touches = domEventType === 'mouseup' || domEventType === 'dragstart' ? emptyArray : emulatedTouches;\n }\n var responderEvent = {\n bubbles: true,\n cancelable: true,\n // `currentTarget` is set before dispatch\n currentTarget: null,\n defaultPrevented: domEvent.defaultPrevented,\n dispatchConfig: emptyObject,\n eventPhase: domEvent.eventPhase,\n isDefaultPrevented() {\n return domEvent.defaultPrevented;\n },\n isPropagationStopped() {\n return propagationWasStopped;\n },\n isTrusted: domEvent.isTrusted,\n nativeEvent: {\n altKey: false,\n ctrlKey: false,\n metaKey,\n shiftKey,\n changedTouches,\n force,\n identifier,\n get locationX() {\n return locationX(clientX);\n },\n get locationY() {\n return locationY(clientY);\n },\n pageX,\n pageY,\n target: domEvent.target,\n timestamp,\n touches,\n type: domEventType\n },\n persist: emptyFunction,\n preventDefault,\n stopPropagation() {\n propagationWasStopped = true;\n },\n target: domEvent.target,\n timeStamp: timestamp,\n touchHistory: responderTouchHistoryStore.touchHistory\n };\n\n // Using getters and functions serves two purposes:\n // 1) The value of `currentTarget` is not initially available.\n // 2) Measuring the clientRect may cause layout jank and should only be done on-demand.\n function locationX(x) {\n rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n if (rect) {\n return x - rect.left;\n }\n }\n function locationY(y) {\n rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n if (rect) {\n return y - rect.top;\n }\n }\n return responderEvent;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Hook for integrating the Responder System into React\n *\n * function SomeComponent({ onStartShouldSetResponder }) {\n * const ref = useRef(null);\n * useResponderEvents(ref, { onStartShouldSetResponder });\n * return
\n * }\n */\n\nimport * as React from 'react';\nimport * as ResponderSystem from './ResponderSystem';\nvar emptyObject = {};\nvar idCounter = 0;\nfunction useStable(getInitialValue) {\n var ref = React.useRef(null);\n if (ref.current == null) {\n ref.current = getInitialValue();\n }\n return ref.current;\n}\nexport default function useResponderEvents(hostRef, config) {\n if (config === void 0) {\n config = emptyObject;\n }\n var id = useStable(() => idCounter++);\n var isAttachedRef = React.useRef(false);\n\n // This is a separate effects so it doesn't run when the config changes.\n // On initial mount, attach global listeners if needed.\n // On unmount, remove node potentially attached to the Responder System.\n React.useEffect(() => {\n ResponderSystem.attachListeners();\n return () => {\n ResponderSystem.removeNode(id);\n };\n }, [id]);\n\n // Register and unregister with the Responder System as necessary\n React.useEffect(() => {\n var _config = config,\n onMoveShouldSetResponder = _config.onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture = _config.onMoveShouldSetResponderCapture,\n onScrollShouldSetResponder = _config.onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture = _config.onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder = _config.onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture = _config.onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder = _config.onStartShouldSetResponder,\n onStartShouldSetResponderCapture = _config.onStartShouldSetResponderCapture;\n var requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null;\n var node = hostRef.current;\n if (requiresResponderSystem) {\n ResponderSystem.addNode(id, node, config);\n isAttachedRef.current = true;\n } else if (isAttachedRef.current) {\n ResponderSystem.removeNode(id);\n isAttachedRef.current = false;\n }\n }, [config, hostRef, id]);\n React.useDebugValue({\n isResponder: hostRef.current === ResponderSystem.getResponderNode()\n });\n React.useDebugValue(config);\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isSelectionValid from '../../modules/isSelectionValid';\nvar keyName = '__reactResponderId';\nfunction getEventPath(domEvent) {\n // The 'selectionchange' event always has the 'document' as the target.\n // Use the anchor node as the initial target to reconstruct a path.\n // (We actually only need the first \"responder\" node in practice.)\n if (domEvent.type === 'selectionchange') {\n var target = window.getSelection().anchorNode;\n return composedPathFallback(target);\n } else {\n var path = domEvent.composedPath != null ? domEvent.composedPath() : composedPathFallback(domEvent.target);\n return path;\n }\n}\nfunction composedPathFallback(target) {\n var path = [];\n while (target != null && target !== document.body) {\n path.push(target);\n target = target.parentNode;\n }\n return path;\n}\n\n/**\n * Retrieve the responderId from a host node\n */\nfunction getResponderId(node) {\n if (node != null) {\n return node[keyName];\n }\n return null;\n}\n\n/**\n * Store the responderId on a host node\n */\nexport function setResponderId(node, id) {\n if (node != null) {\n node[keyName] = id;\n }\n}\n\n/**\n * Filter the event path to contain only the nodes attached to the responder system\n */\nexport function getResponderPaths(domEvent) {\n var idPath = [];\n var nodePath = [];\n var eventPath = getEventPath(domEvent);\n for (var i = 0; i < eventPath.length; i++) {\n var node = eventPath[i];\n var id = getResponderId(node);\n if (id != null) {\n idPath.push(id);\n nodePath.push(node);\n }\n }\n return {\n idPath,\n nodePath\n };\n}\n\n/**\n * Walk the paths and find the first common ancestor\n */\nexport function getLowestCommonAncestor(pathA, pathB) {\n var pathALength = pathA.length;\n var pathBLength = pathB.length;\n if (\n // If either path is empty\n pathALength === 0 || pathBLength === 0 ||\n // If the last elements aren't the same there can't be a common ancestor\n // that is connected to the responder system\n pathA[pathALength - 1] !== pathB[pathBLength - 1]) {\n return null;\n }\n var itemA = pathA[0];\n var indexA = 0;\n var itemB = pathB[0];\n var indexB = 0;\n\n // If A is deeper, skip indices that can't match.\n if (pathALength - pathBLength > 0) {\n indexA = pathALength - pathBLength;\n itemA = pathA[indexA];\n pathALength = pathBLength;\n }\n\n // If B is deeper, skip indices that can't match\n if (pathBLength - pathALength > 0) {\n indexB = pathBLength - pathALength;\n itemB = pathB[indexB];\n pathBLength = pathALength;\n }\n\n // Walk in lockstep until a match is found\n var depth = pathALength;\n while (depth--) {\n if (itemA === itemB) {\n return itemA;\n }\n itemA = pathA[indexA++];\n itemB = pathB[indexB++];\n }\n return null;\n}\n\n/**\n * Determine whether any of the active touches are within the current responder.\n * This cannot rely on W3C `targetTouches`, as neither IE11 nor Safari implement it.\n */\nexport function hasTargetTouches(target, touches) {\n if (!touches || touches.length === 0) {\n return false;\n }\n for (var i = 0; i < touches.length; i++) {\n var node = touches[i].target;\n if (node != null) {\n if (target.contains(node)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Ignore 'selectionchange' events that don't correspond with a person's intent to\n * select text.\n */\nexport function hasValidSelection(domEvent) {\n if (domEvent.type === 'selectionchange') {\n return isSelectionValid();\n }\n return domEvent.type === 'select';\n}\n\n/**\n * Events are only valid if the primary button was used without specific modifier keys.\n */\nexport function isPrimaryPointerDown(domEvent) {\n var altKey = domEvent.altKey,\n button = domEvent.button,\n buttons = domEvent.buttons,\n ctrlKey = domEvent.ctrlKey,\n type = domEvent.type;\n var isTouch = type === 'touchstart' || type === 'touchmove';\n var isPrimaryMouseDown = type === 'mousedown' && (button === 0 || buttons === 1);\n var isPrimaryMouseMove = type === 'mousemove' && buttons === 1;\n var noModifiers = altKey === false && ctrlKey === false;\n if (isTouch || isPrimaryMouseDown && noModifiers || isPrimaryMouseMove && noModifiers) {\n return true;\n }\n return false;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nvar UNINITIALIZED = typeof Symbol === 'function' && typeof Symbol() === 'symbol' ? Symbol() : Object.freeze({});\nexport default function useStable(getInitialValue) {\n var ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = getInitialValue();\n }\n // $FlowFixMe (#64650789) Trouble refining types where `Symbol` is concerned.\n return ref.current;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar warnedKeys = {};\n\n/**\n * A simple function that prints a warning message once per session.\n *\n * @param {string} key - The key used to ensure the message is printed once.\n * This should be unique to the callsite.\n * @param {string} message - The message to print\n */\nexport function warnOnce(key, message) {\n if (process.env.NODE_ENV !== 'production') {\n if (warnedKeys[key]) {\n return;\n }\n console.warn(message);\n warnedKeys[key] = true;\n }\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport Platform from '../../../exports/Platform';\nimport FlatList from './components/AnimatedFlatList';\nimport Image from './components/AnimatedImage';\nimport ScrollView from './components/AnimatedScrollView';\nimport SectionList from './components/AnimatedSectionList';\nimport Text from './components/AnimatedText';\nimport View from './components/AnimatedView';\nimport AnimatedMock from './AnimatedMock';\nimport AnimatedImplementation from './AnimatedImplementation';\nvar Animated = Platform.isTesting ? AnimatedMock : AnimatedImplementation;\nexport default _objectSpread({\n FlatList,\n Image,\n ScrollView,\n SectionList,\n Text,\n View\n}, Animated);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './nodes/AnimatedValue';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from './NativeAnimatedHelper';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport function attachNativeEvent(viewRef, eventName, argMapping) {\n // Find animated values in `argMapping` and create an array representing their\n // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n var eventMappings = [];\n var traverse = (value, path) => {\n if (value instanceof AnimatedValue) {\n value.__makeNative();\n eventMappings.push({\n nativeEventPath: path,\n animatedValueTag: value.__getNativeTag()\n });\n } else if (typeof value === 'object') {\n for (var _key in value) {\n traverse(value[_key], path.concat(_key));\n }\n }\n };\n invariant(argMapping[0] && argMapping[0].nativeEvent, 'Native driven events only support animated values contained inside `nativeEvent`.');\n\n // Assume that the event containing `nativeEvent` is always the first argument.\n traverse(argMapping[0].nativeEvent, []);\n if (viewRef != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.addAnimatedEventToView(viewRef, eventName, mapping);\n });\n }\n return {\n detach() {\n if (viewRef != null) {\n eventMappings.forEach(mapping => {\n NativeAnimatedHelper.API.removeAnimatedEventFromView(viewRef, eventName,\n // $FlowFixMe[incompatible-call]\n mapping.animatedValueTag);\n });\n }\n }\n };\n}\nfunction validateMapping(argMapping, args) {\n var validate = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n invariant(typeof recEvt === 'number', 'Bad mapping of event key ' + key + ', should be number but got ' + typeof recEvt);\n return;\n }\n if (typeof recEvt === 'number') {\n invariant(recMapping instanceof AnimatedValue, 'Bad mapping of type ' + typeof recMapping + ' for key ' + key + ', event value must map to AnimatedValue');\n return;\n }\n invariant(typeof recMapping === 'object', 'Bad mapping of type ' + typeof recMapping + ' for key ' + key);\n invariant(typeof recEvt === 'object', 'Bad event of type ' + typeof recEvt + ' for key ' + key);\n for (var mappingKey in recMapping) {\n validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n };\n invariant(args.length >= argMapping.length, 'Event has less arguments than mapping');\n argMapping.forEach((mapping, idx) => {\n validate(mapping, args[idx], 'arg' + idx);\n });\n}\nexport class AnimatedEvent {\n constructor(argMapping, config) {\n this._listeners = [];\n this._argMapping = argMapping;\n if (config == null) {\n console.warn('Animated.event now requires a second argument for options');\n config = {\n useNativeDriver: false\n };\n }\n if (config.listener) {\n this.__addListener(config.listener);\n }\n this._callListeners = this._callListeners.bind(this);\n this._attachedEvent = null;\n this.__isNative = shouldUseNativeDriver(config);\n }\n __addListener(callback) {\n this._listeners.push(callback);\n }\n __removeListener(callback) {\n this._listeners = this._listeners.filter(listener => listener !== callback);\n }\n __attach(viewRef, eventName) {\n invariant(this.__isNative, 'Only native driven events need to be attached.');\n this._attachedEvent = attachNativeEvent(viewRef, eventName, this._argMapping);\n }\n __detach(viewTag, eventName) {\n invariant(this.__isNative, 'Only native driven events need to be detached.');\n this._attachedEvent && this._attachedEvent.detach();\n }\n __getHandler() {\n var _this = this;\n if (this.__isNative) {\n if (__DEV__) {\n var _validatedMapping = false;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (!_validatedMapping) {\n validateMapping(_this._argMapping, args);\n _validatedMapping = true;\n }\n _this._callListeners(...args);\n };\n } else {\n return this._callListeners;\n }\n }\n var validatedMapping = false;\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n args[_key3] = arguments[_key3];\n }\n if (__DEV__ && !validatedMapping) {\n validateMapping(_this._argMapping, args);\n validatedMapping = true;\n }\n var traverse = (recMapping, recEvt, key) => {\n if (recMapping instanceof AnimatedValue) {\n if (typeof recEvt === 'number') {\n recMapping.setValue(recEvt);\n }\n } else if (typeof recMapping === 'object') {\n for (var mappingKey in recMapping) {\n /* $FlowFixMe(>=0.120.0) This comment suppresses an error found\n * when Flow v0.120 was deployed. To see the error, delete this\n * comment and run Flow. */\n traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n }\n }\n };\n _this._argMapping.forEach((mapping, idx) => {\n traverse(mapping, args[idx], 'arg' + idx);\n });\n _this._callListeners(...args);\n };\n }\n _callListeners() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n args[_key4] = arguments[_key4];\n }\n this._listeners.forEach(listener => listener(...args));\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedAddition from './nodes/AnimatedAddition';\nimport AnimatedDiffClamp from './nodes/AnimatedDiffClamp';\nimport AnimatedDivision from './nodes/AnimatedDivision';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedModulo from './nodes/AnimatedModulo';\nimport AnimatedMultiplication from './nodes/AnimatedMultiplication';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedProps from './nodes/AnimatedProps';\nimport AnimatedSubtraction from './nodes/AnimatedSubtraction';\nimport AnimatedTracking from './nodes/AnimatedTracking';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport DecayAnimation from './animations/DecayAnimation';\nimport SpringAnimation from './animations/SpringAnimation';\nimport TimingAnimation from './animations/TimingAnimation';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\nvar add = function add(a, b) {\n return new AnimatedAddition(a, b);\n};\nvar subtract = function subtract(a, b) {\n return new AnimatedSubtraction(a, b);\n};\nvar divide = function divide(a, b) {\n return new AnimatedDivision(a, b);\n};\nvar multiply = function multiply(a, b) {\n return new AnimatedMultiplication(a, b);\n};\nvar modulo = function modulo(a, modulus) {\n return new AnimatedModulo(a, modulus);\n};\nvar diffClamp = function diffClamp(a, min, max) {\n return new AnimatedDiffClamp(a, min, max);\n};\nvar _combineCallbacks = function _combineCallbacks(callback, config) {\n if (callback && config.onComplete) {\n return function () {\n config.onComplete && config.onComplete(...arguments);\n callback && callback(...arguments);\n };\n } else {\n return callback || config.onComplete;\n }\n};\nvar maybeVectorAnim = function maybeVectorAnim(value, config, anim) {\n if (value instanceof AnimatedValueXY) {\n var configX = _objectSpread({}, config);\n var configY = _objectSpread({}, config);\n for (var key in config) {\n var _config$key = config[key],\n x = _config$key.x,\n y = _config$key.y;\n if (x !== undefined && y !== undefined) {\n configX[key] = x;\n configY[key] = y;\n }\n }\n var aX = anim(value.x, configX);\n var aY = anim(value.y, configY);\n // We use `stopTogether: false` here because otherwise tracking will break\n // because the second animation will get stopped before it can update.\n return parallel([aX, aY], {\n stopTogether: false\n });\n } else if (value instanceof AnimatedColor) {\n var configR = _objectSpread({}, config);\n var configG = _objectSpread({}, config);\n var configB = _objectSpread({}, config);\n var configA = _objectSpread({}, config);\n for (var _key in config) {\n var _config$_key = config[_key],\n r = _config$_key.r,\n g = _config$_key.g,\n b = _config$_key.b,\n a = _config$_key.a;\n if (r !== undefined && g !== undefined && b !== undefined && a !== undefined) {\n configR[_key] = r;\n configG[_key] = g;\n configB[_key] = b;\n configA[_key] = a;\n }\n }\n var aR = anim(value.r, configR);\n var aG = anim(value.g, configG);\n var aB = anim(value.b, configB);\n var aA = anim(value.a, configA);\n // We use `stopTogether: false` here because otherwise tracking will break\n // because the second animation will get stopped before it can update.\n return parallel([aR, aG, aB, aA], {\n stopTogether: false\n });\n }\n return null;\n};\nvar spring = function spring(value, config) {\n var _start = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, SpringAnimation, singleConfig, callback));\n } else {\n singleValue.animate(new SpringAnimation(singleConfig), callback);\n }\n };\n return maybeVectorAnim(value, config, spring) || {\n start: function start(callback) {\n _start(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar timing = function timing(value, config) {\n var _start2 = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n if (configuration.toValue instanceof AnimatedNode) {\n singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, TimingAnimation, singleConfig, callback));\n } else {\n singleValue.animate(new TimingAnimation(singleConfig), callback);\n }\n };\n return maybeVectorAnim(value, config, timing) || {\n start: function start(callback) {\n _start2(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start2(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar decay = function decay(value, config) {\n var _start3 = function start(animatedValue, configuration, callback) {\n callback = _combineCallbacks(callback, configuration);\n var singleValue = animatedValue;\n var singleConfig = configuration;\n singleValue.stopTracking();\n singleValue.animate(new DecayAnimation(singleConfig), callback);\n };\n return maybeVectorAnim(value, config, decay) || {\n start: function start(callback) {\n _start3(value, config, callback);\n },\n stop: function stop() {\n value.stopAnimation();\n },\n reset: function reset() {\n value.resetAnimation();\n },\n _startNativeLoop: function _startNativeLoop(iterations) {\n var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n iterations\n });\n _start3(value, singleConfig);\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return config.useNativeDriver || false;\n }\n };\n};\nvar sequence = function sequence(animations) {\n var current = 0;\n return {\n start: function start(callback) {\n var onComplete = function onComplete(result) {\n if (!result.finished) {\n callback && callback(result);\n return;\n }\n current++;\n if (current === animations.length) {\n callback && callback(result);\n return;\n }\n animations[current].start(onComplete);\n };\n if (animations.length === 0) {\n callback && callback({\n finished: true\n });\n } else {\n animations[current].start(onComplete);\n }\n },\n stop: function stop() {\n if (current < animations.length) {\n animations[current].stop();\n }\n },\n reset: function reset() {\n animations.forEach((animation, idx) => {\n if (idx <= current) {\n animation.reset();\n }\n });\n current = 0;\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.sequence animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return false;\n }\n };\n};\nvar parallel = function parallel(animations, config) {\n var doneCount = 0;\n // Make sure we only call stop() at most once for each animation\n var hasEnded = {};\n var stopTogether = !(config && config.stopTogether === false);\n var result = {\n start: function start(callback) {\n if (doneCount === animations.length) {\n callback && callback({\n finished: true\n });\n return;\n }\n animations.forEach((animation, idx) => {\n var cb = function cb(endResult) {\n hasEnded[idx] = true;\n doneCount++;\n if (doneCount === animations.length) {\n doneCount = 0;\n callback && callback(endResult);\n return;\n }\n if (!endResult.finished && stopTogether) {\n result.stop();\n }\n };\n if (!animation) {\n cb({\n finished: true\n });\n } else {\n animation.start(cb);\n }\n });\n },\n stop: function stop() {\n animations.forEach((animation, idx) => {\n !hasEnded[idx] && animation.stop();\n hasEnded[idx] = true;\n });\n },\n reset: function reset() {\n animations.forEach((animation, idx) => {\n animation.reset();\n hasEnded[idx] = false;\n doneCount = 0;\n });\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.parallel animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return false;\n }\n };\n return result;\n};\nvar delay = function delay(time) {\n // Would be nice to make a specialized implementation\n return timing(new AnimatedValue(0), {\n toValue: 0,\n delay: time,\n duration: 0,\n useNativeDriver: false\n });\n};\nvar stagger = function stagger(time, animations) {\n return parallel(animations.map((animation, i) => {\n return sequence([delay(time * i), animation]);\n }));\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$iterations = _ref.iterations,\n iterations = _ref$iterations === void 0 ? -1 : _ref$iterations,\n _ref$resetBeforeItera = _ref.resetBeforeIteration,\n resetBeforeIteration = _ref$resetBeforeItera === void 0 ? true : _ref$resetBeforeItera;\n var isFinished = false;\n var iterationsSoFar = 0;\n return {\n start: function start(callback) {\n var restart = function restart(result) {\n if (result === void 0) {\n result = {\n finished: true\n };\n }\n if (isFinished || iterationsSoFar === iterations || result.finished === false) {\n callback && callback(result);\n } else {\n iterationsSoFar++;\n resetBeforeIteration && animation.reset();\n animation.start(restart);\n }\n };\n if (!animation || iterations === 0) {\n callback && callback({\n finished: true\n });\n } else {\n if (animation._isUsingNativeDriver()) {\n animation._startNativeLoop(iterations);\n } else {\n restart(); // Start looping recursively on the js thread\n }\n }\n },\n\n stop: function stop() {\n isFinished = true;\n animation.stop();\n },\n reset: function reset() {\n iterationsSoFar = 0;\n isFinished = false;\n animation.reset();\n },\n _startNativeLoop: function _startNativeLoop() {\n throw new Error('Loops run using the native driver cannot contain Animated.loop animations');\n },\n _isUsingNativeDriver: function _isUsingNativeDriver() {\n return animation._isUsingNativeDriver();\n }\n };\n};\nfunction forkEvent(event, listener) {\n if (!event) {\n return listener;\n } else if (event instanceof AnimatedEvent) {\n event.__addListener(listener);\n return event;\n } else {\n return function () {\n typeof event === 'function' && event(...arguments);\n listener(...arguments);\n };\n }\n}\nfunction unforkEvent(event, listener) {\n if (event && event instanceof AnimatedEvent) {\n event.__removeListener(listener);\n }\n}\nvar event = function event(argMapping, config) {\n var animatedEvent = new AnimatedEvent(argMapping, config);\n if (animatedEvent.__isNative) {\n return animatedEvent;\n } else {\n return animatedEvent.__getHandler();\n }\n};\n\n// All types of animated nodes that represent scalar numbers and can be interpolated (etc)\n\n/**\n * The `Animated` library is designed to make animations fluid, powerful, and\n * easy to build and maintain. `Animated` focuses on declarative relationships\n * between inputs and outputs, with configurable transforms in between, and\n * simple `start`/`stop` methods to control time-based animation execution.\n * If additional transforms are added, be sure to include them in\n * AnimatedMock.js as well.\n *\n * See https://reactnative.dev/docs/animated\n */\nexport default {\n /**\n * Standard value class for driving animations. Typically initialized with\n * `new Animated.Value(0);`\n *\n * See https://reactnative.dev/docs/animated#value\n */\n Value: AnimatedValue,\n /**\n * 2D value class for driving 2D animations, such as pan gestures.\n *\n * See https://reactnative.dev/docs/animatedvaluexy\n */\n ValueXY: AnimatedValueXY,\n /**\n * Value class for driving color animations.\n */\n Color: AnimatedColor,\n /**\n * Exported to use the Interpolation type in flow.\n *\n * See https://reactnative.dev/docs/animated#interpolation\n */\n Interpolation: AnimatedInterpolation,\n /**\n * Exported for ease of type checking. All animated values derive from this\n * class.\n *\n * See https://reactnative.dev/docs/animated#node\n */\n Node: AnimatedNode,\n /**\n * Animates a value from an initial velocity to zero based on a decay\n * coefficient.\n *\n * See https://reactnative.dev/docs/animated#decay\n */\n decay,\n /**\n * Animates a value along a timed easing curve. The Easing module has tons of\n * predefined curves, or you can use your own function.\n *\n * See https://reactnative.dev/docs/animated#timing\n */\n timing,\n /**\n * Animates a value according to an analytical spring model based on\n * damped harmonic oscillation.\n *\n * See https://reactnative.dev/docs/animated#spring\n */\n spring,\n /**\n * Creates a new Animated value composed from two Animated values added\n * together.\n *\n * See https://reactnative.dev/docs/animated#add\n */\n add,\n /**\n * Creates a new Animated value composed by subtracting the second Animated\n * value from the first Animated value.\n *\n * See https://reactnative.dev/docs/animated#subtract\n */\n subtract,\n /**\n * Creates a new Animated value composed by dividing the first Animated value\n * by the second Animated value.\n *\n * See https://reactnative.dev/docs/animated#divide\n */\n divide,\n /**\n * Creates a new Animated value composed from two Animated values multiplied\n * together.\n *\n * See https://reactnative.dev/docs/animated#multiply\n */\n multiply,\n /**\n * Creates a new Animated value that is the (non-negative) modulo of the\n * provided Animated value.\n *\n * See https://reactnative.dev/docs/animated#modulo\n */\n modulo,\n /**\n * Create a new Animated value that is limited between 2 values. It uses the\n * difference between the last value so even if the value is far from the\n * bounds it will start changing when the value starts getting closer again.\n *\n * See https://reactnative.dev/docs/animated#diffclamp\n */\n diffClamp,\n /**\n * Starts an animation after the given delay.\n *\n * See https://reactnative.dev/docs/animated#delay\n */\n delay,\n /**\n * Starts an array of animations in order, waiting for each to complete\n * before starting the next. If the current running animation is stopped, no\n * following animations will be started.\n *\n * See https://reactnative.dev/docs/animated#sequence\n */\n sequence,\n /**\n * Starts an array of animations all at the same time. By default, if one\n * of the animations is stopped, they will all be stopped. You can override\n * this with the `stopTogether` flag.\n *\n * See https://reactnative.dev/docs/animated#parallel\n */\n parallel,\n /**\n * Array of animations may run in parallel (overlap), but are started in\n * sequence with successive delays. Nice for doing trailing effects.\n *\n * See https://reactnative.dev/docs/animated#stagger\n */\n stagger,\n /**\n * Loops a given animation continuously, so that each time it reaches the\n * end, it resets and begins again from the start.\n *\n * See https://reactnative.dev/docs/animated#loop\n */\n loop,\n /**\n * Takes an array of mappings and extracts values from each arg accordingly,\n * then calls `setValue` on the mapped outputs.\n *\n * See https://reactnative.dev/docs/animated#event\n */\n event,\n /**\n * Make any React component Animatable. Used to create `Animated.View`, etc.\n *\n * See https://reactnative.dev/docs/animated#createanimatedcomponent\n */\n createAnimatedComponent,\n /**\n * Imperative API to attach an animated value to an event on a view. Prefer\n * using `Animated.event` with `useNativeDrive: true` if possible.\n *\n * See https://reactnative.dev/docs/animated#attachnativeevent\n */\n attachNativeEvent,\n /**\n * Advanced imperative API for snooping on animated events that are passed in\n * through props. Use values directly where possible.\n *\n * See https://reactnative.dev/docs/animated#forkevent\n */\n forkEvent,\n unforkEvent,\n /**\n * Expose Event class, so it can be used as a type for type checkers.\n */\n Event: AnimatedEvent\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedImplementation from './AnimatedImplementation';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\n\n/**\n * Animations are a source of flakiness in snapshot testing. This mock replaces\n * animation functions from AnimatedImplementation with empty animations for\n * predictability in tests. When possible the animation will run immediately\n * to the final state.\n */\n\n// Prevent any callback invocation from recursively triggering another\n// callback, which may trigger another animation\nvar inAnimationCallback = false;\nfunction mockAnimationStart(start) {\n return callback => {\n var guardedCallback = callback == null ? callback : function () {\n if (inAnimationCallback) {\n console.warn('Ignoring recursive animation callback when running mock animations');\n return;\n }\n inAnimationCallback = true;\n try {\n callback(...arguments);\n } finally {\n inAnimationCallback = false;\n }\n };\n start(guardedCallback);\n };\n}\nvar emptyAnimation = {\n start: () => {},\n stop: () => {},\n reset: () => {},\n _startNativeLoop: () => {},\n _isUsingNativeDriver: () => {\n return false;\n }\n};\nvar mockCompositeAnimation = animations => _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n animations.forEach(animation => animation.start());\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n});\nvar spring = function spring(value, config) {\n var anyValue = value;\n return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n anyValue.setValue(config.toValue);\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n });\n};\nvar timing = function timing(value, config) {\n var anyValue = value;\n return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n start: mockAnimationStart(callback => {\n anyValue.setValue(config.toValue);\n callback == null ? void 0 : callback({\n finished: true\n });\n })\n });\n};\nvar decay = function decay(value, config) {\n return emptyAnimation;\n};\nvar sequence = function sequence(animations) {\n return mockCompositeAnimation(animations);\n};\nvar parallel = function parallel(animations, config) {\n return mockCompositeAnimation(animations);\n};\nvar delay = function delay(time) {\n return emptyAnimation;\n};\nvar stagger = function stagger(time, animations) {\n return mockCompositeAnimation(animations);\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$iterations = _ref.iterations,\n iterations = _ref$iterations === void 0 ? -1 : _ref$iterations;\n return emptyAnimation;\n};\nexport default {\n Value: AnimatedValue,\n ValueXY: AnimatedValueXY,\n Color: AnimatedColor,\n Interpolation: AnimatedInterpolation,\n Node: AnimatedNode,\n decay,\n timing,\n spring,\n add: AnimatedImplementation.add,\n subtract: AnimatedImplementation.subtract,\n divide: AnimatedImplementation.divide,\n multiply: AnimatedImplementation.multiply,\n modulo: AnimatedImplementation.modulo,\n diffClamp: AnimatedImplementation.diffClamp,\n delay,\n sequence,\n parallel,\n stagger,\n loop,\n event: AnimatedImplementation.event,\n createAnimatedComponent,\n attachNativeEvent,\n forkEvent: AnimatedImplementation.forkEvent,\n unforkEvent: AnimatedImplementation.unforkEvent,\n Event: AnimatedEvent\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport _bezier from './bezier';\nvar ease;\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n * object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nclass Easing {\n /**\n * A stepping function, returns 1 for any positive value of `n`.\n */\n static step0(n) {\n return n > 0 ? 1 : 0;\n }\n\n /**\n * A stepping function, returns 1 if `n` is greater than or equal to 1.\n */\n static step1(n) {\n return n >= 1 ? 1 : 0;\n }\n\n /**\n * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n * one.\n *\n * http://cubic-bezier.com/#0,0,1,1\n */\n static linear(t) {\n return t;\n }\n\n /**\n * A simple inertial interaction, similar to an object slowly accelerating to\n * speed.\n *\n * http://cubic-bezier.com/#.42,0,1,1\n */\n static ease(t) {\n if (!ease) {\n ease = Easing.bezier(0.42, 0, 1, 1);\n }\n return ease(t);\n }\n\n /**\n * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n * time.\n *\n * http://easings.net/#easeInQuad\n */\n static quad(t) {\n return t * t;\n }\n\n /**\n * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n * time.\n *\n * http://easings.net/#easeInCubic\n */\n static cubic(t) {\n return t * t * t;\n }\n\n /**\n * A power function. Position is equal to the Nth power of elapsed time.\n *\n * n = 4: http://easings.net/#easeInQuart\n * n = 5: http://easings.net/#easeInQuint\n */\n static poly(n) {\n return t => Math.pow(t, n);\n }\n\n /**\n * A sinusoidal function.\n *\n * http://easings.net/#easeInSine\n */\n static sin(t) {\n return 1 - Math.cos(t * Math.PI / 2);\n }\n\n /**\n * A circular function.\n *\n * http://easings.net/#easeInCirc\n */\n static circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n\n /**\n * An exponential function.\n *\n * http://easings.net/#easeInExpo\n */\n static exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n\n /**\n * A simple elastic interaction, similar to a spring oscillating back and\n * forth.\n *\n * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n * times.\n *\n * http://easings.net/#easeInElastic\n */\n static elastic(bounciness) {\n if (bounciness === void 0) {\n bounciness = 1;\n }\n var p = bounciness * Math.PI;\n return t => 1 - Math.pow(Math.cos(t * Math.PI / 2), 3) * Math.cos(t * p);\n }\n\n /**\n * Use with `Animated.parallel()` to create a simple effect where the object\n * animates back slightly as the animation starts.\n *\n * Wolfram Plot:\n *\n * - http://tiny.cc/back_default (s = 1.70158, default)\n */\n static back(s) {\n if (s === void 0) {\n s = 1.70158;\n }\n return t => t * t * ((s + 1) * t - s);\n }\n\n /**\n * Provides a simple bouncing effect.\n *\n * http://easings.net/#easeInBounce\n */\n static bounce(t) {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n if (t < 2 / 2.75) {\n var _t = t - 1.5 / 2.75;\n return 7.5625 * _t * _t + 0.75;\n }\n if (t < 2.5 / 2.75) {\n var _t2 = t - 2.25 / 2.75;\n return 7.5625 * _t2 * _t2 + 0.9375;\n }\n var t2 = t - 2.625 / 2.75;\n return 7.5625 * t2 * t2 + 0.984375;\n }\n\n /**\n * Provides a cubic bezier curve, equivalent to CSS Transitions'\n * `transition-timing-function`.\n *\n * A useful tool to visualize cubic bezier curves can be found at\n * http://cubic-bezier.com/\n */\n static bezier(x1, y1, x2, y2) {\n return _bezier(x1, y1, x2, y2);\n }\n\n /**\n * Runs an easing function forwards.\n */\n static in(easing) {\n return easing;\n }\n\n /**\n * Runs an easing function backwards.\n */\n static out(easing) {\n return t => 1 - easing(1 - t);\n }\n\n /**\n * Makes any easing function symmetrical. The easing function will run\n * forwards for half of the duration, then backwards for the rest of the\n * duration.\n */\n static inOut(easing) {\n return t => {\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n }\n}\nexport default Easing;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport NativeAnimatedNonTurboModule from './NativeAnimatedModule';\nimport NativeAnimatedTurboModule from './NativeAnimatedTurboModule';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\nimport ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';\nimport invariant from 'fbjs/lib/invariant';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\n// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.\nvar NativeAnimatedModule = Platform.OS === 'ios' && global.RN$Bridgeless === true ? NativeAnimatedTurboModule : NativeAnimatedNonTurboModule;\nvar __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */\nvar __nativeAnimationIdCount = 1; /* used for started animations */\n\nvar nativeEventEmitter;\nvar waitingForQueuedOperations = new Set();\nvar queueOperations = false;\nvar queue = [];\n// $FlowFixMe\nvar singleOpQueue = [];\nvar useSingleOpBatching = false;\nPlatform.OS === 'android' && !!(NativeAnimatedModule != null && NativeAnimatedModule.queueAndExecuteBatchedOperations) && ReactNativeFeatureFlags.animatedShouldUseSingleOp();\nvar flushQueueTimeout = null;\nvar eventListenerGetValueCallbacks = {};\nvar eventListenerAnimationFinishedCallbacks = {};\nvar globalEventEmitterGetValueListener = null;\nvar globalEventEmitterAnimationFinishedListener = null;\nvar nativeOps = useSingleOpBatching ? function () {\n var apis = ['createAnimatedNode',\n // 1\n 'updateAnimatedNodeConfig',\n // 2\n 'getValue',\n // 3\n 'startListeningToAnimatedNodeValue',\n // 4\n 'stopListeningToAnimatedNodeValue',\n // 5\n 'connectAnimatedNodes',\n // 6\n 'disconnectAnimatedNodes',\n // 7\n 'startAnimatingNode',\n // 8\n 'stopAnimation',\n // 9\n 'setAnimatedNodeValue',\n // 10\n 'setAnimatedNodeOffset',\n // 11\n 'flattenAnimatedNodeOffset',\n // 12\n 'extractAnimatedNodeOffset',\n // 13\n 'connectAnimatedNodeToView',\n // 14\n 'disconnectAnimatedNodeFromView',\n // 15\n 'restoreDefaultValues',\n // 16\n 'dropAnimatedNode',\n // 17\n 'addAnimatedEventToView',\n // 18\n 'removeAnimatedEventFromView',\n // 19\n 'addListener',\n // 20\n 'removeListener' // 21\n ];\n\n return apis.reduce((acc, functionName, i) => {\n // These indices need to be kept in sync with the indices in native (see NativeAnimatedModule in Java, or the equivalent for any other native platform).\n // $FlowFixMe[prop-missing]\n acc[functionName] = i + 1;\n return acc;\n }, {});\n}() : NativeAnimatedModule;\n\n/**\n * Wrappers around NativeAnimatedModule to provide flow and autocomplete support for\n * the native module methods, and automatic queue management on Android\n */\nvar API = {\n getValue: function getValue(tag, saveValueCallback) {\n invariant(nativeOps, 'Native animated module is not available');\n if (useSingleOpBatching) {\n if (saveValueCallback) {\n eventListenerGetValueCallbacks[tag] = saveValueCallback;\n }\n // $FlowFixMe\n API.queueOperation(nativeOps.getValue, tag);\n } else {\n API.queueOperation(nativeOps.getValue, tag, saveValueCallback);\n }\n },\n setWaitingForIdentifier: function setWaitingForIdentifier(id) {\n waitingForQueuedOperations.add(id);\n queueOperations = true;\n if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush() && flushQueueTimeout) {\n clearTimeout(flushQueueTimeout);\n }\n },\n unsetWaitingForIdentifier: function unsetWaitingForIdentifier(id) {\n waitingForQueuedOperations.delete(id);\n if (waitingForQueuedOperations.size === 0) {\n queueOperations = false;\n API.disableQueue();\n }\n },\n disableQueue: function disableQueue() {\n invariant(nativeOps, 'Native animated module is not available');\n if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush()) {\n var prevTimeout = flushQueueTimeout;\n clearImmediate(prevTimeout);\n flushQueueTimeout = setImmediate(API.flushQueue);\n } else {\n API.flushQueue();\n }\n },\n flushQueue: function flushQueue() {\n /*\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n flushQueueTimeout = null;\n // Early returns before calling any APIs\n if (useSingleOpBatching && singleOpQueue.length === 0) {\n return;\n }\n if (!useSingleOpBatching && queue.length === 0) {\n return;\n }\n if (useSingleOpBatching) {\n // Set up event listener for callbacks if it's not set up\n if (\n !globalEventEmitterGetValueListener ||\n !globalEventEmitterAnimationFinishedListener\n ) {\n setupGlobalEventEmitterListeners();\n }\n // Single op batching doesn't use callback functions, instead we\n // use RCTDeviceEventEmitter. This reduces overhead of sending lots of\n // JSI functions across to native code; but also, TM infrastructure currently\n // does not support packing a function into native arrays.\n NativeAnimatedModule.queueAndExecuteBatchedOperations?.(singleOpQueue);\n singleOpQueue.length = 0;\n } else {\n Platform.OS === 'android' && NativeAnimatedModule.startOperationBatch?.();\n for (let q = 0, l = queue.length; q < l; q++) {\n queue[q]();\n }\n queue.length = 0;\n Platform.OS === 'android' &&\n NativeAnimatedModule.finishOperationBatch?.();\n }\n */\n },\n queueOperation: function queueOperation(fn) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (useSingleOpBatching) {\n // Get the command ID from the queued function, and push that ID and any arguments needed to execute the operation\n // $FlowFixMe: surprise, fn is actually a number\n singleOpQueue.push(fn, ...args);\n return;\n }\n\n // If queueing is explicitly on, *or* the queue has not yet\n // been flushed, use the queue. This is to prevent operations\n // from being executed out of order.\n if (queueOperations || queue.length !== 0) {\n queue.push(() => fn(...args));\n } else {\n fn(...args);\n }\n },\n createAnimatedNode: function createAnimatedNode(tag, config) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.createAnimatedNode, tag, config);\n },\n updateAnimatedNodeConfig: function updateAnimatedNodeConfig(tag, config) {\n invariant(nativeOps, 'Native animated module is not available');\n //if (nativeOps.updateAnimatedNodeConfig) {\n // API.queueOperation(nativeOps.updateAnimatedNodeConfig, tag, config);\n //}\n },\n\n startListeningToAnimatedNodeValue: function startListeningToAnimatedNodeValue(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.startListeningToAnimatedNodeValue, tag);\n },\n stopListeningToAnimatedNodeValue: function stopListeningToAnimatedNodeValue(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.stopListeningToAnimatedNodeValue, tag);\n },\n connectAnimatedNodes: function connectAnimatedNodes(parentTag, childTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.connectAnimatedNodes, parentTag, childTag);\n },\n disconnectAnimatedNodes: function disconnectAnimatedNodes(parentTag, childTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.disconnectAnimatedNodes, parentTag, childTag);\n },\n startAnimatingNode: function startAnimatingNode(animationId, nodeTag, config, endCallback) {\n invariant(nativeOps, 'Native animated module is not available');\n if (useSingleOpBatching) {\n if (endCallback) {\n eventListenerAnimationFinishedCallbacks[animationId] = endCallback;\n }\n // $FlowFixMe\n API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config);\n } else {\n API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config, endCallback);\n }\n },\n stopAnimation: function stopAnimation(animationId) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.stopAnimation, animationId);\n },\n setAnimatedNodeValue: function setAnimatedNodeValue(nodeTag, value) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.setAnimatedNodeValue, nodeTag, value);\n },\n setAnimatedNodeOffset: function setAnimatedNodeOffset(nodeTag, offset) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.setAnimatedNodeOffset, nodeTag, offset);\n },\n flattenAnimatedNodeOffset: function flattenAnimatedNodeOffset(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.flattenAnimatedNodeOffset, nodeTag);\n },\n extractAnimatedNodeOffset: function extractAnimatedNodeOffset(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.extractAnimatedNodeOffset, nodeTag);\n },\n connectAnimatedNodeToView: function connectAnimatedNodeToView(nodeTag, viewTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.connectAnimatedNodeToView, nodeTag, viewTag);\n },\n disconnectAnimatedNodeFromView: function disconnectAnimatedNodeFromView(nodeTag, viewTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.disconnectAnimatedNodeFromView, nodeTag, viewTag);\n },\n restoreDefaultValues: function restoreDefaultValues(nodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n // Backwards compat with older native runtimes, can be removed later.\n if (nativeOps.restoreDefaultValues != null) {\n API.queueOperation(nativeOps.restoreDefaultValues, nodeTag);\n }\n },\n dropAnimatedNode: function dropAnimatedNode(tag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.dropAnimatedNode, tag);\n },\n addAnimatedEventToView: function addAnimatedEventToView(viewTag, eventName, eventMapping) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.addAnimatedEventToView, viewTag, eventName, eventMapping);\n },\n removeAnimatedEventFromView(viewTag, eventName, animatedNodeTag) {\n invariant(nativeOps, 'Native animated module is not available');\n API.queueOperation(nativeOps.removeAnimatedEventFromView, viewTag, eventName, animatedNodeTag);\n }\n};\nfunction setupGlobalEventEmitterListeners() {\n globalEventEmitterGetValueListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleGetValue', function (params) {\n var tag = params.tag;\n var callback = eventListenerGetValueCallbacks[tag];\n if (!callback) {\n return;\n }\n callback(params.value);\n delete eventListenerGetValueCallbacks[tag];\n });\n globalEventEmitterAnimationFinishedListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleAnimationFinished', function (params) {\n var animationId = params.animationId;\n var callback = eventListenerAnimationFinishedCallbacks[animationId];\n if (!callback) {\n return;\n }\n callback(params);\n delete eventListenerAnimationFinishedCallbacks[animationId];\n });\n}\n\n/**\n * Styles allowed by the native animated implementation.\n *\n * In general native animated implementation should support any numeric or color property that\n * doesn't need to be updated through the shadow view hierarchy (all non-layout properties).\n */\nvar SUPPORTED_COLOR_STYLES = {\n backgroundColor: true,\n borderBottomColor: true,\n borderColor: true,\n borderEndColor: true,\n borderLeftColor: true,\n borderRightColor: true,\n borderStartColor: true,\n borderTopColor: true,\n color: true,\n tintColor: true\n};\nvar SUPPORTED_STYLES = _objectSpread(_objectSpread({}, SUPPORTED_COLOR_STYLES), {}, {\n borderBottomEndRadius: true,\n borderBottomLeftRadius: true,\n borderBottomRightRadius: true,\n borderBottomStartRadius: true,\n borderRadius: true,\n borderTopEndRadius: true,\n borderTopLeftRadius: true,\n borderTopRightRadius: true,\n borderTopStartRadius: true,\n elevation: true,\n opacity: true,\n transform: true,\n zIndex: true,\n /* ios styles */\n shadowOpacity: true,\n shadowRadius: true,\n /* legacy android transform properties */\n scaleX: true,\n scaleY: true,\n translateX: true,\n translateY: true\n});\nvar SUPPORTED_TRANSFORMS = {\n translateX: true,\n translateY: true,\n scale: true,\n scaleX: true,\n scaleY: true,\n rotate: true,\n rotateX: true,\n rotateY: true,\n rotateZ: true,\n perspective: true\n};\nvar SUPPORTED_INTERPOLATION_PARAMS = {\n inputRange: true,\n outputRange: true,\n extrapolate: true,\n extrapolateRight: true,\n extrapolateLeft: true\n};\nfunction addWhitelistedStyleProp(prop) {\n SUPPORTED_STYLES[prop] = true;\n}\nfunction addWhitelistedTransformProp(prop) {\n SUPPORTED_TRANSFORMS[prop] = true;\n}\nfunction addWhitelistedInterpolationParam(param) {\n SUPPORTED_INTERPOLATION_PARAMS[param] = true;\n}\nfunction isSupportedColorStyleProp(prop) {\n return SUPPORTED_COLOR_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedStyleProp(prop) {\n return SUPPORTED_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedTransformProp(prop) {\n return SUPPORTED_TRANSFORMS.hasOwnProperty(prop);\n}\nfunction isSupportedInterpolationParam(param) {\n return SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(param);\n}\nfunction validateTransform(configs) {\n configs.forEach(config => {\n if (!isSupportedTransformProp(config.property)) {\n throw new Error(\"Property '\" + config.property + \"' is not supported by native animated module\");\n }\n });\n}\nfunction validateStyles(styles) {\n for (var _key2 in styles) {\n if (!isSupportedStyleProp(_key2)) {\n throw new Error(\"Style property '\" + _key2 + \"' is not supported by native animated module\");\n }\n }\n}\nfunction validateInterpolation(config) {\n for (var _key3 in config) {\n if (!isSupportedInterpolationParam(_key3)) {\n throw new Error(\"Interpolation property '\" + _key3 + \"' is not supported by native animated module\");\n }\n }\n}\nfunction generateNewNodeTag() {\n return __nativeAnimatedNodeTagCount++;\n}\nfunction generateNewAnimationId() {\n return __nativeAnimationIdCount++;\n}\nfunction assertNativeAnimatedModule() {\n invariant(NativeAnimatedModule, 'Native animated module is not available');\n}\nvar _warnedMissingNativeAnimated = false;\nfunction shouldUseNativeDriver(config) {\n if (config.useNativeDriver == null) {\n console.warn('Animated: `useNativeDriver` was not specified. This is a required ' + 'option and must be explicitly set to `true` or `false`');\n }\n if (config.useNativeDriver === true && !NativeAnimatedModule) {\n if (!_warnedMissingNativeAnimated) {\n console.warn('Animated: `useNativeDriver` is not supported because the native ' + 'animated module is missing. Falling back to JS-based animation. To ' + 'resolve this, add `RCTAnimation` module to this app, or remove ' + '`useNativeDriver`. ' + 'Make sure to run `bundle exec pod install` first. Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md');\n _warnedMissingNativeAnimated = true;\n }\n return false;\n }\n return config.useNativeDriver || false;\n}\nfunction transformDataType(value) {\n // Change the string type to number type so we can reuse the same logic in\n // iOS and Android platform\n if (typeof value !== 'string') {\n return value;\n }\n if (/deg$/.test(value)) {\n var degrees = parseFloat(value) || 0;\n var radians = degrees * Math.PI / 180.0;\n return radians;\n } else {\n return value;\n }\n}\nexport { API, isSupportedColorStyleProp, isSupportedStyleProp, isSupportedTransformProp, isSupportedInterpolationParam, addWhitelistedStyleProp, addWhitelistedTransformProp, addWhitelistedInterpolationParam, validateStyles, validateTransform, validateInterpolation, generateNewNodeTag, generateNewAnimationId, assertNativeAnimatedModule, shouldUseNativeDriver, transformDataType };\nexport default {\n API,\n isSupportedColorStyleProp,\n isSupportedStyleProp,\n isSupportedTransformProp,\n isSupportedInterpolationParam,\n addWhitelistedStyleProp,\n addWhitelistedTransformProp,\n addWhitelistedInterpolationParam,\n validateStyles,\n validateTransform,\n validateInterpolation,\n generateNewNodeTag,\n generateNewAnimationId,\n assertNativeAnimatedModule,\n shouldUseNativeDriver,\n transformDataType,\n // $FlowExpectedError[unsafe-getters-setters] - unsafe getter lint suppresion\n // $FlowExpectedError[missing-type-arg] - unsafe getter lint suppresion\n get nativeEventEmitter() {\n if (!nativeEventEmitter) {\n nativeEventEmitter = new NativeEventEmitter(\n // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n // If you want to use the native module on other platforms, please remove this condition and test its behavior\n Platform.OS !== 'ios' ? null : NativeAnimatedModule);\n }\n return nativeEventEmitter;\n }\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\nexport default TurboModuleRegistry.get('NativeAnimatedModule');","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';\nexport default TurboModuleRegistry.get('NativeAnimatedTurboModule');","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction stiffnessFromOrigamiValue(oValue) {\n return (oValue - 30) * 3.62 + 194;\n}\nfunction dampingFromOrigamiValue(oValue) {\n return (oValue - 8) * 3 + 25;\n}\nfunction fromOrigamiTensionAndFriction(tension, friction) {\n return {\n stiffness: stiffnessFromOrigamiValue(tension),\n damping: dampingFromOrigamiValue(friction)\n };\n}\nfunction fromBouncinessAndSpeed(bounciness, speed) {\n function normalize(value, startValue, endValue) {\n return (value - startValue) / (endValue - startValue);\n }\n function projectNormal(n, start, end) {\n return start + n * (end - start);\n }\n function linearInterpolation(t, start, end) {\n return t * end + (1 - t) * start;\n }\n function quadraticOutInterpolation(t, start, end) {\n return linearInterpolation(2 * t - t * t, start, end);\n }\n function b3Friction1(x) {\n return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n }\n function b3Friction2(x) {\n return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n }\n function b3Friction3(x) {\n return 0.00000045 * Math.pow(x, 3) - 0.000332 * Math.pow(x, 2) + 0.1078 * x + 5.84;\n }\n function b3Nobounce(tension) {\n if (tension <= 18) {\n return b3Friction1(tension);\n } else if (tension > 18 && tension <= 44) {\n return b3Friction2(tension);\n } else {\n return b3Friction3(tension);\n }\n }\n var b = normalize(bounciness / 1.7, 0, 20);\n b = projectNormal(b, 0, 0.8);\n var s = normalize(speed / 1.7, 0, 20);\n var bouncyTension = projectNormal(s, 0.5, 200);\n var bouncyFriction = quadraticOutInterpolation(b, b3Nobounce(bouncyTension), 0.01);\n return {\n stiffness: stiffnessFromOrigamiValue(bouncyTension),\n damping: dampingFromOrigamiValue(bouncyFriction)\n };\n}\nexport default {\n fromOrigamiTensionAndFriction,\n fromBouncinessAndSpeed\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar startNativeAnimationNextId = 1;\n\n// Important note: start() and stop() will only be called at most once.\n// Once an animation has been stopped or finished its course, it will\n// not be reused.\nclass Animation {\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {}\n stop() {\n if (this.__nativeId) {\n NativeAnimatedHelper.API.stopAnimation(this.__nativeId);\n }\n }\n __getNativeAnimationConfig() {\n // Subclasses that have corresponding animation implementation done in native\n // should override this method\n throw new Error('This animation type cannot be offloaded to native');\n }\n // Helper function for subclasses to make sure onEnd is only called once.\n __debouncedOnEnd(result) {\n var onEnd = this.__onEnd;\n this.__onEnd = null;\n onEnd && onEnd(result);\n }\n __startNativeAnimation(animatedValue) {\n var startNativeAnimationWaitId = startNativeAnimationNextId + \":startAnimation\";\n startNativeAnimationNextId += 1;\n NativeAnimatedHelper.API.setWaitingForIdentifier(startNativeAnimationWaitId);\n try {\n var config = this.__getNativeAnimationConfig();\n animatedValue.__makeNative(config.platformConfig);\n this.__nativeId = NativeAnimatedHelper.generateNewAnimationId();\n NativeAnimatedHelper.API.startAnimatingNode(this.__nativeId, animatedValue.__getNativeTag(), config,\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.__debouncedOnEnd.bind(this));\n } catch (e) {\n throw e;\n } finally {\n NativeAnimatedHelper.API.unsetWaitingForIdentifier(startNativeAnimationWaitId);\n }\n }\n}\nexport default Animation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass DecayAnimation extends Animation {\n constructor(config) {\n var _config$deceleration, _config$isInteraction, _config$iterations;\n super();\n this._deceleration = (_config$deceleration = config.deceleration) !== null && _config$deceleration !== void 0 ? _config$deceleration : 0.998;\n this._velocity = config.velocity;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n }\n __getNativeAnimationConfig() {\n return {\n type: 'decay',\n deceleration: this._deceleration,\n velocity: this._velocity,\n iterations: this.__iterations\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._lastValue = fromValue;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n onUpdate() {\n var now = Date.now();\n var value = this._fromValue + this._velocity / (1 - this._deceleration) * (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime)));\n this._onUpdate(value);\n if (Math.abs(this._lastValue - value) < 0.1) {\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n this._lastValue = value;\n if (this.__active) {\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n stop() {\n super.stop();\n this.__active = false;\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default DecayAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport SpringConfig from '../SpringConfig';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nclass SpringAnimation extends Animation {\n constructor(config) {\n var _config$overshootClam, _config$restDisplacem, _config$restSpeedThre, _config$velocity, _config$velocity2, _config$delay, _config$isInteraction, _config$iterations;\n super();\n this._overshootClamping = (_config$overshootClam = config.overshootClamping) !== null && _config$overshootClam !== void 0 ? _config$overshootClam : false;\n this._restDisplacementThreshold = (_config$restDisplacem = config.restDisplacementThreshold) !== null && _config$restDisplacem !== void 0 ? _config$restDisplacem : 0.001;\n this._restSpeedThreshold = (_config$restSpeedThre = config.restSpeedThreshold) !== null && _config$restSpeedThre !== void 0 ? _config$restSpeedThre : 0.001;\n this._initialVelocity = (_config$velocity = config.velocity) !== null && _config$velocity !== void 0 ? _config$velocity : 0;\n this._lastVelocity = (_config$velocity2 = config.velocity) !== null && _config$velocity2 !== void 0 ? _config$velocity2 : 0;\n this._toValue = config.toValue;\n this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this._platformConfig = config.platformConfig;\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n if (config.stiffness !== undefined || config.damping !== undefined || config.mass !== undefined) {\n var _config$stiffness, _config$damping, _config$mass;\n invariant(config.bounciness === undefined && config.speed === undefined && config.tension === undefined && config.friction === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n this._stiffness = (_config$stiffness = config.stiffness) !== null && _config$stiffness !== void 0 ? _config$stiffness : 100;\n this._damping = (_config$damping = config.damping) !== null && _config$damping !== void 0 ? _config$damping : 10;\n this._mass = (_config$mass = config.mass) !== null && _config$mass !== void 0 ? _config$mass : 1;\n } else if (config.bounciness !== undefined || config.speed !== undefined) {\n var _config$bounciness, _config$speed;\n // Convert the origami bounciness/speed values to stiffness/damping\n // We assume mass is 1.\n invariant(config.tension === undefined && config.friction === undefined && config.stiffness === undefined && config.damping === undefined && config.mass === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n var springConfig = SpringConfig.fromBouncinessAndSpeed((_config$bounciness = config.bounciness) !== null && _config$bounciness !== void 0 ? _config$bounciness : 8, (_config$speed = config.speed) !== null && _config$speed !== void 0 ? _config$speed : 12);\n this._stiffness = springConfig.stiffness;\n this._damping = springConfig.damping;\n this._mass = 1;\n } else {\n var _config$tension, _config$friction;\n // Convert the origami tension/friction values to stiffness/damping\n // We assume mass is 1.\n var _springConfig = SpringConfig.fromOrigamiTensionAndFriction((_config$tension = config.tension) !== null && _config$tension !== void 0 ? _config$tension : 40, (_config$friction = config.friction) !== null && _config$friction !== void 0 ? _config$friction : 7);\n this._stiffness = _springConfig.stiffness;\n this._damping = _springConfig.damping;\n this._mass = 1;\n }\n invariant(this._stiffness > 0, 'Stiffness value must be greater than 0');\n invariant(this._damping > 0, 'Damping value must be greater than 0');\n invariant(this._mass > 0, 'Mass value must be greater than 0');\n }\n __getNativeAnimationConfig() {\n var _this$_initialVelocit;\n return {\n type: 'spring',\n overshootClamping: this._overshootClamping,\n restDisplacementThreshold: this._restDisplacementThreshold,\n restSpeedThreshold: this._restSpeedThreshold,\n stiffness: this._stiffness,\n damping: this._damping,\n mass: this._mass,\n initialVelocity: (_this$_initialVelocit = this._initialVelocity) !== null && _this$_initialVelocit !== void 0 ? _this$_initialVelocit : this._lastVelocity,\n toValue: this._toValue,\n iterations: this.__iterations,\n platformConfig: this._platformConfig\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._startPosition = fromValue;\n this._lastPosition = this._startPosition;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n this._lastTime = Date.now();\n this._frameTime = 0.0;\n if (previousAnimation instanceof SpringAnimation) {\n var internalState = previousAnimation.getInternalState();\n this._lastPosition = internalState.lastPosition;\n this._lastVelocity = internalState.lastVelocity;\n // Set the initial velocity to the last velocity\n this._initialVelocity = this._lastVelocity;\n this._lastTime = internalState.lastTime;\n }\n var start = () => {\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this.onUpdate();\n }\n };\n\n // If this._delay is more than 0, we start after the timeout.\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n getInternalState() {\n return {\n lastPosition: this._lastPosition,\n lastVelocity: this._lastVelocity,\n lastTime: this._lastTime\n };\n }\n\n /**\n * This spring model is based off of a damped harmonic oscillator\n * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).\n *\n * We use the closed form of the second order differential equation:\n *\n * x'' + (2ζ⍵_0)x' + ⍵^2x = 0\n *\n * where\n * ⍵_0 = √(k / m) (undamped angular frequency of the oscillator),\n * ζ = c / 2√mk (damping ratio),\n * c = damping constant\n * k = stiffness\n * m = mass\n *\n * The derivation of the closed form is described in detail here:\n * http://planetmath.org/sites/default/files/texpdf/39745.pdf\n *\n * This algorithm happens to match the algorithm used by CASpringAnimation,\n * a QuartzCore (iOS) API that creates spring animations.\n */\n onUpdate() {\n // If for some reason we lost a lot of frames (e.g. process large payload or\n // stopped in the debugger), we only advance by 4 frames worth of\n // computation and will continue on the next frame. It's better to have it\n // running at faster speed than jumping to the end.\n var MAX_STEPS = 64;\n var now = Date.now();\n if (now > this._lastTime + MAX_STEPS) {\n now = this._lastTime + MAX_STEPS;\n }\n var deltaTime = (now - this._lastTime) / 1000;\n this._frameTime += deltaTime;\n var c = this._damping;\n var m = this._mass;\n var k = this._stiffness;\n var v0 = -this._initialVelocity;\n var zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n var omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n var omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay\n var x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0\n\n var position = 0.0;\n var velocity = 0.0;\n var t = this._frameTime;\n if (zeta < 1) {\n // Under damped\n var envelope = Math.exp(-zeta * omega0 * t);\n position = this._toValue - envelope * ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) + x0 * Math.cos(omega1 * t));\n // This looks crazy -- it's actually just the derivative of the\n // oscillation function\n velocity = zeta * omega0 * envelope * (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 + x0 * Math.cos(omega1 * t)) - envelope * (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) - omega1 * x0 * Math.sin(omega1 * t));\n } else {\n // Critically damped\n var _envelope = Math.exp(-omega0 * t);\n position = this._toValue - _envelope * (x0 + (v0 + omega0 * x0) * t);\n velocity = _envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));\n }\n this._lastTime = now;\n this._lastPosition = position;\n this._lastVelocity = velocity;\n this._onUpdate(position);\n if (!this.__active) {\n // a listener might have stopped us in _onUpdate\n return;\n }\n\n // Conditions for stopping the spring animation\n var isOvershooting = false;\n if (this._overshootClamping && this._stiffness !== 0) {\n if (this._startPosition < this._toValue) {\n isOvershooting = position > this._toValue;\n } else {\n isOvershooting = position < this._toValue;\n }\n }\n var isVelocity = Math.abs(velocity) <= this._restSpeedThreshold;\n var isDisplacement = true;\n if (this._stiffness !== 0) {\n isDisplacement = Math.abs(this._toValue - position) <= this._restDisplacementThreshold;\n }\n if (isOvershooting || isVelocity && isDisplacement) {\n if (this._stiffness !== 0) {\n // Ensure that we end up with a round value\n this._lastPosition = this._toValue;\n this._lastVelocity = 0;\n this._onUpdate(this._toValue);\n }\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n stop() {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default SpringAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from '../nodes/AnimatedValue';\nimport AnimatedValueXY from '../nodes/AnimatedValueXY';\nimport AnimatedInterpolation from '../nodes/AnimatedInterpolation';\nimport Easing from '../../../../exports/Easing';\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nvar _easeInOut;\nfunction easeInOut() {\n if (!_easeInOut) {\n _easeInOut = Easing.inOut(Easing.ease);\n }\n return _easeInOut;\n}\nclass TimingAnimation extends Animation {\n constructor(config) {\n var _config$easing, _config$duration, _config$delay, _config$iterations, _config$isInteraction;\n super();\n this._toValue = config.toValue;\n this._easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : easeInOut();\n this._duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : 500;\n this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n this._useNativeDriver = shouldUseNativeDriver(config);\n this._platformConfig = config.platformConfig;\n this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n }\n __getNativeAnimationConfig() {\n var frameDuration = 1000.0 / 60.0;\n var frames = [];\n var numFrames = Math.round(this._duration / frameDuration);\n for (var frame = 0; frame < numFrames; frame++) {\n frames.push(this._easing(frame / numFrames));\n }\n frames.push(this._easing(1));\n return {\n type: 'frames',\n frames,\n toValue: this._toValue,\n iterations: this.__iterations,\n platformConfig: this._platformConfig\n };\n }\n start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n this.__active = true;\n this._fromValue = fromValue;\n this._onUpdate = onUpdate;\n this.__onEnd = onEnd;\n var start = () => {\n // Animations that sometimes have 0 duration and sometimes do not\n // still need to use the native driver when duration is 0 so as to\n // not cause intermixed JS and native animations.\n if (this._duration === 0 && !this._useNativeDriver) {\n this._onUpdate(this._toValue);\n this.__debouncedOnEnd({\n finished: true\n });\n } else {\n this._startTime = Date.now();\n if (this._useNativeDriver) {\n this.__startNativeAnimation(animatedValue);\n } else {\n this._animationFrame = requestAnimationFrame(\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this.onUpdate.bind(this));\n }\n }\n };\n if (this._delay) {\n this._timeout = setTimeout(start, this._delay);\n } else {\n start();\n }\n }\n onUpdate() {\n var now = Date.now();\n if (now >= this._startTime + this._duration) {\n if (this._duration === 0) {\n this._onUpdate(this._toValue);\n } else {\n this._onUpdate(this._fromValue + this._easing(1) * (this._toValue - this._fromValue));\n }\n this.__debouncedOnEnd({\n finished: true\n });\n return;\n }\n this._onUpdate(this._fromValue + this._easing((now - this._startTime) / this._duration) * (this._toValue - this._fromValue));\n if (this.__active) {\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n }\n }\n stop() {\n super.stop();\n this.__active = false;\n clearTimeout(this._timeout);\n global.cancelAnimationFrame(this._animationFrame);\n this.__debouncedOnEnd({\n finished: false\n });\n }\n}\nexport default TimingAnimation;","/**\n * Portions Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * BezierEasing - use bezier curve for transition easing function\n * https://github.com/gre/bezier-easing\n * @copyright 2014-2015 Gaëtan Renaudeau. MIT License.\n */\n\n'use strict';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nvar float32ArraySupported = typeof Float32Array === 'function';\nfunction A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction binarySubdivide(aX, _aA, _aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0,\n aA = _aA,\n aB = _aB;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\nfunction newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {\n var aGuessT = _aGuessT;\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\nexport default function bezier(mX1, mY1, mX2, mY2) {\n if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n function getTForX(aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n return function BezierEasing(x) {\n if (mX1 === mY1 && mX2 === mY2) {\n return x; // linear\n }\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n;","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport FlatList from '../../../../exports/FlatList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar FlatListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FlatList, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(FlatListWithEventThrottle);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Image from '../../../../exports/Image';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Image);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport ScrollView from '../../../../exports/ScrollView';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar ScrollViewWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(ScrollView, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(ScrollViewWithEventThrottle);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport SectionList from '../../../../exports/SectionList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar SectionListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SectionList, _extends({\n scrollEventThrottle: 0.0001\n}, props, {\n ref: ref\n})));\nexport default createAnimatedComponent(SectionListWithEventThrottle);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Text from '../../../../exports/Text';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Text);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport View from '../../../../exports/View';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(View);","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport useAnimatedProps from './useAnimatedProps';\nimport useMergeRefs from '../Utilities/useMergeRefs';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport View from '../../../exports/View';\nimport * as React from 'react';\n/**\n * Experimental implementation of `createAnimatedComponent` that is intended to\n * be compatible with concurrent rendering.\n */\nexport default function createAnimatedComponent(Component) {\n return /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n var _useAnimatedProps = useAnimatedProps(props),\n reducedProps = _useAnimatedProps[0],\n callbackRef = _useAnimatedProps[1];\n var ref = useMergeRefs(callbackRef, forwardedRef);\n\n // Some components require explicit passthrough values for animation\n // to work properly. For example, if an animated component is\n // transformed and Pressable, onPress will not work after transform\n // without these passthrough values.\n // $FlowFixMe[prop-missing]\n var passthroughAnimatedPropExplicitValues = reducedProps.passthroughAnimatedPropExplicitValues,\n style = reducedProps.style;\n var _ref = passthroughAnimatedPropExplicitValues !== null && passthroughAnimatedPropExplicitValues !== void 0 ? passthroughAnimatedPropExplicitValues : {},\n passthroughStyle = _ref.style,\n passthroughProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n var mergedStyle = [style, passthroughStyle];\n return /*#__PURE__*/React.createElement(Component, _extends({}, reducedProps, passthroughProps, {\n style: mergedStyle,\n ref: ref\n }));\n });\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedAddition extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() + this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'addition',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedAddition;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport normalizeColor from '@react-native/normalize-color';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nvar defaultColor = {\n r: 0,\n g: 0,\n b: 0,\n a: 1.0\n};\nvar _uniqueId = 1;\nvar processColorObject = color => {\n return color;\n};\n\n/* eslint no-bitwise: 0 */\nfunction processColor(color) {\n if (color === undefined || color === null) {\n return null;\n }\n if (isRgbaValue(color)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n return color;\n }\n var normalizedColor = normalizeColor(\n // $FlowIgnore[incompatible-cast] - Type is verified above\n color);\n if (normalizedColor === undefined || normalizedColor === null) {\n return null;\n }\n if (typeof normalizedColor === 'object') {\n var processedColorObj = processColorObject(normalizedColor);\n if (processedColorObj != null) {\n return processedColorObj;\n }\n } else if (typeof normalizedColor === 'number') {\n var r = (normalizedColor & 0xff000000) >>> 24;\n var g = (normalizedColor & 0x00ff0000) >>> 16;\n var b = (normalizedColor & 0x0000ff00) >>> 8;\n var a = (normalizedColor & 0x000000ff) / 255;\n return {\n r,\n g,\n b,\n a\n };\n }\n return null;\n}\nfunction isRgbaValue(value) {\n return value && typeof value.r === 'number' && typeof value.g === 'number' && typeof value.b === 'number' && typeof value.a === 'number';\n}\nfunction isRgbaAnimatedValue(value) {\n return value && value.r instanceof AnimatedValue && value.g instanceof AnimatedValue && value.b instanceof AnimatedValue && value.a instanceof AnimatedValue;\n}\nexport default class AnimatedColor extends AnimatedWithChildren {\n constructor(valueIn, config) {\n super();\n this._listeners = {};\n var value = valueIn !== null && valueIn !== void 0 ? valueIn : defaultColor;\n if (isRgbaAnimatedValue(value)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n var rgbaAnimatedValue = value;\n this.r = rgbaAnimatedValue.r;\n this.g = rgbaAnimatedValue.g;\n this.b = rgbaAnimatedValue.b;\n this.a = rgbaAnimatedValue.a;\n } else {\n var _processColor;\n var processedColor = // $FlowIgnore[incompatible-cast] - Type is verified above\n (_processColor = processColor(value)) !== null && _processColor !== void 0 ? _processColor : defaultColor;\n var initColor = defaultColor;\n if (isRgbaValue(processedColor)) {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n initColor = processedColor;\n } else {\n // $FlowIgnore[incompatible-cast] - Type is verified above\n this.nativeColor = processedColor;\n }\n this.r = new AnimatedValue(initColor.r);\n this.g = new AnimatedValue(initColor.g);\n this.b = new AnimatedValue(initColor.b);\n this.a = new AnimatedValue(initColor.a);\n }\n if (this.nativeColor || config && config.useNativeDriver) {\n this.__makeNative();\n }\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n */\n setValue(value) {\n var _processColor2;\n var shouldUpdateNodeConfig = false;\n if (this.__isNative) {\n var nativeTag = this.__getNativeTag();\n NativeAnimatedAPI.setWaitingForIdentifier(nativeTag.toString());\n }\n var processedColor = (_processColor2 = processColor(value)) !== null && _processColor2 !== void 0 ? _processColor2 : defaultColor;\n if (isRgbaValue(processedColor)) {\n // $FlowIgnore[incompatible-type] - Type is verified above\n var rgbaValue = processedColor;\n this.r.setValue(rgbaValue.r);\n this.g.setValue(rgbaValue.g);\n this.b.setValue(rgbaValue.b);\n this.a.setValue(rgbaValue.a);\n if (this.nativeColor != null) {\n this.nativeColor = null;\n shouldUpdateNodeConfig = true;\n }\n } else {\n // $FlowIgnore[incompatible-type] - Type is verified above\n var nativeColor = processedColor;\n if (this.nativeColor !== nativeColor) {\n this.nativeColor = nativeColor;\n shouldUpdateNodeConfig = true;\n }\n }\n if (this.__isNative) {\n var _nativeTag = this.__getNativeTag();\n if (shouldUpdateNodeConfig) {\n NativeAnimatedAPI.updateAnimatedNodeConfig(_nativeTag, this.__getNativeConfig());\n }\n NativeAnimatedAPI.unsetWaitingForIdentifier(_nativeTag.toString());\n }\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether\n * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n */\n setOffset(offset) {\n this.r.setOffset(offset.r);\n this.g.setOffset(offset.g);\n this.b.setOffset(offset.b);\n this.a.setOffset(offset.a);\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n */\n flattenOffset() {\n this.r.flattenOffset();\n this.g.flattenOffset();\n this.b.flattenOffset();\n this.a.flattenOffset();\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to\n * zero. The final output of the value is unchanged.\n */\n extractOffset() {\n this.r.extractOffset();\n this.g.extractOffset();\n this.b.extractOffset();\n this.a.extractOffset();\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to synchronously read\n * the value because it might be driven natively.\n *\n * Returns a string that serves as an identifier for the listener.\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n var jointCallback = _ref => {\n var number = _ref.value;\n callback(this.__getValue());\n };\n this._listeners[id] = {\n r: this.r.addListener(jointCallback),\n g: this.g.addListener(jointCallback),\n b: this.b.addListener(jointCallback),\n a: this.a.addListener(jointCallback)\n };\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n */\n removeListener(id) {\n this.r.removeListener(this._listeners[id].r);\n this.g.removeListener(this._listeners[id].g);\n this.b.removeListener(this._listeners[id].b);\n this.a.removeListener(this._listeners[id].a);\n delete this._listeners[id];\n }\n\n /**\n * Remove all registered listeners.\n */\n removeAllListeners() {\n this.r.removeAllListeners();\n this.g.removeAllListeners();\n this.b.removeAllListeners();\n this.a.removeAllListeners();\n this._listeners = {};\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n */\n stopAnimation(callback) {\n this.r.stopAnimation();\n this.g.stopAnimation();\n this.b.stopAnimation();\n this.a.stopAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any animation and resets the value to its original.\n */\n resetAnimation(callback) {\n this.r.resetAnimation();\n this.g.resetAnimation();\n this.b.resetAnimation();\n this.a.resetAnimation();\n callback && callback(this.__getValue());\n }\n __getValue() {\n if (this.nativeColor != null) {\n return this.nativeColor;\n } else {\n return \"rgba(\" + this.r.__getValue() + \", \" + this.g.__getValue() + \", \" + this.b.__getValue() + \", \" + this.a.__getValue() + \")\";\n }\n }\n __attach() {\n this.r.__addChild(this);\n this.g.__addChild(this);\n this.b.__addChild(this);\n this.a.__addChild(this);\n super.__attach();\n }\n __detach() {\n this.r.__removeChild(this);\n this.g.__removeChild(this);\n this.b.__removeChild(this);\n this.a.__removeChild(this);\n super.__detach();\n }\n __makeNative(platformConfig) {\n this.r.__makeNative(platformConfig);\n this.g.__makeNative(platformConfig);\n this.b.__makeNative(platformConfig);\n this.a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getNativeConfig() {\n return {\n type: 'color',\n r: this.r.__getNativeTag(),\n g: this.g.__getNativeTag(),\n b: this.b.__getNativeTag(),\n a: this.a.__getNativeTag(),\n nativeColor: this.nativeColor\n };\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDiffClamp extends AnimatedWithChildren {\n constructor(a, min, max) {\n super();\n this._a = a;\n this._min = min;\n this._max = max;\n this._value = this._lastValue = this._a.__getValue();\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __getValue() {\n var value = this._a.__getValue();\n var diff = value - this._lastValue;\n this._lastValue = value;\n this._value = Math.min(Math.max(this._value + diff, this._min), this._max);\n return this._value;\n }\n __attach() {\n this._a.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'diffclamp',\n input: this._a.__getNativeTag(),\n min: this._min,\n max: this._max\n };\n }\n}\nexport default AnimatedDiffClamp;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDivision extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._warnedAboutDivideByZero = false;\n if (b === 0 || b instanceof AnimatedNode && b.__getValue() === 0) {\n console.error('Detected potential division by zero in AnimatedDivision');\n }\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n var a = this._a.__getValue();\n var b = this._b.__getValue();\n if (b === 0) {\n // Prevent spamming the console/LogBox\n if (!this._warnedAboutDivideByZero) {\n console.error('Detected division by zero in AnimatedDivision');\n this._warnedAboutDivideByZero = true;\n }\n // Passing infinity/NaN to Fabric will cause a native crash\n return 0;\n }\n this._warnedAboutDivideByZero = false;\n return a / b;\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'division',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedDivision;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport normalizeColor from '@react-native/normalize-color';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar linear = t => t;\n\n/**\n * Very handy helper to map input ranges to output ranges with an easing\n * function and custom behavior outside of the ranges.\n */\nfunction createInterpolation(config) {\n if (config.outputRange && typeof config.outputRange[0] === 'string') {\n return createInterpolationFromStringOutputRange(config);\n }\n var outputRange = config.outputRange;\n var inputRange = config.inputRange;\n if (__DEV__) {\n checkInfiniteRange('outputRange', outputRange);\n checkInfiniteRange('inputRange', inputRange);\n checkValidInputRange(inputRange);\n invariant(inputRange.length === outputRange.length, 'inputRange (' + inputRange.length + ') and outputRange (' + outputRange.length + ') must have the same length');\n }\n var easing = config.easing || linear;\n var extrapolateLeft = 'extend';\n if (config.extrapolateLeft !== undefined) {\n extrapolateLeft = config.extrapolateLeft;\n } else if (config.extrapolate !== undefined) {\n extrapolateLeft = config.extrapolate;\n }\n var extrapolateRight = 'extend';\n if (config.extrapolateRight !== undefined) {\n extrapolateRight = config.extrapolateRight;\n } else if (config.extrapolate !== undefined) {\n extrapolateRight = config.extrapolate;\n }\n return input => {\n invariant(typeof input === 'number', 'Cannot interpolation an input which is not a number');\n var range = findRange(input, inputRange);\n return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight);\n };\n}\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight) {\n var result = input;\n\n // Extrapolate\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n if (outputMin === outputMax) {\n return outputMin;\n }\n if (inputMin === inputMax) {\n if (input <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Easing\n result = easing(result);\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n return result;\n}\nfunction colorToRgba(input) {\n var normalizedColor = normalizeColor(input);\n if (normalizedColor === null || typeof normalizedColor !== 'number') {\n return input;\n }\n normalizedColor = normalizedColor || 0;\n var r = (normalizedColor & 0xff000000) >>> 24;\n var g = (normalizedColor & 0x00ff0000) >>> 16;\n var b = (normalizedColor & 0x0000ff00) >>> 8;\n var a = (normalizedColor & 0x000000ff) / 255;\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\nvar stringShapeRegex = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g;\n\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape. Supports\n * things like:\n *\n * rgba(123, 42, 99, 0.36) // colors\n * -45deg // values with units\n */\nfunction createInterpolationFromStringOutputRange(config) {\n var outputRange = config.outputRange;\n invariant(outputRange.length >= 2, 'Bad output range');\n outputRange = outputRange.map(colorToRgba);\n checkPattern(outputRange);\n\n // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']\n // ->\n // [\n // [0, 50],\n // [100, 150],\n // [200, 250],\n // [0, 0.5],\n // ]\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n var outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n outputRange.forEach(value => {\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return\n * `null`. Need to guard against this possibility. */\n value.match(stringShapeRegex).forEach((number, i) => {\n outputRanges[i].push(+number);\n });\n });\n var interpolations = outputRange[0].match(stringShapeRegex)\n /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */\n /* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can\n * return `null`. Need to guard against this possibility. */.map((value, i) => {\n return createInterpolation(_objectSpread(_objectSpread({}, config), {}, {\n outputRange: outputRanges[i]\n }));\n });\n\n // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n // round the opacity (4th column).\n var shouldRound = isRgbOrRgba(outputRange[0]);\n return input => {\n var i = 0;\n // 'rgba(0, 100, 200, 0)'\n // ->\n // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n return outputRange[0].replace(stringShapeRegex, () => {\n var val = +interpolations[i++](input);\n if (shouldRound) {\n val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;\n }\n return String(val);\n });\n };\n}\nfunction isRgbOrRgba(range) {\n return typeof range === 'string' && range.startsWith('rgb');\n}\nfunction checkPattern(arr) {\n var pattern = arr[0].replace(stringShapeRegex, '');\n for (var i = 1; i < arr.length; ++i) {\n invariant(pattern === arr[i].replace(stringShapeRegex, ''), 'invalid pattern ' + arr[0] + ' and ' + arr[i]);\n }\n}\nfunction findRange(input, inputRange) {\n var i;\n for (i = 1; i < inputRange.length - 1; ++i) {\n if (inputRange[i] >= input) {\n break;\n }\n }\n return i - 1;\n}\nfunction checkValidInputRange(arr) {\n invariant(arr.length >= 2, 'inputRange must have at least 2 elements');\n var message = 'inputRange must be monotonically non-decreasing ' + String(arr);\n for (var i = 1; i < arr.length; ++i) {\n invariant(arr[i] >= arr[i - 1], message);\n }\n}\nfunction checkInfiniteRange(name, arr) {\n invariant(arr.length >= 2, name + ' must have at least 2 elements');\n invariant(arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,\n /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n * below this comment, one or both of the operands may be something that\n * doesn't cleanly convert to a string, like undefined, null, and object,\n * etc. If you really mean this implicit string conversion, you can do\n * something like String(myThing) */\n name + 'cannot be ]-infinity;+infinity[ ' + arr);\n}\nclass AnimatedInterpolation extends AnimatedWithChildren {\n // Export for testing.\n\n constructor(parent, config) {\n super();\n this._parent = parent;\n this._config = config;\n this._interpolation = createInterpolation(config);\n }\n __makeNative(platformConfig) {\n this._parent.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n var parentValue = this._parent.__getValue();\n invariant(typeof parentValue === 'number', 'Cannot interpolate an input which is not a number.');\n return this._interpolation(parentValue);\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._parent.__addChild(this);\n }\n __detach() {\n this._parent.__removeChild(this);\n super.__detach();\n }\n __transformDataType(range) {\n return range.map(NativeAnimatedHelper.transformDataType);\n }\n __getNativeConfig() {\n if (__DEV__) {\n NativeAnimatedHelper.validateInterpolation(this._config);\n }\n return {\n inputRange: this._config.inputRange,\n // Only the `outputRange` can contain strings so we don't need to transform `inputRange` here\n outputRange: this.__transformDataType(this._config.outputRange),\n extrapolateLeft: this._config.extrapolateLeft || this._config.extrapolate || 'extend',\n extrapolateRight: this._config.extrapolateRight || this._config.extrapolate || 'extend',\n type: 'interpolation'\n };\n }\n}\nAnimatedInterpolation.__createInterpolation = createInterpolation;\nexport default AnimatedInterpolation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedModulo extends AnimatedWithChildren {\n constructor(a, modulus) {\n super();\n this._a = a;\n this._modulus = modulus;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return (this._a.__getValue() % this._modulus + this._modulus) % this._modulus;\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'modulus',\n input: this._a.__getNativeTag(),\n modulus: this._modulus\n };\n }\n}\nexport default AnimatedModulo;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedMultiplication extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() * this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'multiplication',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedMultiplication;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n// Note(vjeux): this would be better as an interface but flow doesn't\n// support them yet\nclass AnimatedNode {\n __attach() {}\n __detach() {\n if (this.__isNative && this.__nativeTag != null) {\n NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);\n this.__nativeTag = undefined;\n }\n }\n __getValue() {}\n __getAnimatedValue() {\n return this.__getValue();\n }\n __addChild(child) {}\n __removeChild(child) {}\n __getChildren() {\n return [];\n }\n\n /* Methods and props used by native Animated impl */\n\n constructor() {\n this._listeners = {};\n }\n __makeNative(platformConfig) {\n if (!this.__isNative) {\n throw new Error('This node cannot be made a \"native\" animated node');\n }\n this._platformConfig = platformConfig;\n if (this.hasListeners()) {\n this._startListeningToNativeValueUpdates();\n }\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to\n * synchronously read the value because it might be driven natively.\n *\n * See https://reactnative.dev/docs/animatedvalue#addlistener\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n this._listeners[id] = callback;\n if (this.__isNative) {\n this._startListeningToNativeValueUpdates();\n }\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvalue#removelistener\n */\n removeListener(id) {\n delete this._listeners[id];\n if (this.__isNative && !this.hasListeners()) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvalue#removealllisteners\n */\n removeAllListeners() {\n this._listeners = {};\n if (this.__isNative) {\n this._stopListeningForNativeValueUpdates();\n }\n }\n hasListeners() {\n return !!Object.keys(this._listeners).length;\n }\n _startListeningToNativeValueUpdates() {\n if (this.__nativeAnimatedValueListener && !this.__shouldUpdateListenersForNewNativeTag) {\n return;\n }\n if (this.__shouldUpdateListenersForNewNativeTag) {\n this.__shouldUpdateListenersForNewNativeTag = false;\n this._stopListeningForNativeValueUpdates();\n }\n NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag());\n this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener('onAnimatedValueUpdate', data => {\n if (data.tag !== this.__getNativeTag()) {\n return;\n }\n this.__onAnimatedValueUpdateReceived(data.value);\n });\n }\n __onAnimatedValueUpdateReceived(value) {\n this.__callListeners(value);\n }\n __callListeners(value) {\n for (var _key in this._listeners) {\n this._listeners[_key]({\n value\n });\n }\n }\n _stopListeningForNativeValueUpdates() {\n if (!this.__nativeAnimatedValueListener) {\n return;\n }\n this.__nativeAnimatedValueListener.remove();\n this.__nativeAnimatedValueListener = null;\n NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag());\n }\n __getNativeTag() {\n var _this$__nativeTag;\n NativeAnimatedHelper.assertNativeAnimatedModule();\n invariant(this.__isNative, 'Attempt to get native tag from node not marked as \"native\"');\n var nativeTag = (_this$__nativeTag = this.__nativeTag) !== null && _this$__nativeTag !== void 0 ? _this$__nativeTag : NativeAnimatedHelper.generateNewNodeTag();\n if (this.__nativeTag == null) {\n this.__nativeTag = nativeTag;\n var config = this.__getNativeConfig();\n if (this._platformConfig) {\n config.platformConfig = this._platformConfig;\n }\n NativeAnimatedHelper.API.createAnimatedNode(nativeTag, config);\n this.__shouldUpdateListenersForNewNativeTag = true;\n }\n return nativeTag;\n }\n __getNativeConfig() {\n throw new Error('This JS animated node type cannot be used as native animated node');\n }\n toJSON() {\n return this.__getValue();\n }\n __getPlatformConfig() {\n return this._platformConfig;\n }\n __setPlatformConfig(platformConfig) {\n this._platformConfig = platformConfig;\n }\n}\nexport default AnimatedNode;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent } from '../AnimatedEvent';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedStyle from './AnimatedStyle';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nclass AnimatedProps extends AnimatedNode {\n constructor(props, callback) {\n super();\n if (props.style) {\n props = _objectSpread(_objectSpread({}, props), {}, {\n style: new AnimatedStyle(props.style)\n });\n }\n this._props = props;\n this._callback = callback;\n this.__attach();\n }\n __getValue() {\n var props = {};\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative || value instanceof AnimatedStyle) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n props[key] = value.__getValue();\n }\n } else if (value instanceof AnimatedEvent) {\n props[key] = value.__getHandler();\n } else {\n props[key] = value;\n }\n }\n return props;\n }\n __getAnimatedValue() {\n var props = {};\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n props[key] = value.__getAnimatedValue();\n }\n }\n return props;\n }\n __attach() {\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n __detach() {\n if (this.__isNative && this._animatedView) {\n this.__disconnectAnimatedView();\n }\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n update() {\n this._callback();\n }\n __makeNative() {\n if (!this.__isNative) {\n this.__isNative = true;\n for (var key in this._props) {\n var value = this._props[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n if (this._animatedView) {\n this.__connectAnimatedView();\n }\n }\n }\n setNativeView(animatedView) {\n if (this._animatedView === animatedView) {\n return;\n }\n this._animatedView = animatedView;\n if (this.__isNative) {\n this.__connectAnimatedView();\n }\n }\n __connectAnimatedView() {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n var nativeViewTag = this._animatedView;\n invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n NativeAnimatedHelper.API.connectAnimatedNodeToView(this.__getNativeTag(), nativeViewTag);\n }\n __disconnectAnimatedView() {\n invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n var nativeViewTag = this._animatedView;\n invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(this.__getNativeTag(), nativeViewTag);\n }\n __restoreDefaultValues() {\n // When using the native driver, view properties need to be restored to\n // their default values manually since react no longer tracks them. This\n // is needed to handle cases where a prop driven by native animated is removed\n // after having been changed natively by an animation.\n if (this.__isNative) {\n NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());\n }\n }\n __getNativeConfig() {\n var propsConfig = {};\n for (var propKey in this._props) {\n var value = this._props[propKey];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n propsConfig[propKey] = value.__getNativeTag();\n }\n }\n return {\n type: 'props',\n props: propsConfig\n };\n }\n}\nexport default AnimatedProps;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedTransform from './AnimatedTransform';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport StyleSheet from '../../../../exports/StyleSheet';\nvar flattenStyle = StyleSheet.flatten;\nfunction createAnimatedStyle(inputStyle) {\n var style = flattenStyle(inputStyle);\n var animatedStyles = {};\n for (var key in style) {\n var value = style[key];\n if (key === 'transform' && Array.isArray(value)) {\n animatedStyles[key] = new AnimatedTransform(value);\n } else if (value instanceof AnimatedNode) {\n animatedStyles[key] = value;\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n animatedStyles[key] = createAnimatedStyle(value);\n }\n }\n return animatedStyles;\n}\nclass AnimatedStyle extends AnimatedWithChildren {\n constructor(style) {\n super();\n this._inputStyle = style;\n this._style = createAnimatedStyle(style);\n }\n\n // Recursively get values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetValues(style) {\n var updatedStyle = {};\n for (var key in style) {\n var value = style[key];\n if (value instanceof AnimatedNode) {\n if (!value.__isNative) {\n // We cannot use value of natively driven nodes this way as the value we have access from\n // JS may not be up to date.\n updatedStyle[key] = value.__getValue();\n }\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetValues(value);\n } else {\n updatedStyle[key] = value;\n }\n }\n return updatedStyle;\n }\n __getValue() {\n return [this._inputStyle, this._walkStyleAndGetValues(this._style)];\n }\n\n // Recursively get animated values for nested styles (like iOS's shadowOffset)\n _walkStyleAndGetAnimatedValues(style) {\n var updatedStyle = {};\n for (var key in style) {\n var value = style[key];\n if (value instanceof AnimatedNode) {\n updatedStyle[key] = value.__getAnimatedValue();\n } else if (value && !Array.isArray(value) && typeof value === 'object') {\n // Support animating nested values (for example: shadowOffset.height)\n updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n }\n }\n return updatedStyle;\n }\n __getAnimatedValue() {\n return this._walkStyleAndGetAnimatedValues(this._style);\n }\n __attach() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n }\n __detach() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n super.__detach();\n }\n __makeNative() {\n for (var key in this._style) {\n var value = this._style[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n super.__makeNative();\n }\n __getNativeConfig() {\n var styleConfig = {};\n for (var styleKey in this._style) {\n if (this._style[styleKey] instanceof AnimatedNode) {\n var style = this._style[styleKey];\n style.__makeNative();\n styleConfig[styleKey] = style.__getNativeTag();\n }\n }\n NativeAnimatedHelper.validateStyles(styleConfig);\n return {\n type: 'style',\n style: styleConfig\n };\n }\n}\nexport default AnimatedStyle;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedSubtraction extends AnimatedWithChildren {\n constructor(a, b) {\n super();\n this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n }\n __makeNative(platformConfig) {\n this._a.__makeNative(platformConfig);\n this._b.__makeNative(platformConfig);\n super.__makeNative(platformConfig);\n }\n __getValue() {\n return this._a.__getValue() - this._b.__getValue();\n }\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n __attach() {\n this._a.__addChild(this);\n this._b.__addChild(this);\n }\n __detach() {\n this._a.__removeChild(this);\n this._b.__removeChild(this);\n super.__detach();\n }\n __getNativeConfig() {\n return {\n type: 'subtraction',\n input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n };\n }\n}\nexport default AnimatedSubtraction;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedNode from './AnimatedNode';\nimport { generateNewAnimationId, shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass AnimatedTracking extends AnimatedNode {\n constructor(value, parent, animationClass, animationConfig, callback) {\n super();\n this._value = value;\n this._parent = parent;\n this._animationClass = animationClass;\n this._animationConfig = animationConfig;\n this._useNativeDriver = shouldUseNativeDriver(animationConfig);\n this._callback = callback;\n this.__attach();\n }\n __makeNative() {\n this.__isNative = true;\n this._parent.__makeNative();\n super.__makeNative();\n this._value.__makeNative();\n }\n __getValue() {\n return this._parent.__getValue();\n }\n __attach() {\n this._parent.__addChild(this);\n if (this._useNativeDriver) {\n // when the tracking starts we need to convert this node to a \"native node\"\n // so that the parent node will be made \"native\" too. This is necessary as\n // if we don't do this `update` method will get called. At that point it\n // may be too late as it would mean the JS driver has already started\n // updating node values\n this.__makeNative();\n }\n }\n __detach() {\n this._parent.__removeChild(this);\n super.__detach();\n }\n update() {\n this._value.animate(new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n toValue: this._animationConfig.toValue.__getValue()\n })), this._callback);\n }\n __getNativeConfig() {\n var animation = new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n // remove toValue from the config as it's a ref to Animated.Value\n toValue: undefined\n }));\n var animationConfig = animation.__getNativeAnimationConfig();\n return {\n type: 'tracking',\n animationId: generateNewAnimationId(),\n animationConfig,\n toValue: this._parent.__getNativeTag(),\n value: this._value.__getNativeTag()\n };\n }\n}\nexport default AnimatedTracking;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedTransform extends AnimatedWithChildren {\n constructor(transforms) {\n super();\n this._transforms = transforms;\n }\n __makeNative() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__makeNative();\n }\n }\n });\n super.__makeNative();\n }\n __getValue() {\n return this._transforms.map(transform => {\n var result = {};\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getValue();\n } else {\n result[key] = value;\n }\n }\n return result;\n });\n }\n __getAnimatedValue() {\n return this._transforms.map(transform => {\n var result = {};\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n result[key] = value.__getAnimatedValue();\n } else {\n // All transform components needed to recompose matrix\n result[key] = value;\n }\n }\n return result;\n });\n }\n __attach() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__addChild(this);\n }\n }\n });\n }\n __detach() {\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n value.__removeChild(this);\n }\n }\n });\n super.__detach();\n }\n __getNativeConfig() {\n var transConfigs = [];\n this._transforms.forEach(transform => {\n for (var key in transform) {\n var value = transform[key];\n if (value instanceof AnimatedNode) {\n transConfigs.push({\n type: 'animated',\n property: key,\n nodeTag: value.__getNativeTag()\n });\n } else {\n transConfigs.push({\n type: 'static',\n property: key,\n value: NativeAnimatedHelper.transformDataType(value)\n });\n }\n }\n });\n NativeAnimatedHelper.validateTransform(transConfigs);\n return {\n type: 'transform',\n transforms: transConfigs\n };\n }\n}\nexport default AnimatedTransform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport InteractionManager from '../../../../exports/InteractionManager';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n * new Animated.Value(0)\n * .interpolate() .interpolate() new Animated.Value(1)\n * opacity translateY scale\n * style transform\n * View#234 style\n * View#123\n *\n * A) Top Down phase\n * When an Animated.Value is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\nfunction _flush(rootNode) {\n var animatedStyles = new Set();\n function findAnimatedStyles(node) {\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the error\n * delete this comment and run Flow. */\n if (typeof node.update === 'function') {\n animatedStyles.add(node);\n } else {\n node.__getChildren().forEach(findAnimatedStyles);\n }\n }\n findAnimatedStyles(rootNode);\n // $FlowFixMe[prop-missing]\n animatedStyles.forEach(animatedStyle => animatedStyle.update());\n}\n\n/**\n * Some operations are executed only on batch end, which is _mostly_ scheduled when\n * Animated component props change. For some of the changes which require immediate execution\n * (e.g. setValue), we create a separate batch in case none is scheduled.\n */\nfunction _executeAsAnimatedBatch(id, operation) {\n NativeAnimatedAPI.setWaitingForIdentifier(id);\n operation();\n NativeAnimatedAPI.unsetWaitingForIdentifier(id);\n}\n\n/**\n * Standard value for driving animations. One `Animated.Value` can drive\n * multiple properties in a synchronized fashion, but can only be driven by one\n * mechanism at a time. Using a new mechanism (e.g. starting a new animation,\n * or calling `setValue`) will stop any previous ones.\n *\n * See https://reactnative.dev/docs/animatedvalue\n */\nclass AnimatedValue extends AnimatedWithChildren {\n constructor(value, config) {\n super();\n if (typeof value !== 'number') {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n this._startingValue = this._value = value;\n this._offset = 0;\n this._animation = null;\n if (config && config.useNativeDriver) {\n this.__makeNative();\n }\n }\n __detach() {\n if (this.__isNative) {\n NativeAnimatedAPI.getValue(this.__getNativeTag(), value => {\n this._value = value - this._offset;\n });\n }\n this.stopAnimation();\n super.__detach();\n }\n __getValue() {\n return this._value + this._offset;\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvalue#setvalue\n */\n setValue(value) {\n if (this._animation) {\n this._animation.stop();\n this._animation = null;\n }\n this._updateValue(value, !this.__isNative /* don't perform a flush for natively driven values */);\n\n if (this.__isNative) {\n _executeAsAnimatedBatch(this.__getNativeTag().toString(), () => NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value));\n }\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether via\n * `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvalue#setoffset\n */\n setOffset(offset) {\n this._offset = offset;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset);\n }\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue#flattenoffset\n */\n flattenOffset() {\n this._value += this._offset;\n this._offset = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvalue#extractoffset\n */\n extractOffset() {\n this._offset += this._value;\n this._value = 0;\n if (this.__isNative) {\n NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag());\n }\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvalue#stopanimation\n */\n stopAnimation(callback) {\n this.stopTracking();\n this._animation && this._animation.stop();\n this._animation = null;\n if (callback) {\n if (this.__isNative) {\n NativeAnimatedAPI.getValue(this.__getNativeTag(), callback);\n } else {\n callback(this.__getValue());\n }\n }\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvalue#resetanimation\n */\n resetAnimation(callback) {\n this.stopAnimation(callback);\n this._value = this._startingValue;\n if (this.__isNative) {\n NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), this._startingValue);\n }\n }\n __onAnimatedValueUpdateReceived(value) {\n this._updateValue(value, false /*flush*/);\n }\n\n /**\n * Interpolates the value before updating the property, e.g. mapping 0-1 to\n * 0-10.\n */\n interpolate(config) {\n return new AnimatedInterpolation(this, config);\n }\n\n /**\n * Typically only used internally, but could be used by a custom Animation\n * class.\n *\n * See https://reactnative.dev/docs/animatedvalue#animate\n */\n animate(animation, callback) {\n var handle = null;\n if (animation.__isInteraction) {\n handle = InteractionManager.createInteractionHandle();\n }\n var previousAnimation = this._animation;\n this._animation && this._animation.stop();\n this._animation = animation;\n animation.start(this._value, value => {\n // Natively driven animations will never call into that callback\n this._updateValue(value, true /* flush */);\n }, result => {\n this._animation = null;\n if (handle !== null) {\n InteractionManager.clearInteractionHandle(handle);\n }\n callback && callback(result);\n }, previousAnimation, this);\n }\n\n /**\n * Typically only used internally.\n */\n stopTracking() {\n this._tracking && this._tracking.__detach();\n this._tracking = null;\n }\n\n /**\n * Typically only used internally.\n */\n track(tracking) {\n this.stopTracking();\n this._tracking = tracking;\n // Make sure that the tracking animation starts executing\n this._tracking && this._tracking.update();\n }\n _updateValue(value, flush) {\n if (value === undefined) {\n throw new Error('AnimatedValue: Attempting to set value to undefined');\n }\n this._value = value;\n if (flush) {\n _flush(this);\n }\n super.__callListeners(this.__getValue());\n }\n __getNativeConfig() {\n return {\n type: 'value',\n value: this._value,\n offset: this._offset\n };\n }\n}\nexport default AnimatedValue;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n/**\n * 2D Value for driving 2D animations, such as pan gestures. Almost identical\n * API to normal `Animated.Value`, but multiplexed.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\nclass AnimatedValueXY extends AnimatedWithChildren {\n constructor(valueIn) {\n super();\n var value = valueIn || {\n x: 0,\n y: 0\n }; // fixme: shouldn't need `: any`\n if (typeof value.x === 'number' && typeof value.y === 'number') {\n this.x = new AnimatedValue(value.x);\n this.y = new AnimatedValue(value.y);\n } else {\n invariant(value.x instanceof AnimatedValue && value.y instanceof AnimatedValue, 'AnimatedValueXY must be initialized with an object of numbers or ' + 'AnimatedValues.');\n this.x = value.x;\n this.y = value.y;\n }\n this._listeners = {};\n }\n\n /**\n * Directly set the value. This will stop any animations running on the value\n * and update all the bound properties.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setvalue\n */\n setValue(value) {\n this.x.setValue(value.x);\n this.y.setValue(value.y);\n }\n\n /**\n * Sets an offset that is applied on top of whatever value is set, whether\n * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n * things like the start of a pan gesture.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#setoffset\n */\n setOffset(offset) {\n this.x.setOffset(offset.x);\n this.y.setOffset(offset.y);\n }\n\n /**\n * Merges the offset value into the base value and resets the offset to zero.\n * The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#flattenoffset\n */\n flattenOffset() {\n this.x.flattenOffset();\n this.y.flattenOffset();\n }\n\n /**\n * Sets the offset value to the base value, and resets the base value to\n * zero. The final output of the value is unchanged.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#extractoffset\n */\n extractOffset() {\n this.x.extractOffset();\n this.y.extractOffset();\n }\n __getValue() {\n return {\n x: this.x.__getValue(),\n y: this.y.__getValue()\n };\n }\n\n /**\n * Stops any animation and resets the value to its original.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#resetanimation\n */\n resetAnimation(callback) {\n this.x.resetAnimation();\n this.y.resetAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Stops any running animation or tracking. `callback` is invoked with the\n * final value after stopping the animation, which is useful for updating\n * state to match the animation position with layout.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#stopanimation\n */\n stopAnimation(callback) {\n this.x.stopAnimation();\n this.y.stopAnimation();\n callback && callback(this.__getValue());\n }\n\n /**\n * Adds an asynchronous listener to the value so you can observe updates from\n * animations. This is useful because there is no way to synchronously read\n * the value because it might be driven natively.\n *\n * Returns a string that serves as an identifier for the listener.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#addlistener\n */\n addListener(callback) {\n var id = String(_uniqueId++);\n var jointCallback = _ref => {\n var number = _ref.value;\n callback(this.__getValue());\n };\n this._listeners[id] = {\n x: this.x.addListener(jointCallback),\n y: this.y.addListener(jointCallback)\n };\n return id;\n }\n\n /**\n * Unregister a listener. The `id` param shall match the identifier\n * previously returned by `addListener()`.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removelistener\n */\n removeListener(id) {\n this.x.removeListener(this._listeners[id].x);\n this.y.removeListener(this._listeners[id].y);\n delete this._listeners[id];\n }\n\n /**\n * Remove all registered listeners.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#removealllisteners\n */\n removeAllListeners() {\n this.x.removeAllListeners();\n this.y.removeAllListeners();\n this._listeners = {};\n }\n\n /**\n * Converts `{x, y}` into `{left, top}` for use in style.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#getlayout\n */\n getLayout() {\n return {\n left: this.x,\n top: this.y\n };\n }\n\n /**\n * Converts `{x, y}` into a useable translation transform.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html#gettranslatetransform\n */\n getTranslateTransform() {\n return [{\n translateX: this.x\n }, {\n translateY: this.y\n }];\n }\n}\nexport default AnimatedValueXY;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport AnimatedNode from './AnimatedNode';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedWithChildren extends AnimatedNode {\n constructor() {\n super();\n this._children = [];\n }\n __makeNative(platformConfig) {\n if (!this.__isNative) {\n this.__isNative = true;\n for (var _iterator = _createForOfIteratorHelperLoose(this._children), _step; !(_step = _iterator()).done;) {\n var child = _step.value;\n child.__makeNative(platformConfig);\n NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n }\n super.__makeNative(platformConfig);\n }\n __addChild(child) {\n if (this._children.length === 0) {\n this.__attach();\n }\n this._children.push(child);\n if (this.__isNative) {\n // Only accept \"native\" animated nodes as children\n child.__makeNative(this.__getPlatformConfig());\n NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n }\n __removeChild(child) {\n var index = this._children.indexOf(child);\n if (index === -1) {\n console.warn(\"Trying to remove a child that doesn't exist\");\n return;\n }\n if (this.__isNative && child.__isNative) {\n NativeAnimatedHelper.API.disconnectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n }\n this._children.splice(index, 1);\n if (this._children.length === 0) {\n this.__detach();\n }\n }\n __getChildren() {\n return this._children;\n }\n __callListeners(value) {\n super.__callListeners(value);\n if (!this.__isNative) {\n for (var _iterator2 = _createForOfIteratorHelperLoose(this._children), _step2; !(_step2 = _iterator2()).done;) {\n var child = _step2.value;\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n if (child.__getValue) {\n child.__callListeners(child.__getValue());\n }\n }\n }\n }\n}\nexport default AnimatedWithChildren;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedProps from './nodes/AnimatedProps';\nimport { AnimatedEvent } from './AnimatedEvent';\nimport useRefEffect from '../Utilities/useRefEffect';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport useLayoutEffect from '../../../modules/useLayoutEffect';\nexport default function useAnimatedProps(props) {\n var _useReducer = useReducer(count => count + 1, 0),\n scheduleUpdate = _useReducer[1];\n var onUpdateRef = useRef(null);\n\n // TODO: Only invalidate `node` if animated props or `style` change. In the\n // previous implementation, we permitted `style` to override props with the\n // same name property name as styles, so we can probably continue doing that.\n // The ordering of other props *should* not matter.\n var node = useMemo(() => new AnimatedProps(props, () => onUpdateRef.current == null ? void 0 : onUpdateRef.current()), [props]);\n useAnimatedPropsLifecycle(node);\n\n // TODO: This \"effect\" does three things:\n //\n // 1) Call `setNativeView`.\n // 2) Update `onUpdateRef`.\n // 3) Update listeners for `AnimatedEvent` props.\n //\n // Ideally, each of these would be separat \"effects\" so that they are not\n // unnecessarily re-run when irrelevant dependencies change. For example, we\n // should be able to hoist all `AnimatedEvent` props and only do #3 if either\n // the `AnimatedEvent` props change or `instance` changes.\n //\n // But there is no way to transparently compose three separate callback refs,\n // so we just combine them all into one for now.\n var refEffect = useCallback(instance => {\n // NOTE: This may be called more often than necessary (e.g. when `props`\n // changes), but `setNativeView` already optimizes for that.\n node.setNativeView(instance);\n\n // NOTE: This callback is only used by the JavaScript animation driver.\n onUpdateRef.current = () => {\n // Schedule an update for this component to update `reducedProps`,\n // but do not compute it immediately. If a parent also updated, we\n // need to merge those new props in before updating.\n scheduleUpdate();\n };\n var target = getEventTarget(instance);\n var events = [];\n for (var propName in props) {\n var propValue = props[propName];\n if (propValue instanceof AnimatedEvent && propValue.__isNative) {\n propValue.__attach(target, propName);\n events.push([propName, propValue]);\n }\n }\n return () => {\n onUpdateRef.current = null;\n for (var _i = 0, _events = events; _i < _events.length; _i++) {\n var _events$_i = _events[_i],\n _propName = _events$_i[0],\n _propValue = _events$_i[1];\n _propValue.__detach(target, _propName);\n }\n };\n }, [props, node]);\n var callbackRef = useRefEffect(refEffect);\n return [reduceAnimatedProps(node), callbackRef];\n}\nfunction reduceAnimatedProps(node) {\n // Force `collapsable` to be false so that the native view is not flattened.\n // Flattened views cannot be accurately referenced by the native driver.\n return _objectSpread(_objectSpread({}, node.__getValue()), {}, {\n collapsable: false\n });\n}\n\n/**\n * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`\n * and `__detach`. However, this is more complicated because `AnimatedProps`\n * uses reference counting to determine when to recursively detach its children\n * nodes. So in order to optimize this, we avoid detaching until the next attach\n * unless we are unmounting.\n */\nfunction useAnimatedPropsLifecycle(node) {\n var prevNodeRef = useRef(null);\n var isUnmountingRef = useRef(false);\n useEffect(() => {\n // It is ok for multiple components to call `flushQueue` because it noops\n // if the queue is empty. When multiple animated components are mounted at\n // the same time. Only first component flushes the queue and the others will noop.\n NativeAnimatedHelper.API.flushQueue();\n });\n useLayoutEffect(() => {\n isUnmountingRef.current = false;\n return () => {\n isUnmountingRef.current = true;\n };\n }, []);\n useLayoutEffect(() => {\n node.__attach();\n if (prevNodeRef.current != null) {\n var prevNode = prevNodeRef.current;\n // TODO: Stop restoring default values (unless `reset` is called).\n prevNode.__restoreDefaultValues();\n prevNode.__detach();\n prevNodeRef.current = null;\n }\n return () => {\n if (isUnmountingRef.current) {\n // NOTE: Do not restore default values on unmount, see D18197735.\n node.__detach();\n } else {\n prevNodeRef.current = node;\n }\n };\n }, [node]);\n}\nfunction getEventTarget(instance) {\n return typeof instance === 'object' && typeof (instance == null ? void 0 : instance.getScrollableNode) === 'function' ?\n // $FlowFixMe[incompatible-use] - Legacy instance assumptions.\n instance.getScrollableNode() : instance;\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction isFabricInstance(instance) {\n var _instance$getScrollRe;\n return hasFabricHandle(instance) ||\n // Some components have a setNativeProps function but aren't a host component\n // such as lists like FlatList and SectionList. These should also use\n // forceUpdate in Fabric since setNativeProps doesn't exist on the underlying\n // host component. This crazy hack is essentially special casing those lists and\n // ScrollView itself to use forceUpdate in Fabric.\n // If these components end up using forwardRef then these hacks can go away\n // as instance would actually be the underlying host component and the above check\n // would be sufficient.\n hasFabricHandle(instance == null ? void 0 : instance.getNativeScrollRef == null ? void 0 : instance.getNativeScrollRef()) || hasFabricHandle(instance == null ? void 0 : instance.getScrollResponder == null ? void 0 : (_instance$getScrollRe = instance.getScrollResponder()) == null ? void 0 : _instance$getScrollRe.getNativeScrollRef == null ? void 0 : _instance$getScrollRe.getNativeScrollRef());\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction hasFabricHandle(instance) {\n var _instance$_internalIn, _instance$_internalIn2;\n // eslint-disable-next-line dot-notation\n return (instance == null ? void 0 : (_instance$_internalIn = instance['_internalInstanceHandle']) == null ? void 0 : (_instance$_internalIn2 = _instance$_internalIn.stateNode) == null ? void 0 : _instance$_internalIn2.canonical) != null;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\n\n/**\n * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the\n * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached,\n * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri\n * interactions are done running.\n *\n * Make sure to cleanup with dispose(). Example:\n *\n * class Widget extends React.Component {\n * _batchedSave: new Batchinator(() => this._saveState, 1000);\n * _saveSate() {\n * // save this.state to disk\n * }\n * componentDidUpdate() {\n * this._batchedSave.schedule();\n * }\n * componentWillUnmount() {\n * this._batchedSave.dispose();\n * }\n * ...\n * }\n */\nclass Batchinator {\n constructor(callback, delayMS) {\n this._delay = delayMS;\n this._callback = callback;\n }\n /*\n * Cleanup any pending tasks.\n *\n * By default, if there is a pending task the callback is run immediately. Set the option abort to\n * true to not call the callback if it was pending.\n */\n dispose(options) {\n if (options === void 0) {\n options = {\n abort: false\n };\n }\n if (this._taskHandle) {\n this._taskHandle.cancel();\n if (!options.abort) {\n this._callback();\n }\n this._taskHandle = null;\n }\n }\n schedule() {\n if (this._taskHandle) {\n return;\n }\n var timeoutHandle = setTimeout(() => {\n this._taskHandle = InteractionManager.runAfterInteractions(() => {\n // Note that we clear the handle before invoking the callback so that if the callback calls\n // schedule again, it will actually schedule another task.\n this._taskHandle = null;\n this._callback();\n });\n }, this._delay);\n this._taskHandle = {\n cancel: () => clearTimeout(timeoutHandle)\n };\n }\n}\nexport default Batchinator;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\nimport invariant from 'fbjs/lib/invariant';\n/**\n * `NativeEventEmitter` is intended for use by Native Modules to emit events to\n * JavaScript listeners. If a `NativeModule` is supplied to the constructor, it\n * will be notified (via `addListener` and `removeListeners`) when the listener\n * count changes to manage \"native memory\".\n *\n * Currently, all native events are fired via a global `RCTDeviceEventEmitter`.\n * This means event names must be globally unique, and it means that call sites\n * can theoretically listen to `RCTDeviceEventEmitter` (although discouraged).\n */\nexport default class NativeEventEmitter {\n constructor(nativeModule) {\n if (Platform.OS === 'ios') {\n invariant(nativeModule != null, '`new NativeEventEmitter()` requires a non-null argument.');\n this._nativeModule = nativeModule;\n }\n }\n addListener(eventType, listener, context) {\n var _this$_nativeModule;\n (_this$_nativeModule = this._nativeModule) == null ? void 0 : _this$_nativeModule.addListener(eventType);\n var subscription = RCTDeviceEventEmitter.addListener(eventType, listener, context);\n return {\n remove: () => {\n if (subscription != null) {\n var _this$_nativeModule2;\n (_this$_nativeModule2 = this._nativeModule) == null ? void 0 : _this$_nativeModule2.removeListeners(1);\n // $FlowFixMe[incompatible-use]\n subscription.remove();\n subscription = null;\n }\n }\n };\n }\n\n /**\n * @deprecated Use `remove` on the EventSubscription from `addListener`.\n */\n removeListener(eventType, listener) {\n var _this$_nativeModule3;\n (_this$_nativeModule3 = this._nativeModule) == null ? void 0 : _this$_nativeModule3.removeListeners(1);\n // NOTE: This will report a deprecation notice via `console.error`.\n // $FlowFixMe[prop-missing] - `removeListener` exists but is deprecated.\n RCTDeviceEventEmitter.removeListener(eventType, listener);\n }\n emit(eventType) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is\n // included for completeness.\n RCTDeviceEventEmitter.emit(eventType, ...args);\n }\n removeAllListeners(eventType) {\n var _this$_nativeModule4;\n invariant(eventType != null, '`NativeEventEmitter.removeAllListener()` requires a non-null argument.');\n (_this$_nativeModule4 = this._nativeModule) == null ? void 0 : _this$_nativeModule4.removeListeners(this.listenerCount(eventType));\n RCTDeviceEventEmitter.removeAllListeners(eventType);\n }\n listenerCount(eventType) {\n return RCTDeviceEventEmitter.listenerCount(eventType);\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport EventEmitter from '../vendor/emitter/EventEmitter';\n\n// FIXME: use typed events\n\n/**\n * Global EventEmitter used by the native platform to emit events to JavaScript.\n * Events are identified by globally unique event names.\n *\n * NativeModules that emit events should instead subclass `NativeEventEmitter`.\n */\nexport default new EventEmitter();","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nclass Info {\n constructor() {\n this.any_blank_count = 0;\n this.any_blank_ms = 0;\n this.any_blank_speed_sum = 0;\n this.mostly_blank_count = 0;\n this.mostly_blank_ms = 0;\n this.pixels_blank = 0;\n this.pixels_sampled = 0;\n this.pixels_scrolled = 0;\n this.total_time_spent = 0;\n this.sample_count = 0;\n }\n}\nvar DEBUG = false;\nvar _listeners = [];\nvar _minSampleCount = 10;\nvar _sampleRate = DEBUG ? 1 : null;\n\n/**\n * A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.\n * By default the sampling rate is set to zero and this will do nothing. If you want to collect\n * samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.\n *\n * Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with\n * `SceneTracker.getActiveScene` to determine the context of the events.\n */\nclass FillRateHelper {\n static addListener(callback) {\n if (_sampleRate === null) {\n console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');\n }\n _listeners.push(callback);\n return {\n remove: () => {\n _listeners = _listeners.filter(listener => callback !== listener);\n }\n };\n }\n static setSampleRate(sampleRate) {\n _sampleRate = sampleRate;\n }\n static setMinSampleCount(minSampleCount) {\n _minSampleCount = minSampleCount;\n }\n constructor(getFrameMetrics) {\n this._anyBlankStartTime = null;\n this._enabled = false;\n this._info = new Info();\n this._mostlyBlankStartTime = null;\n this._samplesStartTime = null;\n this._getFrameMetrics = getFrameMetrics;\n this._enabled = (_sampleRate || 0) > Math.random();\n this._resetData();\n }\n activate() {\n if (this._enabled && this._samplesStartTime == null) {\n DEBUG && console.debug('FillRateHelper: activate');\n this._samplesStartTime = global.performance.now();\n }\n }\n deactivateAndFlush() {\n if (!this._enabled) {\n return;\n }\n var start = this._samplesStartTime; // const for flow\n if (start == null) {\n DEBUG && console.debug('FillRateHelper: bail on deactivate with no start time');\n return;\n }\n if (this._info.sample_count < _minSampleCount) {\n // Don't bother with under-sampled events.\n this._resetData();\n return;\n }\n var total_time_spent = global.performance.now() - start;\n var info = _objectSpread(_objectSpread({}, this._info), {}, {\n total_time_spent\n });\n if (DEBUG) {\n var derived = {\n avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,\n avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),\n avg_speed_when_any_blank: this._info.any_blank_speed_sum / this._info.any_blank_count,\n any_blank_per_min: this._info.any_blank_count / (total_time_spent / 1000 / 60),\n any_blank_time_frac: this._info.any_blank_ms / total_time_spent,\n mostly_blank_per_min: this._info.mostly_blank_count / (total_time_spent / 1000 / 60),\n mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent\n };\n for (var key in derived) {\n // $FlowFixMe[prop-missing]\n derived[key] = Math.round(1000 * derived[key]) / 1000;\n }\n console.debug('FillRateHelper deactivateAndFlush: ', {\n derived,\n info\n });\n }\n _listeners.forEach(listener => listener(info));\n this._resetData();\n }\n computeBlankness(props, cellsAroundViewport, scrollMetrics) {\n if (!this._enabled || props.getItemCount(props.data) === 0 || cellsAroundViewport.last < cellsAroundViewport.first || this._samplesStartTime == null) {\n return 0;\n }\n var dOffset = scrollMetrics.dOffset,\n offset = scrollMetrics.offset,\n velocity = scrollMetrics.velocity,\n visibleLength = scrollMetrics.visibleLength;\n\n // Denominator metrics that we track for all events - most of the time there is no blankness and\n // we want to capture that.\n this._info.sample_count++;\n this._info.pixels_sampled += Math.round(visibleLength);\n this._info.pixels_scrolled += Math.round(Math.abs(dOffset));\n var scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec\n\n // Whether blank now or not, record the elapsed time blank if we were blank last time.\n var now = global.performance.now();\n if (this._anyBlankStartTime != null) {\n this._info.any_blank_ms += now - this._anyBlankStartTime;\n }\n this._anyBlankStartTime = null;\n if (this._mostlyBlankStartTime != null) {\n this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;\n }\n this._mostlyBlankStartTime = null;\n var blankTop = 0;\n var first = cellsAroundViewport.first;\n var firstFrame = this._getFrameMetrics(first, props);\n while (first <= cellsAroundViewport.last && (!firstFrame || !firstFrame.inLayout)) {\n firstFrame = this._getFrameMetrics(first, props);\n first++;\n }\n // Only count blankTop if we aren't rendering the first item, otherwise we will count the header\n // as blank.\n if (firstFrame && first > 0) {\n blankTop = Math.min(visibleLength, Math.max(0, firstFrame.offset - offset));\n }\n var blankBottom = 0;\n var last = cellsAroundViewport.last;\n var lastFrame = this._getFrameMetrics(last, props);\n while (last >= cellsAroundViewport.first && (!lastFrame || !lastFrame.inLayout)) {\n lastFrame = this._getFrameMetrics(last, props);\n last--;\n }\n // Only count blankBottom if we aren't rendering the last item, otherwise we will count the\n // footer as blank.\n if (lastFrame && last < props.getItemCount(props.data) - 1) {\n var bottomEdge = lastFrame.offset + lastFrame.length;\n blankBottom = Math.min(visibleLength, Math.max(0, offset + visibleLength - bottomEdge));\n }\n var pixels_blank = Math.round(blankTop + blankBottom);\n var blankness = pixels_blank / visibleLength;\n if (blankness > 0) {\n this._anyBlankStartTime = now;\n this._info.any_blank_speed_sum += scrollSpeed;\n this._info.any_blank_count++;\n this._info.pixels_blank += pixels_blank;\n if (blankness > 0.5) {\n this._mostlyBlankStartTime = now;\n this._info.mostly_blank_count++;\n }\n } else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {\n this.deactivateAndFlush();\n }\n return blankness;\n }\n enabled() {\n return this._enabled;\n }\n _resetData() {\n this._anyBlankStartTime = null;\n this._info = new Info();\n this._mostlyBlankStartTime = null;\n this._samplesStartTime = null;\n }\n}\nexport default FillRateHelper;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"numColumns\", \"columnWrapperStyle\", \"removeClippedSubviews\", \"strictMode\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport deepDiffer from '../deepDiffer';\nimport Platform from '../../../exports/Platform';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport memoizeOne from 'memoize-one';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// removeClippedSubviewsOrDefault(this.props.removeClippedSubviews)\nfunction removeClippedSubviewsOrDefault(removeClippedSubviews) {\n return removeClippedSubviews !== null && removeClippedSubviews !== void 0 ? removeClippedSubviews : Platform.OS === 'android';\n}\n\n// numColumnsOrDefault(this.props.numColumns)\nfunction numColumnsOrDefault(numColumns) {\n return numColumns !== null && numColumns !== void 0 ? numColumns : 1;\n}\nfunction isArrayLike(data) {\n // $FlowExpectedError[incompatible-use]\n return typeof Object(data).length === 'number';\n}\n/**\n * A performant interface for rendering simple, flat lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Optional horizontal mode.\n * - Configurable viewability callbacks.\n * - Header support.\n * - Footer support.\n * - Separator support.\n * - Pull to Refresh.\n * - Scroll loading.\n * - ScrollToIndex support.\n *\n * If you need section support, use [``](docs/sectionlist.html).\n *\n * Minimal Example:\n *\n * {item.key}}\n * />\n *\n * More complex, multi-select example demonstrating `PureComponent` usage for perf optimization and avoiding bugs.\n *\n * - By binding the `onPressItem` handler, the props will remain `===` and `PureComponent` will\n * prevent wasteful re-renders unless the actual `id`, `selected`, or `title` props change, even\n * if the components rendered in `MyListItem` did not have such optimizations.\n * - By passing `extraData={this.state}` to `FlatList` we make sure `FlatList` itself will re-render\n * when the `state.selected` changes. Without setting this prop, `FlatList` would not know it\n * needs to re-render any items because it is also a `PureComponent` and the prop comparison will\n * not show any changes.\n * - `keyExtractor` tells the list to use the `id`s for the react keys instead of the default `key` property.\n *\n *\n * class MyListItem extends React.PureComponent {\n * _onPress = () => {\n * this.props.onPressItem(this.props.id);\n * };\n *\n * render() {\n * const textColor = this.props.selected ? \"red\" : \"black\";\n * return (\n * \n * \n * \n * {this.props.title}\n * \n * \n * \n * );\n * }\n * }\n *\n * class MultiSelectList extends React.PureComponent {\n * state = {selected: (new Map(): Map)};\n *\n * _keyExtractor = (item, index) => item.id;\n *\n * _onPressItem = (id: string) => {\n * // updater functions are preferred for transactional updates\n * this.setState((state) => {\n * // copy the map rather than modifying state.\n * const selected = new Map(state.selected);\n * selected.set(id, !selected.get(id)); // toggle\n * return {selected};\n * });\n * };\n *\n * _renderItem = ({item}) => (\n * \n * );\n *\n * render() {\n * return (\n * \n * );\n * }\n * }\n *\n * This is a convenience wrapper around [``](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n * Also inherits [ScrollView Props](docs/scrollview.html#props), unless it is nested in another FlatList of same orientation.\n */\nclass FlatList extends React.PureComponent {\n /**\n * Scrolls to the end of the content. May be janky without `getItemLayout` prop.\n */\n scrollToEnd(params) {\n if (this._listRef) {\n this._listRef.scrollToEnd(params);\n }\n }\n\n /**\n * Scrolls to the item at the specified index such that it is positioned in the viewable area\n * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the\n * middle. `viewOffset` is a fixed number of pixels to offset the final target position.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToIndex(params) {\n if (this._listRef) {\n this._listRef.scrollToIndex(params);\n }\n }\n\n /**\n * Requires linear scan through data - use `scrollToIndex` instead if possible.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToItem(params) {\n if (this._listRef) {\n this._listRef.scrollToItem(params);\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList\n */\n scrollToOffset(params) {\n if (this._listRef) {\n this._listRef.scrollToOffset(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n if (this._listRef) {\n this._listRef.recordInteraction();\n }\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n if (this._listRef) {\n this._listRef.flashScrollIndicators();\n }\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder() {\n if (this._listRef) {\n return this._listRef.getScrollResponder();\n }\n }\n\n /**\n * Provides a reference to the underlying host component\n */\n getNativeScrollRef() {\n if (this._listRef) {\n /* $FlowFixMe[incompatible-return] Suppresses errors found when fixing\n * TextInput typing */\n return this._listRef.getScrollRef();\n }\n }\n getScrollableNode() {\n if (this._listRef) {\n return this._listRef.getScrollableNode();\n }\n }\n constructor(_props) {\n super(_props);\n this._virtualizedListPairs = [];\n this._captureRef = ref => {\n this._listRef = ref;\n };\n this._getItem = (data, index) => {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n if (numColumns > 1) {\n var ret = [];\n for (var kk = 0; kk < numColumns; kk++) {\n var itemIndex = index * numColumns + kk;\n if (itemIndex < data.length) {\n var _item = data[itemIndex];\n ret.push(_item);\n }\n }\n return ret;\n } else {\n return data[index];\n }\n };\n this._getItemCount = data => {\n // Legacy behavior of FlatList was to forward \"undefined\" length if invalid\n // data like a non-arraylike object is passed. VirtualizedList would then\n // coerce this, and the math would work out to no-op. For compatibility, if\n // invalid data is passed, we tell VirtualizedList there are zero items\n // available to prevent it from trying to read from the invalid data\n // (without propagating invalidly typed data).\n if (data != null && isArrayLike(data)) {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n return numColumns > 1 ? Math.ceil(data.length / numColumns) : data.length;\n } else {\n return 0;\n }\n };\n this._keyExtractor = (items, index) => {\n var _this$props$keyExtrac;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n var keyExtractor = (_this$props$keyExtrac = this.props.keyExtractor) !== null && _this$props$keyExtrac !== void 0 ? _this$props$keyExtrac : defaultKeyExtractor;\n if (numColumns > 1) {\n invariant(Array.isArray(items), 'FlatList: Encountered internal consistency error, expected each item to consist of an ' + 'array with 1-%s columns; instead, received a single item.', numColumns);\n return items.map((item, kk) => keyExtractor(item, index * numColumns + kk)).join(':');\n }\n\n // $FlowFixMe[incompatible-call] Can't call keyExtractor with an array\n return keyExtractor(items, index);\n };\n this._renderer = (ListItemComponent, renderItem, columnWrapperStyle, numColumns, extraData\n // $FlowFixMe[missing-local-annot]\n ) => {\n var cols = numColumnsOrDefault(numColumns);\n var render = props => {\n if (ListItemComponent) {\n // $FlowFixMe[not-a-component] Component isn't valid\n // $FlowFixMe[incompatible-type-arg] Component isn't valid\n // $FlowFixMe[incompatible-return] Component isn't valid\n return /*#__PURE__*/React.createElement(ListItemComponent, props);\n } else if (renderItem) {\n // $FlowFixMe[incompatible-call]\n return renderItem(props);\n } else {\n return null;\n }\n };\n var renderProp = info => {\n if (cols > 1) {\n var _item2 = info.item,\n _index = info.index;\n invariant(Array.isArray(_item2), 'Expected array of items with numColumns > 1');\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.row, columnWrapperStyle]\n }, _item2.map((it, kk) => {\n var element = render({\n // $FlowFixMe[incompatible-call]\n item: it,\n index: _index * cols + kk,\n separators: info.separators\n });\n return element != null ? /*#__PURE__*/React.createElement(React.Fragment, {\n key: kk\n }, element) : null;\n }));\n } else {\n return render(info);\n }\n };\n return ListItemComponent ? {\n ListItemComponent: renderProp\n } : {\n renderItem: renderProp\n };\n };\n this._memoizedRenderer = memoizeOne(this._renderer);\n this._checkProps(this.props);\n if (this.props.viewabilityConfigCallbackPairs) {\n this._virtualizedListPairs = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n viewabilityConfig: pair.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(pair.onViewableItemsChanged)\n }));\n } else if (this.props.onViewableItemsChanged) {\n this._virtualizedListPairs.push({\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n viewabilityConfig: this.props.viewabilityConfig,\n onViewableItemsChanged: this._createOnViewableItemsChanged(this.props.onViewableItemsChanged)\n });\n }\n }\n\n // $FlowFixMe[missing-local-annot]\n componentDidUpdate(prevProps) {\n invariant(prevProps.numColumns === this.props.numColumns, 'Changing numColumns on the fly is not supported. Change the key prop on FlatList when ' + 'changing the number of columns to force a fresh render of the component.');\n invariant(prevProps.onViewableItemsChanged === this.props.onViewableItemsChanged, 'Changing onViewableItemsChanged on the fly is not supported');\n invariant(!deepDiffer(prevProps.viewabilityConfig, this.props.viewabilityConfig), 'Changing viewabilityConfig on the fly is not supported');\n invariant(prevProps.viewabilityConfigCallbackPairs === this.props.viewabilityConfigCallbackPairs, 'Changing viewabilityConfigCallbackPairs on the fly is not supported');\n this._checkProps(this.props);\n }\n // $FlowFixMe[missing-local-annot]\n _checkProps(props) {\n var getItem = props.getItem,\n getItemCount = props.getItemCount,\n horizontal = props.horizontal,\n columnWrapperStyle = props.columnWrapperStyle,\n onViewableItemsChanged = props.onViewableItemsChanged,\n viewabilityConfigCallbackPairs = props.viewabilityConfigCallbackPairs;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n invariant(!getItem && !getItemCount, 'FlatList does not support custom data formats.');\n if (numColumns > 1) {\n invariant(!horizontal, 'numColumns does not support horizontal.');\n } else {\n invariant(!columnWrapperStyle, 'columnWrapperStyle not supported for single column lists');\n }\n invariant(!(onViewableItemsChanged && viewabilityConfigCallbackPairs), 'FlatList does not support setting both onViewableItemsChanged and ' + 'viewabilityConfigCallbackPairs.');\n }\n _pushMultiColumnViewable(arr, v) {\n var _this$props$keyExtrac2;\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n var keyExtractor = (_this$props$keyExtrac2 = this.props.keyExtractor) !== null && _this$props$keyExtrac2 !== void 0 ? _this$props$keyExtrac2 : defaultKeyExtractor;\n v.item.forEach((item, ii) => {\n invariant(v.index != null, 'Missing index!');\n var index = v.index * numColumns + ii;\n arr.push(_objectSpread(_objectSpread({}, v), {}, {\n item,\n key: keyExtractor(item, index),\n index\n }));\n });\n }\n _createOnViewableItemsChanged(onViewableItemsChanged\n // $FlowFixMe[missing-local-annot]\n ) {\n return info => {\n var numColumns = numColumnsOrDefault(this.props.numColumns);\n if (onViewableItemsChanged) {\n if (numColumns > 1) {\n var changed = [];\n var viewableItems = [];\n info.viewableItems.forEach(v => this._pushMultiColumnViewable(viewableItems, v));\n info.changed.forEach(v => this._pushMultiColumnViewable(changed, v));\n onViewableItemsChanged({\n viewableItems,\n changed\n });\n } else {\n onViewableItemsChanged(info);\n }\n }\n };\n }\n render() {\n var _this$props = this.props,\n numColumns = _this$props.numColumns,\n columnWrapperStyle = _this$props.columnWrapperStyle,\n _removeClippedSubviews = _this$props.removeClippedSubviews,\n _this$props$strictMod = _this$props.strictMode,\n strictMode = _this$props$strictMod === void 0 ? false : _this$props$strictMod,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var renderer = strictMode ? this._memoizedRenderer : this._renderer;\n return (\n /*#__PURE__*/\n // $FlowFixMe[incompatible-exact] - `restProps` (`Props`) is inexact.\n React.createElement(VirtualizedList, _extends({}, restProps, {\n getItem: this._getItem,\n getItemCount: this._getItemCount,\n keyExtractor: this._keyExtractor,\n ref: this._captureRef,\n viewabilityConfigCallbackPairs: this._virtualizedListPairs,\n removeClippedSubviews: removeClippedSubviewsOrDefault(_removeClippedSubviews)\n }, renderer(this.props.ListItemComponent, this.props.renderItem, columnWrapperStyle, numColumns, this.props.extraData)))\n );\n }\n}\nvar styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n }\n});\nexport default FlatList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport UIManager from '../../../exports/UIManager';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nfunction configureNext(config, onAnimationDidEnd) {\n if (!Platform.isTesting) {\n UIManager.configureNextLayoutAnimation(config, onAnimationDidEnd !== null && onAnimationDidEnd !== void 0 ? onAnimationDidEnd : function () {}, function () {} /* unused onError */);\n }\n}\n\nfunction create(duration, type, property) {\n return {\n duration,\n create: {\n type,\n property\n },\n update: {\n type\n },\n delete: {\n type,\n property\n }\n };\n}\nvar Presets = {\n easeInEaseOut: create(300, 'easeInEaseOut', 'opacity'),\n linear: create(500, 'linear', 'opacity'),\n spring: {\n duration: 700,\n create: {\n type: 'linear',\n property: 'opacity'\n },\n update: {\n type: 'spring',\n springDamping: 0.4\n },\n delete: {\n type: 'linear',\n property: 'opacity'\n }\n }\n};\n\n/**\n * Automatically animates views to their new positions when the\n * next layout happens.\n *\n * A common way to use this API is to call it before calling `setState`.\n *\n * Note that in order to get this to work on **Android** you need to set the following flags via `UIManager`:\n *\n * UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);\n */\nvar LayoutAnimation = {\n /**\n * Schedules an animation to happen on the next layout.\n *\n * @param config Specifies animation properties:\n *\n * - `duration` in milliseconds\n * - `create`, `AnimationConfig` for animating in new views\n * - `update`, `AnimationConfig` for animating views that have been updated\n *\n * @param onAnimationDidEnd Called when the animation finished.\n * Only supported on iOS.\n * @param onError Called on error. Only supported on iOS.\n */\n configureNext,\n /**\n * Helper for creating a config for `configureNext`.\n */\n create,\n Types: Object.freeze({\n spring: 'spring',\n linear: 'linear',\n easeInEaseOut: 'easeInEaseOut',\n easeIn: 'easeIn',\n easeOut: 'easeOut',\n keyboard: 'keyboard'\n }),\n Properties: Object.freeze({\n opacity: 'opacity',\n scaleX: 'scaleX',\n scaleY: 'scaleY',\n scaleXY: 'scaleXY'\n }),\n checkConfig() {\n console.error('LayoutAnimation.checkConfig(...) has been disabled.');\n },\n Presets,\n easeInEaseOut: configureNext.bind(null, Presets.easeInEaseOut),\n linear: configureNext.bind(null, Presets.linear),\n spring: configureNext.bind(null, Presets.spring)\n};\nexport default LayoutAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\nimport TouchHistoryMath from '../TouchHistoryMath';\nvar currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nvar currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nvar previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nvar previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nvar currentCentroidX = TouchHistoryMath.currentCentroidX;\nvar currentCentroidY = TouchHistoryMath.currentCentroidY;\n\n/**\n * `PanResponder` reconciles several touches into a single gesture. It makes\n * single-touch gestures resilient to extra touches, and can be used to\n * recognize simple multi-touch gestures.\n *\n * By default, `PanResponder` holds an `InteractionManager` handle to block\n * long-running JS events from interrupting active gestures.\n *\n * It provides a predictable wrapper of the responder handlers provided by the\n * [gesture responder system](docs/gesture-responder-system.html).\n * For each handler, it provides a new `gestureState` object alongside the\n * native event object:\n *\n * ```\n * onPanResponderMove: (event, gestureState) => {}\n * ```\n *\n * A native event is a synthetic touch event with the following form:\n *\n * - `nativeEvent`\n * + `changedTouches` - Array of all touch events that have changed since the last event\n * + `identifier` - The ID of the touch\n * + `locationX` - The X position of the touch, relative to the element\n * + `locationY` - The Y position of the touch, relative to the element\n * + `pageX` - The X position of the touch, relative to the root element\n * + `pageY` - The Y position of the touch, relative to the root element\n * + `target` - The node id of the element receiving the touch event\n * + `timestamp` - A time identifier for the touch, useful for velocity calculation\n * + `touches` - Array of all current touches on the screen\n *\n * A `gestureState` object has the following:\n *\n * - `stateID` - ID of the gestureState- persisted as long as there at least\n * one touch on screen\n * - `moveX` - the latest screen coordinates of the recently-moved touch\n * - `moveY` - the latest screen coordinates of the recently-moved touch\n * - `x0` - the screen coordinates of the responder grant\n * - `y0` - the screen coordinates of the responder grant\n * - `dx` - accumulated distance of the gesture since the touch started\n * - `dy` - accumulated distance of the gesture since the touch started\n * - `vx` - current velocity of the gesture\n * - `vy` - current velocity of the gesture\n * - `numberActiveTouches` - Number of touches currently on screen\n *\n * ### Basic Usage\n *\n * ```\n * componentWillMount: function() {\n * this._panResponder = PanResponder.create({\n * // Ask to be the responder:\n * onStartShouldSetPanResponder: (evt, gestureState) => true,\n * onStartShouldSetPanResponderCapture: (evt, gestureState) => true,\n * onMoveShouldSetPanResponder: (evt, gestureState) => true,\n * onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,\n *\n * onPanResponderGrant: (evt, gestureState) => {\n * // The gesture has started. Show visual feedback so the user knows\n * // what is happening!\n *\n * // gestureState.d{x,y} will be set to zero now\n * },\n * onPanResponderMove: (evt, gestureState) => {\n * // The most recent move distance is gestureState.move{X,Y}\n *\n * // The accumulated gesture distance since becoming responder is\n * // gestureState.d{x,y}\n * },\n * onPanResponderTerminationRequest: (evt, gestureState) => true,\n * onPanResponderRelease: (evt, gestureState) => {\n * // The user has released all touches while this view is the\n * // responder. This typically means a gesture has succeeded\n * },\n * onPanResponderTerminate: (evt, gestureState) => {\n * // Another component has become the responder, so this gesture\n * // should be cancelled\n * },\n * onShouldBlockNativeResponder: (evt, gestureState) => {\n * // Returns whether this component should block native components from becoming the JS\n * // responder. Returns true by default. Is currently only supported on android.\n * return true;\n * },\n * });\n * },\n *\n * render: function() {\n * return (\n * \n * );\n * },\n *\n * ```\n *\n * ### Working Example\n *\n * To see it in action, try the\n * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/master/RNTester/js/PanResponderExample.js)\n */\n\nvar PanResponder = {\n /**\n *\n * A graphical explanation of the touch data flow:\n *\n * +----------------------------+ +--------------------------------+\n * | ResponderTouchHistoryStore | |TouchHistoryMath |\n * +----------------------------+ +----------+---------------------+\n * |Global store of touchHistory| |Allocation-less math util |\n * |including activeness, start | |on touch history (centroids |\n * |position, prev/cur position.| |and multitouch movement etc) |\n * | | | |\n * +----^-----------------------+ +----^---------------------------+\n * | |\n * | (records relevant history |\n * | of touches relevant for |\n * | implementing higher level |\n * | gestures) |\n * | |\n * +----+-----------------------+ +----|---------------------------+\n * | ResponderEventPlugin | | | Your App/Component |\n * +----------------------------+ +----|---------------------------+\n * |Negotiates which view gets | Low level | | High level |\n * |onResponderMove events. | events w/ | +-+-------+ events w/ |\n * |Also records history into | touchHistory| | Pan | multitouch + |\n * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative|\n * +----------------------------+ attached to | | | distance and |\n * each event | +---------+ velocity. |\n * | |\n * | |\n * +--------------------------------+\n *\n *\n *\n * Gesture that calculates cumulative movement over time in a way that just\n * \"does the right thing\" for multiple touches. The \"right thing\" is very\n * nuanced. When moving two touches in opposite directions, the cumulative\n * distance is zero in each dimension. When two touches move in parallel five\n * pixels in the same direction, the cumulative distance is five, not ten. If\n * two touches start, one moves five in a direction, then stops and the other\n * touch moves fives in the same direction, the cumulative distance is ten.\n *\n * This logic requires a kind of processing of time \"clusters\" of touch events\n * so that two touch moves that essentially occur in parallel but move every\n * other frame respectively, are considered part of the same movement.\n *\n * Explanation of some of the non-obvious fields:\n *\n * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is\n * invalid. If a move event has been observed, `(moveX, moveY)` is the\n * centroid of the most recently moved \"cluster\" of active touches.\n * (Currently all move have the same timeStamp, but later we should add some\n * threshold for what is considered to be \"moving\"). If a palm is\n * accidentally counted as a touch, but a finger is moving greatly, the palm\n * will move slightly, but we only want to count the single moving touch.\n * - x0/y0: Centroid location (non-cumulative) at the time of becoming\n * responder.\n * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch\n * distance. Accounts for touch moves that are clustered together in time,\n * moving the same direction. Only valid when currently responder (otherwise,\n * it only represents the drag distance below the threshold).\n * - vx/vy: Velocity.\n */\n\n _initializeGestureState(gestureState) {\n gestureState.moveX = 0;\n gestureState.moveY = 0;\n gestureState.x0 = 0;\n gestureState.y0 = 0;\n gestureState.dx = 0;\n gestureState.dy = 0;\n gestureState.vx = 0;\n gestureState.vy = 0;\n gestureState.numberActiveTouches = 0;\n // All `gestureState` accounts for timeStamps up until:\n gestureState._accountsForMovesUpTo = 0;\n },\n /**\n * This is nuanced and is necessary. It is incorrect to continuously take all\n * active *and* recently moved touches, find the centroid, and track how that\n * result changes over time. Instead, we must take all recently moved\n * touches, and calculate how the centroid has changed just for those\n * recently moved touches, and append that change to an accumulator. This is\n * to (at least) handle the case where the user is moving three fingers, and\n * then one of the fingers stops but the other two continue.\n *\n * This is very different than taking all of the recently moved touches and\n * storing their centroid as `dx/dy`. For correctness, we must *accumulate\n * changes* in the centroid of recently moved touches.\n *\n * There is also some nuance with how we handle multiple moved touches in a\n * single event. With the way `ReactNativeEventEmitter` dispatches touches as\n * individual events, multiple touches generate two 'move' events, each of\n * them triggering `onResponderMove`. But with the way `PanResponder` works,\n * all of the gesture inference is performed on the first dispatch, since it\n * looks at all of the touches (even the ones for which there hasn't been a\n * native dispatch yet). Therefore, `PanResponder` does not call\n * `onResponderMove` passed the first dispatch. This diverges from the\n * typical responder callback pattern (without using `PanResponder`), but\n * avoids more dispatches than necessary.\n */\n _updateGestureStateOnMove(gestureState, touchHistory) {\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n var movedAfter = gestureState._accountsForMovesUpTo;\n var prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n var x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n var prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n var y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n var nextDX = gestureState.dx + (x - prevX);\n var nextDY = gestureState.dy + (y - prevY);\n\n // TODO: This must be filtered intelligently.\n var dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo;\n gestureState.vx = (nextDX - gestureState.dx) / dt;\n gestureState.vy = (nextDY - gestureState.dy) / dt;\n gestureState.dx = nextDX;\n gestureState.dy = nextDY;\n gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp;\n },\n /**\n * @param {object} config Enhanced versions of all of the responder callbacks\n * that provide not only the typical `ResponderSyntheticEvent`, but also the\n * `PanResponder` gesture state. Simply replace the word `Responder` with\n * `PanResponder` in each of the typical `onResponder*` callbacks. For\n * example, the `config` object would look like:\n *\n * - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponder: (e, gestureState) => {...}`\n * - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`\n * - `onPanResponderReject: (e, gestureState) => {...}`\n * - `onPanResponderGrant: (e, gestureState) => {...}`\n * - `onPanResponderStart: (e, gestureState) => {...}`\n * - `onPanResponderEnd: (e, gestureState) => {...}`\n * - `onPanResponderRelease: (e, gestureState) => {...}`\n * - `onPanResponderMove: (e, gestureState) => {...}`\n * - `onPanResponderTerminate: (e, gestureState) => {...}`\n * - `onPanResponderTerminationRequest: (e, gestureState) => {...}`\n * - `onShouldBlockNativeResponder: (e, gestureState) => {...}`\n *\n * In general, for events that have capture equivalents, we update the\n * gestureState once in the capture phase and can use it in the bubble phase\n * as well.\n *\n * Be careful with onStartShould* callbacks. They only reflect updated\n * `gestureState` for start/end events that bubble/capture to the Node.\n * Once the node is the responder, you can rely on every start/end event\n * being processed by the gesture and `gestureState` being updated\n * accordingly. (numberActiveTouches) may not be totally accurate unless you\n * are the responder.\n */\n create(config) {\n var interactionState = {\n handle: null,\n shouldCancelClick: false,\n timeout: null\n };\n var gestureState = {\n // Useful for debugging\n stateID: Math.random(),\n moveX: 0,\n moveY: 0,\n x0: 0,\n y0: 0,\n dx: 0,\n dy: 0,\n vx: 0,\n vy: 0,\n numberActiveTouches: 0,\n _accountsForMovesUpTo: 0\n };\n var panHandlers = {\n onStartShouldSetResponder(event) {\n return config.onStartShouldSetPanResponder == null ? false : config.onStartShouldSetPanResponder(event, gestureState);\n },\n onMoveShouldSetResponder(event) {\n return config.onMoveShouldSetPanResponder == null ? false : config.onMoveShouldSetPanResponder(event, gestureState);\n },\n onStartShouldSetResponderCapture(event) {\n // TODO: Actually, we should reinitialize the state any time\n // touches.length increases from 0 active to > 0 active.\n if (event.nativeEvent.touches.length === 1) {\n PanResponder._initializeGestureState(gestureState);\n }\n gestureState.numberActiveTouches = event.touchHistory.numberActiveTouches;\n return config.onStartShouldSetPanResponderCapture != null ? config.onStartShouldSetPanResponderCapture(event, gestureState) : false;\n },\n onMoveShouldSetResponderCapture(event) {\n var touchHistory = event.touchHistory;\n // Responder system incorrectly dispatches should* to current responder\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n return false;\n }\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n return config.onMoveShouldSetPanResponderCapture ? config.onMoveShouldSetPanResponderCapture(event, gestureState) : false;\n },\n onResponderGrant(event) {\n if (!interactionState.handle) {\n interactionState.handle = InteractionManager.createInteractionHandle();\n }\n if (interactionState.timeout) {\n clearInteractionTimeout(interactionState);\n }\n interactionState.shouldCancelClick = true;\n gestureState.x0 = currentCentroidX(event.touchHistory);\n gestureState.y0 = currentCentroidY(event.touchHistory);\n gestureState.dx = 0;\n gestureState.dy = 0;\n if (config.onPanResponderGrant) {\n config.onPanResponderGrant(event, gestureState);\n }\n // TODO: t7467124 investigate if this can be removed\n return config.onShouldBlockNativeResponder == null ? true : config.onShouldBlockNativeResponder(event, gestureState);\n },\n onResponderReject(event) {\n clearInteractionHandle(interactionState, config.onPanResponderReject, event, gestureState);\n },\n onResponderRelease(event) {\n clearInteractionHandle(interactionState, config.onPanResponderRelease, event, gestureState);\n setInteractionTimeout(interactionState);\n PanResponder._initializeGestureState(gestureState);\n },\n onResponderStart(event) {\n var touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n if (config.onPanResponderStart) {\n config.onPanResponderStart(event, gestureState);\n }\n },\n onResponderMove(event) {\n var touchHistory = event.touchHistory;\n // Guard against the dispatch of two touch moves when there are two\n // simultaneously changed touches.\n if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n return;\n }\n // Filter out any touch moves past the first one - we would have\n // already processed multi-touch geometry during the first event.\n PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n if (config.onPanResponderMove) {\n config.onPanResponderMove(event, gestureState);\n }\n },\n onResponderEnd(event) {\n var touchHistory = event.touchHistory;\n gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n clearInteractionHandle(interactionState, config.onPanResponderEnd, event, gestureState);\n },\n onResponderTerminate(event) {\n clearInteractionHandle(interactionState, config.onPanResponderTerminate, event, gestureState);\n setInteractionTimeout(interactionState);\n PanResponder._initializeGestureState(gestureState);\n },\n onResponderTerminationRequest(event) {\n return config.onPanResponderTerminationRequest == null ? true : config.onPanResponderTerminationRequest(event, gestureState);\n },\n // We do not want to trigger 'click' activated gestures or native behaviors\n // on any pan target that is under a mouse cursor when it is released.\n // Browsers will natively cancel 'click' events on a target if a non-mouse\n // active pointer moves.\n onClickCapture: event => {\n if (interactionState.shouldCancelClick === true) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n };\n return {\n panHandlers,\n getInteractionHandle() {\n return interactionState.handle;\n }\n };\n }\n};\nfunction clearInteractionHandle(interactionState, callback, event, gestureState) {\n if (interactionState.handle) {\n InteractionManager.clearInteractionHandle(interactionState.handle);\n interactionState.handle = null;\n }\n if (callback) {\n callback(event, gestureState);\n }\n}\nfunction clearInteractionTimeout(interactionState) {\n clearTimeout(interactionState.timeout);\n}\nfunction setInteractionTimeout(interactionState) {\n interactionState.timeout = setTimeout(() => {\n interactionState.shouldCancelClick = false;\n }, 250);\n}\nexport default PanResponder;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n */\n\nimport invariant from 'fbjs/lib/invariant';\nvar twoArgumentPooler = function twoArgumentPooler(a1, a2) {\n var Klass = this;\n if (Klass.instancePool.length) {\n var instance = Klass.instancePool.pop();\n Klass.call(instance, a1, a2);\n return instance;\n } else {\n return new Klass(a1, a2);\n }\n};\nvar standardReleaser = function standardReleaser(instance) {\n var Klass = this;\n instance.destructor();\n if (Klass.instancePool.length < Klass.poolSize) {\n Klass.instancePool.push(instance);\n }\n};\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = twoArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function addPoolingTo(CopyConstructor, pooler) {\n // Casting as any so that flow ignores the actual implementation and trusts\n // it to match the type we declared\n var NewKlass = CopyConstructor;\n NewKlass.instancePool = [];\n NewKlass.getPooled = pooler || DEFAULT_POOLER;\n if (!NewKlass.poolSize) {\n NewKlass.poolSize = DEFAULT_POOL_SIZE;\n }\n NewKlass.release = standardReleaser;\n return NewKlass;\n};\nvar PooledClass = {\n addPoolingTo: addPoolingTo,\n twoArgumentPooler: twoArgumentPooler\n};\nexport default PooledClass;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar ReactNativeFeatureFlags = {\n isLayoutAnimationEnabled: () => true,\n shouldEmitW3CPointerEvents: () => false,\n shouldPressibilityUseW3CPointerEventsForHover: () => false,\n animatedShouldDebounceQueueFlush: () => false,\n animatedShouldUseSingleOp: () => false\n};\nexport default ReactNativeFeatureFlags;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"stickySectionHeadersEnabled\"];\nimport Platform from '../../../exports/Platform';\nimport * as React from 'react';\nimport VirtualizedSectionList from '../VirtualizedSectionList';\n/**\n * A performant interface for rendering sectioned lists, supporting the most handy features:\n *\n * - Fully cross-platform.\n * - Configurable viewability callbacks.\n * - List header support.\n * - List footer support.\n * - Item separator support.\n * - Section header support.\n * - Section separator support.\n * - Heterogeneous data and item rendering support.\n * - Pull to Refresh.\n * - Scroll loading.\n *\n * If you don't need section support and want a simpler interface, use\n * [``](https://reactnative.dev/docs/flatlist).\n *\n * Simple Examples:\n *\n * }\n * renderSectionHeader={({section}) =>
}\n * sections={[ // homogeneous rendering between sections\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * {data: [...], title: ...},\n * ]}\n * />\n *\n * \n *\n * This is a convenience wrapper around [``](docs/virtualizedlist),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate and momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n *\n */\nexport default class SectionList extends React.PureComponent {\n constructor() {\n super(...arguments);\n this._captureRef = ref => {\n this._wrapperListRef = ref;\n };\n }\n /**\n * Scrolls to the item at the specified `sectionIndex` and `itemIndex` (within the section)\n * positioned in the viewable area such that `viewPosition` 0 places it at the top (and may be\n * covered by a sticky header), 1 at the bottom, and 0.5 centered in the middle. `viewOffset` is a\n * fixed number of pixels to offset the final target position, e.g. to compensate for sticky\n * headers.\n *\n * Note: cannot scroll to locations outside the render window without specifying the\n * `getItemLayout` prop.\n */\n scrollToLocation(params) {\n if (this._wrapperListRef != null) {\n this._wrapperListRef.scrollToLocation(params);\n }\n }\n\n /**\n * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n * taps on items or by navigation actions.\n */\n recordInteraction() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.recordInteraction();\n }\n\n /**\n * Displays the scroll indicators momentarily.\n *\n * @platform ios\n */\n flashScrollIndicators() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n listRef && listRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n */\n getScrollResponder() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollResponder();\n }\n }\n getScrollableNode() {\n var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n if (listRef) {\n return listRef.getScrollableNode();\n }\n }\n render() {\n var _this$props = this.props,\n _stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var stickySectionHeadersEnabled = _stickySectionHeadersEnabled !== null && _stickySectionHeadersEnabled !== void 0 ? _stickySectionHeadersEnabled : Platform.OS === 'ios';\n return /*#__PURE__*/React.createElement(VirtualizedSectionList, _extends({}, restProps, {\n stickySectionHeadersEnabled: stickySectionHeadersEnabled,\n ref: this._captureRef,\n getItemCount: items => items.length,\n getItem: (items, index) => items[index]\n }));\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nvar TouchHistoryMath = {\n /**\n * This code is optimized and not intended to look beautiful. This allows\n * computing of touch centroids that have moved after `touchesChangedAfter`\n * timeStamp. You can compute the current centroid involving all touches\n * moves after `touchesChangedAfter`, or you can compute the previous\n * centroid of all touches that were moved after `touchesChangedAfter`.\n *\n * @param {TouchHistoryMath} touchHistory Standard Responder touch track\n * data.\n * @param {number} touchesChangedAfter timeStamp after which moved touches\n * are considered \"actively moving\" - not just \"active\".\n * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.\n * @param {boolean} ofCurrent Compute current centroid for actively moving\n * touches vs. previous centroid of now actively moving touches.\n * @return {number} value of centroid in specified dimension.\n */\n centroidDimension: function centroidDimension(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) {\n var touchBank = touchHistory.touchBank;\n var total = 0;\n var count = 0;\n var oneTouchData = touchHistory.numberActiveTouches === 1 ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null;\n if (oneTouchData !== null) {\n if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) {\n total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY;\n count = 1;\n }\n } else {\n for (var i = 0; i < touchBank.length; i++) {\n var touchTrack = touchBank[i];\n if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) {\n var toAdd = void 0; // Yuck, program temporarily in invalid state.\n if (ofCurrent && isXAxis) {\n toAdd = touchTrack.currentPageX;\n } else if (ofCurrent && !isXAxis) {\n toAdd = touchTrack.currentPageY;\n } else if (!ofCurrent && isXAxis) {\n toAdd = touchTrack.previousPageX;\n } else {\n toAdd = touchTrack.previousPageY;\n }\n total += toAdd;\n count++;\n }\n }\n }\n return count > 0 ? total / count : TouchHistoryMath.noCentroid;\n },\n currentCentroidXOfTouchesChangedAfter: function currentCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n // isXAxis\n true // ofCurrent\n );\n },\n\n currentCentroidYOfTouchesChangedAfter: function currentCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n // isXAxis\n true // ofCurrent\n );\n },\n\n previousCentroidXOfTouchesChangedAfter: function previousCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n // isXAxis\n false // ofCurrent\n );\n },\n\n previousCentroidYOfTouchesChangedAfter: function previousCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n // isXAxis\n false // ofCurrent\n );\n },\n\n currentCentroidX: function currentCentroidX(touchHistory) {\n return TouchHistoryMath.centroidDimension(touchHistory, 0,\n // touchesChangedAfter\n true,\n // isXAxis\n true // ofCurrent\n );\n },\n\n currentCentroidY: function currentCentroidY(touchHistory) {\n return TouchHistoryMath.centroidDimension(touchHistory, 0,\n // touchesChangedAfter\n false,\n // isXAxis\n true // ofCurrent\n );\n },\n\n noCentroid: -1\n};\nexport default TouchHistoryMath;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\nexport function get(name) {\n return null;\n}\nexport function getEnforcing(name) {\n var module = get(name);\n invariant(module != null, \"TurboModuleRegistry.getEnforcing(...): '\" + name + \"' could not be found. \" + 'Verify that a module by this name is registered in the native binary.');\n return module;\n}","import Platform from '../../../exports/Platform';\nexport default Platform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction clamp(min, value, max) {\n if (value < min) {\n return min;\n }\n if (value > max) {\n return max;\n }\n return value;\n}\nmodule.exports = clamp;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback } from 'react';\n/**\n * Constructs a new ref that forwards new values to each of the given refs. The\n * given refs will always be invoked in the order that they are supplied.\n *\n * WARNING: A known problem of merging refs using this approach is that if any\n * of the given refs change, the returned callback ref will also be changed. If\n * the returned callback ref is supplied as a `ref` to a React element, this may\n * lead to problems with the given refs being invoked more times than desired.\n */\nexport default function useMergeRefs() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n return useCallback(current => {\n for (var _i = 0, _refs = refs; _i < _refs.length; _i++) {\n var ref = _refs[_i];\n if (ref != null) {\n if (typeof ref === 'function') {\n ref(current);\n } else {\n ref.current = current;\n }\n }\n }\n }, [...refs] // eslint-disable-line react-hooks/exhaustive-deps\n );\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback, useRef } from 'react';\n/**\n * Constructs a callback ref that provides similar semantics as `useEffect`. The\n * supplied `effect` callback will be called with non-null component instances.\n * The `effect` callback can also optionally return a cleanup function.\n *\n * When a component is updated or unmounted, the cleanup function is called. The\n * `effect` callback will then be called again, if applicable.\n *\n * When a new `effect` callback is supplied, the previously returned cleanup\n * function will be called before the new `effect` callback is called with the\n * same instance.\n *\n * WARNING: The `effect` callback should be stable (e.g. using `useCallback`).\n */\nexport default function useRefEffect(effect) {\n var cleanupRef = useRef(undefined);\n return useCallback(instance => {\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (instance != null) {\n cleanupRef.current = effect(instance);\n }\n }, [effect]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport invariant from 'fbjs/lib/invariant';\n/**\n * A Utility class for calculating viewable items based on current metrics like scroll position and\n * layout.\n *\n * An item is said to be in a \"viewable\" state when any of the following\n * is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction`\n * is true):\n *\n * - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item\n * visible in the view area >= `itemVisiblePercentThreshold`.\n * - Entirely visible on screen\n */\nclass ViewabilityHelper {\n constructor(config) {\n if (config === void 0) {\n config = {\n viewAreaCoveragePercentThreshold: 0\n };\n }\n this._hasInteracted = false;\n this._timers = new Set();\n this._viewableIndices = [];\n this._viewableItems = new Map();\n this._config = config;\n }\n\n /**\n * Cleanup, e.g. on unmount. Clears any pending timers.\n */\n dispose() {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.forEach(clearTimeout);\n }\n\n /**\n * Determines which items are viewable based on the current metrics and config.\n */\n computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics,\n // Optional optimization to reduce the scan size\n renderRange) {\n var itemCount = props.getItemCount(props.data);\n var _this$_config = this._config,\n itemVisiblePercentThreshold = _this$_config.itemVisiblePercentThreshold,\n viewAreaCoveragePercentThreshold = _this$_config.viewAreaCoveragePercentThreshold;\n var viewAreaMode = viewAreaCoveragePercentThreshold != null;\n var viewablePercentThreshold = viewAreaMode ? viewAreaCoveragePercentThreshold : itemVisiblePercentThreshold;\n invariant(viewablePercentThreshold != null && itemVisiblePercentThreshold != null !== (viewAreaCoveragePercentThreshold != null), 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');\n var viewableIndices = [];\n if (itemCount === 0) {\n return viewableIndices;\n }\n var firstVisible = -1;\n var _ref = renderRange || {\n first: 0,\n last: itemCount - 1\n },\n first = _ref.first,\n last = _ref.last;\n if (last >= itemCount) {\n console.warn('Invalid render range computing viewability ' + JSON.stringify({\n renderRange,\n itemCount\n }));\n return [];\n }\n for (var idx = first; idx <= last; idx++) {\n var metrics = getFrameMetrics(idx, props);\n if (!metrics) {\n continue;\n }\n var top = metrics.offset - scrollOffset;\n var bottom = top + metrics.length;\n if (top < viewportHeight && bottom > 0) {\n firstVisible = idx;\n if (_isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, metrics.length)) {\n viewableIndices.push(idx);\n }\n } else if (firstVisible >= 0) {\n break;\n }\n }\n return viewableIndices;\n }\n\n /**\n * Figures out which items are viewable and how that has changed from before and calls\n * `onViewableItemsChanged` as appropriate.\n */\n onUpdate(props, scrollOffset, viewportHeight, getFrameMetrics, createViewToken, onViewableItemsChanged,\n // Optional optimization to reduce the scan size\n renderRange) {\n var itemCount = props.getItemCount(props.data);\n if (this._config.waitForInteraction && !this._hasInteracted || itemCount === 0 || !getFrameMetrics(0, props)) {\n return;\n }\n var viewableIndices = [];\n if (itemCount) {\n viewableIndices = this.computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics, renderRange);\n }\n if (this._viewableIndices.length === viewableIndices.length && this._viewableIndices.every((v, ii) => v === viewableIndices[ii])) {\n // We might get a lot of scroll events where visibility doesn't change and we don't want to do\n // extra work in those cases.\n return;\n }\n this._viewableIndices = viewableIndices;\n if (this._config.minimumViewTime) {\n var handle = setTimeout(() => {\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To\n * see the error delete this comment and run Flow. */\n this._timers.delete(handle);\n this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n }, this._config.minimumViewTime);\n /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.63 was deployed. To see\n * the error delete this comment and run Flow. */\n this._timers.add(handle);\n } else {\n this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n }\n }\n\n /**\n * clean-up cached _viewableIndices to evaluate changed items on next update\n */\n resetViewableIndices() {\n this._viewableIndices = [];\n }\n\n /**\n * Records that an interaction has happened even if there has been no scroll.\n */\n recordInteraction() {\n this._hasInteracted = true;\n }\n _onUpdateSync(props, viewableIndicesToCheck, onViewableItemsChanged, createViewToken) {\n // Filter out indices that have gone out of view since this call was scheduled.\n viewableIndicesToCheck = viewableIndicesToCheck.filter(ii => this._viewableIndices.includes(ii));\n var prevItems = this._viewableItems;\n var nextItems = new Map(viewableIndicesToCheck.map(ii => {\n var viewable = createViewToken(ii, true, props);\n return [viewable.key, viewable];\n }));\n var changed = [];\n for (var _iterator = _createForOfIteratorHelperLoose(nextItems), _step; !(_step = _iterator()).done;) {\n var _step$value = _step.value,\n key = _step$value[0],\n viewable = _step$value[1];\n if (!prevItems.has(key)) {\n changed.push(viewable);\n }\n }\n for (var _iterator2 = _createForOfIteratorHelperLoose(prevItems), _step2; !(_step2 = _iterator2()).done;) {\n var _step2$value = _step2.value,\n _key = _step2$value[0],\n _viewable = _step2$value[1];\n if (!nextItems.has(_key)) {\n changed.push(_objectSpread(_objectSpread({}, _viewable), {}, {\n isViewable: false\n }));\n }\n }\n if (changed.length > 0) {\n this._viewableItems = nextItems;\n onViewableItemsChanged({\n viewableItems: Array.from(nextItems.values()),\n changed,\n viewabilityConfig: this._config\n });\n }\n }\n}\nfunction _isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, itemLength) {\n if (_isEntirelyVisible(top, bottom, viewportHeight)) {\n return true;\n } else {\n var pixels = _getPixelsVisible(top, bottom, viewportHeight);\n var percent = 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength);\n return percent >= viewablePercentThreshold;\n }\n}\nfunction _getPixelsVisible(top, bottom, viewportHeight) {\n var visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0);\n return Math.max(0, visibleHeight);\n}\nfunction _isEntirelyVisible(top, bottom, viewportHeight) {\n return top >= 0 && bottom <= viewportHeight && bottom > top;\n}\nexport default ViewabilityHelper;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\nexport function elementsThatOverlapOffsets(offsets, props, getFrameMetrics, zoomScale) {\n if (zoomScale === void 0) {\n zoomScale = 1;\n }\n var itemCount = props.getItemCount(props.data);\n var result = [];\n for (var offsetIndex = 0; offsetIndex < offsets.length; offsetIndex++) {\n var currentOffset = offsets[offsetIndex];\n var left = 0;\n var right = itemCount - 1;\n while (left <= right) {\n // eslint-disable-next-line no-bitwise\n var mid = left + (right - left >>> 1);\n var frame = getFrameMetrics(mid, props);\n var scaledOffsetStart = frame.offset * zoomScale;\n var scaledOffsetEnd = (frame.offset + frame.length) * zoomScale;\n\n // We want the first frame that contains the offset, with inclusive bounds. Thus, for the\n // first frame the scaledOffsetStart is inclusive, while for other frames it is exclusive.\n if (mid === 0 && currentOffset < scaledOffsetStart || mid !== 0 && currentOffset <= scaledOffsetStart) {\n right = mid - 1;\n } else if (currentOffset > scaledOffsetEnd) {\n left = mid + 1;\n } else {\n result[offsetIndex] = mid;\n break;\n }\n }\n }\n return result;\n}\n\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\nexport function newRangeCount(prev, next) {\n return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\nexport function computeWindowedRenderLimits(props, maxToRenderPerBatch, windowSize, prev, getFrameMetricsApprox, scrollMetrics) {\n var itemCount = props.getItemCount(props.data);\n if (itemCount === 0) {\n return {\n first: 0,\n last: -1\n };\n }\n var offset = scrollMetrics.offset,\n velocity = scrollMetrics.velocity,\n visibleLength = scrollMetrics.visibleLength,\n _scrollMetrics$zoomSc = scrollMetrics.zoomScale,\n zoomScale = _scrollMetrics$zoomSc === void 0 ? 1 : _scrollMetrics$zoomSc;\n\n // Start with visible area, then compute maximum overscan region by expanding from there, biased\n // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n // too.\n var visibleBegin = Math.max(0, offset);\n var visibleEnd = visibleBegin + visibleLength;\n var overscanLength = (windowSize - 1) * visibleLength;\n\n // Considering velocity seems to introduce more churn than it's worth.\n var leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n var lastItemOffset = getFrameMetricsApprox(itemCount - 1, props).offset * zoomScale;\n if (lastItemOffset < overscanBegin) {\n // Entire list is before our overscan window\n return {\n first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n last: itemCount - 1\n };\n }\n\n // Find the indices that correspond to the items at the render boundaries we're targeting.\n var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props, getFrameMetricsApprox, zoomScale),\n overscanFirst = _elementsThatOverlapO[0],\n first = _elementsThatOverlapO[1],\n last = _elementsThatOverlapO[2],\n overscanLast = _elementsThatOverlapO[3];\n overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n first = first == null ? Math.max(0, overscanFirst) : first;\n overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n var visible = {\n first,\n last\n };\n\n // We want to limit the number of new cells we're rendering per batch so that we can fill the\n // content on the screen quickly. If we rendered the entire overscan window at once, the user\n // could be staring at white space for a long time waiting for a bunch of offscreen content to\n // render.\n var newCellCount = newRangeCount(prev, visible);\n while (true) {\n if (first <= overscanFirst && last >= overscanLast) {\n // If we fill the entire overscan range, we're done.\n break;\n }\n var maxNewCells = newCellCount >= maxToRenderPerBatch;\n var firstWillAddMore = first <= prev.first || first > prev.last;\n var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n var lastWillAddMore = last >= prev.last || last < prev.first;\n var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n // without rendering new items. This let's us preserve as many already rendered items as\n // possible, reducing render churn and keeping the rendered overscan range as large as\n // possible.\n break;\n }\n if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n if (firstWillAddMore) {\n newCellCount++;\n }\n first--;\n }\n if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n if (lastWillAddMore) {\n newCellCount++;\n }\n last++;\n }\n }\n if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n throw new Error('Bad window calculation ' + JSON.stringify({\n first,\n last,\n itemCount,\n overscanFirst,\n overscanLast,\n visible\n }));\n }\n return {\n first,\n last\n };\n}\nexport function keyExtractor(item, index) {\n if (typeof item === 'object' && (item == null ? void 0 : item.key) != null) {\n return item.key;\n }\n if (typeof item === 'object' && (item == null ? void 0 : item.id) != null) {\n return item.id;\n }\n return String(index);\n}","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport class CellRenderMask {\n constructor(numCells) {\n invariant(numCells >= 0, 'CellRenderMask must contain a non-negative number os cells');\n this._numCells = numCells;\n if (numCells === 0) {\n this._regions = [];\n } else {\n this._regions = [{\n first: 0,\n last: numCells - 1,\n isSpacer: true\n }];\n }\n }\n enumerateRegions() {\n return this._regions;\n }\n addCells(cells) {\n invariant(cells.first >= 0 && cells.first < this._numCells && cells.last >= -1 && cells.last < this._numCells && cells.last >= cells.first - 1, 'CellRenderMask.addCells called with invalid cell range');\n\n // VirtualizedList uses inclusive ranges, where zero-count states are\n // possible. E.g. [0, -1] for no cells, starting at 0.\n if (cells.last < cells.first) {\n return;\n }\n var _this$_findRegion = this._findRegion(cells.first),\n firstIntersect = _this$_findRegion[0],\n firstIntersectIdx = _this$_findRegion[1];\n var _this$_findRegion2 = this._findRegion(cells.last),\n lastIntersect = _this$_findRegion2[0],\n lastIntersectIdx = _this$_findRegion2[1];\n\n // Fast-path if the cells to add are already all present in the mask. We\n // will otherwise need to do some mutation.\n if (firstIntersectIdx === lastIntersectIdx && !firstIntersect.isSpacer) {\n return;\n }\n\n // We need to replace the existing covered regions with 1-3 new regions\n // depending whether we need to split spacers out of overlapping regions.\n var newLeadRegion = [];\n var newTailRegion = [];\n var newMainRegion = _objectSpread(_objectSpread({}, cells), {}, {\n isSpacer: false\n });\n if (firstIntersect.first < newMainRegion.first) {\n if (firstIntersect.isSpacer) {\n newLeadRegion.push({\n first: firstIntersect.first,\n last: newMainRegion.first - 1,\n isSpacer: true\n });\n } else {\n newMainRegion.first = firstIntersect.first;\n }\n }\n if (lastIntersect.last > newMainRegion.last) {\n if (lastIntersect.isSpacer) {\n newTailRegion.push({\n first: newMainRegion.last + 1,\n last: lastIntersect.last,\n isSpacer: true\n });\n } else {\n newMainRegion.last = lastIntersect.last;\n }\n }\n var replacementRegions = [...newLeadRegion, newMainRegion, ...newTailRegion];\n var numRegionsToDelete = lastIntersectIdx - firstIntersectIdx + 1;\n this._regions.splice(firstIntersectIdx, numRegionsToDelete, ...replacementRegions);\n }\n numCells() {\n return this._numCells;\n }\n equals(other) {\n return this._numCells === other._numCells && this._regions.length === other._regions.length && this._regions.every((region, i) => region.first === other._regions[i].first && region.last === other._regions[i].last && region.isSpacer === other._regions[i].isSpacer);\n }\n _findRegion(cellIdx) {\n var firstIdx = 0;\n var lastIdx = this._regions.length - 1;\n while (firstIdx <= lastIdx) {\n var middleIdx = Math.floor((firstIdx + lastIdx) / 2);\n var middleRegion = this._regions[middleIdx];\n if (cellIdx >= middleRegion.first && cellIdx <= middleRegion.last) {\n return [middleRegion, middleIdx];\n } else if (cellIdx < middleRegion.first) {\n lastIdx = middleIdx - 1;\n } else if (cellIdx > middleRegion.last) {\n firstIdx = middleIdx + 1;\n }\n }\n invariant(false, \"A region was not found containing cellIdx \" + cellIdx);\n }\n}","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport default class ChildListCollection {\n constructor() {\n this._cellKeyToChildren = new Map();\n this._childrenToCellKey = new Map();\n }\n add(list, cellKey) {\n var _this$_cellKeyToChild;\n invariant(!this._childrenToCellKey.has(list), 'Trying to add already present child list');\n var cellLists = (_this$_cellKeyToChild = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild !== void 0 ? _this$_cellKeyToChild : new Set();\n cellLists.add(list);\n this._cellKeyToChildren.set(cellKey, cellLists);\n this._childrenToCellKey.set(list, cellKey);\n }\n remove(list) {\n var cellKey = this._childrenToCellKey.get(list);\n invariant(cellKey != null, 'Trying to remove non-present child list');\n this._childrenToCellKey.delete(list);\n var cellLists = this._cellKeyToChildren.get(cellKey);\n invariant(cellLists, '_cellKeyToChildren should contain cellKey');\n cellLists.delete(list);\n if (cellLists.size === 0) {\n this._cellKeyToChildren.delete(cellKey);\n }\n }\n forEach(fn) {\n for (var _iterator = _createForOfIteratorHelperLoose(this._cellKeyToChildren.values()), _step; !(_step = _iterator()).done;) {\n var listSet = _step.value;\n for (var _iterator2 = _createForOfIteratorHelperLoose(listSet), _step2; !(_step2 = _iterator2()).done;) {\n var list = _step2.value;\n fn(list);\n }\n }\n }\n forEachInCell(cellKey, fn) {\n var _this$_cellKeyToChild2;\n var listSet = (_this$_cellKeyToChild2 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild2 !== void 0 ? _this$_cellKeyToChild2 : [];\n for (var _iterator3 = _createForOfIteratorHelperLoose(listSet), _step3; !(_step3 = _iterator3()).done;) {\n var list = _step3.value;\n fn(list);\n }\n }\n anyInCell(cellKey, fn) {\n var _this$_cellKeyToChild3;\n var listSet = (_this$_cellKeyToChild3 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild3 !== void 0 ? _this$_cellKeyToChild3 : [];\n for (var _iterator4 = _createForOfIteratorHelperLoose(listSet), _step4; !(_step4 = _iterator4()).done;) {\n var list = _step4.value;\n if (fn(list)) {\n return true;\n }\n }\n return false;\n }\n size() {\n return this._childrenToCellKey.size;\n }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n\n/**\n * `setState` is called asynchronously, and should not rely on the value of\n * `this.props` or `this.state`:\n * https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous\n *\n * SafePureComponent adds runtime enforcement, to catch cases where these\n * variables are read in a state updater function, instead of the ones passed\n * in.\n */\nexport default class StateSafePureComponent extends React.PureComponent {\n constructor(props) {\n super(props);\n this._inAsyncStateUpdate = false;\n this._installSetStateHooks();\n }\n setState(partialState, callback) {\n if (typeof partialState === 'function') {\n super.setState((state, props) => {\n this._inAsyncStateUpdate = true;\n var ret;\n try {\n ret = partialState(state, props);\n } catch (err) {\n throw err;\n } finally {\n this._inAsyncStateUpdate = false;\n }\n return ret;\n }, callback);\n } else {\n super.setState(partialState, callback);\n }\n }\n _installSetStateHooks() {\n var that = this;\n var props = this.props,\n state = this.state;\n Object.defineProperty(this, 'props', {\n get() {\n invariant(!that._inAsyncStateUpdate, '\"this.props\" should not be accessed during state updates');\n return props;\n },\n set(newProps) {\n props = newProps;\n }\n });\n Object.defineProperty(this, 'state', {\n get() {\n invariant(!that._inAsyncStateUpdate, '\"this.state\" should not be acceessed during state updates');\n return state;\n },\n set(newState) {\n state = newState;\n }\n });\n }\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport { VirtualizedListCellContextProvider } from './VirtualizedListContext.js';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nexport default class CellRenderer extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n separatorProps: {\n highlighted: false,\n leadingItem: this.props.item\n }\n };\n this._separators = {\n highlight: () => {\n var _this$props = this.props,\n cellKey = _this$props.cellKey,\n prevCellKey = _this$props.prevCellKey;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: true\n });\n },\n unhighlight: () => {\n var _this$props2 = this.props,\n cellKey = _this$props2.cellKey,\n prevCellKey = _this$props2.prevCellKey;\n this.props.onUpdateSeparators([cellKey, prevCellKey], {\n highlighted: false\n });\n },\n updateProps: (select, newProps) => {\n var _this$props3 = this.props,\n cellKey = _this$props3.cellKey,\n prevCellKey = _this$props3.prevCellKey;\n this.props.onUpdateSeparators([select === 'leading' ? prevCellKey : cellKey], newProps);\n }\n };\n this._onLayout = nativeEvent => {\n this.props.onCellLayout && this.props.onCellLayout(nativeEvent, this.props.cellKey, this.props.index);\n };\n }\n static getDerivedStateFromProps(props, prevState) {\n return {\n separatorProps: _objectSpread(_objectSpread({}, prevState.separatorProps), {}, {\n leadingItem: props.item\n })\n };\n }\n\n // TODO: consider factoring separator stuff out of VirtualizedList into FlatList since it's not\n // reused by SectionList and we can keep VirtualizedList simpler.\n // $FlowFixMe[missing-local-annot]\n\n updateSeparatorProps(newProps) {\n this.setState(state => ({\n separatorProps: _objectSpread(_objectSpread({}, state.separatorProps), newProps)\n }));\n }\n componentWillUnmount() {\n this.props.onUnmount(this.props.cellKey);\n }\n _renderElement(renderItem, ListItemComponent, item, index) {\n if (renderItem && ListItemComponent) {\n console.warn('VirtualizedList: Both ListItemComponent and renderItem props are present. ListItemComponent will take' + ' precedence over renderItem.');\n }\n if (ListItemComponent) {\n /* $FlowFixMe[not-a-component] (>=0.108.0 site=react_native_fb) This\n * comment suppresses an error found when Flow v0.108 was deployed. To\n * see the error, delete this comment and run Flow. */\n /* $FlowFixMe[incompatible-type-arg] (>=0.108.0 site=react_native_fb)\n * This comment suppresses an error found when Flow v0.108 was deployed.\n * To see the error, delete this comment and run Flow. */\n return /*#__PURE__*/React.createElement(ListItemComponent, {\n item,\n index,\n separators: this._separators\n });\n }\n if (renderItem) {\n return renderItem({\n item,\n index,\n separators: this._separators\n });\n }\n invariant(false, 'VirtualizedList: Either ListItemComponent or renderItem props are required but none were found.');\n }\n render() {\n var _this$props4 = this.props,\n CellRendererComponent = _this$props4.CellRendererComponent,\n ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n ListItemComponent = _this$props4.ListItemComponent,\n cellKey = _this$props4.cellKey,\n horizontal = _this$props4.horizontal,\n item = _this$props4.item,\n index = _this$props4.index,\n inversionStyle = _this$props4.inversionStyle,\n onCellFocusCapture = _this$props4.onCellFocusCapture,\n onCellLayout = _this$props4.onCellLayout,\n renderItem = _this$props4.renderItem;\n var element = this._renderElement(renderItem, ListItemComponent, item, index);\n\n // NOTE: that when this is a sticky header, `onLayout` will get automatically extracted and\n // called explicitly by `ScrollViewStickyHeader`.\n var itemSeparator = /*#__PURE__*/React.isValidElement(ItemSeparatorComponent) ?\n // $FlowFixMe[incompatible-type]\n ItemSeparatorComponent :\n // $FlowFixMe[incompatible-type]\n ItemSeparatorComponent && /*#__PURE__*/React.createElement(ItemSeparatorComponent, this.state.separatorProps);\n var cellStyle = inversionStyle ? horizontal ? [styles.rowReverse, inversionStyle] : [styles.columnReverse, inversionStyle] : horizontal ? [styles.row, inversionStyle] : inversionStyle;\n var result = !CellRendererComponent ? /*#__PURE__*/React.createElement(View, _extends({\n style: cellStyle,\n onFocusCapture: onCellFocusCapture\n }, onCellLayout && {\n onLayout: this._onLayout\n }), element, itemSeparator) : /*#__PURE__*/React.createElement(CellRendererComponent, _extends({\n cellKey: cellKey,\n index: index,\n item: item,\n style: cellStyle,\n onFocusCapture: onCellFocusCapture\n }, onCellLayout && {\n onLayout: this._onLayout\n }), element, itemSeparator);\n return /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this.props.cellKey\n }, result);\n }\n}\nvar styles = StyleSheet.create({\n row: {\n flexDirection: 'row'\n },\n rowReverse: {\n flexDirection: 'row-reverse'\n },\n columnReverse: {\n flexDirection: 'column-reverse'\n }\n});","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport var VirtualizedListContext = /*#__PURE__*/React.createContext(null);\nif (__DEV__) {\n VirtualizedListContext.displayName = 'VirtualizedListContext';\n}\n\n/**\n * Resets the context. Intended for use by portal-like components (e.g. Modal).\n */\nexport function VirtualizedListContextResetter(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: null\n }, children);\n}\n\n/**\n * Sets the context with memoization. Intended to be used by `VirtualizedList`.\n */\nexport function VirtualizedListContextProvider(_ref2) {\n var children = _ref2.children,\n value = _ref2.value;\n // Avoid setting a newly created context object if the values are identical.\n var context = useMemo(() => ({\n cellKey: null,\n getScrollMetrics: value.getScrollMetrics,\n horizontal: value.horizontal,\n getOutermostParentListRef: value.getOutermostParentListRef,\n registerAsNestedChild: value.registerAsNestedChild,\n unregisterAsNestedChild: value.unregisterAsNestedChild\n }), [value.getScrollMetrics, value.horizontal, value.getOutermostParentListRef, value.registerAsNestedChild, value.unregisterAsNestedChild]);\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: context\n }, children);\n}\n\n/**\n * Sets the `cellKey`. Intended to be used by `VirtualizedList` for each cell.\n */\nexport function VirtualizedListCellContextProvider(_ref3) {\n var cellKey = _ref3.cellKey,\n children = _ref3.children;\n // Avoid setting a newly created context object if the values are identical.\n var currContext = useContext(VirtualizedListContext);\n var context = useMemo(() => currContext == null ? null : _objectSpread(_objectSpread({}, currContext), {}, {\n cellKey\n }), [currContext, cellKey]);\n return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n value: context\n }, children);\n}","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport RefreshControl from '../../../exports/RefreshControl';\nimport ScrollView from '../../../exports/ScrollView';\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport findNodeHandle from '../../../exports/findNodeHandle';\nimport Batchinator from '../Batchinator';\nimport clamp from '../Utilities/clamp';\nimport infoLog from '../infoLog';\nimport { CellRenderMask } from './CellRenderMask';\nimport ChildListCollection from './ChildListCollection';\nimport FillRateHelper from '../FillRateHelper';\nimport StateSafePureComponent from './StateSafePureComponent';\nimport ViewabilityHelper from '../ViewabilityHelper';\nimport CellRenderer from './VirtualizedListCellRenderer';\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from './VirtualizedListContext.js';\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal) {\n return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRender)\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\n\n// onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold)\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\n\n// getScrollingThreshold(visibleLength, onEndReachedThreshold)\nfunction getScrollingThreshold(threshold, visibleLength) {\n return threshold * visibleLength / 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize) {\n return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n}\n\n/**\n * Base implementation for the more convenient [``](https://reactnative.dev/docs/flatlist)\n * and [``](https://reactnative.dev/docs/sectionlist) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n * your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n * equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n * (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n * changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n * offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n * blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n * and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n * Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends StateSafePureComponent {\n // scrollToEnd may be janky without getItemLayout prop\n scrollToEnd(params) {\n var animated = params ? params.animated : true;\n var veryLast = this.props.getItemCount(this.props.data) - 1;\n if (veryLast < 0) {\n return;\n }\n var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n\n // scrollToIndex may be janky without getItemLayout prop\n scrollToIndex(params) {\n var _this$props = this.props,\n data = _this$props.data,\n horizontal = _this$props.horizontal,\n getItemCount = _this$props.getItemCount,\n getItemLayout = _this$props.getItemLayout,\n onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n var animated = params.animated,\n index = params.index,\n viewOffset = params.viewOffset,\n viewPosition = params.viewPosition;\n invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n onScrollToIndexFailed({\n averageItemLength: this._averageCellLength,\n highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n index\n });\n return;\n }\n var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontal ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n\n // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n // use scrollToIndex instead if possible.\n scrollToItem(params) {\n var item = params.item;\n var _this$props2 = this.props,\n data = _this$props2.data,\n getItem = _this$props2.getItem,\n getItemCount = _this$props2.getItemCount;\n var itemCount = getItemCount(data);\n for (var _index = 0; _index < itemCount; _index++) {\n if (getItem(data, _index) === item) {\n this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n index: _index\n }));\n break;\n }\n }\n }\n\n /**\n * Scroll to a specific content pixel offset in the list.\n *\n * Param `offset` expects the offset to scroll to.\n * In case of `horizontal` is true, the offset is the x-value,\n * in any other case the offset is the y-value.\n *\n * Param `animated` (`true` by default) defines whether the list\n * should do an animation while scrolling.\n */\n scrollToOffset(params) {\n var animated = params.animated,\n offset = params.offset;\n if (this._scrollRef == null) {\n return;\n }\n if (this._scrollRef.scrollTo == null) {\n console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n return;\n }\n this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n x: offset,\n animated\n } : {\n y: offset,\n animated\n });\n }\n recordInteraction() {\n this._nestedChildLists.forEach(childList => {\n childList.recordInteraction();\n });\n this._viewabilityTuples.forEach(t => {\n t.viewabilityHelper.recordInteraction();\n });\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n }\n flashScrollIndicators() {\n if (this._scrollRef == null) {\n return;\n }\n this._scrollRef.flashScrollIndicators();\n }\n\n /**\n * Provides a handle to the underlying scroll responder.\n * Note that `this._scrollRef` might not be a `ScrollView`, so we\n * need to check that it responds to `getScrollResponder` before calling it.\n */\n getScrollResponder() {\n if (this._scrollRef && this._scrollRef.getScrollResponder) {\n return this._scrollRef.getScrollResponder();\n }\n }\n getScrollableNode() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n return this._scrollRef.getScrollableNode();\n } else {\n return this._scrollRef;\n }\n }\n getScrollRef() {\n if (this._scrollRef && this._scrollRef.getScrollRef) {\n return this._scrollRef.getScrollRef();\n } else {\n return this._scrollRef;\n }\n }\n _getCellKey() {\n var _this$context;\n return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n }\n\n // $FlowFixMe[missing-local-annot]\n\n hasMore() {\n return this._hasMore;\n }\n\n // $FlowFixMe[missing-local-annot]\n\n constructor(_props) {\n var _this$props$updateCel;\n super(_props);\n this._getScrollMetrics = () => {\n return this._scrollMetrics;\n };\n this._getOutermostParentListRef = () => {\n if (this._isNestedWithSameOrientation()) {\n return this.context.getOutermostParentListRef();\n } else {\n return this;\n }\n };\n this._registerAsNestedChild = childList => {\n this._nestedChildLists.add(childList.ref, childList.cellKey);\n if (this._hasInteracted) {\n childList.ref.recordInteraction();\n }\n };\n this._unregisterAsNestedChild = childList => {\n this._nestedChildLists.remove(childList.ref);\n };\n this._onUpdateSeparators = (keys, newProps) => {\n keys.forEach(key => {\n var ref = key != null && this._cellRefs[key];\n ref && ref.updateSeparatorProps(newProps);\n });\n };\n this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n this._averageCellLength = 0;\n this._cellRefs = {};\n this._frames = {};\n this._footerLength = 0;\n this._hasTriggeredInitialScrollToIndex = false;\n this._hasInteracted = false;\n this._hasMore = false;\n this._hasWarned = {};\n this._headerLength = 0;\n this._hiPriInProgress = false;\n this._highestMeasuredFrameIndex = 0;\n this._indicesToKeys = new Map();\n this._lastFocusedCellKey = null;\n this._nestedChildLists = new ChildListCollection();\n this._offsetFromParentVirtualizedList = 0;\n this._prevParentOffset = 0;\n this._scrollMetrics = {\n contentLength: 0,\n dOffset: 0,\n dt: 10,\n offset: 0,\n timestamp: 0,\n velocity: 0,\n visibleLength: 0,\n zoomScale: 1\n };\n this._scrollRef = null;\n this._sentStartForContentLength = 0;\n this._sentEndForContentLength = 0;\n this._totalCellLength = 0;\n this._totalCellsMeasured = 0;\n this._viewabilityTuples = [];\n this._captureScrollRef = ref => {\n this._scrollRef = ref;\n };\n this._defaultRenderScrollComponent = props => {\n var onRefresh = props.onRefresh;\n if (this._isNestedWithSameOrientation()) {\n // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n return /*#__PURE__*/React.createElement(View, props);\n } else if (onRefresh) {\n var _props$refreshing;\n invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n return (\n /*#__PURE__*/\n // $FlowFixMe[prop-missing] Invalid prop usage\n // $FlowFixMe[incompatible-use]\n React.createElement(ScrollView, _extends({}, props, {\n refreshControl: props.refreshControl == null ? /*#__PURE__*/React.createElement(RefreshControl\n // $FlowFixMe[incompatible-type]\n , {\n refreshing: props.refreshing,\n onRefresh: onRefresh,\n progressViewOffset: props.progressViewOffset\n }) : props.refreshControl\n }))\n );\n } else {\n // $FlowFixMe[prop-missing] Invalid prop usage\n // $FlowFixMe[incompatible-use]\n return /*#__PURE__*/React.createElement(ScrollView, props);\n }\n };\n this._onCellLayout = (e, cellKey, index) => {\n var layout = e.nativeEvent.layout;\n var next = {\n offset: this._selectOffset(layout),\n length: this._selectLength(layout),\n index,\n inLayout: true\n };\n var curr = this._frames[cellKey];\n if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n this._totalCellLength += next.length - (curr ? curr.length : 0);\n this._totalCellsMeasured += curr ? 0 : 1;\n this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n this._frames[cellKey] = next;\n this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n this._scheduleCellsToRenderUpdate();\n } else {\n this._frames[cellKey].inLayout = true;\n }\n this._triggerRemeasureForChildListsInCell(cellKey);\n this._computeBlankness();\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n };\n this._onCellUnmount = cellKey => {\n delete this._cellRefs[cellKey];\n var curr = this._frames[cellKey];\n if (curr) {\n this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n inLayout: false\n });\n }\n };\n this._onLayout = e => {\n if (this._isNestedWithSameOrientation()) {\n // Need to adjust our scroll metrics to be relative to our containing\n // VirtualizedList before we can make claims about list item viewability\n this.measureLayoutRelativeToContainingList();\n } else {\n this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n }\n this.props.onLayout && this.props.onLayout(e);\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEdgeReached();\n };\n this._onLayoutEmpty = e => {\n this.props.onLayout && this.props.onLayout(e);\n };\n this._onLayoutFooter = e => {\n this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n this._footerLength = this._selectLength(e.nativeEvent.layout);\n };\n this._onLayoutHeader = e => {\n this._headerLength = this._selectLength(e.nativeEvent.layout);\n };\n this._onContentSizeChange = (width, height) => {\n if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n if (this.props.contentOffset == null) {\n if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n this.scrollToIndex({\n animated: false,\n index: nullthrows(this.props.initialScrollIndex)\n });\n } else {\n this.scrollToEnd({\n animated: false\n });\n }\n }\n this._hasTriggeredInitialScrollToIndex = true;\n }\n if (this.props.onContentSizeChange) {\n this.props.onContentSizeChange(width, height);\n }\n this._scrollMetrics.contentLength = this._selectLength({\n height,\n width\n });\n this._scheduleCellsToRenderUpdate();\n this._maybeCallOnEdgeReached();\n };\n this._convertParentScrollMetrics = metrics => {\n // Offset of the top of the nested list relative to the top of its parent's viewport\n var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n // Child's visible length is the same as its parent's\n var visibleLength = metrics.visibleLength;\n var dOffset = offset - this._scrollMetrics.offset;\n var contentLength = this._scrollMetrics.contentLength;\n return {\n visibleLength,\n contentLength,\n offset,\n dOffset\n };\n };\n this._onScroll = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScroll(e);\n });\n if (this.props.onScroll) {\n this.props.onScroll(e);\n }\n var timestamp = e.timeStamp;\n var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n var contentLength = this._selectLength(e.nativeEvent.contentSize);\n var offset = this._selectOffset(e.nativeEvent.contentOffset);\n var dOffset = offset - this._scrollMetrics.offset;\n if (this._isNestedWithSameOrientation()) {\n if (this._scrollMetrics.contentLength === 0) {\n // Ignore scroll events until onLayout has been called and we\n // know our offset from our offset from our parent\n return;\n }\n var _this$_convertParentS = this._convertParentScrollMetrics({\n visibleLength,\n offset\n });\n visibleLength = _this$_convertParentS.visibleLength;\n contentLength = _this$_convertParentS.contentLength;\n offset = _this$_convertParentS.offset;\n dOffset = _this$_convertParentS.dOffset;\n }\n var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n var velocity = dOffset / dt;\n if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n dt,\n prevDt: this._scrollMetrics.dt,\n contentLength\n });\n this._hasWarned.perf = true;\n }\n\n // For invalid negative values (w/ RTL), set this to 1.\n var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n this._scrollMetrics = {\n contentLength,\n dt,\n dOffset,\n offset,\n timestamp,\n velocity,\n visibleLength,\n zoomScale\n };\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n if (!this.props) {\n return;\n }\n this._maybeCallOnEdgeReached();\n if (velocity !== 0) {\n this._fillRateHelper.activate();\n }\n this._computeBlankness();\n this._scheduleCellsToRenderUpdate();\n };\n this._onScrollBeginDrag = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScrollBeginDrag(e);\n });\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.recordInteraction();\n });\n this._hasInteracted = true;\n this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n };\n this._onScrollEndDrag = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onScrollEndDrag(e);\n });\n var velocity = e.nativeEvent.velocity;\n if (velocity) {\n this._scrollMetrics.velocity = this._selectOffset(velocity);\n }\n this._computeBlankness();\n this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n };\n this._onMomentumScrollBegin = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onMomentumScrollBegin(e);\n });\n this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n };\n this._onMomentumScrollEnd = e => {\n this._nestedChildLists.forEach(childList => {\n childList._onMomentumScrollEnd(e);\n });\n this._scrollMetrics.velocity = 0;\n this._computeBlankness();\n this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n };\n this._updateCellsToRender = () => {\n this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n this.setState((state, props) => {\n var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n return null;\n }\n return {\n cellsAroundViewport,\n renderMask\n };\n });\n };\n this._createViewToken = (index, isViewable, props\n // $FlowFixMe[missing-local-annot]\n ) => {\n var data = props.data,\n getItem = props.getItem;\n var item = getItem(data, index);\n return {\n index,\n item,\n key: this._keyExtractor(item, index, props),\n isViewable\n };\n };\n this._getOffsetApprox = (index, props) => {\n if (Number.isInteger(index)) {\n return this.__getFrameMetricsApprox(index, props).offset;\n } else {\n var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n var remainder = index - Math.floor(index);\n return frameMetrics.offset + remainder * frameMetrics.length;\n }\n };\n this.__getFrameMetricsApprox = (index, props) => {\n var frame = this._getFrameMetrics(index, props);\n if (frame && frame.index === index) {\n // check for invalid frames due to row re-ordering\n return frame;\n } else {\n var data = props.data,\n getItemCount = props.getItemCount,\n getItemLayout = props.getItemLayout;\n invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n return {\n length: this._averageCellLength,\n offset: this._averageCellLength * index\n };\n }\n };\n this._getFrameMetrics = (index, props) => {\n var data = props.data,\n getItem = props.getItem,\n getItemCount = props.getItemCount,\n getItemLayout = props.getItemLayout;\n invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n var item = getItem(data, index);\n var frame = this._frames[this._keyExtractor(item, index, props)];\n if (!frame || frame.index !== index) {\n if (getItemLayout) {\n /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.63 was deployed. To see the error\n * delete this comment and run Flow. */\n return getItemLayout(data, index);\n }\n }\n return frame;\n };\n this._getNonViewportRenderRegions = props => {\n // Keep a viewport's worth of content around the last focused cell to allow\n // random navigation around it without any blanking. E.g. tabbing from one\n // focused item out of viewport to another.\n if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n return [];\n }\n var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n var focusedCellIndex = lastFocusedCellRenderer.props.index;\n var itemCount = props.getItemCount(props.data);\n\n // The last cell we rendered may be at a new index. Bail if we don't know\n // where it is.\n if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n return [];\n }\n var first = focusedCellIndex;\n var heightOfCellsBeforeFocused = 0;\n for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n first--;\n heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n }\n var last = focusedCellIndex;\n var heightOfCellsAfterFocused = 0;\n for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n last++;\n heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n }\n return [{\n first,\n last\n }];\n };\n this._checkProps(_props);\n this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n if (this.props.viewabilityConfigCallbackPairs) {\n this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n onViewableItemsChanged: pair.onViewableItemsChanged\n }));\n } else {\n var _this$props3 = this.props,\n onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n viewabilityConfig = _this$props3.viewabilityConfig;\n if (onViewableItemsChanged) {\n this._viewabilityTuples.push({\n viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n onViewableItemsChanged: onViewableItemsChanged\n });\n }\n }\n var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n this.state = {\n cellsAroundViewport: initialRenderRegion,\n renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n };\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n // For issue https://github.com/necolas/react-native-web/issues/995\n this.invertedWheelEventHandler = ev => {\n var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n var isEventTargetScrollable = scrollLength > clientLength;\n var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n var leftoverDelta = delta;\n if (isEventTargetScrollable) {\n leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n }\n var targetDelta = delta - leftoverDelta;\n if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n var node = this._scrollRef.getScrollableNode();\n if (this.props.horizontal) {\n ev.target.scrollLeft += targetDelta;\n var nextScrollLeft = node.scrollLeft - leftoverDelta;\n node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n } else {\n ev.target.scrollTop += targetDelta;\n var nextScrollTop = node.scrollTop - leftoverDelta;\n node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n }\n ev.preventDefault();\n }\n };\n }\n _checkProps(props) {\n var onScroll = props.onScroll,\n windowSize = props.windowSize,\n getItemCount = props.getItemCount,\n data = props.data,\n initialScrollIndex = props.initialScrollIndex;\n invariant(\n // $FlowFixMe[prop-missing]\n !onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n var itemCount = getItemCount(data);\n if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n this._hasWarned.initialScrollIndex = true;\n }\n if (__DEV__ && !this._hasWarned.flexWrap) {\n // $FlowFixMe[underconstrained-implicit-instantiation]\n var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n this._hasWarned.flexWrap = true;\n }\n }\n }\n static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n var itemCount = props.getItemCount(props.data);\n invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n var renderMask = new CellRenderMask(itemCount);\n if (itemCount > 0) {\n var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n var region = _allRegions[_i2];\n renderMask.addCells(region);\n }\n\n // The initially rendered cells are retained as part of the\n // \"scroll-to-top\" optimization\n if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n var initialRegion = VirtualizedList._initialRenderRegion(props);\n renderMask.addCells(initialRegion);\n }\n\n // The layout coordinates of sticker headers may be off-screen while the\n // actual header is on-screen. Keep the most recent before the viewport\n // rendered, even if its layout coordinates are not in viewport.\n var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n }\n return renderMask;\n }\n static _initialRenderRegion(props) {\n var _props$initialScrollI;\n var itemCount = props.getItemCount(props.data);\n var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n return {\n first: firstCellIndex,\n last: lastCellIndex\n };\n }\n static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n renderMask.addCells({\n first: itemIdx,\n last: itemIdx\n });\n break;\n }\n }\n }\n _adjustCellsAroundViewport(props, cellsAroundViewport) {\n var data = props.data,\n getItemCount = props.getItemCount;\n var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n var _this$_scrollMetrics = this._scrollMetrics,\n contentLength = _this$_scrollMetrics.contentLength,\n offset = _this$_scrollMetrics.offset,\n visibleLength = _this$_scrollMetrics.visibleLength;\n var distanceFromEnd = contentLength - visibleLength - offset;\n\n // Wait until the scroll view metrics have been set up. And until then,\n // we will trust the initialNumToRender suggestion\n if (visibleLength <= 0 || contentLength <= 0) {\n return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n }\n var newCellsAroundViewport;\n if (props.disableVirtualization) {\n var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n newCellsAroundViewport = {\n first: 0,\n last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n };\n } else {\n // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n // So let's wait until we've scrolled the view to the right place. And until then,\n // we will trust the initialScrollIndex suggestion.\n\n // Thus, we want to recalculate the windowed render limits if any of the following hold:\n // - initialScrollIndex is undefined or is 0\n // - initialScrollIndex > 0 AND scrolling is complete\n // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case\n // where the list is shorter than the visible area)\n if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n }\n newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n }\n if (this._nestedChildLists.size() > 0) {\n // If some cell in the new state has a child list in it, we should only render\n // up through that item, so that we give that list a chance to render.\n // Otherwise there's churn from multiple child lists mounting and un-mounting\n // their items.\n\n // Will this prevent rendering if the nested list doesn't realize the end?\n var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n }\n return newCellsAroundViewport;\n }\n _findFirstChildWithMore(first, last) {\n for (var ii = first; ii <= last; ii++) {\n var cellKeyForIndex = this._indicesToKeys.get(ii);\n if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n return ii;\n }\n }\n return null;\n }\n componentDidMount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.registerAsNestedChild({\n ref: this,\n cellKey: this.context.cellKey\n });\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n this.setupWebWheelHandler();\n }\n componentWillUnmount() {\n if (this._isNestedWithSameOrientation()) {\n this.context.unregisterAsNestedChild({\n ref: this\n });\n }\n this._updateCellsToRenderBatcher.dispose({\n abort: true\n });\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.dispose();\n });\n this._fillRateHelper.deactivateAndFlush();\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n this.teardownWebWheelHandler();\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n setupWebWheelHandler() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n } else {\n setTimeout(() => this.setupWebWheelHandler(), 50);\n return;\n }\n }\n\n // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n teardownWebWheelHandler() {\n if (this._scrollRef && this._scrollRef.getScrollableNode) {\n this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n }\n }\n static getDerivedStateFromProps(newProps, prevState) {\n // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n // sure we're rendering a reasonable range here.\n var itemCount = newProps.getItemCount(newProps.data);\n if (itemCount === prevState.renderMask.numCells()) {\n return prevState;\n }\n var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n return {\n cellsAroundViewport: constrainedCells,\n renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n };\n }\n _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n var _this = this;\n var _this$props4 = this.props,\n CellRendererComponent = _this$props4.CellRendererComponent,\n ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n ListHeaderComponent = _this$props4.ListHeaderComponent,\n ListItemComponent = _this$props4.ListItemComponent,\n data = _this$props4.data,\n debug = _this$props4.debug,\n getItem = _this$props4.getItem,\n getItemCount = _this$props4.getItemCount,\n getItemLayout = _this$props4.getItemLayout,\n horizontal = _this$props4.horizontal,\n renderItem = _this$props4.renderItem;\n var stickyOffset = ListHeaderComponent ? 1 : 0;\n var end = getItemCount(data) - 1;\n var prevCellKey;\n last = Math.min(end, last);\n var _loop = function _loop() {\n var item = getItem(data, ii);\n var key = _this._keyExtractor(item, ii, _this.props);\n _this._indicesToKeys.set(ii, key);\n if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n stickyHeaderIndices.push(cells.length);\n }\n var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n cells.push( /*#__PURE__*/React.createElement(CellRenderer, _extends({\n CellRendererComponent: CellRendererComponent,\n ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n ListItemComponent: ListItemComponent,\n cellKey: key,\n horizontal: horizontal,\n index: ii,\n inversionStyle: inversionStyle,\n item: item,\n key: key,\n prevCellKey: prevCellKey,\n onUpdateSeparators: _this._onUpdateSeparators,\n onCellFocusCapture: e => _this._onCellFocusCapture(key),\n onUnmount: _this._onCellUnmount,\n ref: _ref => {\n _this._cellRefs[key] = _ref;\n },\n renderItem: renderItem\n }, shouldListenForLayout && {\n onCellLayout: _this._onCellLayout\n })));\n prevCellKey = key;\n };\n for (var ii = first; ii <= last; ii++) {\n _loop();\n }\n }\n static _constrainToItemCount(cells, props) {\n var itemCount = props.getItemCount(props.data);\n var last = Math.min(itemCount - 1, cells.last);\n var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n return {\n first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n last\n };\n }\n _isNestedWithSameOrientation() {\n var nestedContext = this.context;\n return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n }\n _keyExtractor(item, index, props\n // $FlowFixMe[missing-local-annot]\n ) {\n if (props.keyExtractor != null) {\n return props.keyExtractor(item, index);\n }\n var key = defaultKeyExtractor(item, index);\n if (key === String(index)) {\n _usedIndexForKey = true;\n if (item.type && item.type.displayName) {\n _keylessItemComponentName = item.type.displayName;\n }\n }\n return key;\n }\n render() {\n this._checkProps(this.props);\n var _this$props5 = this.props,\n ListEmptyComponent = _this$props5.ListEmptyComponent,\n ListFooterComponent = _this$props5.ListFooterComponent,\n ListHeaderComponent = _this$props5.ListHeaderComponent;\n var _this$props6 = this.props,\n data = _this$props6.data,\n horizontal = _this$props6.horizontal;\n var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n var cells = [];\n var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n var stickyHeaderIndices = [];\n\n // 1. Add cell for ListHeaderComponent\n if (ListHeaderComponent) {\n if (stickyIndicesFromProps.has(0)) {\n stickyHeaderIndices.push(0);\n }\n var _element = /*#__PURE__*/React.isValidElement(ListHeaderComponent) ? ListHeaderComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListHeaderComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getCellKey() + '-header',\n key: \"$header\"\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: this._onLayoutHeader,\n style: [inversionStyle, this.props.ListHeaderComponentStyle]\n },\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n _element)));\n }\n\n // 2a. Add a cell for ListEmptyComponent if applicable\n var itemCount = this.props.getItemCount(data);\n if (itemCount === 0 && ListEmptyComponent) {\n var _element2 = /*#__PURE__*/React.isValidElement(ListEmptyComponent) ? ListEmptyComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListEmptyComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getCellKey() + '-empty',\n key: \"$empty\"\n }, /*#__PURE__*/React.cloneElement(_element2, {\n onLayout: event => {\n this._onLayoutEmpty(event);\n if (_element2.props.onLayout) {\n _element2.props.onLayout(event);\n }\n },\n style: [inversionStyle, _element2.props.style]\n })));\n }\n\n // 2b. Add cells and spacers for each item\n if (itemCount > 0) {\n _usedIndexForKey = false;\n _keylessItemComponentName = '';\n var spacerKey = this._getSpacerKey(!horizontal);\n var renderRegions = this.state.renderMask.enumerateRegions();\n var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n var section = _step.value;\n if (section.isSpacer) {\n // Legacy behavior is to avoid spacers when virtualization is\n // disabled (including head spacers on initial render).\n if (this.props.disableVirtualization) {\n continue;\n }\n\n // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n // prevent the user for hyperscrolling into un-measured area because otherwise content will\n // likely jump around as it renders in above the viewport.\n var isLastSpacer = section === lastSpacer;\n var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n cells.push( /*#__PURE__*/React.createElement(View, {\n key: \"$spacer-\" + section.first,\n style: {\n [spacerKey]: spacerSize\n }\n }));\n } else {\n this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n }\n }\n if (!this._hasWarned.keys && _usedIndexForKey) {\n console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n this._hasWarned.keys = true;\n }\n }\n\n // 3. Add cell for ListFooterComponent\n if (ListFooterComponent) {\n var _element3 = /*#__PURE__*/React.isValidElement(ListFooterComponent) ? ListFooterComponent :\n /*#__PURE__*/\n // $FlowFixMe[not-a-component]\n // $FlowFixMe[incompatible-type-arg]\n React.createElement(ListFooterComponent, null);\n cells.push( /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n cellKey: this._getFooterCellKey(),\n key: \"$footer\"\n }, /*#__PURE__*/React.createElement(View, {\n onLayout: this._onLayoutFooter,\n style: [inversionStyle, this.props.ListFooterComponentStyle]\n },\n // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n _element3)));\n }\n\n // 4. Render the ScrollView\n var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n onContentSizeChange: this._onContentSizeChange,\n onLayout: this._onLayout,\n onScroll: this._onScroll,\n onScrollBeginDrag: this._onScrollBeginDrag,\n onScrollEndDrag: this._onScrollEndDrag,\n onMomentumScrollBegin: this._onMomentumScrollBegin,\n onMomentumScrollEnd: this._onMomentumScrollEnd,\n scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n // TODO: Android support\n invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n stickyHeaderIndices,\n style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n });\n this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n var innerRet = /*#__PURE__*/React.createElement(VirtualizedListContextProvider, {\n value: {\n cellKey: null,\n getScrollMetrics: this._getScrollMetrics,\n horizontal: horizontalOrDefault(this.props.horizontal),\n getOutermostParentListRef: this._getOutermostParentListRef,\n registerAsNestedChild: this._registerAsNestedChild,\n unregisterAsNestedChild: this._unregisterAsNestedChild\n }\n }, /*#__PURE__*/React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n ref: this._captureScrollRef\n }, cells));\n var ret = innerRet;\n /* https://github.com/necolas/react-native-web/issues/2239: Re-enable when ScrollView.Context.Consumer is available.\n if (__DEV__) {\n ret = (\n \n {scrollContext => {\n if (\n scrollContext != null &&\n !scrollContext.horizontal ===\n !horizontalOrDefault(this.props.horizontal) &&\n !this._hasWarned.nesting &&\n this.context == null &&\n this.props.scrollEnabled !== false\n ) {\n // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n console.error(\n 'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n 'orientation because it can break windowing and other functionality - use another ' +\n 'VirtualizedList-backed container instead.',\n );\n this._hasWarned.nesting = true;\n }\n return innerRet;\n }}\n \n );\n }*/\n if (this.props.debug) {\n return /*#__PURE__*/React.createElement(View, {\n style: styles.debug\n }, ret, this._renderDebugOverlay());\n } else {\n return ret;\n }\n }\n componentDidUpdate(prevProps) {\n var _this$props7 = this.props,\n data = _this$props7.data,\n extraData = _this$props7.extraData;\n if (data !== prevProps.data || extraData !== prevProps.extraData) {\n // clear the viewableIndices cache to also trigger\n // the onViewableItemsChanged callback with the new data\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.resetViewableIndices();\n });\n }\n // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n // another hiPri update.\n var hiPriInProgress = this._hiPriInProgress;\n this._scheduleCellsToRenderUpdate();\n // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n // is triggered with `this._hiPriInProgress = true`\n if (hiPriInProgress) {\n this._hiPriInProgress = false;\n }\n }\n _computeBlankness() {\n this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n }\n\n /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n * LTI update could not be added via codemod */\n\n _onCellFocusCapture(cellKey) {\n this._lastFocusedCellKey = cellKey;\n this._updateCellsToRender();\n }\n _triggerRemeasureForChildListsInCell(cellKey) {\n this._nestedChildLists.forEachInCell(cellKey, childList => {\n childList.measureLayoutRelativeToContainingList();\n });\n }\n measureLayoutRelativeToContainingList() {\n // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n // node on an unmounted component\" during scrolling\n try {\n if (!this._scrollRef) {\n return;\n }\n // We are assuming that getOutermostParentListRef().getScrollRef()\n // is a non-null reference to a ScrollView\n this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n this._offsetFromParentVirtualizedList = this._selectOffset({\n x,\n y\n });\n this._scrollMetrics.contentLength = this._selectLength({\n width,\n height\n });\n var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n if (metricsChanged) {\n this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n this._scrollMetrics.offset = scrollMetrics.offset;\n\n // If metrics of the scrollView changed, then we triggered remeasure for child list\n // to ensure VirtualizedList has the right information.\n this._nestedChildLists.forEach(childList => {\n childList.measureLayoutRelativeToContainingList();\n });\n }\n }, error => {\n console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n });\n } catch (error) {\n console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n }\n }\n _getFooterCellKey() {\n return this._getCellKey() + '-footer';\n }\n // $FlowFixMe[missing-local-annot]\n _renderDebugOverlay() {\n var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n var framesInLayout = [];\n var itemCount = this.props.getItemCount(this.props.data);\n for (var ii = 0; ii < itemCount; ii++) {\n var frame = this.__getFrameMetricsApprox(ii, this.props);\n /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n * suppresses an error found when Flow v0.68 was deployed. To see the\n * error delete this comment and run Flow. */\n if (frame.inLayout) {\n framesInLayout.push(frame);\n }\n }\n var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n var windowLen = frameLast.offset + frameLast.length - windowTop;\n var visTop = this._scrollMetrics.offset;\n var visLen = this._scrollMetrics.visibleLength;\n return /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlay]\n }, framesInLayout.map((f, ii) => /*#__PURE__*/React.createElement(View, {\n key: 'f' + ii,\n style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n top: f.offset * normalize,\n height: f.length * normalize\n }]\n })), /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n top: windowTop * normalize,\n height: windowLen * normalize\n }]\n }), /*#__PURE__*/React.createElement(View, {\n style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n top: visTop * normalize,\n height: visLen * normalize\n }]\n }));\n }\n _selectLength(metrics) {\n return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n }\n _selectOffset(metrics) {\n return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n }\n _maybeCallOnEdgeReached() {\n var _this$props8 = this.props,\n data = _this$props8.data,\n getItemCount = _this$props8.getItemCount,\n onStartReached = _this$props8.onStartReached,\n onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n onEndReached = _this$props8.onEndReached,\n onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n initialScrollIndex = _this$props8.initialScrollIndex;\n var _this$_scrollMetrics2 = this._scrollMetrics,\n contentLength = _this$_scrollMetrics2.contentLength,\n visibleLength = _this$_scrollMetrics2.visibleLength,\n offset = _this$_scrollMetrics2.offset;\n var distanceFromStart = offset;\n var distanceFromEnd = contentLength - visibleLength - offset;\n\n // Especially when oERT is zero it's necessary to 'floor' very small distance values to be 0\n // since debouncing causes us to not fire this event for every single \"pixel\" we scroll and can thus\n // be at the edge of the list with a distance approximating 0 but not quite there.\n if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n distanceFromStart = 0;\n }\n if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n distanceFromEnd = 0;\n }\n\n // TODO: T121172172 Look into why we're \"defaulting\" to a threshold of 2px\n // when oERT is not present (different from 2 viewports used elsewhere)\n var DEFAULT_THRESHOLD_PX = 2;\n var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n var isWithinStartThreshold = distanceFromStart <= startThreshold;\n var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n\n // First check if the user just scrolled within the end threshold\n // and call onEndReached only once for a given content length,\n // and only if onStartReached is not being executed\n if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n this._sentEndForContentLength = this._scrollMetrics.contentLength;\n onEndReached({\n distanceFromEnd\n });\n }\n\n // Next check if the user just scrolled within the start threshold\n // and call onStartReached only once for a given content length,\n // and only if onEndReached is not being executed\n else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n // On initial mount when using initialScrollIndex the offset will be 0 initially\n // and will trigger an unexpected onStartReached. To avoid this we can use\n // timestamp to differentiate between the initial scroll metrics and when we actually\n // received the first scroll event.\n if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n this._sentStartForContentLength = this._scrollMetrics.contentLength;\n onStartReached({\n distanceFromStart\n });\n }\n }\n\n // If the user scrolls away from the start or end and back again,\n // cause onStartReached or onEndReached to be triggered again\n else {\n this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n }\n }\n _scheduleCellsToRenderUpdate() {\n var _this$state$cellsArou = this.state.cellsAroundViewport,\n first = _this$state$cellsArou.first,\n last = _this$state$cellsArou.last;\n var _this$_scrollMetrics3 = this._scrollMetrics,\n offset = _this$_scrollMetrics3.offset,\n visibleLength = _this$_scrollMetrics3.visibleLength,\n velocity = _this$_scrollMetrics3.velocity;\n var itemCount = this.props.getItemCount(this.props.data);\n var hiPri = false;\n var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n // Mark as high priority if we're close to the start of the first item\n // But only if there are items before the first rendered item\n if (first > 0) {\n var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n }\n // Mark as high priority if we're close to the end of the last item\n // But only if there are items after the last rendered item\n if (!hiPri && last >= 0 && last < itemCount - 1) {\n var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n }\n // Only trigger high-priority updates if we've actually rendered cells,\n // and with that size estimate, accurately compute how many cells we should render.\n // Otherwise, it would just render as many cells as it can (of zero dimension),\n // each time through attempting to render more (limited by maxToRenderPerBatch),\n // starving the renderer from actually laying out the objects and computing _averageCellLength.\n // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n // We shouldn't do another hipri cellToRenderUpdate\n if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n this._hiPriInProgress = true;\n // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n // as possible.\n this._updateCellsToRenderBatcher.dispose({\n abort: true\n });\n this._updateCellsToRender();\n return;\n } else {\n this._updateCellsToRenderBatcher.schedule();\n }\n }\n _updateViewableItems(props, cellsAroundViewport) {\n this._viewabilityTuples.forEach(tuple => {\n tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n });\n }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n verticallyInverted: {\n transform: 'scaleY(-1)'\n },\n horizontallyInverted: {\n transform: 'scaleX(-1)'\n },\n debug: {\n flex: 1\n },\n debugOverlayBase: {\n position: 'absolute',\n top: 0,\n right: 0\n },\n debugOverlay: {\n bottom: 0,\n width: 20,\n borderColor: 'blue',\n borderWidth: 1\n },\n debugOverlayFrame: {\n left: 0,\n backgroundColor: 'orange'\n },\n debugOverlayFrameLast: {\n left: 0,\n borderColor: 'green',\n borderWidth: 2\n },\n debugOverlayFrameVis: {\n left: 0,\n borderColor: 'red',\n borderWidth: 2\n }\n});\nexport default VirtualizedList;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"ItemSeparatorComponent\", \"SectionSeparatorComponent\", \"renderItem\", \"renderSectionFooter\", \"renderSectionHeader\", \"sections\", \"stickySectionHeadersEnabled\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n/**\n * Right now this just flattens everything into one list and uses VirtualizedList under the\n * hood. The only operation that might not scale well is concatting the data arrays of all the\n * sections when new props are received, which should be plenty fast for up to ~10,000 items.\n */\nclass VirtualizedSectionList extends React.PureComponent {\n constructor() {\n super(...arguments);\n this._keyExtractor = (item, index) => {\n var info = this._subExtractor(index);\n return info && info.key || String(index);\n };\n this._convertViewable = viewable => {\n var _info$index;\n invariant(viewable.index != null, 'Received a broken ViewToken');\n var info = this._subExtractor(viewable.index);\n if (!info) {\n return null;\n }\n var keyExtractorWithNullableIndex = info.section.keyExtractor;\n var keyExtractorWithNonNullableIndex = this.props.keyExtractor || defaultKeyExtractor;\n var key = keyExtractorWithNullableIndex != null ? keyExtractorWithNullableIndex(viewable.item, info.index) : keyExtractorWithNonNullableIndex(viewable.item, (_info$index = info.index) !== null && _info$index !== void 0 ? _info$index : 0);\n return _objectSpread(_objectSpread({}, viewable), {}, {\n index: info.index,\n key,\n section: info.section\n });\n };\n this._onViewableItemsChanged = _ref => {\n var viewableItems = _ref.viewableItems,\n changed = _ref.changed;\n var onViewableItemsChanged = this.props.onViewableItemsChanged;\n if (onViewableItemsChanged != null) {\n onViewableItemsChanged({\n viewableItems: viewableItems.map(this._convertViewable, this).filter(Boolean),\n changed: changed.map(this._convertViewable, this).filter(Boolean)\n });\n }\n };\n this._renderItem = listItemCount =>\n // eslint-disable-next-line react/no-unstable-nested-components\n _ref2 => {\n var item = _ref2.item,\n index = _ref2.index;\n var info = this._subExtractor(index);\n if (!info) {\n return null;\n }\n var infoIndex = info.index;\n if (infoIndex == null) {\n var section = info.section;\n if (info.header === true) {\n var renderSectionHeader = this.props.renderSectionHeader;\n return renderSectionHeader ? renderSectionHeader({\n section\n }) : null;\n } else {\n var renderSectionFooter = this.props.renderSectionFooter;\n return renderSectionFooter ? renderSectionFooter({\n section\n }) : null;\n }\n } else {\n var renderItem = info.section.renderItem || this.props.renderItem;\n var SeparatorComponent = this._getSeparatorComponent(index, info, listItemCount);\n invariant(renderItem, 'no renderItem!');\n return /*#__PURE__*/React.createElement(ItemWithSeparator, {\n SeparatorComponent: SeparatorComponent,\n LeadingSeparatorComponent: infoIndex === 0 ? this.props.SectionSeparatorComponent : undefined,\n cellKey: info.key,\n index: infoIndex,\n item: item,\n leadingItem: info.leadingItem,\n leadingSection: info.leadingSection,\n prevCellKey: (this._subExtractor(index - 1) || {}).key\n // Callback to provide updateHighlight for this item\n ,\n setSelfHighlightCallback: this._setUpdateHighlightFor,\n setSelfUpdatePropsCallback: this._setUpdatePropsFor\n // Provide child ability to set highlight/updateProps for previous item using prevCellKey\n ,\n updateHighlightFor: this._updateHighlightFor,\n updatePropsFor: this._updatePropsFor,\n renderItem: renderItem,\n section: info.section,\n trailingItem: info.trailingItem,\n trailingSection: info.trailingSection,\n inverted: !!this.props.inverted\n });\n }\n };\n this._updatePropsFor = (cellKey, value) => {\n var updateProps = this._updatePropsMap[cellKey];\n if (updateProps != null) {\n updateProps(value);\n }\n };\n this._updateHighlightFor = (cellKey, value) => {\n var updateHighlight = this._updateHighlightMap[cellKey];\n if (updateHighlight != null) {\n updateHighlight(value);\n }\n };\n this._setUpdateHighlightFor = (cellKey, updateHighlightFn) => {\n if (updateHighlightFn != null) {\n this._updateHighlightMap[cellKey] = updateHighlightFn;\n } else {\n // $FlowFixMe[prop-missing]\n delete this._updateHighlightFor[cellKey];\n }\n };\n this._setUpdatePropsFor = (cellKey, updatePropsFn) => {\n if (updatePropsFn != null) {\n this._updatePropsMap[cellKey] = updatePropsFn;\n } else {\n delete this._updatePropsMap[cellKey];\n }\n };\n this._updateHighlightMap = {};\n this._updatePropsMap = {};\n this._captureRef = ref => {\n this._listRef = ref;\n };\n }\n scrollToLocation(params) {\n var index = params.itemIndex;\n for (var i = 0; i < params.sectionIndex; i++) {\n index += this.props.getItemCount(this.props.sections[i].data) + 2;\n }\n var viewOffset = params.viewOffset || 0;\n if (this._listRef == null) {\n return;\n }\n if (params.itemIndex > 0 && this.props.stickySectionHeadersEnabled) {\n var frame = this._listRef.__getFrameMetricsApprox(index - params.itemIndex, this._listRef.props);\n viewOffset += frame.length;\n }\n var toIndexParams = _objectSpread(_objectSpread({}, params), {}, {\n viewOffset,\n index\n });\n // $FlowFixMe[incompatible-use]\n this._listRef.scrollToIndex(toIndexParams);\n }\n getListRef() {\n return this._listRef;\n }\n render() {\n var _this$props = this.props,\n ItemSeparatorComponent = _this$props.ItemSeparatorComponent,\n SectionSeparatorComponent = _this$props.SectionSeparatorComponent,\n _renderItem = _this$props.renderItem,\n renderSectionFooter = _this$props.renderSectionFooter,\n renderSectionHeader = _this$props.renderSectionHeader,\n _sections = _this$props.sections,\n stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n passThroughProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n var listHeaderOffset = this.props.ListHeaderComponent ? 1 : 0;\n var stickyHeaderIndices = this.props.stickySectionHeadersEnabled ? [] : undefined;\n var itemCount = 0;\n for (var _iterator = _createForOfIteratorHelperLoose(this.props.sections), _step; !(_step = _iterator()).done;) {\n var section = _step.value;\n // Track the section header indices\n if (stickyHeaderIndices != null) {\n stickyHeaderIndices.push(itemCount + listHeaderOffset);\n }\n\n // Add two for the section header and footer.\n itemCount += 2;\n itemCount += this.props.getItemCount(section.data);\n }\n var renderItem = this._renderItem(itemCount);\n return /*#__PURE__*/React.createElement(VirtualizedList, _extends({}, passThroughProps, {\n keyExtractor: this._keyExtractor,\n stickyHeaderIndices: stickyHeaderIndices,\n renderItem: renderItem,\n data: this.props.sections,\n getItem: (sections, index) => this._getItem(this.props, sections, index),\n getItemCount: () => itemCount,\n onViewableItemsChanged: this.props.onViewableItemsChanged ? this._onViewableItemsChanged : undefined,\n ref: this._captureRef\n }));\n }\n _getItem(props, sections, index) {\n if (!sections) {\n return null;\n }\n var itemIdx = index - 1;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var sectionData = section.data;\n var itemCount = props.getItemCount(sectionData);\n if (itemIdx === -1 || itemIdx === itemCount) {\n // We intend for there to be overflow by one on both ends of the list.\n // This will be for headers and footers. When returning a header or footer\n // item the section itself is the item.\n return section;\n } else if (itemIdx < itemCount) {\n // If we are in the bounds of the list's data then return the item.\n return props.getItem(sectionData, itemIdx);\n } else {\n itemIdx -= itemCount + 2; // Add two for the header and footer\n }\n }\n\n return null;\n }\n\n // $FlowFixMe[missing-local-annot]\n\n _subExtractor(index) {\n var itemIndex = index;\n var _this$props2 = this.props,\n getItem = _this$props2.getItem,\n getItemCount = _this$props2.getItemCount,\n keyExtractor = _this$props2.keyExtractor,\n sections = _this$props2.sections;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n var sectionData = section.data;\n var key = section.key || String(i);\n itemIndex -= 1; // The section adds an item for the header\n if (itemIndex >= getItemCount(sectionData) + 1) {\n itemIndex -= getItemCount(sectionData) + 1; // The section adds an item for the footer.\n } else if (itemIndex === -1) {\n return {\n section,\n key: key + ':header',\n index: null,\n header: true,\n trailingSection: sections[i + 1]\n };\n } else if (itemIndex === getItemCount(sectionData)) {\n return {\n section,\n key: key + ':footer',\n index: null,\n header: false,\n trailingSection: sections[i + 1]\n };\n } else {\n var extractor = section.keyExtractor || keyExtractor || defaultKeyExtractor;\n return {\n section,\n key: key + ':' + extractor(getItem(sectionData, itemIndex), itemIndex),\n index: itemIndex,\n leadingItem: getItem(sectionData, itemIndex - 1),\n leadingSection: sections[i - 1],\n trailingItem: getItem(sectionData, itemIndex + 1),\n trailingSection: sections[i + 1]\n };\n }\n }\n }\n _getSeparatorComponent(index, info, listItemCount) {\n info = info || this._subExtractor(index);\n if (!info) {\n return null;\n }\n var ItemSeparatorComponent = info.section.ItemSeparatorComponent || this.props.ItemSeparatorComponent;\n var SectionSeparatorComponent = this.props.SectionSeparatorComponent;\n var isLastItemInList = index === listItemCount - 1;\n var isLastItemInSection = info.index === this.props.getItemCount(info.section.data) - 1;\n if (SectionSeparatorComponent && isLastItemInSection) {\n return SectionSeparatorComponent;\n }\n if (ItemSeparatorComponent && !isLastItemInSection && !isLastItemInList) {\n return ItemSeparatorComponent;\n }\n return null;\n }\n}\nfunction ItemWithSeparator(props) {\n var LeadingSeparatorComponent = props.LeadingSeparatorComponent,\n SeparatorComponent = props.SeparatorComponent,\n cellKey = props.cellKey,\n prevCellKey = props.prevCellKey,\n setSelfHighlightCallback = props.setSelfHighlightCallback,\n updateHighlightFor = props.updateHighlightFor,\n setSelfUpdatePropsCallback = props.setSelfUpdatePropsCallback,\n updatePropsFor = props.updatePropsFor,\n item = props.item,\n index = props.index,\n section = props.section,\n inverted = props.inverted;\n var _React$useState = React.useState(false),\n leadingSeparatorHiglighted = _React$useState[0],\n setLeadingSeparatorHighlighted = _React$useState[1];\n var _React$useState2 = React.useState(false),\n separatorHighlighted = _React$useState2[0],\n setSeparatorHighlighted = _React$useState2[1];\n var _React$useState3 = React.useState({\n leadingItem: props.leadingItem,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.item,\n trailingSection: props.trailingSection\n }),\n leadingSeparatorProps = _React$useState3[0],\n setLeadingSeparatorProps = _React$useState3[1];\n var _React$useState4 = React.useState({\n leadingItem: props.item,\n leadingSection: props.leadingSection,\n section: props.section,\n trailingItem: props.trailingItem,\n trailingSection: props.trailingSection\n }),\n separatorProps = _React$useState4[0],\n setSeparatorProps = _React$useState4[1];\n React.useEffect(() => {\n setSelfHighlightCallback(cellKey, setSeparatorHighlighted);\n // $FlowFixMe[incompatible-call]\n setSelfUpdatePropsCallback(cellKey, setSeparatorProps);\n return () => {\n setSelfUpdatePropsCallback(cellKey, null);\n setSelfHighlightCallback(cellKey, null);\n };\n }, [cellKey, setSelfHighlightCallback, setSeparatorProps, setSelfUpdatePropsCallback]);\n var separators = {\n highlight: () => {\n setLeadingSeparatorHighlighted(true);\n setSeparatorHighlighted(true);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, true);\n }\n },\n unhighlight: () => {\n setLeadingSeparatorHighlighted(false);\n setSeparatorHighlighted(false);\n if (prevCellKey != null) {\n updateHighlightFor(prevCellKey, false);\n }\n },\n updateProps: (select, newProps) => {\n if (select === 'leading') {\n if (LeadingSeparatorComponent != null) {\n setLeadingSeparatorProps(_objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n } else if (prevCellKey != null) {\n // update the previous item's separator\n updatePropsFor(prevCellKey, _objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n }\n } else if (select === 'trailing' && SeparatorComponent != null) {\n setSeparatorProps(_objectSpread(_objectSpread({}, separatorProps), newProps));\n }\n }\n };\n var element = props.renderItem({\n item,\n index,\n section,\n separators\n });\n var leadingSeparator = LeadingSeparatorComponent != null && /*#__PURE__*/React.createElement(LeadingSeparatorComponent, _extends({\n highlighted: leadingSeparatorHiglighted\n }, leadingSeparatorProps));\n var separator = SeparatorComponent != null && /*#__PURE__*/React.createElement(SeparatorComponent, _extends({\n highlighted: separatorHighlighted\n }, separatorProps));\n return leadingSeparator || separator ? /*#__PURE__*/React.createElement(View, null, inverted === false ? leadingSeparator : separator, element, inverted === false ? separator : leadingSeparator) : element;\n}\n\n/* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n// $FlowFixMe[method-unbinding]\nexport default VirtualizedSectionList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/*\n * @returns {bool} true if different, false if equal\n */\nvar deepDiffer = function deepDiffer(one, two, maxDepth) {\n if (maxDepth === void 0) {\n maxDepth = -1;\n }\n if (maxDepth === 0) {\n return true;\n }\n if (one === two) {\n // Short circuit on identical object references instead of traversing them.\n return false;\n }\n if (typeof one === 'function' && typeof two === 'function') {\n // We consider all functions equal\n return false;\n }\n if (typeof one !== 'object' || one === null) {\n // Primitives can be directly compared\n return one !== two;\n }\n if (typeof two !== 'object' || two === null) {\n // We know they are different because the previous case would have triggered\n // otherwise.\n return true;\n }\n if (one.constructor !== two.constructor) {\n return true;\n }\n if (Array.isArray(one)) {\n // We know two is also an array because the constructors are equal\n var len = one.length;\n if (two.length !== len) {\n return true;\n }\n for (var ii = 0; ii < len; ii++) {\n if (deepDiffer(one[ii], two[ii], maxDepth - 1)) {\n return true;\n }\n }\n } else {\n for (var key in one) {\n if (deepDiffer(one[key], two[key], maxDepth - 1)) {\n return true;\n }\n }\n for (var twoKey in two) {\n // The only case we haven't checked yet is keys that are in two but aren't\n // in one, which means they are different.\n if (one[twoKey] === undefined && two[twoKey] !== undefined) {\n return true;\n }\n }\n }\n return false;\n};\nexport default deepDiffer;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/**\n * Intentional info-level logging for clear separation from ad-hoc console debug logging.\n */\nfunction infoLog() {\n return console.log(...arguments);\n}\nexport default infoLog;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * EventEmitter manages listeners and publishes events to them.\n *\n * EventEmitter accepts a single type parameter that defines the valid events\n * and associated listener argument(s).\n *\n * @example\n *\n * const emitter = new EventEmitter<{\n * success: [number, string],\n * error: [Error],\n * }>();\n *\n * emitter.on('success', (statusCode, responseText) => {...});\n * emitter.emit('success', 200, '...');\n *\n * emitter.on('error', error => {...});\n * emitter.emit('error', new Error('Resource not found'));\n *\n */\nexport default class EventEmitter {\n constructor() {\n this._registry = {};\n }\n /**\n * Registers a listener that is called when the supplied event is emitted.\n * Returns a subscription that has a `remove` method to undo registration.\n */\n addListener(eventType, listener, context) {\n var registrations = allocate(this._registry, eventType);\n var registration = {\n context,\n listener,\n remove() {\n registrations.delete(registration);\n }\n };\n registrations.add(registration);\n return registration;\n }\n\n /**\n * Emits the supplied event. Additional arguments supplied to `emit` will be\n * passed through to each of the registered listeners.\n *\n * If a listener modifies the listeners registered for the same event, those\n * changes will not be reflected in the current invocation of `emit`.\n */\n emit(eventType) {\n var registrations = this._registry[eventType];\n if (registrations != null) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n for (var _i = 0, _arr = [...registrations]; _i < _arr.length; _i++) {\n var registration = _arr[_i];\n registration.listener.apply(registration.context, args);\n }\n }\n }\n\n /**\n * Removes all registered listeners.\n */\n removeAllListeners(eventType) {\n if (eventType == null) {\n this._registry = {};\n } else {\n delete this._registry[eventType];\n }\n }\n\n /**\n * Returns the number of registered listeners for the supplied event.\n */\n listenerCount(eventType) {\n var registrations = this._registry[eventType];\n return registrations == null ? 0 : registrations.size;\n }\n}\nfunction allocate(registry, eventType) {\n var registrations = registry[eventType];\n if (registrations == null) {\n registrations = new Set();\n registry[eventType] = registrations;\n }\n return registrations;\n}","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var cache = null;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n var lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult: lastResult,\n lastArgs: newArgs,\n lastThis: this,\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nexport { memoizeOne as default };\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow strict\n * @format\n */\n\n'use strict';\n\nmodule.exports = require('@react-native/assets-registry/registry');\n","export * from \"./state\";\nexport * from \"./types\";\nexport * from \"./utils\";\n","import i18n from \"i18next\";\nimport { create } from \"zustand\";\nimport isEqual from \"lodash/isEqual\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport logger from \"zustand-logger-middleware\";\nimport { Toast } from \"@itsramiel/react-native-toast-notifications\";\n\nimport { generateRandomId, logZustandActionToSentry, normalizeArray } from \"@/utils\";\nimport { zustandStorage } from \"@/storage\";\nimport { LOCAL_STORAGE_KEYS } from \"@/constants\";\nimport { TBranchListItem, TProduct, TProductItemsMap } from \"@/network\";\n\nimport {\n getBasketProductQuantity,\n getBranchBasket,\n getBranchBasketPrice,\n getBranchBasketProduct,\n getBranchBasketProducts,\n getProductQuantity,\n getTotalNumberOfProductsInBranchBasket,\n} from \"../utils\";\nimport { TBasketProduct, TBranchBasket } from \"../types\";\nimport { createSelector } from \"@reduxjs/toolkit\";\n\ntype Entries = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\nexport type TBasketState = {\n baskets: Record;\n};\n\nconst INITIAL_STATE: TBasketState = {\n baskets: {},\n};\n\ntype TUserBasketActions = {\n addProductToBasket: (args: {\n branchId: TBranchListItem[\"id\"];\n product: TProduct;\n quantity: number;\n productItemsMap?: TProductItemsMap;\n opts?: { showToast?: boolean; onSuccess?: () => void };\n }) => void;\n addFromPreviousOrders: (branchId: TBranchListItem[\"id\"], basketProducts: TBasketProduct[]) => void;\n incrementQuantity: (branchId: TBranchListItem[\"id\"], productId: TProduct[\"id\"], basketProductId?: TBasketProduct[\"id\"]) => void;\n decrementQuantity: (branchId: TBranchListItem[\"id\"], productId: TProduct[\"id\"], basketProductId?: TBasketProduct[\"id\"]) => void;\n editBasketProductItemsMap: (\n branchId: TBranchListItem[\"id\"],\n productId: TProduct[\"id\"],\n basketProductId: TBasketProduct[\"id\"],\n productItemsMap: TProductItemsMap\n ) => void;\n removeFromBasket: (branchId: TBranchListItem[\"id\"], productId: TProduct[\"id\"], basketProductId?: TBasketProduct[\"id\"]) => void;\n emptyBasket: (branchId: TBranchListItem[\"id\"]) => void;\n updateBranchBasketFromBranchProducts: (\n branchId: TBranchListItem[\"id\"],\n productsList: TProduct[],\n unavailableProductsCb?: (basketProducts: Readonly[]) => void\n ) => void;\n clearEmptyBaskets: () => void;\n removeBasketIfEmpty: (branchId: TBranchListItem[\"id\"]) => void;\n updateTimestamp: (branchId: TBranchListItem[\"id\"]) => void;\n resetState: () => void;\n};\n\nexport type TBasketStore = {\n state: TBasketState;\n actions: TUserBasketActions;\n};\n\nexport const useBasketStore = create()(\n logger(\n immer(\n persist(\n (set, get) => ({\n state: INITIAL_STATE,\n actions: {\n resetState: () => set({ state: INITIAL_STATE }),\n addProductToBasket: ({ branchId, product, quantity, productItemsMap = {}, opts }) => {\n const { showToast, onSuccess } = { showToast: true, ...opts };\n set((prevState) => {\n const branchesBaskets = prevState.state.baskets;\n let branchBasket = branchesBaskets[branchId];\n if (branchBasket === undefined) {\n branchesBaskets[branchId] = { branchId, products: {}, lastUpdated: Date.now() };\n branchBasket = branchesBaskets[branchId];\n }\n\n let basketProductMap = branchBasket.products[product.id];\n if (!basketProductMap) {\n branchBasket.products[product.id] = {};\n basketProductMap = branchBasket.products[product.id];\n }\n const productQuantityAlreadyInBasket = Object.values(basketProductMap).reduce(\n (acc, basketProduct) => acc + basketProduct.quantity,\n 0\n );\n\n if (product.maximumOrderCount && productQuantityAlreadyInBasket >= product.maximumOrderCount) {\n return prevState;\n } else {\n const similarProduct = Object.values(basketProductMap).find((basketProduct) => {\n return basketProduct.info.id === product.id && isEqual(basketProduct.productItemsMap, productItemsMap);\n });\n\n if (similarProduct) {\n similarProduct.quantity += quantity;\n } else {\n const id = generateRandomId();\n basketProductMap[id] = { info: product, quantity, id, productItemsMap };\n if (showToast) Toast.show(i18n.t(\"PRODUCT_ADDED_TO_BASKET\"));\n }\n onSuccess?.();\n\n return prevState;\n }\n });\n get().actions.updateTimestamp(branchId);\n },\n addFromPreviousOrders: (branchId, basketProducts) => {\n set((prevState) => {\n const branchesBaskets = prevState.state.baskets;\n let branchBasket = branchesBaskets[branchId];\n if (branchBasket === undefined) {\n branchesBaskets[branchId] = { branchId, products: {}, lastUpdated: Date.now() };\n branchBasket = branchesBaskets[branchId];\n }\n\n for (const basketProduct of basketProducts) {\n let basketProductMap = branchBasket.products[basketProduct.info.id];\n if (!basketProductMap) {\n branchBasket.products[basketProduct.info.id] = {};\n basketProductMap = branchBasket.products[basketProduct.info.id];\n }\n basketProductMap[basketProduct.id] = basketProduct;\n }\n return prevState;\n });\n },\n editBasketProductItemsMap: (branchId, productId, basketProductId, productItemsMap) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n throw Error(\"editing product for product when there is no basket for branch\");\n }\n const basketProductMap = branchBasket.products[productId];\n const basketProduct = basketProductMap?.[basketProductId];\n if (basketProduct === undefined) {\n throw Error(\"editing product that is not already in branch\");\n }\n // update items maps\n basketProduct.productItemsMap = productItemsMap;\n\n // check for duplicates\n const duplicateBasketProduct = Object.values(basketProductMap).find((otherBasketProduct) => {\n return (\n basketProduct.id !== otherBasketProduct.id && // make sure checking different basket products\n basketProduct.info.id === otherBasketProduct.info.id && // but same branch product\n isEqual(basketProduct.productItemsMap, otherBasketProduct.productItemsMap)\n );\n });\n\n if (duplicateBasketProduct) {\n duplicateBasketProduct.quantity += basketProduct.quantity;\n delete basketProductMap[basketProductId];\n }\n return prevState;\n });\n get().actions.updateTimestamp(branchId);\n },\n incrementQuantity: (branchId, productId, basketProductId) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n throw Error(\"incrementing quantity for product when there is no basket for branch\");\n }\n const basketProductMap = branchBasket.products[productId];\n const basketProduct = basketProductId !== undefined ? basketProductMap[basketProductId] : Object.values(basketProductMap)[0];\n if (basketProduct === undefined) {\n throw Error(\"incrementing quantity for product that is not already in branch\");\n }\n\n const quantityInBasket = Object.values(basketProductMap).reduce((acc, item) => {\n if (item.info.id === basketProduct.info.id) {\n acc += item.quantity;\n }\n return acc;\n }, 0);\n\n const maxAllowedQuantity = basketProduct.info.maximumOrderCount;\n if (maxAllowedQuantity === null || quantityInBasket < maxAllowedQuantity) {\n basketProduct.quantity += 1;\n }\n return prevState;\n });\n get().actions.updateTimestamp(branchId);\n },\n decrementQuantity: (branchId, productId, basketProductId) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n throw Error(\"decrementing quantity for product when there is no basket for branch\");\n }\n const basketProductMap = branchBasket.products[productId];\n const basketProduct = basketProductId !== undefined ? basketProductMap[basketProductId] : Object.values(basketProductMap)[0];\n if (basketProduct === undefined) {\n throw Error(\"decrementing quantity for product that is not already in branch\");\n }\n\n const minAllowedQuantity = basketProduct.info.minimumOrderCount;\n if (typeof minAllowedQuantity === \"number\" && basketProduct.quantity <= minAllowedQuantity) {\n basketProduct.quantity = minAllowedQuantity;\n } else {\n if (basketProduct.quantity > 1) {\n basketProduct.quantity -= 1;\n }\n }\n return prevState;\n });\n get().actions.updateTimestamp(branchId);\n },\n removeFromBasket: (branchId, productId, basketProductId) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n throw Error(\"deleting product from basket when there is no basket for branch\");\n }\n if (basketProductId !== undefined) {\n delete branchBasket.products[productId][basketProductId];\n if (Object.values(branchBasket.products[productId]).length === 0) {\n delete branchBasket.products[productId];\n }\n } else {\n // basketProductId is undefined means there should only be one item so we can just delete the whole basket for that product\n delete branchBasket.products[productId];\n }\n return prevState;\n });\n get().actions.removeBasketIfEmpty(branchId);\n get().actions.updateTimestamp(branchId);\n },\n emptyBasket: (branchId) => {\n set((prevState) => {\n delete prevState.state.baskets[branchId];\n });\n },\n updateBranchBasketFromBranchProducts: (branchId, productsList, unavailableProductsCb) => {\n function shouldRemoveProduct(basketProduct: TBasketProduct, product: TProduct, productCount: number) {\n if (!product.canBeOrderedNow) return true;\n if (JSON.stringify(product.productItems) !== JSON.stringify(basketProduct.info.productItems)) return true;\n if (typeof product.maximumOrderCount === \"number\" && productCount + basketProduct.quantity > product.maximumOrderCount) return true;\n return false;\n }\n\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n return prevState;\n }\n\n const normalizedProducts = normalizeArray(productsList);\n\n const productsToRemove: Record = {};\n\n (Object.entries(branchBasket.products) as unknown as Entries).forEach(\n ([productId, basketProductMap]) => {\n let productCount = 0;\n (Object.entries(basketProductMap) as unknown as Entries).forEach(([basketProductId, basketProduct]) => {\n const branchProduct = normalizedProducts[basketProduct.info.id];\n const removeProduct = branchProduct ? shouldRemoveProduct(basketProduct, branchProduct, productCount) : true;\n\n if (removeProduct) {\n const existingRemovedProduct = productsToRemove[productId];\n if (existingRemovedProduct) {\n existingRemovedProduct.quantity += basketProduct.quantity;\n } else {\n productsToRemove[basketProduct.info.id] = { ...basketProduct };\n }\n delete basketProductMap[basketProductId];\n } else {\n productCount += basketProduct.quantity;\n if (branchProduct.maximumOrderCount && basketProduct.quantity > branchProduct.maximumOrderCount) {\n basketProduct.quantity = branchProduct.maximumOrderCount;\n }\n if (branchProduct.minimumOrderCount && basketProduct.quantity < branchProduct.minimumOrderCount) {\n basketProduct.quantity = branchProduct.minimumOrderCount;\n }\n }\n });\n }\n );\n\n unavailableProductsCb?.(Object.values(productsToRemove));\n return prevState;\n });\n get().actions.removeBasketIfEmpty(branchId);\n },\n clearEmptyBaskets: () => {\n set((prevState) => {\n Object.values(prevState.state.baskets).forEach((basket) => {\n if (Object.keys(basket.products).length === 0) {\n delete prevState.state.baskets[basket.branchId];\n }\n });\n return prevState;\n });\n },\n removeBasketIfEmpty: (branchId) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n return prevState;\n }\n\n if (Object.keys(branchBasket.products).length === 0) {\n delete prevState.state.baskets[branchId];\n }\n\n return prevState;\n });\n },\n updateTimestamp: (branchId) => {\n set((prevState) => {\n const branchBasket = prevState.state.baskets[branchId];\n if (branchBasket === undefined) {\n return prevState;\n }\n\n branchBasket.lastUpdated = Date.now();\n\n return prevState;\n });\n },\n },\n }),\n {\n name: LOCAL_STORAGE_KEYS.BASKET,\n storage: createJSONStorage(() => zustandStorage),\n partialize: ({ state }) => ({ state }),\n onRehydrateStorage: () => (store) => {\n store?.actions.clearEmptyBaskets();\n },\n version: 1,\n }\n )\n ),\n logZustandActionToSentry\n )\n);\n\nexport const getBasketState = () => useBasketStore.getState().state;\n\nexport const selectBasketActions = (store: TBasketStore) => store.actions;\n\nexport const selectBranchBasket = (store: TBasketStore, branchId: TBranchListItem[\"id\"]) => getBranchBasket(store, branchId);\nexport const selectBranchBasketPrice = (store: TBasketStore, branchId: TBranchListItem[\"id\"]) =>\n getBranchBasketPrice(selectBranchBasket(store, branchId));\nexport const selectBranchBasketTotalProductQuantity = (store: TBasketStore, branchId: TBranchListItem[\"id\"]) =>\n getTotalNumberOfProductsInBranchBasket(selectBranchBasket(store, branchId));\nexport const selectBranchBasketProductQuantity = (\n store: TBasketStore,\n branchId: TBranchListItem[\"id\"],\n productId: TProduct[\"id\"],\n basketProductId?: TBasketProduct[\"id\"]\n) => getBasketProductQuantity(selectBranchBasket(store, branchId), productId, basketProductId);\nexport const selectBranchProductQuantityInBasket = (store: TBasketStore, branchId: TBranchListItem[\"id\"], productId: TProduct[\"id\"]) =>\n getProductQuantity(selectBranchBasket(store, branchId), productId);\n\nexport const selectBranchBasketProduct = (\n store: TBasketStore,\n branchId: TBranchListItem[\"id\"],\n productId: TProduct[\"id\"],\n basketProductId: TBasketProduct[\"id\"]\n) => getBranchBasketProduct(getBranchBasket(store, branchId), productId, basketProductId);\n\nexport const selectBranchBasketProducts = createSelector(\n (store: TBasketStore, branchId: TBranchListItem[\"id\"]) => selectBranchBasket(store, branchId),\n (branchBasket) => getBranchBasketProducts(branchBasket)\n);\n","export * from \"./basketStore\";\n","import { TBranchListItem, TProduct, TProductItemsMap } from \"@/network\";\n\nexport type TBasketProduct = {\n id: string;\n quantity: number;\n info: TProduct;\n productItemsMap: TProductItemsMap;\n};\n\nexport type TBranchBasket = {\n branchId: TBranchListItem[\"id\"];\n products: Record>;\n lastUpdated: number;\n};\n","import { TBasketProduct } from \"../types\";\n\nexport const getBasketProductExtraPrice = (basketProduct: TBasketProduct) => {\n return basketProduct.info.productItems.reduce(\n (total: { extraPrice: number; extraPriceOld: number }, productItem) => {\n // Check if the current productItem exits in the user chosen productItemsMap\n if (basketProduct.productItemsMap[productItem.id]) {\n productItem.productItemComponents.forEach((productItemComponent) => {\n if (basketProduct.productItemsMap[productItem.id].includes(productItemComponent.id)) {\n if (productItemComponent.extraPrice) {\n total.extraPrice = total.extraPrice + productItemComponent.extraPrice;\n total.extraPriceOld = productItemComponent.extraPriceOld\n ? total.extraPriceOld + productItemComponent.extraPriceOld\n : total.extraPriceOld + productItemComponent.extraPrice;\n }\n }\n });\n }\n return total;\n },\n { extraPrice: 0, extraPriceOld: 0 }\n );\n};\n","import { TProduct } from \"@/network\";\nimport { TBasketProduct, TBranchBasket } from \"../types\";\n\nexport const getBasketProductQuantity = (branchBasket: TBranchBasket, productId: TProduct[\"id\"], basketProductId?: TBasketProduct[\"id\"]) => {\n const basketProductMap = branchBasket.products?.[productId] ?? {};\n if (basketProductId) {\n return basketProductMap[basketProductId].quantity ?? 0;\n } else {\n const basketProductList = Object.values(basketProductMap);\n if (basketProductList.length === 1) {\n return basketProductList[0].quantity;\n } else {\n return 0;\n }\n }\n};\n","import { TBranchListItem } from \"@/network\";\nimport { TBasketStore } from \"../state\";\n\nexport const getBranchBasket = (store: TBasketStore, branchId: TBranchListItem[\"id\"]) => {\n return store.state.baskets[branchId] ?? { branchId, products: {} };\n};\n","import { TBranchBasket } from \"../types\";\nimport { getBasketProductExtraPrice } from \"./getBasketProductExtraPrice\";\n\nexport const getBranchBasketPrice = (branchBasket: TBranchBasket) => {\n return Object.values(branchBasket.products).reduce(\n (total: { price: 0; priceOld: 0; priceNotIncludedInMinimumPrice: 0 }, basketProductMap) => {\n Object.values(basketProductMap).forEach((basketProduct) => {\n const quantity = basketProduct.quantity;\n const price = basketProduct.info.price;\n const priceOld = basketProduct.info.priceOld ?? price;\n const { extraPrice, extraPriceOld } = getBasketProductExtraPrice(basketProduct);\n\n total.price += (price + extraPrice) * quantity;\n\n total.priceOld += (priceOld + extraPriceOld) * quantity;\n\n if (basketProduct.info.includeToMinimumDeliveryPrice === false) {\n total.priceNotIncludedInMinimumPrice += (price + extraPrice) * quantity;\n }\n });\n return total;\n },\n { price: 0, priceOld: 0, priceNotIncludedInMinimumPrice: 0 }\n );\n};\n","import { TProduct } from \"@/network\";\nimport { TBasketProduct, TBranchBasket } from \"../types\";\n\nexport const getBranchBasketProduct = (branchBasket: TBranchBasket, productId: TProduct[\"id\"], basketProductId: TBasketProduct[\"id\"]) => {\n return branchBasket.products[productId][basketProductId];\n};\n","import { TBranchBasket } from \"../types\";\n\nexport const getBranchBasketProducts = (branchBasket: TBranchBasket) => {\n return Object.values(branchBasket.products).map((basketProductMap) => Object.values(basketProductMap)).flat();\n};\n","import { TProduct } from \"@/network\";\nimport { TBranchBasket } from \"../types\";\n\nexport const getProductQuantity = (branchBasket: TBranchBasket, productId: TProduct[\"id\"]) => {\n return Object.values(branchBasket.products[productId] ?? {}).reduce((acc, basketProduct) => {\n return acc + basketProduct.quantity;\n }, 0);\n};\n","import { TBranchBasket } from \"../types\";\n\nexport const getTotalNumberOfProductsInBranchBasket = (branchBasket: TBranchBasket) => {\n return Object.values(branchBasket.products).reduce(\n (total, basketProductMap) => total + Object.values(basketProductMap).reduce((acc, basketProduct) => acc + basketProduct.quantity, 0),\n 0\n );\n};\n","export * from \"./getBranchBasketPrice\";\nexport * from \"./getTotalNumberOfProductsInBranchBasket\";\nexport * from \"./getBasketProductQuantity\";\nexport * from \"./getProductQuantity\";\nexport * from \"./getBranchBasket\";\nexport * from \"./getBranchBasketProduct\";\nexport * from \"./getBasketProductExtraPrice\";\nexport * from \"./getBranchBasketProducts\";\n","import React, { ComponentProps } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { Touchable } from \"./Touchable\";\nimport { BodyText } from \"./BodyText\";\nimport { ChevronRight } from \"./ChevronRight\";\n\ninterface IActionButton extends ComponentProps {\n text?: string;\n iconName: ComponentProps[\"name\"];\n noBorderBottom?: boolean;\n textNode?: React.ReactElement;\n}\n\nexport const ActionButton = ({ text, iconName, onPress, noBorderBottom, textNode }: IActionButton) => {\n return (\n \n \n \n \n \n {textNode ? textNode : {text}}\n \n \n \n \n \n );\n};\n\nconst PADDING = 10;\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n backgroundColor: \"white\",\n alignItems: \"center\",\n },\n leftIcon: {\n marginRight: 10,\n padding: PADDING,\n },\n textContainer: {\n flex: 1,\n },\n rightIcon: {\n marginLeft: 10,\n padding: PADDING,\n },\n});\n","import React from \"react\";\nimport { ActivityIndicator as RnActivityIndicator, ActivityIndicatorProps } from \"react-native\";\n\nimport { colors } from \"@/constants\";\n\nexport const ActivityIndicator: React.FC = ({ color, size, ...props }) => {\n return ;\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { useHomeQuery } from \"@/network\";\n\nimport { BodyText } from \"./BodyText\";\nimport { ActionButton } from \"./ActionButton\";\n\ninterface IAddressSummary {\n onPress: () => void;\n}\n\nexport const AddressSummary = ({ onPress }: IAddressSummary) => {\n const { t } = useTranslation();\n const { data } = useHomeQuery();\n\n if (data === undefined) {\n return null;\n }\n const { refAddressSelectedAddress, refAddressSelectedTitle, refAddressSelectedRefAddressAddressItemName, refAddressItemSelectedName } = data.result;\n\n // Initially set the text to be the default place holder\n let textNode = (\n <>\n \n {t(\"SELECT_REGION\")}\n \n \n );\n\n if (refAddressSelectedAddress) {\n // If user defined address is available => show it\n textNode = (\n <>\n {refAddressSelectedTitle || refAddressSelectedRefAddressAddressItemName ? (\n \n {refAddressSelectedTitle ? `${refAddressSelectedTitle} ` : null}\n {refAddressSelectedRefAddressAddressItemName ? `(${refAddressSelectedRefAddressAddressItemName})` : null}\n \n ) : null}\n {refAddressSelectedAddress ? (\n \n {refAddressSelectedAddress}\n \n ) : null}\n \n );\n } else if (refAddressItemSelectedName) {\n // Else if a region name is available => show it\n textNode = (\n <>\n \n {refAddressItemSelectedName}\n \n \n );\n }\n\n return ;\n};\n\nconst styles = StyleSheet.create({\n txt: {\n paddingVertical: 4,\n fontWeight: \"bold\",\n },\n titleTxt: {\n color: colors.LOGO_COLOR_ACCENT,\n },\n});\n","import React from \"react\";\nimport Animated from \"react-native-reanimated\";\nimport { StyleSheet, TextProps } from \"react-native\";\n\nimport { colors } from \"@/constants\";\n\ninterface IAnimatedBodyText extends TextProps {\n fontSize?: number;\n}\n\nexport const AnimatedBodyText = ({ children, fontSize, ...props }: IAnimatedBodyText) => {\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n text: {\n color: colors.TEXT_COLOR,\n fontSize: 14,\n },\n});\n","import React from \"react\";\nimport AnimatedLottieView, { AnimatedLottieViewProps } from \"lottie-react-native\";\nimport { useWindowSize } from \"@/hooks\";\n\nexport const AnimatedLock = (props: Omit) => {\n const { windowHeight, windowWidth } = useWindowSize();\n return (\n \n );\n};\n","import React, { useEffect } from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { useIsFetching, useIsMutating } from \"@tanstack/react-query\";\nimport Animated, { Easing, interpolateColor, useAnimatedStyle, useSharedValue, withTiming } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\n\nconst SIZE = 9;\nconst PADDING = 5;\n\nexport const ApplicationActivityIndicator = () => {\n const numberOfQueries = useIsFetching();\n const numberOfMutations = useIsMutating();\n const progress = useSharedValue(0);\n const { top, right } = useSafeAreaInsets();\n\n useEffect(() => {\n progress.value = withTiming(numberOfMutations > 0 || numberOfQueries > 0 ? 1 : 0, { easing: Easing.inOut(Easing.cubic) });\n }, [numberOfMutations, numberOfQueries]);\n\n const rStyle = useAnimatedStyle(() => {\n return {\n backgroundColor: interpolateColor(progress.value, [0, 1], [colors.LOGO_COLOR, \"#ffbe0b\"]),\n transform: [{ scale: progress.value }],\n };\n }, []);\n\n return ;\n};\n\nconst styles = StyleSheet.create({\n conainer: {\n width: SIZE,\n height: SIZE,\n borderRadius: SIZE / 2,\n backgroundColor: \"black\",\n position: \"absolute\",\n },\n});\n","import { useEffect } from \"react\";\nimport { Pressable, PressableProps, StyleSheet, ViewProps } from \"react-native\";\nimport Animated, { interpolate, useAnimatedStyle, useSharedValue, withTiming, Easing, WithTimingConfig } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\n\nexport const FAB_SIZE = 60;\nexport const FAB_BOTTOM_OFFSET = 30;\nexport const FAB_RIGHT_OFFSET = 10;\n\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n\nconst WITH_TIMING_CONFIG: WithTimingConfig = { easing: Easing.inOut(Easing.ease) };\n\nexport interface IBaseFab extends PressableProps {\n style?: ViewProps[\"style\"];\n}\n\nexport const BaseFab = ({ children, ...props }: IBaseFab) => {\n const progress = useSharedValue(0);\n const isPressActive = useSharedValue(0);\n\n useEffect(() => {\n progress.value = withTiming(1, WITH_TIMING_CONFIG);\n }, []);\n\n const rStyle = useAnimatedStyle(() => {\n if (isPressActive.value === 1) {\n return { transform: [{ scale: withTiming(0.9, WITH_TIMING_CONFIG) }] };\n }\n return {\n opacity: progress.value,\n transform: [{ scale: interpolate(progress.value, [0, 1], [0.9, 1]) }],\n };\n }, []);\n\n return (\n (isPressActive.value = 1)}\n onPressOut={() => (isPressActive.value = 0)}\n >\n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: \"absolute\",\n bottom: FAB_BOTTOM_OFFSET,\n right: FAB_RIGHT_OFFSET,\n width: FAB_SIZE,\n aspectRatio: 1,\n borderRadius: FAB_SIZE / 2,\n backgroundColor: colors.LOGO_COLOR,\n },\n});\n","import React from \"react\";\nimport { StyleSheet, Text, TextProps } from \"react-native\";\n\nimport { colors } from \"@/constants\";\n\nexport const BodyText = (props: TextProps) => {\n return ;\n};\n\nconst styles = StyleSheet.create({\n text: {\n color: colors.TEXT_COLOR,\n fontSize: 14,\n },\n});\n","import { Dimensions, Pressable, StyleSheet, View } from \"react-native\";\nimport React, { useCallback, useEffect, useRef } from \"react\";\nimport { Gesture, GestureDetector } from \"react-native-gesture-handler\";\nimport { useNavigation } from \"@react-navigation/native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport Animated, { WithSpringConfig, interpolateColor, runOnJS, useAnimatedStyle, useSharedValue, withSpring } from \"react-native-reanimated\";\n\nimport { Handle } from \"./BottomSheet/components\";\n\nconst { height: SCREEN_HEIGHT } = Dimensions.get(\"window\");\n\nconst BOTTOM_SHEET_HEIGHT = 0.9 * SCREEN_HEIGHT;\nconst BOTTOM_SHEET_BORDER_RADIUS = 16;\nconst BOTTOM_SHEET_SPRING_CONFG: WithSpringConfig = {\n overshootClamping: true,\n};\n\nconst AnimatedPressable = Animated.createAnimatedComponent(Pressable);\n\ninterface BottomSheetProps {\n children?: React.ReactNode;\n}\nexport const BottomSheet = ({ children }: BottomSheetProps) => {\n const navigation = useNavigation();\n const translationY = useSharedValue(BOTTOM_SHEET_HEIGHT);\n const translationYCtx = useSharedValue(0);\n const isLeavingScreen = useRef(false);\n const { bottom } = useSafeAreaInsets();\n\n const goBack = useCallback(() => {\n navigation.canGoBack() && navigation.goBack();\n }, [navigation]);\n\n const onBackdropPress = () => {\n if (isLeavingScreen.current) return;\n isLeavingScreen.current = true;\n translationY.value = withSpring(BOTTOM_SHEET_HEIGHT, BOTTOM_SHEET_SPRING_CONFG, () => {\n runOnJS(goBack)();\n });\n };\n\n const gesture = Gesture.Pan()\n .onStart(() => {\n translationYCtx.value = translationY.value;\n })\n .onChange((e) => {\n translationY.value = Math.max(0, translationYCtx.value + e.translationY);\n })\n .onEnd((e) => {\n const { velocityY } = e;\n let expand = true;\n if (translationY.value + 0.1 * velocityY > BOTTOM_SHEET_HEIGHT * 0.3) {\n expand = false;\n }\n\n translationY.value = withSpring(expand ? 0 : BOTTOM_SHEET_HEIGHT, BOTTOM_SHEET_SPRING_CONFG, (completed) => {\n if (completed && !expand) {\n runOnJS(goBack)();\n }\n });\n });\n\n useEffect(() => {\n translationY.value = withSpring(0, BOTTOM_SHEET_SPRING_CONFG);\n }, []);\n\n const rStyles = useAnimatedStyle(() => {\n return { transform: [{ translateY: translationY.value }], paddingBottom: bottom };\n }, []);\n\n const rBackdropStyles = useAnimatedStyle(() => {\n return {\n backgroundColor: interpolateColor(translationY.value, [0, BOTTOM_SHEET_HEIGHT], [\"rgba(0, 0, 0, 0.3)\", \"rgba(0, 0, 0, 0)\"]),\n };\n }, []);\n\n return (\n \n \n \n \n \n {children}\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: \"flex-end\",\n overflow: \"hidden\",\n },\n bottomsheetContainer: {\n height: BOTTOM_SHEET_HEIGHT,\n backgroundColor: \"white\",\n borderTopRightRadius: BOTTOM_SHEET_BORDER_RADIUS,\n borderTopLeftRadius: BOTTOM_SHEET_BORDER_RADIUS,\n },\n});\n","import { StyleSheet, View } from \"react-native\";\n\nconst HANDLE_WIDTH = 64;\nconst HANDLE_HEIGHT = 4;\nconst HANDLE_BORDER_RADIUS = 8;\nconst HANDLE_PADDING = 8;\nconst HANDLE_COLOR = \"#cbcbcb\";\n\nexport const Handle = () => {\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n paddingVertical: HANDLE_PADDING,\n alignItems: \"center\",\n },\n handle: {\n backgroundColor: HANDLE_COLOR,\n width: HANDLE_WIDTH,\n height: HANDLE_HEIGHT,\n borderRadius: HANDLE_BORDER_RADIUS,\n },\n});\n","export * from \"./Handle\";\n","import React from \"react\";\nimport { StyleSheet, View, ViewProps } from \"react-native\";\n\nimport { Row } from \"./Row\";\nimport { BodyText } from \"./BodyText\";\nimport { RatingBox } from \"./RatingBox\";\n\ninterface BranchRatings extends ViewProps {\n ratingCategoryList: { id: number; name: string; ratingAverage: number | null }[];\n}\n\nexport const BranchRatings: React.FC = ({ ratingCategoryList, ...props }) => {\n return (\n \n {ratingCategoryList.map((value) => {\n return (\n \n {value.name}\n \n \n );\n })}\n \n );\n};\n\nconst styles = StyleSheet.create({\n ratingContainer: {\n marginHorizontal: 10,\n alignItems: \"center\",\n flex: 1,\n },\n});\n","import React, { ComponentProps } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { colors, HEADER_ICON_SIZE } from \"@/constants\";\nimport { View } from \"react-native\";\n\ninterface ICheckmark extends Omit, \"name\"> {\n checked?: boolean;\n}\n\nconst SIZE = 12;\n\nexport const Checkmark = ({ checked, ...props }: ICheckmark) => {\n return (\n \n \n \n );\n};\n","import React, { ComponentProps } from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { Ionicons } from \"@expo/vector-icons\";\n\ninterface IChevronRight extends Omit, \"name\"> {}\n\nexport const ChevronRight = (props: IChevronRight) => {\n return ;\n};\n\nconst styles = StyleSheet.create({\n icon: {\n marginHorizontal: 5,\n },\n});\n","import Calendar from \"react-calendar\";\nimport \"react-calendar/dist/Calendar.css\";\nimport React, { useState } from \"react\";\nimport { Modal, Pressable, StyleSheet, View } from \"react-native\";\n\nimport { globalStyles } from \"@/constants\";\n\nimport { stringifyDate } from \"./DateInput/utils\";\nimport { DateInputProps } from \"./DateInput/types\";\nimport { DateInputContainer } from \"./DateInput/components\";\n\nexport const DateInput = ({ onDateChanged, ...props }: DateInputProps) => {\n const [isOpen, setIsOpen] = useState(false);\n\n return (\n setIsOpen(true)}>\n \n \n setIsOpen(false)} />\n \n {\n date && onDateChanged(stringifyDate(date as Date));\n }}\n />\n \n \n \n \n );\n};\n","import { StyleSheet, View } from \"react-native\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { colors } from \"@/constants\";\nimport { Touchable } from \"@/components/Touchable\";\nimport { BodyText } from \"@/components/BodyText\";\nimport { DateInputProps } from \"../types\";\n\ninterface DateInputContainerProps extends Omit {\n children: React.ReactNode;\n onPress: () => void;\n}\n\nexport const DateInputContainer = ({ onPress, noBorderBottom, placeholder, iconName, dateStr, children }: DateInputContainerProps) => {\n return (\n \n {children}\n \n \n {dateStr ? dateStr : placeholder}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n inputContainer: {\n flexDirection: \"row\",\n backgroundColor: colors.FORM_INPUT_BG,\n alignItems: \"center\",\n },\n input: {\n paddingVertical: 12,\n color: colors.FORM_INPUT,\n flex: 1,\n marginLeft: 15,\n borderBottomColor: \"#ccc\",\n },\n icon: {\n marginLeft: 15,\n },\n});\n","export * from \"./DateInputContainer\";\n","export const datifyString = (str?: string) => {\n return str ? new Date(str) : new Date();\n};\n","export * from \"./datifyString\";\nexport * from \"./stringifyDate\";\n","export const stringifyDate = (date: Date): string => {\n const year = date.getFullYear();\n const month = (1 + date.getMonth()).toString().padStart(2, \"0\");\n const day = date.getDate().toString().padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n};\n","import React, { ComponentProps } from \"react\";\nimport { ScrollView } from \"react-native\";\nimport { useDraggableScroll } from \"./DraggableScrollView/hooks\";\n\nexport const DraggableScrollView = React.forwardRef>(function DraggableScrollView(props, ref) {\n const { refs } = useDraggableScroll({\n outerRef: ref,\n cursor: \"grab\", // optional, default\n });\n\n return ;\n});\n","export * from \"./useDraggableScroll\";\n","import type * as React from \"react\";\nimport { useEffect, useRef, useMemo, ForwardedRef } from \"react\";\nimport { Platform, findNodeHandle } from \"react-native\";\nimport type { ScrollView } from \"react-native\";\n\ntype Props = {\n cursor?: string;\n outerRef?: ForwardedRef;\n};\n\nexport function useDraggableScroll({ outerRef, cursor = \"grab\" }: Props = {}) {\n const ref = useRef(null);\n\n useEffect(() => {\n if (Platform.OS !== \"web\" || !ref.current) {\n return;\n }\n const slider = findNodeHandle(ref.current) as unknown as HTMLDivElement;\n if (!slider) {\n return;\n }\n let isDragging = false;\n let isMouseDown = false;\n let startX = 0;\n let scrollLeft = 0;\n\n const mouseDown = (e: MouseEvent) => {\n isMouseDown = true;\n startX = e.pageX - slider.offsetLeft;\n scrollLeft = slider.scrollLeft;\n\n slider.style.cursor = cursor;\n };\n\n const mouseUp = () => {\n if (isDragging) slider.addEventListener(\"click\", (e) => e.stopPropagation(), { once: true });\n\n isMouseDown = false;\n isDragging = false;\n slider.style.cursor = \"default\";\n };\n\n const mouseMove = (e: MouseEvent) => {\n if (!isMouseDown) return;\n\n // Require n pixels momement before start of drag (3 in this case )\n const x = e.pageX - slider.offsetLeft;\n if (Math.abs(x - startX) < 3) return;\n\n isDragging = true;\n e.preventDefault();\n const walk = x - startX;\n slider.scrollLeft = scrollLeft - walk;\n };\n\n slider.addEventListener(\"mousedown\", mouseDown);\n window.addEventListener(\"mouseup\", mouseUp);\n window.addEventListener(\"mousemove\", mouseMove);\n\n return () => {\n slider.removeEventListener(\"mousedown\", mouseDown);\n window.removeEventListener(\"mouseup\", mouseUp);\n window.removeEventListener(\"mousemove\", mouseMove);\n };\n }, [cursor]);\n\n const refs = useMemo(() => mergeRefs(outerRef ? [ref, outerRef] : [ref]), [ref, outerRef]);\n\n return {\n refs,\n };\n}\n\nfunction mergeRefs(refs: Array | React.LegacyRef>): React.RefCallback {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as React.MutableRefObject).current = value;\n }\n });\n };\n}\n","import AnimatedLottieView from \"lottie-react-native\";\nimport { StyleSheet, TouchableOpacity, View } from \"react-native\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport { globalStyles } from \"@/constants\";\n\nimport { BodyText } from \"./BodyText\";\nimport { useWindowSize } from \"@/hooks\";\n\ninterface IErrorView {\n onReloadPressed: () => void;\n error: unknown;\n}\n\n/**\n Shows a reload button which trigers the onReload passed callback\n */\nexport const ErrorView: React.FC = ({ onReloadPressed, error }) => {\n const animation = useRef(null);\n const [isDisabled, setIsDisabled] = useState(false);\n const { windowWidth } = useWindowSize();\n\n const onPressHandler = useCallback(() => {\n setIsDisabled(true);\n animation.current?.play();\n }, [onReloadPressed]);\n\n const onAnimationFinish = useCallback(() => {\n onReloadPressed();\n setIsDisabled(false);\n }, []);\n\n let errorMessage = \"An unknown error occured\";\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return (\n \n {errorMessage}\n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n errorText: {\n fontSize: 16,\n marginHorizontal: 20,\n marginBottom: 10,\n textAlign: \"center\",\n fontWeight: \"bold\",\n },\n});\n","import { StyleSheet } from \"react-native\";\nimport React, { useState, useCallback, useEffect } from \"react\";\n\nimport { colors } from \"@/constants\";\n\nimport { LoaderOverlay } from \"./LoaderOverlay\";\nimport { Image, ImageProps } from \"expo-image\";\n\nexport interface ExpandedImageProps extends Omit {}\n\nexport const ExpandedImage = (props: ExpandedImageProps) => {\n const [loadedSource, setLoadedSource] = useState(null);\n const [source, setSource] = useState(props.source);\n\n const onLoad: NonNullable = useCallback(() => {\n setLoadedSource(source);\n }, [source]);\n\n const onError: NonNullable = useCallback(() => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n setSource(require(\"@/assets/no_photo.png\"));\n }, []);\n\n useEffect(() => {\n setSource(props.source);\n }, [props.source]);\n\n return (\n <>\n {loadedSource !== source ? : null}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n image: {\n width: \"100%\",\n height: \"100%\",\n },\n});\n","import React, { useEffect } from \"react\";\nimport { StyleSheet, ViewProps } from \"react-native\";\nimport Animated, { useAnimatedStyle, useSharedValue, withRepeat, withTiming } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\n\nconst FromOpacity = 1;\nconst ToOpacity = 0.2;\n\nconst LogoColorHSLArr = colors.LOGO_COLOR.match(/[\\d]{2,3}/g);\nlet red = \"255\";\nlet green = \"0\";\nlet blue = \"0\";\nif (LogoColorHSLArr) {\n red = LogoColorHSLArr[0] ?? red;\n green = LogoColorHSLArr[1] ?? green;\n blue = LogoColorHSLArr[2] ?? blue;\n}\n\nexport const FlashingBorderBox = ({ children, ...props }: ViewProps) => {\n const animationValue = useSharedValue(FromOpacity);\n\n const animatedStyles = useAnimatedStyle(() => {\n return {\n borderColor: `rgba(${red}, ${green}, ${blue}, ${animationValue.value})`,\n };\n });\n\n useEffect(() => {\n animationValue.value = withRepeat(\n withTiming(ToOpacity, {\n duration: 1500,\n }),\n -1,\n true\n );\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderWidth: 2,\n },\n});\n","import { ComponentProps } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { StyleSheet, ColorValue } from \"react-native\";\n\nimport { BaseFab, IBaseFab } from \"./BaseFab\";\n\nexport interface IFloatingActionButton extends IBaseFab {\n /**\n * name of icon from ionicons set\n */\n iconName: ComponentProps[\"name\"];\n /**\n * size of icon (defaultValue: 38)\n */\n iconSize?: number;\n /**\n * color of icon (defuaultValue: 'white')\n */\n iconColor?: ColorValue;\n}\n\nexport const FloatingActionButton = ({ iconName, iconSize, iconColor, ...props }: IFloatingActionButton) => {\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n});\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, TouchableOpacity, TouchableOpacityProps } from \"react-native\";\n\nconst horizontalHitSlop = 10;\nconst verticalHitSlop = 15;\n\nexport type HeaderIconContainerProps = TouchableOpacityProps;\n\nexport const HeaderIconContainer: React.FC = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 5,\n },\n});\n","import React, { useRef, useState } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { StyleSheet, View, TextInputProps, TextInput as RnTextInput } from \"react-native\";\n\nimport { IconName } from \"@/types\";\nimport { colors } from \"@/constants\";\n\nimport { Row } from \"./Row\";\nimport { BodyText } from \"./BodyText\";\nimport { TextInput } from \"./TextInput\";\n\nexport interface InputProps extends TextInputProps {\n iconName: IconName;\n iconNameFocused: IconName;\n errorMessage?: string | undefined;\n noBorderBottom?: boolean;\n leadingComponent?: React.ReactNode;\n trailingComponent?: React.ReactNode;\n}\n\nexport const Input: React.FC = ({\n iconName,\n iconNameFocused,\n errorMessage,\n noBorderBottom,\n leadingComponent,\n trailingComponent,\n ...props\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n const textRef = useRef(null);\n\n return (\n \n \n \n \n {leadingComponent ? leadingComponent : null}\n setIsFocused(true)}\n onBlur={(e) => {\n if (props.onBlur && props.onBlur) {\n props.onBlur(e);\n }\n setIsFocused(false);\n }}\n />\n {trailingComponent ? trailingComponent : null}\n \n {errorMessage ? (\n \n textRef.current?.focus()} style={styles.error}>\n {errorMessage}\n \n \n ) : null}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: \"center\",\n backgroundColor: colors.FORM_INPUT_BG,\n paddingHorizontal: 10,\n },\n inputContainer: {\n alignItems: \"center\",\n },\n input: {\n paddingVertical: 12,\n color: colors.FORM_INPUT,\n flex: 1,\n },\n input_and_error_container: {\n flexDirection: \"column\",\n flex: 1,\n borderBottomColor: \"#ccc\",\n marginLeft: 15,\n },\n error: {\n color: colors.FORM_ERROR_MSG,\n paddingHorizontal: 10,\n fontSize: 12,\n opacity: 0.8,\n marginBottom: 5,\n },\n});\n","import React from \"react\";\nimport { StyleSheet, PressableProps } from \"react-native\";\n\nimport { BodyText } from \"./BodyText\";\nimport { Checkmark } from \"./Checkmark\";\nimport { Touchable } from \"./Touchable\";\n\ninterface IInputRadio extends PressableProps {\n onChange: (newValue: boolean) => void;\n value: boolean;\n children?: React.ReactNode;\n}\n\nexport const InputRadio: React.FC = ({ onChange, value, children }) => {\n return (\n onChange(!value)} style={styles.container}>\n \n\n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 10,\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: \"white\",\n },\n containingText: {\n flexWrap: \"wrap\",\n flex: 1,\n marginLeft: 5,\n },\n});\n","import React from \"react\";\nimport { ViewProps, ActivityIndicator, View } from \"react-native\";\n\nimport { colors } from \"@/constants\";\n\ninterface LoaderOverlay extends ViewProps {\n loaderColor?: string;\n loaderSize?: \"small\" | \"large\";\n}\n\nexport const LoaderOverlay: React.FC = ({ loaderColor, loaderSize, ...props }) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\nimport { View, ViewProps } from \"react-native\";\n\nimport { globalStyles } from \"@/constants\";\n\nimport { ActivityIndicator } from \"./ActivityIndicator\";\n\nexport const LoadingView = (props: ViewProps) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport AnimatedLottieView from \"lottie-react-native\";\n\nimport { globalStyles } from \"@/constants\";\n\nimport { Row } from \"./Row\";\nimport { BodyText } from \"./BodyText\";\nimport { RButton } from \"./RButton\";\n\ntype NoContentProps = { text: string; ctaText?: string; onCtaPress?: () => void };\n\nexport const NoContent = ({ text, ...props }: NoContentProps) => {\n return (\n \n \n {text}\n \n \n \n \n {props.ctaText && props.onCtaPress ? (\n \n ) : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n txt: {\n textAlign: \"center\",\n fontSize: 16,\n fontWeight: \"bold\",\n marginBottom: 20,\n color: \"#666\",\n flex: 1,\n paddingHorizontal: 10,\n },\n btn: {\n marginTop: 16,\n },\n});\n","import { StyleSheet } from \"react-native\";\nimport React, { ComponentProps } from \"react\";\n\nimport { Section } from \"./Section\";\nimport { BodyText } from \"./BodyText\";\n\ninterface INotice extends ComponentProps {\n children: string;\n}\n\nexport const Notice = ({ children, ...props }: INotice) => {\n return (\n
\n {children}\n
\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n paddingVertical: 7,\n paddingHorizontal: 20,\n flexDirection: \"row\",\n backgroundColor: \"transparent\",\n },\n});\n","import { StyleSheet } from \"react-native\";\nimport React, { useCallback, useEffect } from \"react\";\nimport Animated, { interpolate, interpolateColor, useAnimatedStyle, useSharedValue, withSpring } from \"react-native-reanimated\";\nimport { CodeField, Cursor, RenderCellOptions, useBlurOnFulfill, useClearByFocusCell, CodeFieldProps } from \"react-native-confirmation-code-field\";\n\nimport { CONFIG } from \"@/constants\";\n\nconst CELL_SIZE = 30;\nconst toColor = \"#000\";\nconst CELL_COUNT = CONFIG._confirmationCodeLength;\n\ninterface IOneTimePasswordInput extends Omit {\n setValue: (text: string) => void;\n}\n\nexport const OneTimePasswordInput = ({ value, setValue, ...passedProps }: IOneTimePasswordInput) => {\n const animatedValue = useSharedValue(0);\n const ref = useBlurOnFulfill({ value, cellCount: CELL_COUNT });\n const [props, getCellOnLayoutHandler] = useClearByFocusCell({\n value,\n setValue,\n });\n\n const renderCell: CodeFieldProps[\"renderCell\"] = useCallback(\n (options) => {\n return ;\n },\n [animatedValue, getCellOnLayoutHandler]\n );\n\n return (\n \n );\n};\n\ninterface ICell extends RenderCellOptions {\n getCellOnLayoutHandler: ReturnType[\"1\"];\n animatedValue: Animated.SharedValue;\n}\n\nconst interpolateInput = [0, 1];\n\nconst Cell = ({ index, isFocused, symbol, getCellOnLayoutHandler, animatedValue }: ICell) => {\n const rViewStyles = useAnimatedStyle(() => {\n const color = interpolate(animatedValue.value, interpolateInput, [255, 0]);\n const scale = interpolate(animatedValue.value, interpolateInput, [1, 0.3]);\n const borderRadius = interpolate(animatedValue.value, interpolateInput, [0, 0.5]);\n return {\n backgroundColor: `rgb(${color}, ${color}, ${color})`,\n transform: [{ scale: scale }],\n borderRadius: borderRadius * CELL_SIZE,\n };\n });\n\n const rTextStyle = useAnimatedStyle(() => {\n const color = interpolateColor(animatedValue.value, interpolateInput, [\"black\", toColor]);\n\n return {\n color: color,\n };\n });\n\n useEffect(() => {\n if (index === CELL_COUNT - 1) {\n animatedValue.value = withSpring(!isFocused && symbol ? 1 : 0);\n }\n });\n\n return (\n \n {symbol || (isFocused ? : null)}\n \n );\n};\n\nconst styles = StyleSheet.create({\n cell: {\n width: CELL_SIZE,\n height: CELL_SIZE,\n borderWidth: 2,\n borderColor: \"#888\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"#eee\",\n shadowOffset: { width: 0, height: 5 },\n shadowColor: \"black\",\n shadowOpacity: 0.1,\n shadowRadius: 3,\n elevation: 2,\n },\n cellText: {\n lineHeight: 26,\n fontSize: 18,\n textAlign: \"center\",\n },\n focusCell: {\n borderColor: \"#000\",\n },\n});\n","import { View, ViewProps } from \"react-native\";\nimport { useSharedValue } from \"react-native-reanimated\";\nimport React, { ForwardedRef, useCallback, useImperativeHandle, useRef } from \"react\";\nimport Carousel, { ICarouselInstance, TCarouselProps } from \"react-native-reanimated-carousel\";\n\nimport { Pagination } from \"./Pagination\";\n\ninterface PaginatedCarouselMethods {\n scrollToIndex: (index: number) => void;\n}\n\ntype PaginatedCarouselProps = TCarouselProps & {\n containerStyle?: ViewProps[\"style\"];\n};\n\nfunction _PaginatedCarousel(props: PaginatedCarouselProps, ref: ForwardedRef) {\n const animatedValue = useSharedValue(0);\n const carouselRef = useRef(null);\n\n const scrollToIndex = useCallback((index: number, animated = true) => {\n const currentIndex = carouselRef.current?.getCurrentIndex();\n if (currentIndex !== undefined) {\n carouselRef.current?.scrollTo({\n count: index - currentIndex,\n animated: animated,\n });\n }\n }, []);\n\n useImperativeHandle(ref, () => ({ scrollToIndex }), [scrollToIndex]);\n\n const onProgressChange = useCallback((offsetProgress: number) => (animatedValue.value = offsetProgress), []);\n return (\n \n \n \n \n );\n}\n\nexport const PaginatedCarousel = React.forwardRef(_PaginatedCarousel) as (\n props: PaginatedCarouselProps & { ref?: ForwardedRef }\n) => ReturnType;\n","import React from \"react\";\nimport { Pressable, StyleSheet, View } from \"react-native\";\nimport Animated, { Extrapolate, SharedValue, interpolate, useAnimatedStyle } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\nimport { useWindowSize } from \"@/hooks\";\n\nexport const GAP = 12;\nexport const PADDING_HORIZONTAL = 4;\nexport const PADDING_VERTICAL = 10;\nexport const DOT_SIZE = 8;\n\ninterface IPagination {\n animationValue: SharedValue;\n onItemPress: (index: number) => void;\n length: number;\n}\n\nexport const Pagination: React.FC = ({ animationValue, onItemPress, length }) => {\n return (\n \n {Array(length)\n .fill(0)\n .map((_, index) => (\n \n ))}\n \n );\n};\n\ninterface PaginationItem {\n length: number;\n index: number;\n animationValue: SharedValue;\n onItemPress: (index: number) => void;\n}\n\nconst PaginationItem: React.FC = ({ animationValue, index, length, onItemPress }) => {\n const { windowWidth } = useWindowSize();\n const rStyles = useAnimatedStyle(() => {\n if (animationValue.value <= 0) {\n const inputRange = [(index - 1) * windowWidth, index * windowWidth, (index + 1) * windowWidth];\n const scale = interpolate(-animationValue.value, inputRange, [0.5, 1, 0.5], Extrapolate.CLAMP);\n const opacity = interpolate(-animationValue.value, inputRange, [0.6, 1, 0.6], Extrapolate.CLAMP);\n return {\n transform: [{ scale: scale }],\n opacity: opacity,\n };\n } else {\n const inputRange = [(length - index - 1) * windowWidth, (length - index) * windowWidth, (length - index + 1) * windowWidth];\n const scale = interpolate(animationValue.value, inputRange, [0.5, 1, 0.5], Extrapolate.CLAMP);\n const opacity = interpolate(animationValue.value, inputRange, [0.6, 1, 0.6], Extrapolate.CLAMP);\n return {\n transform: [{ scale: scale }],\n opacity: opacity,\n };\n }\n }, [length, index]);\n\n return (\n onItemPress(index)}>\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n paginationContainer: {\n flexDirection: \"row\",\n backgroundColor: colors.LOGO_COLOR,\n justifyContent: \"center\",\n paddingHorizontal: PADDING_HORIZONTAL,\n paddingVertical: PADDING_VERTICAL,\n flexWrap: \"wrap\",\n gap: GAP,\n },\n dotContainer: {\n height: DOT_SIZE,\n aspectRatio: 1,\n backgroundColor: \"white\",\n borderRadius: DOT_SIZE / 2,\n },\n});\n\nexport function calculatePaginationHeight(viewWidth: number, itemLength: number) {\n const itemWidth = DOT_SIZE + GAP; // Width of a dot plus the gap after it\n const effectiveWidth = viewWidth - PADDING_HORIZONTAL * 2; // Effective width inside the container\n const itemsPerRow = Math.floor((effectiveWidth + GAP) / itemWidth); // Calculate how many items can fit in a row, including one less gap\n const numberOfRows = Math.ceil(itemLength / itemsPerRow); // Calculate the total number of rows needed\n const totalVerticalPadding = PADDING_VERTICAL * 2; // Total vertical padding (top and bottom)\n const totalGapHeight = Math.max(0, (numberOfRows - 1) * GAP); // Total height of gaps between rows, avoiding negative values\n const totalDotsHeight = numberOfRows * DOT_SIZE; // Total height of the dots\n\n return totalVerticalPadding + totalGapHeight + totalDotsHeight; // Sum up everything to get the total height\n}\n","import React, { ComponentProps, useCallback, useState } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { Input } from \"./Input\";\nimport { colors, HEADER_ICON_SIZE } from \"@/constants\";\nimport { Touchable } from \"./Touchable\";\nimport { StyleSheet } from \"react-native\";\n\ninterface IPasswordInput\n extends Omit<\n ComponentProps,\n \"autoCapitalize\" | \"iconName\" | \"iconNameFocused\" | \"textContentType\" | \"secureTextEntry\" | \"trailingComponent\"\n > {}\n\nexport const PasswordInput = (props: IPasswordInput) => {\n const [hidePassword, setHidePassword] = useState(true);\n\n const onEyePress = useCallback(() => setHidePassword((prev) => !prev), []);\n\n const trailingComponents = (\n \n \n \n );\n\n return (\n \n );\n};\n\nconst styles = StyleSheet.create({\n trailing: {\n marginHorizontal: 10,\n },\n});\n","import { StyleSheet } from \"react-native\";\nimport React, { useCallback } from \"react\";\n\nimport { formatPhoneNumber } from \"@/utils\";\n\nimport { BodyText } from \"./BodyText\";\nimport { Input, InputProps } from \"./Input\";\n\ninterface PhoneInputProps extends Omit {\n phoneExtension: `+${number}`;\n}\n\nexport const PhoneInput: React.FC = ({ phoneExtension, onChangeText, ...props }) => {\n const onChangeTextHandler = useCallback((text: string) => {\n if (onChangeText) {\n onChangeText(formatPhoneNumber(text));\n }\n }, []);\n return (\n {phoneExtension}}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n leading: {\n marginRight: 10,\n },\n});\n","import { FloatingArrow, arrow, autoUpdate, flip, offset, shift, useClick, useFloating, useInteractions } from \"@floating-ui/react\";\nimport { useRef, useState } from \"react\";\nimport { Modal, Pressable, View } from \"react-native\";\n\ninterface PopoverProps {\n text: string;\n children: React.ReactNode;\n}\n\nexport const Popover = ({ children, text }: PopoverProps) => {\n const arrowRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n middleware: [offset(12), flip(), shift(), arrow({ element: arrowRef })],\n whileElementsMounted: autoUpdate,\n });\n\n const click = useClick(context);\n const { getReferenceProps, getFloatingProps } = useInteractions([click]);\n\n return (\n <>\n
\n {children}\n
\n\n \n setIsOpen(false)} style={{ flex: 1, backgroundColor: \"rgba(200, 200, 200, 0.2)\" }}>\n
\n \n {text}\n
\n
\n
\n \n );\n};\n","import React from \"react\";\n// React Native imports\nimport { StyleProp, StyleSheet, TextStyle, View } from \"react-native\";\nimport { colors } from \"@/constants\";\nimport { BodyText } from \"./BodyText\";\n\ninterface IPriceAndPriceOld {\n currencyType: string | null;\n price: number;\n priceOld: number | null;\n priceStyles?: StyleProp;\n priceOldStyles?: StyleProp;\n extra?: boolean;\n}\n\nexport const PriceAndPriceOld = ({ price, priceOld, priceStyles, priceOldStyles, currencyType, extra }: IPriceAndPriceOld) => {\n return (\n \n {priceOld && priceOld !== price ? (\n {`${extra ? \"+\" : \"\"}${priceOld?.toFixed(2)} ${currencyType}`}\n ) : null}\n {price ? {`${extra ? \"+\" : \"\"}${price?.toFixed(2)} ${currencyType}`} : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n price: {\n fontWeight: \"bold\",\n color: colors.LOGO_COLOR,\n },\n priceOld: {\n textDecorationLine: \"line-through\",\n color: \"gray\",\n },\n});\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { globalStyles } from \"@/constants\";\n\nimport { ReloadButton } from \"./ReloadButton\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\n\ninterface IQueryStatusChecker {\n children: React.ReactNode;\n error: ReturnType[\"error\"];\n status: ReturnType[\"status\"];\n refetch: ReturnType[\"refetch\"];\n}\n\nexport const QueryStatusChecker = ({ status, refetch, children, error }: IQueryStatusChecker) => {\n if (status === \"error\") {\n let errorMessage = \"An unknown error occured\";\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n return ;\n }\n\n if (status === \"loading\") {\n return (\n \n \n \n );\n }\n\n return <>{children};\n};\n","import React from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { BarIndicator } from \"react-native-indicators\";\nimport { StyleSheet, TouchableOpacity, TouchableOpacityProps, TextProps, View } from \"react-native\";\n\nimport { IconName } from \"@/types\";\nimport { colors } from \"@/constants\";\n\nimport { BodyText } from \"./BodyText\";\n\ninterface IRButton extends TouchableOpacityProps {\n txtProps?: TextProps;\n textValue: string;\n showLoading?: boolean;\n iconName?: IconName;\n}\n\nexport const RButton: React.FC = ({ txtProps, textValue, showLoading, iconName, ...props }) => {\n return (\n \n {showLoading ? (\n \n ) : (\n \n {iconName ? : null}\n \n {textValue}\n \n \n )}\n \n );\n};\n\nconst styles = StyleSheet.create({\n btn: {\n backgroundColor: colors.LOGO_COLOR,\n paddingVertical: 8,\n paddingHorizontal: 25,\n borderRadius: 20,\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"row\",\n marginHorizontal: 30,\n },\n btnContent: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n btnTxt: {\n fontSize: 16,\n color: \"white\",\n textAlign: \"center\",\n },\n icon: {\n marginRight: 10,\n },\n});\n","// React Native imports\nimport React from \"react\";\nimport { StyleProp, TextStyle, View, ViewStyle } from \"react-native\";\n// Expo imports\nimport { Ionicons } from \"@expo/vector-icons\";\nimport { colors } from \"@/constants\";\n\ninterface RadioIcon {\n activeColor?: string;\n inActiveColor?: string;\n isActive?: boolean;\n size?: number;\n iconStyle?: StyleProp;\n containerStyle?: StyleProp;\n}\n\nconst myActiveColor = colors.LOGO_COLOR;\nconst myInActiveColor = \"gray\";\n\nexport const RadioIcon: React.FC = ({ activeColor, containerStyle, iconStyle, inActiveColor, isActive, size }) => {\n const iconName = isActive ? \"radio-button-on-outline\" : \"radio-button-off-outline\";\n\n const color = isActive ? activeColor ?? myActiveColor : inActiveColor ?? myInActiveColor;\n\n return (\n \n \n \n );\n};\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, ViewProps } from \"react-native\";\nimport { BodyText } from \"./BodyText\";\nimport { Row } from \"./Row\";\n// Components imports\n\ninterface RatingBox extends ViewProps {\n ratingAverage: number | null;\n}\n\nexport const RATING_BOX_SIZE = 30;\n\nexport const RatingBox: React.FC = ({ ratingAverage, ...props }) => {\n const ratingColor = mapRatingToColor(ratingAverage);\n\n let ratingText = \"-\";\n\n if (ratingAverage) {\n ratingText = (ratingAverage === 10 ? ratingAverage : ratingAverage.toFixed(1)).toString();\n }\n\n return (\n \n \n {ratingText}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n ratingContainer: {\n borderRadius: 5,\n alignItems: \"center\",\n justifyContent: \"center\",\n width: RATING_BOX_SIZE,\n aspectRatio: 1,\n borderWidth: 1,\n },\n ratingTxt: {\n flex: 1,\n color: \"white\",\n fontWeight: \"bold\",\n textAlign: \"center\",\n },\n});\n\nexport function mapRatingToColor(score: number | null): string | undefined {\n if (!score) {\n return undefined;\n }\n\n if (score >= 9.5) {\n return \"#009405\";\n } else if (score >= 9) {\n return \"#00ad00\";\n } else if (score >= 8.5) {\n return \"#45c538\";\n } else if (score >= 8) {\n return \"#6dc530\";\n } else if (score >= 7.5) {\n return \"#a5c530\";\n } else if (score >= 7) {\n return \"#bbc72e\";\n } else if (score >= 6.5) {\n return \"#d6d036\";\n } else if (score >= 6) {\n return \"#e9c90f\";\n } else if (score >= 5.5) {\n return \"#ffba04\";\n } else if (score >= 5) {\n return \"#ffa004\";\n } else if (score >= 4.5) {\n return \"#f46f02\";\n } else if (score >= 4) {\n return \"#ec6102\";\n } else {\n return \"#de0600\";\n }\n}\n","// React Native imports\nimport { StyleSheet, TouchableOpacity, View } from \"react-native\";\nimport React, { useCallback, useRef, useState } from \"react\";\n// Constants imports\nimport { globalStyles } from \"@/constants\";\n// Components imports\nimport { BodyText } from \"./BodyText\";\nimport AnimatedLottieView from \"lottie-react-native\";\nimport { useWindowSize } from \"@/hooks\";\n\ninterface IReloadButton {\n onReloadPressed: () => void;\n errorMessage: string;\n}\n\n/**\n Shows a reload button which trigers the onReload passed callback\n */\nexport const ReloadButton: React.FC = ({ onReloadPressed, errorMessage }) => {\n const { windowWidth } = useWindowSize();\n const animation = useRef(null);\n const [isDisabled, setIsDisabled] = useState(false);\n\n const onPressHandler = useCallback(() => {\n setIsDisabled(true);\n animation.current?.play();\n }, [onReloadPressed]);\n\n const onAnimationFinish = useCallback(() => {\n onReloadPressed();\n setIsDisabled(false);\n }, []);\n\n return (\n \n {errorMessage}\n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n text: {\n fontSize: 16,\n marginHorizontal: 20,\n marginBottom: 10,\n textAlign: \"center\",\n fontWeight: \"bold\",\n },\n});\n","import { useTranslation } from \"react-i18next\";\nimport useCountDown from \"react-countdown-hook\";\nimport React, { useCallback, useEffect, useImperativeHandle } from \"react\";\n\nimport { colors } from \"@/constants\";\n\nimport { RButton } from \"./RButton\";\n\ninterface IResendButton {\n isResending: boolean;\n onResend: () => void;\n}\n\ninterface IResendButtonMethods {\n resetTime: () => void;\n}\n\nconst msToMinutesAndSeconds = (millis: number) => {\n const minutes = Math.floor(millis / 60000);\n const seconds = parseInt(((millis % 60000) / 1000).toFixed(0));\n return minutes + \":\" + (seconds < 10 ? \"0\" : \"\") + seconds;\n};\n\nconst initialTime = 180 * 1000;\nconst interval = 1000;\n\nexport const ResendButton = React.forwardRef(({ isResending, onResend }, forwardefRef) => {\n const { t } = useTranslation();\n const [ms, { start }] = useCountDown(initialTime, interval);\n\n const resetTime = useCallback(() => start(initialTime), []);\n\n useImperativeHandle(forwardefRef, () => ({ resetTime }), [resetTime]);\n\n useEffect(() => {\n start();\n }, []);\n\n const isDisabled = Boolean(ms);\n const textValue = ms ? `(${msToMinutesAndSeconds(ms)}) ${t(\"SIGN_UP_RESEND_CODE\")}` : t(\"SIGN_UP_RESEND_CODE\");\n\n return (\n \n );\n});\n","import React from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport { LinearGradient } from \"expo-linear-gradient\";\n\nimport { BodyText } from \"./BodyText\";\n\ninterface IRibbon {\n children: string;\n}\n\nexport const Ribbon = ({ children }: IRibbon) => {\n return (\n \n \n \n {children}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n ribbon: {\n transform: [{ rotate: \"45deg\" }],\n paddingVertical: 6,\n width: \"200%\",\n opacity: 0.7,\n },\n ribbonText: {\n color: \"white\",\n fontWeight: \"700\",\n textAlign: \"center\",\n textTransform: \"capitalize\",\n },\n gradient: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n },\n ribbonContainer: {\n position: \"absolute\",\n right: 0,\n top: 0,\n width: 75,\n height: 75,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n});\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, View, ViewProps } from \"react-native\";\n\nexport const Row: React.FC = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n },\n});\n","import { globalStyles } from \"@/constants\";\nimport { SafeAreaView, SafeAreaViewProps } from \"react-native-safe-area-context\";\n\nexport const Screen = (props: SafeAreaViewProps) => (\n \n);\n","import React, { useCallback, useRef, useMemo, useImperativeHandle, ComponentRef } from \"react\";\nimport {\n View,\n TouchableOpacity,\n StyleSheet,\n TextInputProps,\n StyleProp,\n ViewStyle,\n TextStyle,\n LayoutChangeEvent,\n useWindowDimensions,\n Platform,\n} from \"react-native\";\nimport Animated, { useAnimatedStyle, useSharedValue, withSpring, Easing, withTiming } from \"react-native-reanimated\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { BodyText } from \"./BodyText\";\nimport { TextInput } from \"./TextInput\";\n\nconst IS_ANDROID = Platform.OS === \"android\";\n\nexport const springConfig = {\n stiffness: 1000,\n damping: 500,\n mass: 3,\n overshootClamping: true,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n};\n\nexport const timingConfig = {\n duration: 250,\n easing: Easing.bezier(0.25, 0.1, 0.25, 1),\n};\n\nconst hitSlop = {\n top: 15,\n bottom: 15,\n left: 15,\n right: 15,\n};\n\nconst TextInputTheme = {\n light: {\n backgroundColor: \"transparent\",\n placeholderColor: \"#8e8e93\",\n textInputBackground: \"rgba(142,142,147,0.12)\",\n textColor: \"black\",\n selectionColor: \"#2979ff\",\n clearIconColor: \"#c7c7cc\",\n searchIconColor: \"#8e8e93\",\n textButtonColor: \"#2979ff\",\n },\n};\n\ntype CustomTextInputProps = Omit;\n\nexport type InputThemeType = {\n backgroundColor?: string;\n placeholderColor?: string;\n textInputBackground?: string;\n textColor?: string;\n selectionColor?: string;\n clearIconColor?: string;\n searchIconColor?: string;\n textButtonColor?: string;\n};\n\ninterface SearchBarProps extends CustomTextInputProps {\n containerStyle?: StyleProp;\n height?: number;\n borderRadius?: number;\n textInputStyle?: StyleProp;\n cancelButton?: boolean;\n cancelTitle?: string;\n cancelTitleStyle?: StyleProp;\n theme?: keyof typeof TextInputTheme;\n isDarkTheme?: boolean;\n onFocus?: () => void;\n onBlur?: () => void;\n onSubmitEditing?: () => void;\n onChangeText?: (value: string) => void;\n clearIcon?: React.ReactNode;\n searchIcon?: React.ReactNode;\n}\n\nfunction SearchBarComponent(props: SearchBarProps, ref: React.Ref) {\n const {\n containerStyle,\n height,\n borderRadius,\n textInputStyle,\n cancelButton,\n cancelTitle,\n cancelTitleStyle,\n theme,\n isDarkTheme,\n onFocus,\n onBlur,\n onSubmitEditing,\n onChangeText,\n clearIcon,\n searchIcon,\n ...otherProps\n } = props;\n const refInput = useRef>(null);\n const isFocus = useSharedValue(false);\n const clearButton = useSharedValue((props.value?.length as number) > 0);\n const cancelButtonWidth = useSharedValue(40);\n const dimensions = useWindowDimensions();\n\n const themeStyle = useMemo(\n () => ({\n ...TextInputTheme[theme ?? \"light\"],\n }),\n [theme, isDarkTheme]\n );\n\n const onCancel = useCallback(() => {\n onChangeText && onChangeText(\"\");\n refInput.current?.blur();\n }, [refInput]);\n\n const onCancelLayout = useCallback(\n (event: LayoutChangeEvent) => {\n cancelButtonWidth.value = event.nativeEvent.layout.width;\n },\n [cancelButtonWidth]\n );\n\n const onClear = useCallback(() => {\n refInput.current?.clear();\n clearButton.value = false;\n onChangeText?.(\"\");\n }, [refInput, clearButton, onChangeText]);\n\n const onTextInputFocus = useCallback(() => {\n isFocus.value = true;\n onFocus?.();\n }, [isFocus, onFocus]);\n\n const onTextInputBlur = useCallback(() => {\n isFocus.value = false;\n onBlur?.();\n }, [isFocus, onBlur]);\n\n const onTextInputSubmitEditing = useCallback(() => {\n isFocus.value = false;\n onSubmitEditing?.();\n }, [isFocus, onSubmitEditing]);\n\n const onChangeTextInput = useCallback(\n (text: string) => {\n onChangeText?.(text);\n if (text.length > 0) {\n clearButton.value = true;\n } else {\n clearButton.value = false;\n }\n },\n [clearButton, onChangeText]\n );\n\n useImperativeHandle(ref, () => ({\n clear: () => {\n onClear();\n },\n focus: () => {\n refInput.current?.focus();\n },\n blur: () => {\n refInput.current?.blur();\n },\n }));\n\n const inputStyle = useAnimatedStyle(() => {\n if (!cancelButton) {\n return {};\n }\n\n return {\n marginRight: withSpring(isFocus.value ? cancelButtonWidth.value + 8 : 0, springConfig),\n };\n });\n\n const clearButtonStyle = useAnimatedStyle(() => {\n const isShowClearButton = isFocus.value && clearButton.value;\n\n return {\n opacity: withTiming(isShowClearButton ? 1 : 0, timingConfig),\n transform: [{ scale: withTiming(isShowClearButton ? 1 : 0, timingConfig) }],\n };\n });\n\n const textStyle = useAnimatedStyle(() => {\n return {\n opacity: withTiming(isFocus.value ? 1 : 0, timingConfig),\n transform: [\n { scale: withTiming(isFocus.value ? 1 : 0, timingConfig) },\n { translateX: isFocus.value ? withTiming(0, { duration: 0 }) : withTiming(dimensions.width, { duration: 650 }) },\n ],\n };\n });\n\n return (\n \n \n \n \n \n \n {clearIcon ?? }\n \n \n
\n {searchIcon ?? }\n {cancelButton && (\n \n \n {cancelTitle}\n \n \n )}\n \n \n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingHorizontal: 8,\n paddingVertical: 12,\n },\n viewTextInput: {\n flex: 1,\n justifyContent: \"center\",\n paddingRight: 30,\n paddingLeft: 32,\n },\n textInput: {\n fontSize: 14,\n // fontWeight: \"400\",\n // lineHeight: 16,\n letterSpacing: 0.5,\n textAlignVertical: \"center\",\n padding: IS_ANDROID ? 0 : 5,\n margin: 0,\n // paddingBottom: IS_ANDROID ? 2 : 0,\n },\n searchIcon: {\n position: \"absolute\",\n paddingLeft: 15,\n },\n viewClear: {\n position: \"absolute\",\n right: 8,\n },\n clearButton: {\n backgroundColor: \"#C7C7CC\",\n width: 16,\n height: 16,\n borderRadius: 8,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n viewCancelButton: {\n position: \"absolute\",\n right: 8,\n },\n cancel: {\n fontSize: 17,\n fontWeight: \"500\",\n },\n});\n\nexport const SearchBar = React.forwardRef(SearchBarComponent);\n\nSearchBar.defaultProps = {\n // height: 40,\n borderRadius: 12,\n cancelButton: true,\n cancelTitle: \"Cancel\",\n isDarkTheme: false,\n};\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, View, ViewProps } from \"react-native\";\n\nexport const Section: React.FC = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n section: {\n borderColor: \"#ccc\",\n borderBottomWidth: 1,\n borderTopWidth: 1,\n backgroundColor: \"white\",\n },\n});\n","import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport Animated, { useAnimatedStyle, withTiming } from \"react-native-reanimated\";\n\nimport { ACTIVE_SCALE, ACTIVE_SEGMENT_BACKGROUND_COLOR, BORDER_RADIUS, INACTIVE_SCALE } from \"./SegmentControlItem\";\nimport { timing } from \"./constants\";\n\nexport const TOP = 4;\nexport const LEFT = 2;\n\ninterface IActiveOverlay {\n size: { width: number; height: number } | null;\n currentIndex: Animated.SharedValue;\n translation: Animated.SharedValue;\n isSwipeActive: Animated.SharedValue;\n}\n\nconst ActiveOverlay: React.FC = ({ size, translation, isSwipeActive }) => {\n const rStyle = useAnimatedStyle(() => {\n return {\n transform: [\n { translateX: translation.value },\n { scale: withTiming(isSwipeActive.value ? ACTIVE_SCALE : INACTIVE_SCALE, { duration: timing }) },\n ],\n };\n }, [translation]);\n\n if (size === null) {\n return null;\n }\n return ;\n};\n\nexport default ActiveOverlay;\n\nconst styles = StyleSheet.create({\n container: {\n position: \"absolute\",\n top: TOP,\n left: LEFT,\n borderRadius: BORDER_RADIUS,\n backgroundColor: ACTIVE_SEGMENT_BACKGROUND_COLOR,\n },\n});\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { LayoutChangeEvent, StyleSheet, ViewProps } from \"react-native\";\nimport { useDerivedValue, useSharedValue, withTiming } from \"react-native-reanimated\";\n\nimport ActiveOverlay, { LEFT, TOP } from \"./ActiveOverlay\";\nimport SegmentControlItem, { BORDER_RADIUS, SegmentControlItemI } from \"./SegmentControlItem\";\nimport { TSegment } from \"./types\";\nimport { Row } from \"../Row\";\nimport { timing } from \"./constants\";\n\nexport interface SegmentControlI {\n segments: TSegment[];\n initialIndex: number;\n onSegmentPress: SegmentControlItemI[\"onSegmentPress\"];\n textStyles?: SegmentControlItemI[\"textStyles\"];\n containerStyles?: ViewProps[\"style\"];\n}\n\nconst CONTAINER_BACKGROUND_COLOR = \"#ccc\";\nconst PADDING_VERTICAL = TOP;\nconst PADDING_HORIZONTAL = LEFT;\n\ninterface Size {\n width: number;\n height: number;\n}\n\nexport const SegmentControl = React.memo(({ segments, containerStyles, initialIndex, ...props }: SegmentControlI) => {\n const [shouldShowActiveOverlay, setShouldShowActiveOverlay] = useState(false);\n\n const [size, setSize] = useState(null);\n\n const isSwipeActive = useSharedValue(false);\n const selectedIndex = useSharedValue(initialIndex);\n const translation = useDerivedValue(() => {\n if (size === null) {\n return 0;\n }\n return withTiming(size.width * selectedIndex.value, { duration: timing });\n }, [size, selectedIndex]);\n\n useEffect(() => {\n if (segments[selectedIndex.value].disabled) {\n const firstUndisabledIndex = segments.findIndex((segment) => !segment.disabled);\n if (firstUndisabledIndex !== -1) {\n onSegmentPress(firstUndisabledIndex);\n } else {\n setShouldShowActiveOverlay(false);\n return;\n }\n }\n setShouldShowActiveOverlay(true);\n }, [selectedIndex, segments]);\n\n const onLayout = useCallback((event: LayoutChangeEvent) => {\n const { width, height } = event.nativeEvent.layout;\n setSize({ width, height });\n }, []);\n\n const onSegmentPress = (index: number) => {\n if (!segments[index].disabled) {\n selectedIndex.value = index;\n setTimeout(() => {\n props.onSegmentPress(index);\n }, timing);\n return true;\n }\n };\n\n const onSwipe = (direction: \"left\" | \"right\", currentIndex: number) => {\n if ((direction === \"right\" && currentIndex === segments.length - 1) || (direction === \"left\" && currentIndex === 0)) {\n return;\n }\n if (direction === \"right\") {\n const nextIndex = currentIndex + 1;\n const didMove = onSegmentPress(nextIndex);\n if (!didMove) onSwipe(direction, currentIndex + 1);\n }\n if (direction === \"left\") {\n const nextIndex = currentIndex - 1;\n const didMove = onSegmentPress(nextIndex);\n if (!didMove) onSwipe(direction, currentIndex - 1);\n }\n };\n\n return (\n \n {shouldShowActiveOverlay ? (\n \n ) : null}\n {segments.map((segment, index) => (\n \n ))}\n \n );\n});\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: CONTAINER_BACKGROUND_COLOR,\n paddingVertical: PADDING_VERTICAL,\n paddingHorizontal: PADDING_HORIZONTAL,\n borderRadius: BORDER_RADIUS,\n },\n});\n","import React from \"react\";\nimport { StyleSheet, TextProps, ViewProps } from \"react-native\";\nimport { Gesture, GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, { interpolateColor, runOnJS, useAnimatedStyle, useDerivedValue, useSharedValue, withTiming } from \"react-native-reanimated\";\nimport { Row } from \"../Row\";\nimport { timing } from \"./constants\";\nimport { TSegment } from \"./types\";\n\nexport interface SegmentControlItemI {\n index: number;\n segment: TSegment;\n selectedIndex: Animated.SharedValue;\n onSegmentPress: (index: number) => boolean | void;\n onSwipe: (direction: \"left\" | \"right\", index: number) => void;\n onLayout: ViewProps[\"onLayout\"];\n textStyles?: TextProps[\"style\"];\n translation: Animated.SharedValue;\n size: { width: number; height: number } | null;\n segmentsLength: number;\n isSwipeActive: Animated.SharedValue;\n}\nexport const ACTIVE_SEGMENT_BACKGROUND_COLOR = \"#bf121d\";\nconst ACTIVE_SEGMENT_TEXT_COLOR = \"#FFF\";\nconst DISABLED_SEGMENT_TEXT_COLOR = \"#888\";\nexport const BORDER_RADIUS = 5;\nexport const ACTIVE_SCALE = 0.95;\nexport const INACTIVE_SCALE = 1;\n\nconst SegmentControlItem: React.FC = ({\n onSegmentPress,\n onLayout,\n onSwipe,\n index,\n segment,\n selectedIndex,\n textStyles,\n translation,\n size,\n isSwipeActive,\n}) => {\n const context = useSharedValue(0);\n const derivedVlue = useDerivedValue(() => {\n return withTiming(selectedIndex.value === index ? 1 : 0, { duration: timing });\n }, [selectedIndex, index]);\n\n const rStyles = useAnimatedStyle(() => {\n return {\n color: segment.disabled\n ? DISABLED_SEGMENT_TEXT_COLOR\n : interpolateColor(derivedVlue.value, [0, 1], [ACTIVE_SEGMENT_BACKGROUND_COLOR, ACTIVE_SEGMENT_TEXT_COLOR]),\n transform: [\n {\n scale:\n index === selectedIndex.value ? withTiming(isSwipeActive.value ? ACTIVE_SCALE : INACTIVE_SCALE, { duration: timing }) : INACTIVE_SCALE,\n },\n ],\n };\n }, [segment]);\n\n const tapGesture = Gesture.Tap().onStart(() => runOnJS(onSegmentPress)(index));\n const panGesture = Gesture.Pan()\n .onStart(() => {\n if (selectedIndex.value !== index) {\n return;\n }\n context.value = translation.value;\n isSwipeActive.value = true;\n })\n .onEnd((e) => {\n if (selectedIndex.value !== index || size === null) {\n return;\n }\n isSwipeActive.value = false;\n const threshold = size.width / 3;\n if (e.translationX > threshold) {\n runOnJS(onSwipe)(\"right\", index);\n } else if (e.translationX < threshold) {\n runOnJS(onSwipe)(\"left\", index);\n }\n });\n\n return (\n \n \n \n {segment.title}\n \n \n \n );\n};\n\nexport default SegmentControlItem;\n\nconst styles = StyleSheet.create({\n segmentContainer: {\n flex: 1,\n alignItems: \"center\",\n },\n segmentText: {\n textAlign: \"center\",\n flex: 1,\n },\n});\n","export const timing = 200;\n","export { SegmentControl } from \"./SegmentControl\";\nexport { TSegment } from \"./types\";\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, View, ViewProps } from \"react-native\";\n// Constants imports\nimport { colors } from \"@/constants\";\n\nexport const Seperator: React.FC = (props) => {\n return ;\n};\n\nconst styles = StyleSheet.create({\n seperator: {\n height: 1,\n backgroundColor: colors.SEPERATOR,\n },\n});\n","// React Native\nimport React from \"react\";\nimport { View } from \"react-native\";\n// Constants\nimport { globalStyles } from \"@/constants\";\nimport { TRequestStatus } from \"@/network\";\nimport { ReloadButton } from \"./ReloadButton\";\nimport { ActivityIndicator } from \"./ActivityIndicator\";\n// Components\n\ninterface StatusChecker {\n status: TRequestStatus;\n onReloadPressed: () => void;\n children?: React.ReactNode;\n}\n\nexport const StatusChecker: React.FC = ({ status, children, onReloadPressed }) => {\n if (status.value === \"failed\") {\n return ;\n }\n\n if (status.value === \"idle\" || status.value === \"loading\") {\n return (\n \n \n \n );\n }\n\n return <>{children};\n};\n","// React Native imports\nimport React from \"react\";\nimport { StyleSheet, TouchableOpacity, View } from \"react-native\";\n// Components imports\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n// Constants imports\nimport { colors } from \"@/constants\";\nimport { Platform } from \"react-native\";\nimport { Row } from \"./Row\";\nimport { BodyText } from \"./BodyText\";\n\nconst VALUE_CONTAINER_SIZE = Platform.OS === \"ios\" ? 33 : 29;\nconst VALUE_CONTAINER_PADDING = Platform.OS === \"ios\" ? 6 : 4;\n\nconst ICON_SIZE = Platform.OS === \"ios\" ? 25 : 23;\n\ninterface IStepper {\n onIncrementPressed: () => void;\n onDecrementPressed: () => void;\n canIncrement: boolean;\n canDecrement: boolean;\n children: React.ReactNode;\n}\n\nexport const Stepper: React.FC = ({ children, onIncrementPressed, onDecrementPressed, canIncrement, canDecrement }) => {\n return (\n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: colors.LOGO_COLOR_OPACITY_0_2,\n alignItems: \"center\",\n borderRadius: 10,\n },\n valueContainer: {\n backgroundColor: \"white\",\n padding: VALUE_CONTAINER_PADDING,\n width: VALUE_CONTAINER_SIZE,\n aspectRatio: 1,\n borderRadius: 10,\n borderColor: colors.LOGO_COLOR_OPACITY_0_8,\n borderWidth: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n controllerContainer: {\n paddingHorizontal: 10,\n paddingVertical: 8,\n },\n});\n","// React Native imports\nimport React from \"react\";\nimport { Switch, SwitchProps } from \"react-native\";\nimport { BodyText } from \"./BodyText\";\nimport { Row } from \"./Row\";\n// Component imports\n\ninterface ISwitchInput extends SwitchProps {\n title: string;\n noBorderBottom?: boolean;\n}\n\nexport const SwitchInput: React.FC = ({ title, noBorderBottom, ...switchProps }) => {\n return (\n \n {title}\n \n \n );\n};\n","import { colors } from \"@/constants\";\nimport { StyleProp, StyleSheet, TextStyle, View, ViewStyle } from \"react-native\";\nimport { BodyText } from \"./BodyText\";\n\nconst CELL_PADDING = 10;\n\ninterface ITableCell {\n textStyle?: StyleProp;\n viewStyle?: StyleProp;\n children?: React.ReactNode;\n}\n\nexport const TableCell = ({ viewStyle, textStyle, children }: ITableCell) => {\n return (\n \n {children}\n \n );\n};\n\ninterface ITableBodyRow {\n isEven: boolean;\n children?: React.ReactNode;\n}\n\nexport const TableBodyRow = ({ isEven, children }: ITableBodyRow) => {\n return {children};\n};\n\ninterface ITableFooterProps {\n children?: React.ReactNode;\n}\n\nexport const TableFooter = ({ children }: ITableFooterProps) => {\n return {children};\n};\n\ninterface ITableHeaderProps {\n children?: React.ReactNode;\n}\n\nexport const TableHeader = ({ children }: ITableHeaderProps) => {\n return {children};\n};\n\ninterface ITableHeaderCell {\n textStyle?: StyleProp;\n viewStyle?: StyleProp;\n children?: React.ReactNode;\n}\n\nexport const TableHeaderCell = ({ children, textStyle, viewStyle }: ITableHeaderCell) => {\n return (\n \n {children}\n \n );\n};\n\nconst styles = StyleSheet.create({\n cellContainer: {\n padding: CELL_PADDING,\n flex: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n row: {\n flexDirection: \"row\",\n justifyContent: \"space-around\",\n },\n rowHeader: {\n backgroundColor: colors.LOGO_COLOR,\n borderTopRightRadius: 5,\n borderTopLeftRadius: 5,\n },\n oddRow: {\n backgroundColor: colors.LOGO_COLOR_OPACITY_0_2,\n },\n footer: {\n minHeight: 7,\n backgroundColor: colors.LOGO_COLOR,\n borderBottomLeftRadius: 5,\n borderBottomRightRadius: 5,\n },\n cellHeaderText: {\n color: \"white\",\n fontWeight: \"bold\",\n },\n});\n","// React native\nimport React, { useCallback } from \"react\";\nimport { StyleSheet } from \"react-native\";\n// Types\nimport type { TextInputProps, ViewProps } from \"react-native\";\nimport Animated from \"react-native-reanimated\";\n// Hooks\nimport { useAnimatedStyle, useSharedValue } from \"react-native-reanimated\";\n// Utils\nimport { interpolateColor, withTiming } from \"react-native-reanimated\";\n// Constants\nimport { colors } from \"@/constants\";\nimport { Easing } from \"react-native-reanimated\";\nimport { TextInput } from \"./TextInput\";\n\nconst BLURRED_COLOR = \"#bbbbbb\";\nconst FOCUSED_COLOR = colors.LOGO_COLOR_OPACITY_0_6;\n\ninterface ITextArea extends TextInputProps {\n containerStyle?: ViewProps[\"style\"];\n}\n\nexport const TextArea = ({ placeholderTextColor, containerStyle, ...props }: ITextArea) => {\n const isFocused = useSharedValue(0);\n\n const onFocus = useCallback(() => {\n isFocused.value = withTiming(1, { easing: Easing.in(Easing.cubic) });\n }, []);\n\n const onBlur = useCallback(() => {\n isFocused.value = withTiming(0, { easing: Easing.in(Easing.cubic) });\n }, []);\n\n const rStyle = useAnimatedStyle(() => {\n return {\n borderWidth: 2,\n borderColor: interpolateColor(isFocused.value, [0, 1], [BLURRED_COLOR, FOCUSED_COLOR]),\n borderRadius: 10,\n overflow: \"hidden\",\n };\n }, []);\n\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n height: 60,\n textAlignVertical: \"top\",\n backgroundColor: \"white\",\n paddingHorizontal: 5,\n paddingVertical: 5,\n },\n});\n","import React from \"react\";\nimport { TextInput as RnTextInput, TextInputProps } from \"react-native\";\n\nconst DEFAULT_PLACEHOLDER_TEXTCOLOR = \"#A2A2A2\";\n\n/**\n * The same as the core React Natice core but with a default placeholderTextColor\n */\nexport const TextInput = React.forwardRef(({ placeholderTextColor, ...props }, forwardRef) => {\n return ;\n});\n","import { Pressable, StyleSheet, Text, View } from \"react-native\";\nimport { ToastProps } from \"@itsramiel/react-native-toast-notifications\";\n\nexport const Toast = (props: ToastProps) => {\n const message = props.message;\n const title = props?.data?.title;\n const cta = props?.data?.cta;\n const onCtaPress = props?.data?.onCtaPress;\n\n return (\n \n \n {title ? {title} : null}\n {message}\n \n {cta ? (\n \n {cta}\n \n ) : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 8,\n padding: 16,\n alignItems: \"center\",\n backgroundColor: \"#1E293B\",\n flexDirection: \"row\",\n gap: 32,\n marginHorizontal: 12,\n },\n textContainer: {\n gap: 4,\n },\n title: {\n fontWeight: \"bold\",\n color: \"white\",\n fontSize: 16,\n },\n message: {\n color: \"#D1D5DB\",\n fontSize: 12,\n flexShrink: 1,\n },\n ctaContainer: {\n padding: 4,\n borderRadius: 4,\n borderColor: \"#F3F4F6\",\n borderWidth: 1,\n },\n cta: {\n color: \"#F3F4F6\",\n fontSize: 12,\n },\n});\n","import { Platform, Pressable, PressableProps, StyleProp, ViewStyle } from \"react-native\";\nimport React from \"react\";\n\ninterface TouchableProps extends PressableProps {\n /**\n * View styles\n */\n style?: StyleProp; // this is explicity set because style in Pressbale can be a function\n /**\n * value of opacity when component is in pressed state\n */\n activeOpacity?: number;\n}\n\nexport const Touchable: React.FC = ({ children, style, activeOpacity, ...props }) => {\n if (activeOpacity !== undefined && (activeOpacity < 0 || activeOpacity > 1)) {\n throw new Error(\"active opacity has to be between 0 and 1\");\n }\n\n return (\n (pressed && Platform.OS !== \"android\" ? [style, { opacity: activeOpacity ? activeOpacity : 0.6 }] : style)}\n android_ripple={props.android_ripple ? props.android_ripple : { color: \"#ccc\" }}\n >\n {children}\n \n );\n};\n","import React, { ComponentProps } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { Row } from \"./Row\";\nimport { BodyText } from \"./BodyText\";\nimport { globalStyles } from \"@/constants\";\n\nconst BORDER_COLOR = \"#efdfc0\";\nconst BG_COLOR = \"#faf5e9\";\nconst ICON_BG_COLOR = \"#f5bf4a\";\n\nconst LEADING_CONTAINER_SIZE = 40;\nconst ICON_CONTAINER_SIZE = LEADING_CONTAINER_SIZE * 0.65;\nconst ICON_SIZE = LEADING_CONTAINER_SIZE * 0.45;\n\ninterface IWarningAlert extends ComponentProps {\n message: string;\n}\n\n// reference: https://dribbble.com/shots/16891665-Daily-UI-011-Flash-Message\nexport const WarningAlert = ({ message, ...props }: IWarningAlert) => {\n return (\n \n \n \n \n \n \n \n {message}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: 10,\n borderWidth: 2,\n borderColor: BORDER_COLOR,\n backgroundColor: BG_COLOR,\n padding: 8,\n alignItems: \"center\",\n },\n leadingContainer: {\n width: LEADING_CONTAINER_SIZE,\n height: LEADING_CONTAINER_SIZE,\n borderRadius: LEADING_CONTAINER_SIZE / 2,\n backgroundColor: ICON_BG_COLOR,\n alignItems: \"center\",\n justifyContent: \"center\",\n marginRight: 16,\n },\n iconContainer: {\n width: ICON_CONTAINER_SIZE,\n height: ICON_CONTAINER_SIZE,\n borderRadius: ICON_CONTAINER_SIZE / 2,\n backgroundColor: \"white\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n});\n","export * from \"./Row\";\nexport * from \"./BodyText\";\nexport * from \"./Touchable\";\nexport * from \"./ReloadButton\";\nexport * from \"./ActivityIndicator\";\nexport * from \"./RadioIcon\";\nexport * from \"./HeaderIconContainer\";\nexport * from \"./NoContent\";\nexport * from \"./Section\";\nexport * from \"./TextInput\";\nexport * from \"./Input\";\nexport * from \"./DateInput\";\nexport * from \"./PhoneInput\";\nexport * from \"./RButton\";\nexport * from \"./Popover\";\nexport * from \"./Checkmark\";\nexport * from \"./InputRadio\";\nexport * from \"./Seperator\";\nexport * from \"./Table\";\nexport * from \"./SwitchInput\";\nexport * from \"./LoaderOverlay\";\nexport * from \"./ExpandedImage\";\nexport * from \"./Pagination\";\nexport * from \"./RatingBox\";\nexport * from \"./Seperator\";\nexport * from \"./StatusChecker\";\nexport * from \"./TextArea\";\nexport * from \"./PriceAndPriceOld\";\nexport * from \"./Stepper\";\nexport * from \"./ChevronRight\";\nexport * from \"./SegmentControl\";\nexport * from \"./Ribbon\";\nexport * from \"./ActionButton\";\nexport * from \"./Notice\";\nexport * from \"./SearchBar\";\nexport * from \"./BranchRatings\";\nexport * from \"./AddressSummary\";\nexport * from \"./FlashingBorderBox\";\nexport * from \"./BaseFab\";\nexport * from \"./AnimatedBodyText\";\nexport * from \"./FloatingActionButton\";\nexport * from \"./WarningAlert\";\nexport * from \"./QueryStatusChecker\";\nexport * from \"./ErrorView\";\nexport * from \"./LoadingView\";\nexport * from \"./AnimatedLock\";\nexport * from \"./OneTimePasswordInput\";\nexport * from \"./ResendButton\";\nexport * from \"./ApplicationActivityIndicator\";\nexport * from \"./PasswordInput\";\nexport * from \"./Screen\";\nexport * from \"./DraggableScrollView\";\nexport * from \"./BottomSheet\";\nexport * from \"./Toast\";\nexport * from \"./PaginatedCarousel\";\n","export const colors = {\n OLD_LOGO_COLOR: \"#E7283B\",\n LOGO_COLOR: \"hsla(356, 83%, 41%, 1)\", //rgb: #bf121d\n LOGO_COLOR_DARK: \"hsla(0, 100%, 24%, 1)\",\n LOGO_COLOR_OPACITY_0_2: \"hsla(357, 60%, 94%, 1)\",\n LOGO_COLOR_OPACITY_0_4: \"hsla(356, 57%, 76%, 1)\",\n LOGO_COLOR_OPACITY_0_6: \"hsla(357, 58%, 65%, 1)\",\n LOGO_COLOR_OPACITY_0_8: \"hsla(356, 58%, 53%, 1)\",\n LOGO_COLOR_ACCENT: \"hsla(20, 93%, 34%, 1)\",\n HEADER_TEXT_COLOR: \"#FFF\",\n FORM_INPUT: \"#444\",\n FORM_INPUT_PLACEHOLDER: \"#aaa\",\n FORM_INPUT_BG: \"#FFF\",\n FORM_INPUT_BG_FOCUSED: \"#F5F5F5\",\n FORM_ERROR_MSG: \"hsla(356, 83%, 41%, 0.8)\",\n SCREEN_BG: \"#f2f2f2\",\n TEXT_COLOR: \"#373D3F\",\n LIGHT_TEXT_COLOR: \"#555F61\",\n LIGHTEST_TEXT_COLOR: \"#8C979A\",\n HYPERLINK: \"#2200CC\",\n SEPERATOR: \"#E1E1E1\",\n SECTION_HEADER: \"#EFEFF4\",\n HEADER_ICON: \"white\",\n SUCCESS: \"green\",\n ERROR: \"#B00020\",\n\n \"gray/700\": \"#374151\",\n} as const;\n","export const CONFIG = {\n _gcmProjectId: \"319661405622\",\n _firmuid: \"feedmekktc\",\n _iosAppId: \"1273734194\",\n _androidPackageName: \"com.mobilon.feedmecyprus\",\n _telephoneMaxLength: 10,\n _passwordMaxLength: 20,\n _passwordMinLength: 6,\n _telephonePrefix: \"+90\",\n _stringProjectName: \"Feed Me\",\n _stringProjectNameLtd: \"Feed Me\",\n _projectLanguages: {\n az: { displayName: \"Azərbaycanca\", code: \"az\" },\n en: { displayName: \"English\", code: \"en\" },\n ru: { displayName: \"Русский\", code: \"ru\" },\n tr: { displayName: \"Türkçe\", code: \"tr\" },\n },\n _phonePrefix: \"(5__) ___ ____ \",\n _androidStatusBarHex: \"#A70003\",\n _mainPageUpperLeftIcon: \"img/icon/telephone_number_white.png\",\n _phoneNumberStartingDigit: \"5\" as `${number}`,\n _redirectAutomaticallyIfThereIsOnlyOneBranchAvailableAtThatLocation: false,\n _isEmailMandatory: false,\n _isPhoneNumberMandatory: true,\n _isDeliveryCostChargedByTheApp: false,\n _showBrandDeliveryInfoOnAboutPage: false,\n _stringHigherBusinessName: \"Mobilon Software\",\n _isUseEula: true,\n _uniqueId: \"telephone\" as \"telephone\" | \"email\",\n _projectCorporateColor: \"#E7283B\",\n _defaultCountryLatitude: 35.195417,\n _defaultCountryLongitude: 33.615242,\n _defaultCountryZoom: 9,\n _confirmationCodeLength: 5,\n _lastProjectUpdate: \"Thu Jul 7 2022 10:31\",\n _facebookPageId: \"123973804844517\",\n _facebookPageUrl: \"https://www.facebook.com/feedmecyprus/\",\n _instagramUsername: \"feedmecyprus\",\n _instagramPageUrl: \"https://www.instagram.com/feedmecyprus\",\n _emailToSendFeedback: \"info@mobilonsoft.com\",\n _deepLinkingUrl: \"https://app.feedmecyprus.com\",\n} as const;\n","export const HEADER_ICON_SIZE = 24;\n","export * from \"./colors\";\nexport * from \"./config\";\nexport * from \"./dimensions\";\nexport * from \"./styles\";\nexport * from \"./statusCodes\";\nexport * from \"./keys\";\n","export const LOCAL_STORAGE_KEYS = {\n PUSH_TOKEN: \"push_token\",\n SENT_PUSH_TOKEN: \"sent_push_token\",\n GPS_ERROR_MSG_SHOWN: \"gps_error_msg_shown\",\n LS_LAST_SEARCHED_PRODUCTS: \"ls_last_searched_products\",\n REF_ADDRESS_ITEM: \"ref_address_item\",\n REF_ADDRESS: \"ref_address\",\n LANG: \"language\",\n BASKET: \"basket\",\n RATED_APP: \"rated_app\",\n device_id: \"device_id\",\n session_id: \"session_id\",\n didRequestNotificationPermission: \"didRequestNotificationPermission\",\n didRequestLocationPermission: \"didRequestLocationPermission\",\n} as const;\n","export const STATUS_CODES = {\n RedirectToSmsConfirmation: 102002,\n RedirectToUpdateSmsConfirmation: 128002,\n PasswordResentToUser: 140001,\n NoSignupVerificationNeeded: 102001,\n\n SessionIdNoInput: -101002,\n SessionIdInvalid: -101003,\n SessionIdExpired: -101004,\n PromotionCodeInvalid: -102007,\n InvalidConfirmationCode: -142003,\n InvalidSignupConfirmationCode: -103003,\n BranchOrderTimesInvalidAddress: -105002,\n\n UserAddressNotFound_OrderTimes: -105002,\n UserAddressNotFound_OrderPrepare: -108007,\n\n UserAddressFarFromUserCoordinates: -108034,\n};\n\nexport const BAD_SESSION_STATUS_CODES = [STATUS_CODES.SessionIdExpired, STATUS_CODES.SessionIdInvalid, STATUS_CODES.SessionIdNoInput];\n","import { StyleSheet } from \"react-native\";\n\nexport const globalStyles = StyleSheet.create({\n centeredFlex: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n flexOne: {\n flex: 1,\n },\n flexShrink: {\n flexShrink: 1,\n },\n shadow: {\n elevation: 3,\n shadowOffset: { width: 0, height: 4 },\n shadowRadius: 4,\n shadowOpacity: 0.1,\n },\n bold: {\n fontWeight: \"bold\",\n },\n invertedFix: { transform: [{ rotate: \"180deg\" }] },\n});\n","import { createContext } from \"react\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { EventNames } from \"./types\";\n\nexport const event = new EventEmitter();\nexport const EventContext = createContext(event);\n\ninterface EventProviderProps {\n children?: React.ReactNode;\n}\n\nexport const EventProvider = ({ children }: EventProviderProps) => {\n return {children};\n};\n","export * from \"./Provider\";\nexport * from \"./types\";\nexport * from \"./useEvent\";\n","import React from \"react\";\nimport { EventContext } from \"./Provider\";\n\nexport const useEvent = () => {\n const event = React.useContext(EventContext);\n\n if (event === null) {\n throw new Error(\"Please use inside EventProvider\");\n }\n return event;\n};\n","export * from \"./event\";\n","import React, { ComponentProps } from \"react\";\nimport { Ionicons } from \"@expo/vector-icons\";\nimport { StyleProp, StyleSheet, TextInputProps, View, ViewStyle } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { TextInput } from \"@/components\";\n\ninterface IAddressInput extends TextInputProps {\n containerStyle?: StyleProp;\n leftIcon: ComponentProps[\"name\"];\n rightIcon?: ComponentProps[\"name\"];\n}\n\nexport const AddressInput = ({ containerStyle, leftIcon, rightIcon, ...props }: IAddressInput) => {\n return (\n \n \n \n \n {rightIcon ? : null}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: \"white\",\n flexDirection: \"row\",\n alignItems: \"center\",\n padding: 4,\n },\n inputContainer: {\n flex: 1,\n },\n inputStyles: {\n paddingHorizontal: 5,\n fontSize: 14,\n },\n});\n","import React, { useEffect, useRef } from \"react\";\nimport { TextProps, Animated } from \"react-native\";\n\ninterface GlowingText extends TextProps {\n shoudlGlow: { value: boolean };\n}\n\nexport const GlowingText: React.FC = ({ children, shoudlGlow, ...props }) => {\n const radius = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n if (shoudlGlow.value) {\n Animated.sequence([\n Animated.timing(radius, {\n toValue: 10,\n duration: 500,\n useNativeDriver: false,\n }),\n Animated.timing(radius, {\n toValue: 0,\n delay: 1500,\n duration: 500,\n useNativeDriver: false,\n }),\n ]).start();\n }\n }, [shoudlGlow]);\n\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { BodyText, Touchable } from \"@/components\";\nimport { colors, globalStyles } from \"@/constants\";\n\nimport { GlowingText } from \"./GlowingText\";\n\nconst ICONS_SIZE = 26;\n\ninterface IRegionInput {\n error: { value: boolean };\n title?: string;\n value?: string;\n placeholder: string;\n onPress: () => void;\n leftIcon?: React.ReactNode;\n}\n\nexport const RegionInput = ({ error, title, value, placeholder, onPress, leftIcon }: IRegionInput) => {\n return (\n \n {title ? (\n \n {title}\n \n ) : null}\n \n \n {leftIcon ? leftIcon : }\n \n {value ?? placeholder}\n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n title: {\n padding: 5,\n fontWeight: \"bold\",\n color: \"#444\",\n },\n inputContainer: {\n backgroundColor: \"white\",\n flexDirection: \"row\",\n alignItems: \"center\",\n padding: 5,\n },\n});\n","export * from \"./AddressInput\";\nexport * from \"./RegionInput\";\nexport * from \"./GlowingText\";\n","export * from \"./styles\";\nexport * from \"./models\";\n","export const LEVEL_ADDRESS_INITIAL_STATE = {\n id: undefined,\n index: undefined,\n name: undefined,\n error: undefined,\n};\n","import { StyleSheet } from \"react-native\";\n\nexport const RectBoxStyles = StyleSheet.create({\n container: {\n backgroundColor: \"#f9f9f9\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n mainContainer: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n borderColor: \"#ccc\",\n paddingVertical: 10,\n },\n icon: {\n marginHorizontal: 5,\n },\n});\n","export * from \"./screens\";\n","import { Ionicons } from \"@expo/vector-icons\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet } from \"react-native\";\nimport React, { useEffect } from \"react\";\n\nimport { Row, BodyText, ChevronRight, Touchable } from \"@/components\";\n\nimport { RectBoxStyles } from \"../../constants\";\nimport Animated, { interpolateColor, useAnimatedStyle, useSharedValue, withDelay, withSequence, withTiming } from \"react-native-reanimated\";\n\nconst outputRange = [\"rgba(191, 18, 29, 0)\", \"rgba(191, 18, 29, 0.1)\"];\n\ninterface IAddAddress {\n onAddAddress: () => void;\n numberOfAddress: number;\n}\n\nexport const AddAddress = ({ onAddAddress, numberOfAddress }: IAddAddress) => {\n const { t } = useTranslation();\n const animatedValue = useSharedValue(0);\n\n useEffect(() => {\n if (numberOfAddress === 0) {\n animatedValue.value = 0;\n animatedValue.value = withSequence(withDelay(300, withTiming(1)), withDelay(1000, withTiming(0)));\n }\n }, [numberOfAddress]);\n\n const rStyle = useAnimatedStyle(() => {\n return { backgroundColor: interpolateColor(animatedValue.value, [0, 1], outputRange) };\n }, []);\n\n return (\n \n \n \n \n {t(\"ADD_A_NEW_ADDRESS\")}\n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n textStyle: {\n fontWeight: \"700\",\n color: \"#333\",\n },\n icon: {\n marginHorizontal: 5,\n },\n});\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet, View } from \"react-native\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { OpacityDecorator, ScaleDecorator } from \"react-native-draggable-flatlist\";\n\nimport { TCustomerAddress, useAddressId } from \"@/network\";\nimport { colors } from \"@/constants\";\nimport { useAppSelector } from \"@/state\";\nimport { BodyText, RadioIcon, Touchable } from \"@/components\";\n\nimport { RectBoxStyles } from \"../../constants\";\n\nexport interface IAddressItem {\n item: TCustomerAddress;\n drag: () => void;\n onAddressItemPressedHandler: (address: TCustomerAddress) => void;\n onDeletedAddressHandler: (addressId: number) => void;\n}\n\nexport const AddressItem = ({ item, drag, onDeletedAddressHandler, onAddressItemPressedHandler }: IAddressItem) => {\n const { t } = useTranslation();\n const addressId = useAddressId();\n const { id, title, address, addressItemName, itemExistsAndActiveInSpecifiedBranch } = item;\n const isSelected = addressId?.ref_address === id;\n const isDisabled = itemExistsAndActiveInSpecifiedBranch === false;\n\n return (\n \n \n onAddressItemPressedHandler(item)}\n disabled={isDisabled}\n >\n \n \n \n {title || addressItemName ? (\n \n {title ? {`${title} `} : null}\n {addressItemName ? (\n {`${title ? \"(\" : \"\"}${addressItemName}${title ? \")\" : \"\"}`}\n ) : null}\n \n ) : null}\n {address ? {address} : null}\n {itemExistsAndActiveInSpecifiedBranch === false ? (\n ({t(\"NO_DELIVERY_TO_THIS_ADDRESS\")})\n ) : null}\n \n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n addressItemName: {\n color: \"gray\",\n },\n icon: {\n marginHorizontal: 5,\n },\n address: {\n paddingVertical: 3,\n },\n title: {\n fontWeight: \"700\",\n paddingVertical: 3,\n },\n noDelivery: {\n fontSize: 12,\n color: \"red\",\n },\n});\n\ninterface RightIcon {\n drag: () => void;\n}\n\nconst RightIcon: React.FC = ({ drag }) => {\n const isEditing = useAppSelector((state) => state.addressList.isEditing);\n\n return (\n \n \n \n \n \n );\n};\n\ninterface LeftIcon {\n addressId: number;\n isSelected: boolean;\n onDeletedAddressHandler: (addressId: number) => void;\n}\n\nconst LeftIcon: React.FC = ({ addressId, onDeletedAddressHandler, isSelected }) => {\n const isEditing = useAppSelector((state) => state.addressList.isEditing);\n\n return isEditing ? (\n onDeletedAddressHandler(addressId)} />\n ) : (\n \n );\n};\n","import React from \"react\";\nimport { View } from \"react-native\";\n\nexport const AddressItemSeperator = () => {\n return (\n \n \n \n );\n};\n","import { View } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport DraggableFlatList, { DragEndParams, RenderItemParams } from \"react-native-draggable-flatlist\";\n\nimport { Alert } from \"@/utils\";\nimport { store } from \"@/state\";\nimport { AddressListScreenProps } from \"@/routes\";\nimport { endpoints, TCustomerAddress, TCustomerAddressListResponse, http_post } from \"@/network\";\n\nimport { selectIsEditingAddresses } from \"../../state\";\nimport { AddressItem, IAddressItem } from \"./AddressItem\";\nimport { AddressItemSeperator } from \"./AddressItemSeperator\";\n\ninterface AddressList {\n customerAddressList: TCustomerAddressListResponse[\"result\"][\"customerAddressList\"];\n onEditAddress: (addressId: TCustomerAddress[\"id\"]) => void;\n onDeleteAddress: (params: { ref_address: TCustomerAddress[\"id\"] }) => void;\n onAddressSelected: AddressListScreenProps[\"route\"][\"params\"][\"onAddressSelected\"];\n onAddressReorder: (args: { rowno: number; ref_address: number; data: TCustomerAddress[] }) => void;\n}\n\nexport const AddressList: React.FC = ({ customerAddressList, onAddressSelected, onEditAddress, onDeleteAddress, onAddressReorder }) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [customerAddressListCopy, setCustomerAddressListCopy] = useState(customerAddressList);\n\n const saveAddressMutation = useMutation(\n (address: TCustomerAddress) => {\n return http_post({ endpoint: endpoints.CUSTOMER_ADDRESS_SELECTED_SET, params: { ref_address: address.id, ref_addressitem: null } });\n },\n {\n onSuccess: async (_, address) => {\n await queryClient.invalidateQueries([endpoints.INITIALIZATION]);\n onAddressSelected && (await onAddressSelected(address));\n },\n }\n );\n\n useEffect(() => {\n // Setting state from props is not ideal and should be avoided\n // Here is an edge case where the ui will flicker by the time data is passed, so update it quickly\n setCustomerAddressListCopy(customerAddressList);\n }, [customerAddressList]);\n\n const onDragEnd = useCallback(async ({ data, from, to }: DragEndParams) => {\n if (from === to) {\n return;\n }\n setCustomerAddressListCopy(data);\n onAddressReorder({ rowno: to + 1, ref_address: data[to].id, data });\n }, []);\n\n const onAddressItemPressedHandler: IAddressItem[\"onAddressItemPressedHandler\"] = useCallback((address) => {\n const storeState = store.getState();\n const isEditing = selectIsEditingAddresses(storeState);\n if (isEditing) {\n onEditAddress(address.id);\n } else {\n saveAddressMutation.mutate(address);\n }\n }, []);\n\n const onDeleteAddressHandler = useCallback((addressId: number) => {\n Alert.alert(t(\"WARNING\"), t(\"ARE_YOU_SURE\"), [\n {\n text: t(\"CANCEL\"),\n },\n {\n text: t(\"YES\"),\n onPress: () => onDeleteAddress({ ref_address: addressId }),\n },\n ]);\n }, []);\n\n const renderItem = useCallback(({ drag, item }: RenderItemParams) => {\n return (\n \n );\n }, []);\n\n return (\n \n \n \n );\n};\n\nfunction keyExtractor(item: TCustomerAddress) {\n return item.id.toString();\n}\n","import React, { useCallback } from \"react\";\nimport { Ionicons } from \"@expo/vector-icons\";\nimport { useTranslation } from \"react-i18next\";\nimport { TouchableOpacity, View } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { AddressListScreenProps } from \"@/routes\";\nimport { BodyText, ChevronRight } from \"@/components\";\n\nimport { RectBoxStyles } from \"../../constants/styles\";\n\ninterface IAllRegions {\n navigation: AddressListScreenProps[\"navigation\"];\n route: AddressListScreenProps[\"route\"];\n}\n\nexport const AllRegions = React.memo(({ navigation }: IAllRegions) => {\n const { t } = useTranslation();\n\n const onRegionSelected = useCallback(() => {\n navigation.pop(2);\n }, [navigation]);\n\n const onPressHandler = useCallback(async () => {\n navigation.navigate(\"SelectRegion\", { onRegionSelected });\n }, []);\n return (\n \n \n \n {t(\"ALL_DISTRICTS\")}\n \n \n \n );\n});\n","import React from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { HEADER_ICON_SIZE } from \"@/constants\";\nimport { HeaderIconContainer } from \"@/components\";\nimport { useAppDispatch, useAppSelector } from \"@/state\";\n\nimport { toggleIsEditing, selectIsEditingAddresses } from \"../../state\";\n\nexport const EditAddressesHeaderButton = () => {\n const dispatch = useAppDispatch();\n const isEditing = useAppSelector(selectIsEditingAddresses);\n\n const iconName = isEditing ? \"checkmark-sharp\" : \"create-outline\";\n\n return (\n dispatch(toggleIsEditing())}>\n \n \n );\n};\n","import { StyleSheet, View } from \"react-native\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport React, { useCallback, useEffect, useLayoutEffect } from \"react\";\n\nimport { useAppDispatch } from \"@/state\";\nimport { globalStyles } from \"@/constants\";\nimport { AddressListScreenProps } from \"@/routes\";\nimport { ErrorView, LoadingView } from \"@/components\";\nimport { endpoints, handleMutationError, http_post, TCustomerAddress, TCustomerAddressListResponse } from \"@/network\";\n\nimport { AddAddress } from \"./AddAddress\";\nimport { AllRegions } from \"./AllRegions\";\nimport { AddressList } from \"./AddressList\";\nimport { enableEditing, resetState } from \"../../state\";\nimport { EditAddressesHeaderButton } from \"./EditAddressesHeaderButton\";\n\nexport const AddressListScreen = ({ navigation, route }: AddressListScreenProps) => {\n const dispatch = useAppDispatch();\n const queryClient = useQueryClient();\n const { branchId, canToggleEdit, startInEditMode, includeRegions, onAddressSelected } = route.params;\n const { data, refetch, error } = useQuery([endpoints.CUSTOMER_ADDRESS_LIST, branchId] as const, async ({ queryKey }) => {\n return http_post({ endpoint: queryKey[0], params: { ref_branch: queryKey[1], disable_filter_branch: true } });\n });\n\n const addressOrderMutation = useMutation(\n ({ rowno, ref_address }: { rowno: number; ref_address: number; data: TCustomerAddress[] }) =>\n http_post({ endpoint: endpoints.ADDRESS_LIST_UPDATE, params: { rowno, ref_address } }),\n {\n onMutate: ({ data }) => {\n const previousData = queryClient.getQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId]);\n if (previousData) {\n queryClient.setQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId], {\n ...previousData,\n result: {\n customerAddressList: data,\n },\n });\n }\n\n return { previousData };\n },\n onError: (error, _, context) => {\n if (context?.previousData) {\n queryClient.setQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId], context.previousData);\n handleMutationError(error);\n }\n },\n }\n );\n\n const addressDeleteMutation = useMutation(\n (params: { ref_address: TCustomerAddress[\"id\"] }) => http_post({ endpoint: endpoints.ADDRESS_LIST_DELETE, params }),\n {\n onMutate: ({ ref_address }) => {\n const previousData = queryClient.getQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId]);\n if (previousData) {\n queryClient.setQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId], {\n ...previousData,\n result: {\n customerAddressList: previousData.result.customerAddressList.filter((address) => address.id !== ref_address),\n },\n });\n }\n\n return { previousData };\n },\n onSuccess: () => queryClient.invalidateQueries([endpoints.INITIALIZATION]),\n onError: (error, _, context) => {\n if (context?.previousData) {\n queryClient.setQueryData([endpoints.CUSTOMER_ADDRESS_LIST, branchId], context.previousData);\n handleMutationError(error);\n }\n },\n }\n );\n\n const onAddAddress = () => {\n navigation.navigate(\"Map\", { branchId });\n };\n\n const onEditAddress = useCallback((addressId: TCustomerAddress[\"id\"]) => {\n navigation.navigate(\"UpdateAddress\", { refAddress: addressId });\n }, []);\n\n useLayoutEffect(() => {\n if (startInEditMode) {\n dispatch(enableEditing());\n }\n }, []);\n\n useLayoutEffect(() => {\n navigation.setOptions({\n headerRight: () => (canToggleEdit ? : null),\n });\n }, [canToggleEdit]);\n\n useEffect(() => {\n const unsubscribe = navigation.addListener(\"beforeRemove\", () => {\n dispatch(resetState());\n });\n\n return unsubscribe;\n }, []);\n\n if (data) {\n return (\n \n \n \n \n \n {includeRegions ? (\n \n \n \n ) : null}\n \n );\n }\n\n if (error) return ;\n\n return ;\n};\n\nconst styles = StyleSheet.create({\n topComponentContainer: {\n borderBottomColor: \"#bbb\",\n borderBottomWidth: 1,\n },\n bottomComponentContainer: {\n borderTopColor: \"#bbb\",\n borderTopWidth: 1,\n },\n});\n","import { useTranslation } from \"react-i18next\";\nimport { useRoute } from \"@react-navigation/core\";\nimport { StyleSheet, View, Keyboard } from \"react-native\";\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useToast } from \"@itsramiel/react-native-toast-notifications\";\n\nimport { goBackToScreen } from \"@/utils\";\nimport { Alert } from \"@/utils\";\nimport { useEvent } from \"@/contexts\";\nimport { CreateAddressScreenProps } from \"@/routes\";\nimport { RButton, BodyText, TextArea } from \"@/components\";\nimport { selectUserCoordinates, useAppSelector } from \"@/state\";\nimport { http_post, endpoints, TAddressItem, TParams } from \"@/network\";\n\nimport { TAddressItemInputs } from \"../../types\";\nimport { GlowingText, AddressInput, RegionInput } from \"../../components\";\n\ninterface ICreateAddressForm {\n addressItemInputs: TAddressItemInputs;\n navigation: CreateAddressScreenProps[\"navigation\"];\n}\n\nexport const CreateAddressForm = ({ addressItemInputs, navigation }: ICreateAddressForm) => {\n const { coordinates } = useRoute().params;\n\n const toast = useToast();\n const event = useEvent();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const userCoordinates = useAppSelector(selectUserCoordinates);\n\n const [addressTitle, setAddressTitle] = useState(\"\");\n const [addressDesc, setAddressDesc] = useState({ value: \"\", error: { value: false } });\n const [addressDescExtra, setAddressDescExtra] = useState({ value: \"\", error: { value: false } });\n const [addressItems, setAddressItems] = useState(addressItemInputs);\n\n const onAddressItemSelected = (addressItem: TAddressItem, selectedIndex: number) => {\n const depth = addressItem.parentCount;\n\n setAddressItems((prevAddressItems) => {\n const newSelectedAddressItems: TAddressItemInputs = [prevAddressItems[0], ...prevAddressItems.slice(1)];\n const currentSelectedIndex = prevAddressItems[depth].index;\n const didChange = currentSelectedIndex !== selectedIndex;\n newSelectedAddressItems[depth] = {\n ...newSelectedAddressItems[depth],\n index: selectedIndex,\n error: { value: false },\n };\n if (didChange) {\n for (let index = depth + 1; index < newSelectedAddressItems.length; index++) {\n if (index === depth + 1) {\n newSelectedAddressItems[index] = {\n addressItems: newSelectedAddressItems[depth].addressItems?.[selectedIndex].addressItems,\n index: undefined,\n error: { value: false },\n };\n } else {\n newSelectedAddressItems[index] = { addressItems: undefined, index: undefined, error: { value: false } };\n }\n }\n }\n return newSelectedAddressItems;\n });\n };\n\n useEffect(() => {\n event.on(\"onAddressItemSelected_createAddress\", onAddressItemSelected);\n return () => {\n event.off(\"onAddressItemSelected_createAddress\", onAddressItemSelected);\n };\n }, []);\n\n const setAddressTitleText = useCallback((text: string) => {\n setAddressTitle(text);\n }, []);\n\n const setAddressDescText = useCallback((text: string) => {\n setAddressDesc({ value: text, error: { value: false } });\n }, []);\n\n const setAddressDescExtraText = useCallback((text: string) => {\n setAddressDescExtra({ value: text, error: { value: false } });\n }, []);\n\n const onSubmit = () => {\n Keyboard.dismiss();\n\n const address1 = addressDesc.value.trim();\n const address2 = addressDescExtra.value.trim();\n\n if (address1.length <= 0 || address2.length <= 0) {\n // check that address description and address description extra are not empty\n if (address1.length <= 0) setAddressDesc({ ...addressDesc, error: { value: true } });\n if (address2.length <= 0) setAddressDescExtra({ ...addressDescExtra, error: { value: true } });\n toast.show(t(\"ENTER_VALID_ADDRESS\"));\n return;\n }\n const fullAddress = address1 + \" - \" + address2;\n\n for (let depth = 0; depth < addressItemInputs.length; depth++) {\n const selectedAddressItem = addressItems[depth];\n if (selectedAddressItem.index === undefined) {\n setAddressItems(\n (prev) => prev.map((_, currentDepth) => (currentDepth === depth ? { ..._, error: { value: true } } : _)) as TAddressItemInputs\n );\n toast.show(t(\"DROPDOWN_AREA_SELECT\"));\n return;\n }\n }\n\n const cleanedSelectedIndices = addressItems.map((selectedAddressItem) => {\n if (selectedAddressItem.index === undefined) {\n throw new Error(\"CreateAddress.onSubmit: selected address item is undefined\");\n } else {\n return selectedAddressItem.index;\n }\n });\n\n const selectedAddressItem = cleanedSelectedIndices.reduce(\n (prevValue, selectedIndex, currentIndex) => (currentIndex === 0 ? prevValue : prevValue.addressItems[selectedIndex]),\n addressItemInputs[0].addressItems[cleanedSelectedIndices[0]]\n );\n\n const ref_addressItem = selectedAddressItem.id;\n\n Alert.alert(t(\"INFORMATION\"), t(\"ARE_YOU_SURE\"), [\n { text: t(\"CANCEL\") },\n { text: t(\"YES\"), onPress: () => onSubmit_proceed(ref_addressItem, fullAddress) },\n ]);\n };\n\n const mutation = useMutation((params: TParams) => http_post({ endpoint: endpoints.CUSTOMER_ADDRESS_INSERT, params }), {\n onSuccess: async () => {\n await queryClient.invalidateQueries([endpoints.CUSTOMER_ADDRESS_LIST]);\n goBackToScreen(navigation, \"AddressList\");\n },\n });\n\n const onRegionInputPress = (regionsList: TAddressItem[], selectedIndex?: number) => {\n navigation.navigate(\"SingleItemSelector\", {\n data: regionsList,\n propertyName: \"name\",\n selectedIndex: selectedIndex,\n screenTitle: regionsList[0]?.addressLevelName ?? \"\",\n onSelectEvent: \"onAddressItemSelected_createAddress\",\n });\n };\n\n const onSubmit_proceed = (ref_addressItem: number | undefined, fullAddress: string) => {\n const apiParams = {\n ref_addressitem: ref_addressItem,\n location_latitude: coordinates?.latitude,\n location_longitude: coordinates?.longitude,\n address: fullAddress,\n title: addressTitle,\n ...userCoordinates,\n };\n\n mutation.mutate(apiParams);\n };\n\n return (\n <>\n \n {t(\"ADDRESS_TITLE\")}\n \n \n \n {addressItems.map((selectedAddressItem, depth) => {\n if (selectedAddressItem.addressItems) {\n const addressItems = selectedAddressItem.addressItems;\n return (\n onRegionInputPress(addressItems, selectedAddressItem.index ?? undefined)}\n />\n );\n }\n })}\n \n {/* Address Description */}\n \n \n {t(\"ADDRESS_DESCRIPTION\")}\n \n \n {/* Address Description Extra */}\n \n {t(\"ADDRESS_DESCRIPTION_EXTRA\")}\n \n \n \n {/* Submit Button */}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n fieldContainer: {\n marginVertical: 10,\n },\n inputHeader: {\n padding: 5,\n fontWeight: \"bold\",\n color: \"#444\",\n textTransform: \"capitalize\",\n },\n textBoxContainer: {\n marginHorizontal: 5,\n },\n submitBtn: {\n marginVertical: 20,\n },\n});\n","import React, { useEffect } from \"react\";\nimport { ScrollView } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\nimport Sentry from \"@/utils/sentry\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { warn } from \"@/utils\";\nimport { globalStyles } from \"@/constants\";\nimport { useKeyboardManager } from \"@/hooks\";\nimport { CreateAddressScreenProps } from \"@/routes\";\nimport { ErrorView, LoadingView } from \"@/components\";\n\nimport { CreateAddressForm } from \"./CreateAddressForm\";\nimport { useCreateAddressQuery } from \"./useCreateAddressQuery\";\n\nexport const CreateAddressScreen = ({ route, navigation }: CreateAddressScreenProps) => {\n const { t } = useTranslation();\n const { coordinates, branchId } = route.params;\n const { data, error, refetch } = useCreateAddressQuery(coordinates, branchId);\n\n useKeyboardManager();\n\n useEffect(() => {\n if (data !== undefined && data.length !== 0 && data[0].addressItems.length === 0) {\n navigation.goBack();\n warn(t(\"NO_ADDRESS_ITEMS\"));\n Sentry.captureException(\"Address items list is empty while creating an address\");\n }\n }, [data]);\n\n if (data !== undefined && data.length !== 0 && data[0].addressItems.length !== 0) {\n return (\n \n \n \n \n \n );\n }\n\n if (error) {\n return ;\n }\n\n return ;\n};\n","import { useTranslation } from \"react-i18next\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { TRoutes } from \"@/routes\";\nimport { Alert } from \"@/utils\";\nimport { endpoints, http_post, TAddressItemListResponse } from \"@/network\";\n\nimport { getSelectedAddressItemIndices } from \"../../utils\";\nimport { TAddressItemInput, TAddressItemInputs, TFirstAddressItemInput } from \"../../types\";\n\nexport const useCreateAddressQuery = (coordinates: TRoutes[\"CreateAddress\"][\"coordinates\"], branchId: TRoutes[\"CreateAddress\"][\"branchId\"]) => {\n const { t } = useTranslation();\n\n return useQuery(\n [endpoints.ADDRESS_ITEMS_LIST, coordinates, branchId] as const,\n async ({ queryKey }): Promise => {\n const [endpoint, coordinates, branchId] = queryKey;\n\n const {\n result: { addressItemList, maxAddressLevelDeep },\n } = await http_post({\n endpoint,\n params: { location_latitude: coordinates?.latitude, location_longitude: coordinates?.longitude, ref_branch: branchId },\n });\n const firstItem: TFirstAddressItemInput = { addressItems: addressItemList, index: undefined, error: { value: false } };\n const restItems: TAddressItemInput[] = Array(maxAddressLevelDeep)\n .fill(0)\n .map((_) => ({ addressItems: undefined, index: undefined, error: { value: false } }));\n\n const initialState: TAddressItemInputs = [firstItem, ...restItems];\n if (coordinates) {\n const selectedAddressItemIndices = getSelectedAddressItemIndices(\n addressItemList,\n (addressItem) => addressItem.intersectsWithGivenCoordinates === true\n );\n\n if (selectedAddressItemIndices === null) {\n if (branchId !== undefined) {\n Alert.alert(t(\"ERROR\"), t(\"REGION_NOT_FOUND_BY_GPS_WITH_BRANCH\"));\n } else {\n Alert.alert(t(\"ERROR\"), t(\"REGION_NOT_FOUND_BY_GPS\"));\n }\n return initialState;\n } else {\n return selectedAddressItemIndices.map((index, depth) => ({\n addressItems: selectedAddressItemIndices\n .slice(0, depth)\n .reduce((prevValue, selectedIndex) => prevValue[selectedIndex].addressItems, addressItemList),\n index,\n error: { value: false },\n })) as TAddressItemInputs;\n }\n } else {\n return initialState;\n }\n },\n { cacheTime: 0 }\n );\n};\n","import { getForegroundPermissionsAsync, hasServicesEnabledAsync } from \"expo-location\";\nimport React, { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { globalStyles } from \"@/constants\";\nimport { MapScreenProps } from \"@/routes\";\nimport { alertToEnableLocation, getUserLocation, warn } from \"@/utils\";\nimport { selectUserCoordinates, setCoordinates, useAppDispatch, useAppSelector, useAppStore } from \"@/state\";\n\nimport { MapMethods } from \"./MapScreen/types\";\nimport { ActionButtons, LocationControl, Map, MapCenterMarker, MapTypeControl, ZoomControl } from \"./MapScreen/components\";\nimport { DEFAULT_LATLNG, MAP_ZOOM_IN_LEVEL, MAP_ZOOM_OUT_LEVEL } from \"./MapScreen/constants\";\n\nexport const MapScreen = ({ route }: MapScreenProps) => {\n const store = useAppStore();\n const mapRef = useRef(null);\n const { initialCoordinates } = route.params;\n const dispatch = useAppDispatch();\n const userCoordinates = useAppSelector(selectUserCoordinates);\n\n useEffect(() => {\n getUserLocation().then((location) => dispatch(setCoordinates(location)));\n }, []);\n\n const { initialLatLng, zoom } = useMemo(() => {\n const userCoordinates = selectUserCoordinates(store.getState());\n let initialLatLng = { ...DEFAULT_LATLNG };\n let zoom = MAP_ZOOM_OUT_LEVEL;\n\n if (initialCoordinates) {\n initialLatLng = { ...initialCoordinates };\n zoom = MAP_ZOOM_IN_LEVEL;\n } else if (userCoordinates) {\n initialLatLng = { latitude: userCoordinates.gps_lat, longitude: userCoordinates.gps_lng };\n zoom = MAP_ZOOM_IN_LEVEL;\n }\n return { initialLatLng, zoom };\n }, []);\n\n const onZoomIn = useCallback(() => {\n mapRef.current?.zoomIn();\n }, []);\n\n const onZoomOut = useCallback(() => {\n mapRef.current?.zoomOut();\n }, []);\n\n const onToggleMapType = useCallback(() => {\n mapRef.current?.toggleMapType();\n }, []);\n\n const onUserLocationPress = useCallback(async () => {\n const [servicesEnabled, foregroundPermissions] = await Promise.all([hasServicesEnabledAsync(), getForegroundPermissionsAsync()]);\n\n if (!servicesEnabled) {\n warn(\"Please enable location services for your device in order to locate yourself\");\n return;\n }\n\n if (!foregroundPermissions.granted) {\n alertToEnableLocation();\n return;\n }\n mapRef.current?.focusUserLocation();\n }, []);\n\n const getMapCenter = useCallback(async () => {\n return (await mapRef.current?.getMapCenter()) ?? null;\n }, []);\n\n return (\n \n \n \n \n \n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { LatLng } from \"react-native-maps\";\nimport React, { ComponentProps } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport { useNavigation, useRoute } from \"@react-navigation/native\";\n\nimport { Touchable, BodyText } from \"@/components\";\n\nimport Sentry from \"@/utils/sentry\";\nimport { MapScreenProps } from \"@/routes\";\nimport { colors } from \"@/constants\";\n\ninterface ActionButtonsProps {\n getMapCenter: () => Promise;\n}\n\nexport const ActionButtons = ({ getMapCenter }: ActionButtonsProps) => {\n const { t } = useTranslation();\n const navigation = useNavigation();\n const { isEditing, branchId } = useRoute().params;\n\n const onSelectFromListPressed = () => {\n navigation.navigate(\"CreateAddress\", { branchId });\n };\n\n const onIgnoreLocationPressed = () => {\n navigation.navigate({ name: \"UpdateAddress\", params: { coordinates: null }, merge: true });\n };\n\n const onSelectThisLocation = async () => {\n const latLng = await getMapCenter();\n if (latLng) {\n if (isEditing) {\n navigation.navigate({ name: \"UpdateAddress\", params: { coordinates: latLng }, merge: true });\n } else {\n navigation.navigate(\"CreateAddress\", { branchId, coordinates: latLng });\n }\n } else {\n Sentry.captureException(\"MapScreen.onSelectThisLocation: could not get coordinates while selecting location from map\");\n }\n };\n\n return (\n \n \n {isEditing ? (\n \n ) : (\n \n )}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: \"absolute\",\n bottom: 60,\n left: 10,\n },\n buttonContainer: {\n padding: 8,\n opacity: 0.8,\n marginVertical: 5,\n borderRadius: 5,\n borderWidth: 2,\n borderColor: \"white\",\n },\n txt: {\n color: \"white\",\n textAlign: \"center\",\n fontSize: 16,\n },\n});\n\ninterface IButton extends ComponentProps {\n children: string;\n}\n\nconst Button = (props: IButton) => {\n return (\n \n {props.children}\n \n );\n};\n","import { globalStyles } from \"@/constants\";\nimport MaterialIcons from \"@expo/vector-icons/MaterialIcons\";\nimport { Pressable, PressableProps, StyleSheet } from \"react-native\";\n\nconst getLocationControlStyles: PressableProps[\"style\"] = (state) => {\n const { pressed } = state;\n\n return [styles.myLocation, pressed ? styles.pressed : null];\n};\n\ninterface LocationControlProps {\n onPress: () => void;\n}\n\nexport const LocationControl = ({ onPress }: LocationControlProps) => {\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n myLocation: {\n position: \"absolute\",\n backgroundColor: \"white\",\n right: 15,\n bottom: 60,\n borderRadius: 1000,\n padding: 12,\n alignItems: \"center\",\n justifyContent: \"center\",\n ...globalStyles.shadow,\n },\n pressed: {\n opacity: 0.7,\n },\n});\n","import React, { useCallback, useImperativeHandle, useMemo, useRef } from \"react\";\nimport { Circle, GoogleMap, Marker, useJsApiLoader } from \"@react-google-maps/api\";\n\nimport { MapMethods, MapProps } from \"../types\";\nimport { MAP_ZOOM_IN_LEVEL } from \"../constants\";\n\nconst mapOptions: google.maps.MapOptions = {\n disableDefaultUI: true,\n};\n\nexport const Map = React.forwardRef(({ initialLatLng, zoom, userCoordinates }, forwardRef) => {\n const center = useMemo(() => {\n return { lat: initialLatLng.latitude, lng: initialLatLng.longitude };\n }, []);\n\n const { isLoaded } = useJsApiLoader({\n id: \"google-map-script\",\n googleMapsApiKey: \"AIzaSyBtKh41HGNMynubnGGJxKnIrBfVlO0n_6U\",\n });\n\n const mapRef = useRef();\n\n const getZoomLevel = useCallback(() => {\n return mapRef.current?.getZoom();\n }, []);\n\n const zoomIn = useCallback(() => {\n const zoom = getZoomLevel();\n if (typeof zoom === \"number\") {\n mapRef.current?.setZoom(zoom + 1);\n }\n }, []);\n\n const zoomOut = useCallback(() => {\n const zoom = getZoomLevel();\n if (typeof zoom === \"number\") {\n mapRef.current?.setZoom(zoom - 1);\n }\n }, []);\n\n const toggleMapType = useCallback(() => {\n const mapTypeId = mapRef.current?.getMapTypeId();\n\n mapRef.current?.setMapTypeId(mapTypeId === google.maps.MapTypeId.ROADMAP ? google.maps.MapTypeId.SATELLITE : google.maps.MapTypeId.ROADMAP);\n }, []);\n\n const focusUserLocation = useCallback(() => {\n if (userCoordinates) {\n mapRef.current?.setCenter({ lat: userCoordinates.gps_lat, lng: userCoordinates.gps_lng });\n mapRef.current?.setZoom(MAP_ZOOM_IN_LEVEL);\n }\n }, [userCoordinates]);\n\n const getMapCenter: MapMethods[\"getMapCenter\"] = useCallback(() => {\n const latlLng = mapRef.current?.getCenter();\n return Promise.resolve(latlLng ? { latitude: latlLng.lat(), longitude: latlLng.lng() } : null);\n }, []);\n\n useImperativeHandle(\n forwardRef,\n () => ({\n zoomIn,\n zoomOut,\n toggleMapType,\n focusUserLocation,\n getMapCenter,\n }),\n [zoomIn, zoomOut, toggleMapType, focusUserLocation, getMapCenter]\n );\n\n const onLoad = useCallback((map: google.maps.Map) => {\n mapRef.current = map;\n }, []);\n\n if (!isLoaded) {\n return null;\n }\n\n return (\n \n {userCoordinates ? (\n <>\n \n \n \n ) : null}\n \n );\n});\n","import Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { colors } from \"@/constants\";\n\nconst SIZE = 35;\n\nexport const MapCenterMarker = () => {\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n marker: {\n left: \"50%\",\n marginLeft: -SIZE / 2,\n marginTop: -SIZE,\n position: \"absolute\",\n top: \"50%\",\n },\n});\n","import Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { Pressable, PressableProps, StyleSheet } from \"react-native\";\n\nimport { globalStyles } from \"@/constants\";\n\nconst getMapTypeControlStyles: PressableProps[\"style\"] = (state) => {\n const { pressed } = state;\n return [styles.layers, pressed ? styles.pressed : null];\n};\n\ninterface MapTypeControlProps {\n onPress: () => void;\n}\n\nexport const MapTypeControl = ({ onPress }: MapTypeControlProps) => {\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n layers: {\n position: \"absolute\",\n backgroundColor: \"#fff\",\n top: \"5%\",\n right: 15,\n aspectRatio: 1,\n padding: 5,\n borderRadius: 2,\n ...globalStyles.shadow,\n },\n pressed: {\n opacity: 0.7,\n },\n});\n","import { Pressable, PressableProps, StyleSheet, View } from \"react-native\";\n\nimport { globalStyles } from \"@/constants\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nconst getZoomInButtonStyles: PressableProps[\"style\"] = (state) => {\n const { pressed } = state;\n return [styles.zoomLevelButton, styles.zoomInButton, pressed ? styles.pressed : null];\n};\nconst getZoomOutButtonStyles: PressableProps[\"style\"] = (state) => {\n const { pressed } = state;\n return [styles.zoomLevelButton, styles.zoomOutButton, pressed ? styles.pressed : null];\n};\n\ninterface ZoomControlProps {\n onZoomIn: () => void;\n onZoomOut: () => void;\n}\n\nexport const ZoomControl = ({ onZoomOut, onZoomIn }: ZoomControlProps) => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n zoomLevelContainer: {\n position: \"absolute\",\n left: 10,\n top: 10,\n },\n zoomLevelSeperator: {\n backgroundColor: \"#ccc\",\n width: \"100%\",\n height: 1,\n },\n zoomLevelButton: {\n flex: 1,\n backgroundColor: \"white\",\n paddingVertical: 2,\n paddingHorizontal: 4,\n ...globalStyles.shadow,\n },\n zoomInButton: {\n borderTopLeftRadius: 2,\n borderTopRightRadius: 2,\n transform: [{ rotateX: \"-7.5deg\" }],\n },\n zoomOutButton: {\n borderBottomLeftRadius: 2,\n borderBottomRightRadius: 2,\n transform: [{ rotateX: \"7.5deg\" }],\n },\n pressed: {\n opacity: 0.7,\n },\n});\n","export * from \"./Map\";\nexport * from \"./ActionButtons\";\nexport * from \"./ZoomControl\";\nexport * from \"./MapTypeControl\";\nexport * from \"./LocationControl\";\nexport * from \"./MapCenterMarker\";\n","export const DEFAULT_LATLNG = { latitude: 35.20975150428138, longitude: 33.62169452011585 };\nexport const MAP_ZOOM_IN_LEVEL = 14;\nexport const MAP_ZOOM_OUT_LEVEL = 8;\n","import { View } from \"react-native\";\nimport React, { useCallback, useEffect, useState } from \"react\";\n\nimport { search } from \"@/utils\";\nimport { TAddressItem } from \"@/network\";\n\nimport { AccordionChild } from \"./AccordionChild\";\nimport { AccordionParent } from \"./AccordionParent\";\nimport ExpandableSection from \"./ExpandableSection\";\n\ninterface IAccordion {\n item: TAddressItem;\n search: string;\n isLast: boolean;\n}\n\nexport const Accordion = ({ item, search: searchValue, isLast }: IAccordion) => {\n const [isCollapsed, setIsCollapsed] = useState(true);\n\n useEffect(() => {\n if (searchValue.length > 0) {\n setIsCollapsed(false);\n } else {\n setIsCollapsed(true);\n }\n }, [searchValue]);\n\n const toggleAccordion = useCallback(() => {\n setIsCollapsed((prevState) => !prevState);\n }, []);\n\n let addressItems = item.addressItems;\n\n if (searchValue.length > 0) {\n addressItems = addressItems.filter((addressItem) => {\n const searchedByField = addressItem.name;\n\n const shouldBeIncluded = search({ in: searchedByField, using: searchValue });\n return shouldBeIncluded >= 0;\n });\n }\n\n return (\n \n }\n expanded={!isCollapsed}\n >\n {addressItems.map((item, index) => {\n if (item.branchCount === 0) {\n return null;\n }\n if (item.addressItems.length === 0) {\n return ;\n } else {\n return ;\n }\n })}\n \n \n );\n};\n","import React from \"react\";\nimport { useRoute } from \"@react-navigation/native\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nimport { endpoints, http_post } from \"@/network\";\nimport { SelectRegionScreenProps } from \"@/routes\";\nimport { BodyText, Row, Touchable } from \"@/components\";\n\nimport { RectBoxStyles } from \"../../constants\";\n\ninterface IAccordionChild {\n headerTitle: string;\n nestedLevel: number;\n refAddressItem: number;\n}\n\nexport const AccordionChild = ({ headerTitle, nestedLevel, refAddressItem }: IAccordionChild) => {\n const queryClient = useQueryClient();\n const { onRegionSelected } = useRoute().params;\n\n const mutation = useMutation(\n () => http_post({ endpoint: endpoints.CUSTOMER_ADDRESS_SELECTED_SET, params: { ref_addressitem: refAddressItem, ref_address: null } }),\n {\n onSuccess: async () => {\n await queryClient.invalidateQueries([endpoints.INITIALIZATION]);\n onRegionSelected(refAddressItem);\n },\n }\n );\n\n const marginLeft = nestedLevel * 10 + 20;\n const borderBottomWidth = 1;\n\n return (\n mutation.mutate()} style={RectBoxStyles.container}>\n \n {headerTitle}\n \n \n );\n};\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport { Ionicons } from \"@expo/vector-icons\";\n\nimport { BodyText, Row } from \"@/components\";\nimport { globalStyles } from \"@/constants\";\n\nimport { RectBoxStyles } from \"../../constants\";\n\ninterface IAccordionParent {\n headerTitle: string;\n isCollapsed: boolean;\n nestedLevel: number;\n isLast: boolean;\n}\n\nexport const AccordionParent = ({ headerTitle, isCollapsed, nestedLevel, isLast }: IAccordionParent) => {\n const iconName = isCollapsed ? \"chevron-down-outline\" : \"chevron-up-outline\";\n\n const marginLeft = nestedLevel * 10 + 20;\n const borderBottomWidth = !isCollapsed || isLast ? 0 : 1;\n\n return (\n \n \n {headerTitle}\n \n \n \n );\n};\n","import React, { DependencyList, useEffect, useMemo, useRef } from \"react\";\nimport { LayoutAnimation, StyleSheet, View } from \"react-native\";\n\nimport { Touchable } from \"@/components\";\n\nexport type ExpandableSectionProps = {\n /**\n * expandableSection header element\n */\n sectionHeader?: JSX.Element;\n /**\n * expandableSection expandable children\n */\n children?: React.ReactNode;\n /**\n * should the expandableSection be expanded\n */\n expanded?: boolean;\n /**\n * should the expandableSection open above the sectionHeader\n */\n top?: boolean;\n /**\n * action for when pressing the header of the expandableSection\n */\n onPress?: () => void;\n};\n\n/**\n * @description: ExpandableSection component to render expanded section below or above the sectionHeader\n * @example: https://github.com/wix/react-native-ui-lib/blob/master/demo/src/screens/componentScreens/ExpandableSectionScreen.tsx\n * @gif: https://github.com/wix/react-native-ui-lib/blob/master/demo/showcase/ExpandableSection/ExpandableSection.gif?raw=true\n */\n\nfunction ExpandableSection(props: ExpandableSectionProps) {\n const { expanded, sectionHeader, children, top } = props;\n\n /**\n * TODO: move to reanimated LayoutAnimation after updating to version 2.3.0\n * after migration, trigger the animation only in useDidUpdate.\n */\n const animate = () => {\n LayoutAnimation.configureNext({ ...LayoutAnimation.Presets.easeInEaseOut, duration: 300 });\n };\n\n const onPress = () => {\n props.onPress?.();\n animate();\n };\n\n useDidUpdate(() => {\n animate();\n }, [expanded]);\n\n const accessibilityState = useMemo(() => {\n return { expanded };\n }, [expanded]);\n\n return (\n \n {top && expanded && children}\n \n {sectionHeader}\n \n {!top && expanded && children}\n \n );\n}\n\nexport default ExpandableSection;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: \"hidden\",\n },\n});\n\n/**\n * This hook avoid calling useEffect on the initial value of his dependency array\n */\nfunction useDidUpdate(callback: () => void, dep: DependencyList) {\n const isMounted = useRef(false);\n\n useEffect(() => {\n if (isMounted.current) {\n callback();\n } else {\n isMounted.current = true;\n }\n }, dep);\n}\n","import React, { useEffect } from \"react\";\nimport { Ionicons } from \"@expo/vector-icons\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRoute } from \"@react-navigation/native\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { StyleSheet } from \"react-native\";\nimport Animated, { useAnimatedStyle, useSharedValue, withRepeat, withTiming } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\nimport { getUserLocation } from \"@/utils\";\nimport { SelectRegionScreenProps } from \"@/routes\";\nimport { BodyText, Touchable } from \"@/components\";\nimport { http_post, endpoints, TAddressItemListResponse, TAddressItem } from \"@/network\";\nimport { Alert } from \"@/utils\";\n\nexport const FindMyLocation = () => {\n const { t } = useTranslation();\n const opacity = useSharedValue(1);\n const queryClient = useQueryClient();\n const { onRegionSelected } = useRoute().params;\n\n const mutation = useMutation(async () => {\n const location = await getUserLocation(true);\n if (location !== undefined) {\n const params = {\n location_latitude: location.coords.latitude,\n location_longitude: location.coords.longitude,\n eliminatenotintersecting: true,\n };\n\n const data = await http_post({ params, endpoint: endpoints.ADDRESS_ITEMS_LIST });\n\n const addressListItem = data.result.addressItemList;\n const refAddressItem = extractRefAddressItem(addressListItem);\n\n if (refAddressItem === null) {\n Alert.alert(t(\"ERROR\"), t(\"REGION_NOT_FOUND_BY_GPS\"));\n } else {\n await http_post({\n endpoint: endpoints.CUSTOMER_ADDRESS_SELECTED_SET,\n params: { ref_addressitem: refAddressItem, ref_address: null },\n });\n await queryClient.invalidateQueries([endpoints.INITIALIZATION]);\n onRegionSelected(refAddressItem);\n }\n }\n });\n\n const rStyle = useAnimatedStyle(() => {\n return { opacity: opacity.value };\n }, []);\n\n useEffect(() => {\n opacity.value = withRepeat(withTiming(0.3, { duration: 1500 }), -1, true);\n }, []);\n\n return (\n mutation.mutate()} style={styles.container}>\n \n {t(\"FIND_WITH_MY_LOCATION\")}\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n margin: 20,\n borderWidth: 2,\n borderColor: colors.LOGO_COLOR,\n padding: 8,\n borderRadius: 18,\n },\n flashingContainer: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n },\n txt: {\n flex: 1,\n fontSize: 18,\n textAlign: \"center\",\n textAlignVertical: \"center\",\n color: colors.LOGO_COLOR,\n },\n});\n\nfunction extractRefAddressItem(addressItem: TAddressItem[]): null | number {\n for (let i = 0; i < addressItem.length; i++) {\n const element = addressItem[i];\n if (element.intersectsWithGivenCoordinates === true) {\n return element.id;\n }\n if (element.addressItems.length > 0) {\n return extractRefAddressItem(element.addressItems);\n }\n }\n return null;\n}\n","import React from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { ErrorView, LoadingView } from \"@/components\";\nimport { endpoints, http_post, TAddressItem, TAddressItemListResponse } from \"@/network\";\n\nimport { Accordion } from \"./Accordion\";\n\ninterface IRegionAccordion {\n searchValue: string;\n}\n\nexport const RegionAccordion = ({ searchValue }: IRegionAccordion) => {\n const { data, refetch, error } = useQuery([endpoints.ADDRESS_ITEMS_LIST] as const, ({ queryKey }) =>\n http_post({ endpoint: queryKey[0] })\n );\n\n if (data) {\n const addressItemList = data.result.addressItemList;\n\n return (\n <>\n {addressItemList.map((item: TAddressItem, index: number) => {\n return item.branchCount > 0 ? (\n \n ) : null;\n })}\n \n );\n }\n\n if (error) return ;\n\n return ;\n};\n","import React, { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ScrollView, View } from \"react-native\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { SearchBar } from \"@/components\";\nimport { globalStyles } from \"@/constants\";\n\nimport { FindMyLocation } from \"./FindMyLocation\";\nimport { RegionAccordion } from \"./RegionAccordion\";\nimport { useWindowSize } from \"@/hooks\";\n\nexport const SelectRegionScreen = () => {\n const { t } = useTranslation();\n const [search, setSearch] = useState(\"\");\n const { windowWidth, windowHeight } = useWindowSize();\n return (\n \n \n \n \n \n {/* just extra space at the bottom */}\n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport { useNavigation, useRoute } from \"@react-navigation/core\";\nimport { StyleSheet, View, Keyboard } from \"react-native\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useToast } from \"@itsramiel/react-native-toast-notifications\";\n\nimport { colors } from \"@/constants\";\nimport { goBackToScreen, Alert } from \"@/utils\";\nimport { useEvent } from \"@/contexts\";\nimport { UpdateAddressScreenProps } from \"@/routes\";\nimport { RButton, TextArea, BodyText } from \"@/components\";\nimport { selectUserCoordinates, useAppSelector } from \"@/state\";\nimport { http_post, endpoints, TAddressItem, TCustomerAddress, TParams } from \"@/network\";\n\nimport { TAddressItemInputs } from \"../../types\";\nimport { GlowingText, AddressInput, RegionInput } from \"../../components\";\n\ninterface IUpdateAddressForm {\n addressItemInputs: TAddressItemInputs;\n customerAddress: TCustomerAddress;\n}\n\nexport const UpdateAddressForm = ({ addressItemInputs, customerAddress }: IUpdateAddressForm) => {\n const event = useEvent();\n const toast = useToast();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const userCoordinates = useAppSelector(selectUserCoordinates);\n const navigation = useNavigation();\n const { coordinates: pickedCoordinates } = useRoute().params;\n\n const addressCoordinates =\n pickedCoordinates !== undefined\n ? pickedCoordinates\n : customerAddress.latitude !== null && customerAddress.longitude !== null\n ? { longitude: customerAddress.longitude, latitude: customerAddress.latitude }\n : undefined;\n\n const [addressTitle, setAddressTitle] = useState(customerAddress.title ?? \"\");\n const [addressDescValue, ...addressDescExtraArray] = (customerAddress.address ?? \"\").split(\"-\");\n const [addressDesc, setAddressDesc] = useState({ value: addressDescValue, error: { value: false } });\n const [addressDescExtra, setAddressDescExtra] = useState({ value: addressDescExtraArray.join(\"-\"), error: { value: false } });\n const [addressItems, setAddressItems] = useState(addressItemInputs);\n\n useEffect(() => {\n setAddressItems(addressItemInputs);\n }, [addressItemInputs]);\n\n const onAddressItemSelected = (addressItem: TAddressItem, selectedIndex: number) => {\n const depth = addressItem.parentCount;\n\n setAddressItems((prevAddressItems) => {\n const newSelectedAddressItems: TAddressItemInputs = [prevAddressItems[0], ...prevAddressItems.slice(1)];\n const currentSelectedIndex = prevAddressItems[depth].index;\n const didChange = currentSelectedIndex !== selectedIndex;\n newSelectedAddressItems[depth] = {\n ...newSelectedAddressItems[depth],\n index: selectedIndex,\n error: { value: false },\n };\n if (didChange) {\n for (let index = depth + 1; index < newSelectedAddressItems.length; index++) {\n if (index === depth + 1) {\n newSelectedAddressItems[index] = {\n addressItems: newSelectedAddressItems[depth].addressItems?.[selectedIndex].addressItems,\n index: undefined,\n error: { value: false },\n };\n } else {\n newSelectedAddressItems[index] = { addressItems: undefined, index: undefined, error: { value: false } };\n }\n }\n }\n return newSelectedAddressItems;\n });\n };\n\n useEffect(() => {\n event.on(\"onAddressItemSelected_updateAdress\", onAddressItemSelected);\n return () => {\n event.off(\"onAddressItemSelected_updateAdress\", onAddressItemSelected);\n };\n }, []);\n\n const onEditLocationPress = () => {\n navigation.navigate(\"Map\", {\n isEditing: true,\n initialCoordinates: addressCoordinates ?? undefined,\n });\n };\n\n const setAddressTitleText = useCallback((text: string) => {\n setAddressTitle(text);\n }, []);\n\n const setAddressDescText = useCallback((text: string) => {\n setAddressDesc({ value: text, error: { value: false } });\n }, []);\n\n const setAddressDescExtraText = useCallback((text: string) => {\n setAddressDescExtra({ value: text, error: { value: false } });\n }, []);\n\n const onSubmit = () => {\n Keyboard.dismiss();\n\n const address1 = addressDesc.value.trim();\n const address2 = addressDescExtra.value.trim();\n let seperator = \" - \";\n\n if (address1.length <= 0) {\n // check that address description and address description extra are not empty\n if (address1.length <= 0) setAddressDesc({ ...addressDesc, error: { value: true } });\n toast.show(t(\"ENTER_VALID_ADDRESS\"));\n return;\n }\n\n if (address2.length <= 0) {\n // if the user did not provide extra description => don't add a \"-\", dash, between addresses\n seperator = \"\";\n }\n\n const fullAddress = address1 + seperator + address2;\n\n for (let depth = 0; depth < addressItemInputs.length; depth++) {\n const selectedAddressItem = addressItems[depth];\n if (selectedAddressItem.index === undefined) {\n setAddressItems(\n (prev) => prev.map((_, currentDepth) => (currentDepth === depth ? { ..._, error: { value: true } } : _)) as TAddressItemInputs\n );\n toast.show(t(\"DROPDOWN_AREA_SELECT\"));\n return;\n }\n }\n\n const cleanedSelectedIndices = addressItems.map((selectedAddressItem) => {\n if (selectedAddressItem.index === undefined) {\n throw new Error(\"CreateAddress.onSubmit: selected address item is undefined\");\n } else {\n return selectedAddressItem.index;\n }\n });\n\n const selectedAddressItem = cleanedSelectedIndices.reduce(\n (prevValue, selectedIndex, currentIndex) => (currentIndex === 0 ? prevValue : prevValue.addressItems[selectedIndex]),\n addressItemInputs[0].addressItems[cleanedSelectedIndices[0]]\n );\n\n const ref_addressItem = selectedAddressItem.id;\n\n Alert.alert(t(\"INFORMATION\"), t(\"ARE_YOU_SURE\"), [\n { text: t(\"CANCEL\") },\n {\n text: t(\"YES\"),\n onPress: () => {\n mutation.mutate({\n ref_addressitem: ref_addressItem,\n ref_address: customerAddress.id,\n location_latitude: addressCoordinates?.latitude ?? null,\n location_longitude: addressCoordinates?.longitude ?? null,\n address: fullAddress,\n title: addressTitle,\n ...userCoordinates,\n });\n },\n },\n ]);\n };\n\n const mutation = useMutation((params: TParams) => http_post({ endpoint: endpoints.CUSTOMER_ADDRESS_UPDATE, params }), {\n onSuccess: async () => {\n await queryClient.invalidateQueries([endpoints.INITIALIZATION]);\n await queryClient.invalidateQueries([endpoints.CUSTOMER_ADDRESS_LIST]);\n goBackToScreen(navigation, \"AddressList\");\n },\n });\n\n const onRegionInputPress = (regionsList: TAddressItem[], selectedIndex?: number) => {\n navigation.navigate(\"SingleItemSelector\", {\n data: regionsList,\n propertyName: \"name\",\n selectedIndex: selectedIndex,\n screenTitle: regionsList[0]?.addressLevelName ?? \"\",\n onSelectEvent: \"onAddressItemSelected_updateAdress\",\n });\n };\n\n return (\n <>\n {/* Address Title */}\n \n {t(\"ADDRESS_TITLE\")}\n \n \n {/* Address Location */}\n \n }\n onPress={onEditLocationPress}\n placeholder=\"\"\n value={t(addressCoordinates ? \"ADDRESS_GPS_DESCRIPTION_DEFINED\" : \"ADDRESS_GPS_DESCRIPTION_UNDEFINED\")}\n />\n \n {/* Level 1 Area */}\n \n {addressItems.map((selectedAddressItem, depth) => {\n if (selectedAddressItem.addressItems) {\n const addressItems = selectedAddressItem.addressItems;\n return (\n onRegionInputPress(addressItems, selectedAddressItem.index ?? undefined)}\n />\n );\n }\n })}\n \n {/* Address Description */}\n \n \n {t(\"ADDRESS_DESCRIPTION\")}\n \n \n {/* Address Description Extra */}\n \n {t(\"ADDRESS_DESCRIPTION_EXTRA\")}\n \n \n \n {/* Submit Button */}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n fieldContainer: {\n marginVertical: 10,\n },\n inputHeader: {\n padding: 5,\n fontWeight: \"bold\",\n color: \"#444\",\n textTransform: \"capitalize\",\n },\n textBoxContainer: {\n marginHorizontal: 5,\n },\n submitBtn: {\n marginVertical: 20,\n },\n});\n","import React from \"react\";\nimport { ScrollView } from \"react-native\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { globalStyles } from \"@/constants\";\nimport { useKeyboardManager } from \"@/hooks\";\nimport { UpdateAddressScreenProps } from \"@/routes\";\nimport { ErrorView, LoadingView } from \"@/components\";\n\nimport { UpdateAddressForm } from \"./UpdateAddressForm\";\nimport { useUpdateAddressQuery } from \"./useUpdateAddressQuery\";\n\nexport const UpdateAddressScreen = ({ route }: UpdateAddressScreenProps) => {\n const { refAddress, coordinates } = route.params;\n\n useKeyboardManager();\n const { data, error, refetch } = useUpdateAddressQuery(refAddress, coordinates);\n\n if (data) {\n return (\n \n \n \n \n \n );\n }\n\n if (error) {\n return ;\n }\n\n return ;\n};\n","import { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport { TRoutes } from \"@/routes\";\nimport { Alert } from \"@/utils\";\nimport { setLoading, stopLoading, useAppDispatch } from \"@/state\";\nimport { endpoints, http_post, TAddressItemListResponse, TCompositeResponse, TCustomerAddressListResponse } from \"@/network\";\n\nimport { getSelectedAddressItemIndices } from \"../../utils\";\nimport { TAddressItemInput, TAddressItemInputs, TFirstAddressItemInput } from \"../../types\";\n\nexport const useUpdateAddressQuery = (addressId: TRoutes[\"UpdateAddress\"][\"refAddress\"], coordinates: TRoutes[\"UpdateAddress\"][\"coordinates\"]) => {\n const { t } = useTranslation();\n const dispatch = useAppDispatch();\n\n const queryInfo = useQuery(\n [\"updateAddress\", addressId] as const,\n async ({ queryKey }) => {\n const [_key, addressId] = queryKey;\n\n const requestParams = [\n {\n operation: endpoints.ADDRESS_ITEMS_LIST,\n params: {\n ref_address: addressId,\n disable_filter_refaddress: \"1\",\n location_latitude: coordinates?.latitude,\n location_longitude: coordinates?.longitude,\n },\n },\n {\n operation: endpoints.CUSTOMER_ADDRESS_LIST,\n params: { ref_address: addressId },\n },\n ];\n\n const {\n result: [addressItemsResponse, customerAddressResponse],\n } = await http_post>({\n endpoint: endpoints.COMPOSITE,\n params: { operations: JSON.stringify(requestParams) },\n });\n\n const customerAddress = customerAddressResponse.result.customerAddressList[0];\n const { addressItemList, maxAddressLevelDeep } = addressItemsResponse.result;\n\n const firstItem: TFirstAddressItemInput = { addressItems: addressItemList, index: undefined, error: { value: false } };\n const restItems: TAddressItemInput[] = Array(maxAddressLevelDeep)\n .fill(0)\n .map((_) => ({ addressItems: undefined, index: undefined, error: { value: false } }));\n\n let addressItemInputs: TAddressItemInputs = [firstItem, ...restItems];\n\n let selectedAddressItemIndices = getSelectedAddressItemIndices(\n addressItemList,\n (addressItem) => addressItem.id === customerAddress.refAddressItem\n );\n\n if (coordinates) {\n selectedAddressItemIndices = getSelectedAddressItemIndices(\n addressItemList,\n (addressItem) => addressItem.intersectsWithGivenCoordinates === true\n );\n if (selectedAddressItemIndices === null) {\n Alert.alert(t(\"ERROR\"), t(\"REGION_NOT_FOUND_BY_GPS\"));\n }\n }\n\n if (selectedAddressItemIndices !== null) {\n addressItemInputs = selectedAddressItemIndices.map((index, depth) => ({\n addressItems: (selectedAddressItemIndices ?? [])\n .slice(0, depth)\n .reduce((prevValue, selectedIndex) => prevValue[selectedIndex].addressItems, addressItemList),\n index,\n error: { value: false },\n })) as TAddressItemInputs;\n }\n\n return { addressItemInputs, customerAddress };\n },\n { cacheTime: 0 }\n );\n\n useEffect(() => {\n if (coordinates) {\n // only refetch if coordinates were selected because\n // we need the server to check if it matches any region to auto fill the form\n // if it is null/undefines, there is nothing useful coming from refetching other than disturbing the user\n queryInfo.refetch();\n }\n }, [coordinates]);\n\n useEffect(() => {\n if (queryInfo.isRefetching) {\n dispatch(setLoading());\n } else {\n dispatch(stopLoading());\n }\n }, [queryInfo.isRefetching]);\n\n return queryInfo;\n};\n","export * from \"./SelectRegionScreen\";\nexport * from \"./AddressListScreen\";\nexport * from \"./MapScreen\";\nexport * from \"./CreateAddressScreen\";\nexport * from \"./UpdateAddressScreen\";\n","import { RootState } from \"@/state\";\n\nexport const selectIsEditingAddresses = (rootState: RootState) => rootState.addressList.isEditing;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport type TAddressListSlice = {\n isEditing: boolean;\n};\n\nconst initialState: TAddressListSlice = {\n isEditing: false,\n};\n\nexport const addressListSlice = createSlice({\n name: \"addressList\",\n initialState,\n reducers: {\n resetState: () => {\n return initialState;\n },\n toggleIsEditing: (state) => {\n state.isEditing = !state.isEditing;\n },\n disableEditing: (state) => {\n state.isEditing = false;\n },\n enableEditing: (state) => {\n state.isEditing = true;\n },\n },\n});\n\nexport const addressListReducer = addressListSlice.reducer;\n\nexport const { toggleIsEditing, disableEditing, enableEditing, resetState } = addressListSlice.actions;\n","export * from \"./addressListSelectors\";\nexport * from \"./addressListSlice\";\n","import { TAddressItem } from \"@/network\";\n\n/**\n * A function which recursively loops through nested address items to find the indices leading to the addressItem\n * with the property value matching the value tested against\n * @param addressItemsList the list of address items to search in\n * @param compareFn a function to check the desired addressItem\n * @returns null if could not find a match or an array with indices leading to the addressItem\n */\nexport function getSelectedAddressItemIndices(addressItemsList: TAddressItem[], compareFn: (addressItem: TAddressItem) => boolean): number[] | null {\n for (let index = 0; index < addressItemsList.length; index++) {\n const addressItem = addressItemsList[index];\n if (addressItem.addressItems.length > 0) {\n const result = getSelectedAddressItemIndices(addressItem.addressItems, compareFn);\n if (result !== null) {\n return [index, ...result];\n }\n } else {\n if (compareFn(addressItem)) return [index];\n }\n }\n return null;\n}\n","export * from \"./getSelectedAddressItemIndices\";\n","export * from \"./useHeaderDismissAuthScreensIcon\";\n","import { NavigationProp, useNavigation } from \"@react-navigation/native\";\nimport { useCallback } from \"react\";\n\nimport { useHeaderDismissIcon } from \"@/hooks\";\nimport { TRoutes } from \"@/routes\";\n\nimport { popAuthScreens } from \"../utils\";\n\nexport const useHeaderDismissAuthScreensIcon = () => {\n const navigation = useNavigation>();\n\n useHeaderDismissIcon(\n useCallback(() => {\n popAuthScreens(navigation);\n }, [navigation])\n );\n};\n","export * from \"./screens\";\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Keyboard, StyleSheet } from \"react-native\";\n\nimport { RButton } from \"@/components\";\nimport { useAppSelector } from \"@/state\";\n\ninterface IActionButtons {\n handleSubmit: () => void;\n}\n\nexport const ActionButtons = ({ handleSubmit }: IActionButtons) => {\n const { t } = useTranslation();\n const { isLoadingVisible, loadingSource } = useAppSelector((state) => state.loading);\n const showLoading = isLoadingVisible && loadingSource === \"ForgotPasswordScreen-resend\";\n return (\n {\n handleSubmit();\n Keyboard.dismiss();\n }}\n disabled={showLoading}\n style={styles.container}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n marginTop: 20,\n },\n});\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { CONFIG } from \"@/constants\";\nimport { Notice } from \"@/components\";\n\nexport const ForgotPasswordHeader = () => {\n const { t } = useTranslation();\n let noticeText = \"\";\n switch (CONFIG._uniqueId) {\n case \"telephone\":\n noticeText = t(\"REMIND_PASSWORD_TELEPHONE_INFORMATION\");\n break;\n case \"email\":\n noticeText = t(\"REMIND_PASSWORD_EMAIL_INFORMATION\");\n break;\n default:\n noticeText = t(\"REMIND_PASSWORD_TELEPHONE_INFORMATION\");\n break;\n }\n\n return {noticeText};\n};\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useForm, Controller } from \"react-hook-form\";\n\nimport { CONFIG } from \"@/constants\";\nimport { Input, PhoneInput } from \"@/components\";\n\nimport { ActionButtons } from \"./ActionButtons\";\n\nexport type TForgotPasswordInputs = {\n username: string;\n};\n\ninterface ForgotPasswordForm {\n onResendPassword: (data: TForgotPasswordInputs) => void;\n emailOrPhone: \"email\" | \"telephone\";\n phoneNumberStartingDigit: `${number}`;\n phoneNumberExtension: `+${number}`;\n phoneNumberMaxLength: number;\n defaultUsername: TForgotPasswordInputs[\"username\"];\n}\n\nexport const ForgotPasswordForm: React.FC = ({\n onResendPassword,\n emailOrPhone,\n phoneNumberExtension,\n phoneNumberMaxLength,\n phoneNumberStartingDigit,\n defaultUsername,\n}) => {\n const { t } = useTranslation();\n\n const {\n control,\n handleSubmit,\n formState: { errors },\n } = useForm({ defaultValues: { username: defaultUsername } });\n\n const onSubmit = handleSubmit(\n useCallback(async (data) => {\n if (emailOrPhone === \"telephone\") {\n data = {\n ...data,\n username: data.username.replace(/\\D/g, \"\"),\n };\n }\n onResendPassword(data);\n }, [])\n );\n\n return (\n \n {emailOrPhone === \"telephone\" ? (\n (\n \n )}\n name=\"username\"\n defaultValue=\"\"\n />\n ) : null}\n {emailOrPhone === \"email\" ? (\n ()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n message: t(\"EMAIL_VALIDATION\"),\n },\n }}\n render={({ field: { onChange, onBlur, value } }) => (\n \n )}\n name=\"username\"\n defaultValue=\"\"\n />\n ) : null}\n \n \n );\n};\n","import React from \"react\";\nimport { View } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { Alert } from \"@/utils\";\nimport { http_post, endpoints } from \"@/network\";\nimport { ForgotPasswordScreenProps } from \"@/routes\";\nimport { CONFIG, globalStyles, STATUS_CODES } from \"@/constants\";\n\nimport { ForgotPasswordHeader } from \"./ForgotPassworHeader\";\nimport { ForgotPasswordForm, TForgotPasswordInputs } from \"./ForgotPasswordForm\";\n\nexport const ForgotPasswordScreen = ({ navigation, route }: ForgotPasswordScreenProps) => {\n const { t } = useTranslation();\n const { username } = route.params;\n\n const mutation = useMutation(async (params: TForgotPasswordInputs) => http_post({ endpoint: endpoints.RESEND_CODE, params }), {\n onSuccess: (data) => {\n if (data.statusCode === STATUS_CODES.PasswordResentToUser) {\n Alert.alert(t(\"INFORMATION\"), data.statusCodeDescription);\n navigation.goBack();\n }\n },\n });\n\n return (\n \n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet, TouchableOpacity, View } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { BodyText } from \"@/components\";\n\ninterface IForgotPasswordButton {\n onPress: () => void;\n}\n\nexport const ForgotPasswordButton = ({ onPress }: IForgotPasswordButton) => {\n const { t } = useTranslation();\n\n return (\n \n \n {`${t(\"FORGOT_PASSWORD_BUTTON\")} ?`}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n margin: 30,\n alignItems: \"flex-end\",\n },\n text: {\n color: colors.LOGO_COLOR,\n textDecorationLine: \"underline\",\n },\n});\n","import { useCallback } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\nimport { Platform, StyleSheet, View, ViewProps } from \"react-native\";\n\nimport { useAppSelector } from \"@/state\";\nimport { colors, CONFIG } from \"@/constants\";\nimport { Row, RButton, BodyText } from \"@/components\";\n\nimport { ForgotPasswordButton } from \"./ForgotPasswordButton\";\nimport { LoginFormInputs, TLoginFormInputs } from \"./LoginFormInputs\";\n\ninterface ILoginForm extends ViewProps {\n onLogin: (data: TLoginFormInputs) => void;\n onSignup: ISignup[\"onPress\"];\n onForgotPassword: (inputs: TLoginFormInputs) => void;\n}\n\nexport const LoginForm = ({ onLogin, onSignup, onForgotPassword, ...props }: ILoginForm) => {\n const { t } = useTranslation();\n const {\n control,\n handleSubmit,\n formState: { errors },\n getValues,\n } = useForm();\n\n const onLoginPress = handleSubmit(\n useCallback(\n async (data) => {\n if (CONFIG._uniqueId === \"telephone\") {\n data = {\n ...data,\n username: data.username.replace(/\\D/g, \"\"),\n };\n }\n onLogin(data);\n },\n [onLogin]\n )\n );\n\n return (\n \n \n onForgotPassword(getValues())} />\n \n \n {t(\"DONT_HAVE_ACCOUNT\")}\n \n \n \n );\n};\n\ninterface ILogin {\n onPress: () => void;\n}\n\nconst Login = ({ onPress }: ILogin) => {\n const { t } = useTranslation();\n\n const { isLoadingVisible, loadingSource } = useAppSelector((state) => state.loading);\n const isAuthenticating = loadingSource !== null && loadingSource === \"LoginScreen-login\" && isLoadingVisible;\n\n return ;\n};\n\ninterface ISignup {\n onPress: () => void;\n}\n\nconst Signup = ({ onPress }: ISignup) => {\n const { t } = useTranslation();\n\n const { isLoadingVisible, loadingSource } = useAppSelector((state) => state.loading);\n const isAuthenticating = loadingSource !== null && loadingSource === \"LoginScreen-login\" && isLoadingVisible;\n\n return (\n \n );\n};\n\nconst styles = StyleSheet.create({\n signupContainer: {\n backgroundColor: \"transparent\",\n borderWidth: 3,\n borderColor: colors.LOGO_COLOR,\n paddingVertical: Platform.OS === \"ios\" ? 7 : 5,\n },\n signupTxt: {\n color: colors.LOGO_COLOR,\n },\n dontHaveAccount: {\n padding: 20,\n textAlign: \"center\",\n fontWeight: \"bold\",\n flex: 1,\n },\n});\n","import React from \"react\";\nimport { Controller } from \"react-hook-form\";\nimport { View, ViewProps } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\nimport type { Control, FieldErrors } from \"react-hook-form\";\n\nimport { CONFIG } from \"@/constants\";\nimport { Input, PasswordInput, PhoneInput } from \"@/components\";\n\nexport type TLoginFormInputs = {\n username: string;\n password: string;\n};\n\ninterface ILoginFormInputs extends ViewProps {\n emailOrPhone: typeof CONFIG[\"_uniqueId\"];\n control: Control;\n errors: FieldErrors;\n}\n\nexport const LoginFormInputs = ({ emailOrPhone, control, errors, ...props }: ILoginFormInputs) => {\n const { t } = useTranslation();\n return (\n \n {emailOrPhone === \"telephone\" ? (\n (\n \n )}\n name=\"username\"\n defaultValue=\"\"\n />\n ) : null}\n {emailOrPhone === \"email\" ? (\n ()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n message: t(\"EMAIL_VALIDATION\"),\n },\n }}\n render={({ field: { onChange, onBlur, value } }) => (\n \n )}\n name=\"username\"\n defaultValue=\"\"\n />\n ) : null}\n (\n \n )}\n name=\"password\"\n defaultValue=\"\"\n />\n \n );\n};\n","import { useCallback } from \"react\";\nimport { Keyboard, ScrollView } from \"react-native\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nimport { globalStyles } from \"@/constants\";\nimport { LoginScreenProps } from \"@/routes\";\nimport { useAppDispatch, userLoggedIn } from \"@/state\";\nimport { useKeyboardManager } from \"@/hooks\";\nimport { endpoints, http_post, TCustomerLoginResponse } from \"@/network\";\n\nimport { LoginForm } from \"./LoginForm\";\nimport { TLoginFormInputs } from \"./LoginFormInputs\";\nimport { useHeaderDismissAuthScreensIcon } from \"../../hooks\";\nimport { popAuthScreens } from \"../../utils\";\n\nexport const LoginScreen = ({ navigation }: LoginScreenProps) => {\n const dispatch = useAppDispatch();\n const queryClient = useQueryClient();\n\n useHeaderDismissAuthScreensIcon();\n\n useKeyboardManager();\n\n const mutation = useMutation(async (params: TLoginFormInputs) => http_post({ endpoint: endpoints.LOGIN, params }), {\n onSuccess: async (data) => {\n if (data.result.sessionId) {\n dispatch(userLoggedIn(data.result.sessionId));\n await queryClient.invalidateQueries([endpoints.INITIALIZATION]);\n popAuthScreens(navigation);\n }\n },\n });\n\n const onLogin = useCallback(async (data: TLoginFormInputs) => {\n Keyboard.dismiss();\n mutation.mutate(data);\n }, []);\n const onSignup = useCallback(() => {\n navigation.navigate(\"SignUp\");\n }, []);\n\n const onForgotPassword = useCallback((inputs: TLoginFormInputs) => {\n navigation.navigate(\"ForgotPassword\", { username: inputs.username });\n }, []);\n\n return (\n \n \n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport React, { ComponentRef, useRef, useState } from \"react\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { Alert } from \"@/utils\";\nimport { ServerError } from \"@/models\";\nimport { SignUpConfirmScreenProps } from \"@/routes\";\nimport { globalStyles, CONFIG, STATUS_CODES } from \"@/constants\";\nimport { useAppDispatch, userEnteredValidOtp } from \"@/state\";\nimport { endpoints, handleMutationError, http_post, TCustomerSignUpConfirmResponse } from \"@/network\";\nimport { AnimatedLock, Notice, OneTimePasswordInput, RButton, ResendButton } from \"@/components\";\n\nimport { useHeaderDismissAuthScreensIcon } from \"../hooks\";\nimport { popAuthScreens } from \"../utils\";\n\nexport const SignUpConfirmScreen = ({ navigation, route }: SignUpConfirmScreenProps) => {\n const { t } = useTranslation();\n const dispatch = useAppDispatch();\n const { refCustomerSignup, CodeInformation } = route.params;\n\n const resendButtonRef = useRef>(null);\n\n const [codeValue, setCodeValue] = useState(\"\");\n\n useHeaderDismissAuthScreensIcon();\n\n let desc = t(\"SIGN_UP_CONFIRM_INFORMATION\");\n if (CodeInformation) {\n desc = CodeInformation;\n }\n\n const { mutate: submitCode, isLoading: isSubmittingCode } = useMutation(\n async (params: { ref_customer_signup: string; confirmation_code: string }) =>\n http_post({ endpoint: endpoints.SIGN_UP_CONFIRM, params }),\n {\n onSuccess: (data) => {\n if (data.result.sessionId) {\n dispatch(userEnteredValidOtp(data.result.sessionId));\n popAuthScreens(navigation);\n }\n },\n onError: (error) => {\n if (error instanceof ServerError && error.status_code === STATUS_CODES.InvalidSignupConfirmationCode) {\n setCodeValue(\"\");\n }\n handleMutationError(error);\n },\n }\n );\n\n const onSubmitCode = async () => {\n if (codeValue.length < CONFIG._confirmationCodeLength) {\n Alert.alert(t(\"WARNING\"), t(\"SIGN_UP_SMS_CODE_WARNING\"));\n } else {\n submitCode({ ref_customer_signup: refCustomerSignup, confirmation_code: codeValue });\n }\n };\n\n const { mutate: onResendCode, isLoading: isResendingCode } = useMutation(\n async () => http_post({ endpoint: endpoints.SIGN_UP_CONFIRMATION_RETRIGGER, params: { ref_customer_signup: refCustomerSignup } }),\n {\n onSuccess: (data) => {\n Alert.alert(t(\"INFORMATION\"), data.statusCodeDescription);\n resendButtonRef.current?.resetTime();\n },\n }\n );\n\n return (\n \n {desc}\n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { colors } from \"@/constants\";\nimport { InputRadio, BodyText } from \"@/components\";\n\ninterface IAgreeToTerms {\n onChange: (newValue: boolean) => void;\n value: boolean;\n onViewTermsAndConditions: () => void;\n}\n\nexport const AgreeToTerms = ({ onChange, value, onViewTermsAndConditions }: IAgreeToTerms) => {\n const { t } = useTranslation();\n\n return (\n \n {t(\"AGREE_TO_EULA_AND_PRIVACY_POLICY\")}{\" \"}\n \n {t(\"CLICK_TO_VIEW\")}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n containedText: {\n color: colors.HYPERLINK,\n },\n});\n","import { ComponentProps, useState } from \"react\";\nimport { StyleSheet, View, TextInput, TextInputProps } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { Popover, BodyText } from \"@/components\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\ntype IoniconsNameProp = ComponentProps[\"name\"];\n\ninterface InputInterface {\n inputOptions: TextInputProps;\n iconName: IoniconsNameProp;\n iconNameFocused: IoniconsNameProp;\n error?: string | undefined;\n isPhoneNumber?: boolean;\n noBorderBottom?: boolean;\n tooltipIconName: IoniconsNameProp;\n toolTipText: string;\n}\n\nexport const InputWithTooltip = ({\n inputOptions,\n iconName,\n iconNameFocused,\n noBorderBottom,\n tooltipIconName,\n error,\n toolTipText,\n}: InputInterface) => {\n const [isFocused, setIsFocused] = useState(false);\n\n return (\n \n \n \n \n setIsFocused(true)}\n onBlur={(e) => {\n if (inputOptions.onBlur) {\n inputOptions.onBlur(e);\n }\n setIsFocused(false);\n }}\n />\n \n \n \n \n {error ? (\n \n {error}\n \n ) : null}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: colors.FORM_INPUT_BG,\n },\n inputContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n flex: 1,\n },\n input: {\n paddingVertical: 12,\n color: colors.FORM_INPUT,\n flex: 1,\n },\n icon: {\n marginLeft: 15,\n },\n tooltipIcon: {\n marginHorizontal: 15,\n },\n input_error: {\n flexDirection: \"column\",\n flex: 1,\n borderBottomColor: \"#ccc\",\n marginLeft: 15,\n },\n error: {\n color: colors.FORM_ERROR_MSG,\n paddingLeft: 10,\n fontSize: 12,\n opacity: 0.8,\n marginBottom: 5,\n },\n});\n","import React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { View } from \"react-native\";\nimport { Controller } from \"react-hook-form\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Alert } from \"@/utils\";\nimport { CONFIG } from \"@/constants\";\nimport { useAppSelector } from \"@/state\";\nimport { RButton, DateInput, Input, PhoneInput, Notice, PasswordInput } from \"@/components\";\n\nimport { AgreeToTerms } from \"./AgreeToTerms\";\nimport { InputWithTooltip } from \"./InputWithToolTip\";\n\ntype TSignUpFormInputs = {\n gsm_no: string;\n email: string;\n password: string;\n password_again: string;\n name: string;\n birth_date: string;\n promotion_code: string;\n agree_to_terms: boolean;\n};\n\ninterface ISignUpForm {\n onSignup: (data: Record) => void;\n onViewTermsAndConditions: () => void;\n isPhoneRequired: boolean;\n isEmailRequired: boolean;\n promotionCodeEnabled: boolean;\n promotionCodeDescription: string;\n phoneNumberStartingDigit: `${number}`;\n phoneNumberExtension: `+${number}`;\n phoneNumberMaxLength: number;\n passwordMinLength: number;\n passwordMaxLength: number;\n}\n\nexport const SignUpForm = ({\n onSignup,\n onViewTermsAndConditions,\n isEmailRequired,\n isPhoneRequired,\n passwordMaxLength,\n passwordMinLength,\n phoneNumberExtension,\n phoneNumberMaxLength,\n phoneNumberStartingDigit,\n promotionCodeDescription,\n promotionCodeEnabled,\n}: ISignUpForm) => {\n const { t } = useTranslation();\n\n const {\n control,\n handleSubmit,\n formState: { errors },\n } = useForm();\n\n const onSignupPress = handleSubmit((data) => {\n const cleanedNumber = data.gsm_no.replace(/\\D/g, \"\");\n data = { ...data, gsm_no: cleanedNumber };\n const { agree_to_terms, password, password_again } = data;\n if (!agree_to_terms) {\n Alert.alert(t(\"WARNING\"), t(\"ACCEPT_TERMS_AND_CONDITIONS\"));\n return;\n }\n if (!(password === password_again)) {\n Alert.alert(t(\"WARNING\"), t(\"SIGN_UP_PASSWORD_MATCH_WARNING\"));\n return;\n }\n let editedData = {};\n if (isPhoneRequired) {\n editedData = { ...data, username: data.gsm_no };\n } else if (isEmailRequired) {\n editedData = { ...data, username: data.email };\n }\n onSignup(editedData);\n });\n\n return (\n \n {isPhoneRequired ? (\n (\n \n )}\n name=\"gsm_no\"\n defaultValue=\"\"\n />\n ) : null}\n {isEmailRequired ? (\n ()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n message: t(\"EMAIL_VALIDATION\"),\n },\n }}\n render={({ field: { onChange, onBlur, value } }) => (\n \n )}\n name=\"email\"\n defaultValue=\"\"\n />\n ) : null}\n (\n \n )}\n name=\"password\"\n defaultValue=\"\"\n />\n (\n \n )}\n name=\"password_again\"\n defaultValue=\"\"\n />\n (\n \n )}\n name=\"name\"\n defaultValue=\"\"\n />\n {t(\"OPTIONAL\")}\n {!isPhoneRequired ? (\n (\n \n )}\n name=\"gsm_no\"\n defaultValue=\"\"\n />\n ) : null}\n {!isEmailRequired ? (\n (\n \n )}\n name=\"email\"\n defaultValue=\"\"\n />\n ) : null}\n (\n \n )}\n name=\"birth_date\"\n defaultValue=\"\"\n />\n {promotionCodeEnabled ? (\n (\n \n )}\n name=\"promotion_code\"\n defaultValue=\"\"\n />\n ) : null}\n {\"\"}\n (\n \n )}\n name=\"agree_to_terms\"\n defaultValue={false}\n />\n \n \n );\n};\n\ninterface Signup {\n onPress: () => void;\n}\n\nconst Signup: React.FC = ({ onPress }) => {\n const { t } = useTranslation();\n const { isLoadingVisible, loadingSource } = useAppSelector((state) => state.loading);\n\n const isRegistering = Boolean(isLoadingVisible && loadingSource && loadingSource === \"SignupScreen-signup\");\n return (\n \n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { CONFIG } from \"@/constants\";\nimport { Notice } from \"@/components\";\n\nexport const SignUpHeader = () => {\n let text;\n const { t } = useTranslation();\n\n switch (CONFIG._uniqueId) {\n case \"telephone\":\n text = t(\"TELEPHONE_CONFIRMATION_INFO\");\n break;\n\n case \"email\":\n text = t(\"EMAIL_CONFIRMATION_INFO\");\n break;\n\n default:\n text = t(\"TELEPHONE_CONFIRMATION_INFO\");\n break;\n }\n\n return {text};\n};\n","import React, { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { ScrollView} from \"react-native\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\n\nimport { Alert } from \"@/utils\";\nimport { ServerError } from \"@/models\";\nimport { SignUpScreenProps } from \"@/routes\";\nimport { useKeyboardManager } from \"@/hooks\";\nimport { STATUS_CODES, globalStyles, CONFIG } from \"@/constants\";\nimport { userSignedUpWithoutVerification, setLoading, useAppDispatch } from \"@/state\";\nimport { http_post, endpoints, TCustomerSignUpResponse, usePromotionCode, TParams, handleMutationError } from \"@/network\";\n\nimport { SignUpForm } from \"./SignUpForm\";\nimport { SignUpHeader } from \"./SignupHeader\";\nimport { useHeaderDismissAuthScreensIcon } from \"../../hooks\";\nimport { popAuthScreens } from \"../../utils\";\n\nexport const SignUpScreen = ({ navigation }: SignUpScreenProps) => {\n const { t } = useTranslation();\n const dispatch = useAppDispatch();\n useHeaderDismissAuthScreensIcon();\n\n useKeyboardManager();\n\n const { promotionCodeEnabled, promotionCodeDescription } = usePromotionCode();\n\n const mutation = useMutation(async (params: TParams) => http_post({ endpoint: endpoints.SIGN_UP, params }), {\n onMutate: () => dispatch(setLoading(\"SignupScreen-signup\")),\n onSuccess: (data) => {\n const { result, statusCode, statusCodeDescription } = data;\n if (statusCode == STATUS_CODES.RedirectToSmsConfirmation && result.refCustomerSignup) {\n navigation.navigate(\"SignUpConfirm\", {\n refCustomerSignup: result.refCustomerSignup,\n CodeInformation: statusCodeDescription,\n });\n } else if (statusCode === STATUS_CODES.NoSignupVerificationNeeded && result.sessionId) {\n dispatch(userSignedUpWithoutVerification(data.result.sessionId));\n popAuthScreens(navigation);\n }\n },\n onError: (error, params) => {\n if (error instanceof ServerError && error.status_code === STATUS_CODES.PromotionCodeInvalid) {\n Alert.alert(t(\"WARNING\"), t(\"PROMOTION_CODE_INVALID\"), [\n {\n text: t(\"CANCEL\"),\n },\n {\n text: t(\"YES\"),\n onPress: () => {\n // If user is okay without promotion code\n // => set promotion code to nothing and submit form again\n mutation.mutate({ ...params, promotion_code: undefined });\n },\n },\n ]);\n } else {\n handleMutationError(error);\n }\n },\n });\n\n const onViewTermsAndConditions = useCallback(() => {\n navigation.navigate(\"TermsAndConditions\");\n }, []);\n\n return (\n \n \n \n \n \n \n );\n};\n","export * from \"./LoginScreen\";\nexport * from \"./SignUpScreen\";\nexport * from \"./ForgotPasswordScreen\";\nexport * from \"./SignUpConfirmScreen\";\n","export * from \"./popAuthScreens\";\n","import { TRoutes } from \"@/routes\";\nimport { CommonActions, NavigationProp } from \"@react-navigation/native\";\n\nconst AUTH_SCREENS_SET = new Set([\"Login\", \"SignUp\", \"SignUpConfirm\", \"ForgotPassword\"]);\n\nexport function popAuthScreens(navigation: NavigationProp) {\n navigation.dispatch((state) => {\n const routes = state.routes.filter((route) => !AUTH_SCREENS_SET.has(route.name));\n\n return CommonActions.reset({\n ...state,\n routes,\n index: routes.length - 1,\n });\n });\n}\n","import React from \"react\";\nimport { produce } from \"immer\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet, View } from \"react-native\";\nimport { QueryClient, useMutation, useQueryClient } from \"@tanstack/react-query\";\n\nimport { colors } from \"@/constants\";\nimport { selectSessionId, useAppSelector } from \"@/state\";\nimport { TBranchListItem, endpoints, http_post, TBranchListResponse } from \"@/network\";\nimport { BranchRatings, BodyText, ExpandedImage, Popover, Row, FlashingBorderBox } from \"@/components\";\n\nimport { Favorite } from \"./Favorite\";\nimport { useWindowSize } from \"@/hooks\";\nimport { Image } from \"expo-image\";\nimport { NavigationProp, useNavigation } from \"@react-navigation/native\";\nimport { TRoutes } from \"@/routes\";\n\ninterface IBranchInfo {\n branchData: TBranchListItem;\n currencyType: string;\n}\n\nconst HEART_ICON_SIZE = 24;\n\nconst toggleBranchFavoriteStatusFromBranchesQuery = (queryClient: QueryClient, branchData: TBranchListItem, favoriteStatus: boolean) => {\n // FIX ME: I NEED TO CHANGE IN ALL CAHCES\n queryClient\n .getQueryCache()\n .findAll([endpoints.BRANCH_LIST], { exact: false })\n .map((query) => {\n const response = queryClient.getQueryData(query.queryKey);\n if (response) {\n const newResponse = produce(response, (draft) => {\n draft.result.branchList = draft.result.branchList.map((branch) => {\n if (branch.id === branchData.id) {\n branch.isFavouriteAdded = favoriteStatus;\n }\n return branch;\n });\n });\n\n queryClient.setQueryData(query.queryKey, newResponse);\n }\n });\n};\n\nexport const BranchInfo = ({ branchData, currencyType }: IBranchInfo) => {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const sessionId = useAppSelector(selectSessionId);\n const { windowWidth } = useWindowSize();\n const navigation = useNavigation>();\n\n let deliveryFeeText = t(\"DELIVERY_COST_EXPLANATION\");\n if (branchData.deliveryCostBaseOrderPriceAddress && branchData.deliveryCostBaseOrderPriceAddress != 0) {\n deliveryFeeText += ` ${t(\"DELIVERY_COST_BASE_EXPLANATION\", {\n baseCost: branchData.deliveryCostBaseOrderPriceAddress,\n baseCostCurrency: currencyType,\n })}`;\n }\n\n const addToFavoriteMutation = useMutation(\n async () => http_post({ endpoint: endpoints.CUSTOMER_FAVORTIE_BRANCH_INSERT, params: { ref_branch: branchData.id } }),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([\"branch\", branchData.id]);\n toggleBranchFavoriteStatusFromBranchesQuery(queryClient, branchData, true);\n queryClient.invalidateQueries([\"favorite_branches\"]);\n },\n }\n );\n\n const removeFromFavoriteMutation = useMutation(\n async () => http_post({ endpoint: endpoints.CUSTOMER_FAVORITE_BRANCH_DELETE, params: { ref_branch: branchData.id } }),\n {\n onSuccess: () => {\n queryClient.invalidateQueries([\"branch\", branchData.id]);\n toggleBranchFavoriteStatusFromBranchesQuery(queryClient, branchData, false);\n queryClient.invalidateQueries([\"favorite_branches\"]);\n },\n }\n );\n\n const branchName = branchData.name;\n const showFavoriteIcon = Boolean(sessionId);\n const branchImage = branchData.image;\n const inactiveMessage = branchData.canBeOrderedNow\n ? null\n : branchData.canBeOrderedStatusDescription + (branchData.canReceiveOrderWhenClosed ? ` (${t(\"ORDER_FOR_LATER\")})` : \"\");\n const deliveryDuration = branchData.averageDeliveryTime > 0 ? branchData.averageDeliveryTime : null;\n const minimumOrderPrice = branchData.minimumOrderPriceAddress > 0 ? branchData.minimumOrderPriceAddress : 0;\n const deliveryFee = branchData.deliveryCostAddress > 0 ? branchData.deliveryCostAddress : null;\n\n return (\n \n \n {showFavoriteIcon ? : null}\n {branchName}\n {showFavoriteIcon ? (\n \n ) : null}\n \n {inactiveMessage ? (\n \n {inactiveMessage}\n \n ) : null}\n \n \n \n \n \n \n \n {branchData.paymentTypeList && branchData.paymentTypeList.length >= 0\n ? branchData.paymentTypeList.map((value) => (\n \n \n \n \n \n ))\n : null}\n \n navigation.navigate(\"BranchOrderTimes\", { branchId: branchData.id })}\n >\n {t(\"OPEN_HOURS\")}\n \n \n {[deliveryDuration, deliveryFee, minimumOrderPrice].some((item) => item !== null) ? (\n \n {[deliveryDuration, deliveryFee].some((item) => item !== null) ? (\n \n {deliveryDuration !== null ? (\n \n \n \n {deliveryDuration + \" \" + t(\"MINUTE_SHORT\")}\n \n \n ) : null}\n {deliveryFee !== null ? (\n \n \n \n {`${deliveryFee.toFixed(2)} ${currencyType}`}\n \n \n ) : null}\n \n ) : null}\n {minimumOrderPrice !== null ? (\n \n \n \n {`${minimumOrderPrice.toFixed(2)} ${currencyType}`}\n \n \n ) : null}\n \n ) : null}\n \n \n {branchData.address || branchData.description || branchData.productListDescription ? (\n \n {branchData.address ? {branchData.address} : null}\n {branchData.description ? {branchData.description} : null}\n {branchData.productListDescription ? {branchData.productListDescription} : null}\n \n ) : null}\n {branchData.ratingOrderVisible && branchData.firmRatingCategoryList.length > 0 && branchData.ratingCount > 0 ? (\n \n ) : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n branchContainer: {\n padding: 12,\n backgroundColor: \"#fff\",\n gap: 16,\n },\n branchImageContainer: {\n aspectRatio: 1,\n borderWidth: 1,\n borderColor: \"#ccc\",\n borderRadius: 10,\n overflow: \"hidden\",\n },\n branchName: {\n fontSize: 18,\n textAlign: \"center\",\n fontWeight: \"bold\",\n color: \"#E7283B\",\n flex: 1,\n },\n paymentImgContainer: {\n width: 30,\n height: 30,\n marginRight: 5,\n },\n branchRatingContainer: {\n justifyContent: \"space-around\",\n },\n heartIcon: {\n width: HEART_ICON_SIZE,\n aspectRatio: 1,\n },\n inactiveMessageContainer: {\n padding: 4,\n borderRadius: 4,\n },\n inactiveMessage: {\n color: colors.FORM_ERROR_MSG,\n textAlign: \"center\",\n },\n iconWithtextContainer: {\n gap: 8,\n alignItems: \"center\",\n },\n});\n","import { produce } from \"immer\";\nimport { useTranslation } from \"react-i18next\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { useNavigation } from \"@react-navigation/native\";\nimport React, { useCallback, useImperativeHandle } from \"react\";\nimport { Pressable, SectionList, StyleSheet, View } from \"react-native\";\nimport { QueryClient, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { interpolate, SharedValue, useAnimatedStyle, useSharedValue, withDelay, withSequence, withTiming } from \"react-native-reanimated\";\n\nimport { ArrayElement } from \"@/types\";\nimport { colors } from \"@/constants\";\nimport { BranchProductScreenProps } from \"@/routes\";\nimport { selectSessionId, useAppDispatch, useAppSelector } from \"@/state\";\nimport { endpoints, http_post, TBranchCompositeResponse, TBranchListItem, TProductItem } from \"@/network\";\nimport { AnimatedBodyText, BodyText, ExpandedImage, PriceAndPriceOld, RadioIcon, Row, Seperator, Touchable } from \"@/components\";\n\nimport {\n selectBranch,\n selectProductInfo,\n selectProductItemById,\n selectProductItemComponentById,\n selectProductItemComponentSelectionById,\n selectSectionListData,\n toggleProductItemComponent,\n TProductSlice,\n} from \"../state\";\nimport { Favorite } from \"./Favorite\";\nimport { useWindowSize } from \"@/hooks\";\n\nexport interface BranchProductDetailsMethods {\n /**\n * a function that highlights the product item of the given id\n */\n highlightProductItemById: (productItemComponentId: number) => void;\n}\n\nexport const BranchProductDetails = React.forwardRef>((_, forwardedRef) => {\n const sectionListData = useAppSelector(selectSectionListData);\n\n const progress = useSharedValue(0);\n const unselectedProductItemId = useSharedValue(undefined);\n\n const renderSectionHeader = useCallback(({ section }: { section: ISectionHeader[\"section\"] }) => {\n return ;\n }, []);\n\n const highlightProductItemById: BranchProductDetailsMethods[\"highlightProductItemById\"] = useCallback((id) => {\n unselectedProductItemId.value = id;\n progress.value = withSequence(withTiming(1), withDelay(1000, withTiming(0)));\n }, []);\n\n useImperativeHandle(forwardedRef, () => ({ highlightProductItemById }), [highlightProductItemById]);\n\n return (\n }\n SectionSeparatorComponent={Seperator}\n ItemSeparatorComponent={Seperator}\n sections={sectionListData}\n renderSectionHeader={renderSectionHeader}\n renderItem={renderItem}\n ListFooterComponent={SectionListFooter}\n stickySectionHeadersEnabled\n keyExtractor={keyExtractor}\n showsVerticalScrollIndicator={false}\n />\n );\n});\n\nfunction keyExtractor(item: string) {\n return item;\n}\n\nfunction renderItem({ item }: { item: string }) {\n return ;\n}\n\nconst SectionListFooter = ;\n\nconst IMAGE_SIZE_FACTOR = 2 / 8;\nconst HEART_ICON_SIZE = 24;\n\nconst toggleProductFavoriteStatus = (queryClient: QueryClient, productId: TProductItem[\"id\"], branchId: TBranchListItem[\"id\"], status: boolean) => {\n const query = queryClient.getQueryCache().find([\"BranchProducts\", branchId], { exact: false });\n if (query) {\n const data = queryClient.getQueryData(query.queryKey);\n if (data) {\n const newData = produce(data, (draft) => {\n draft.result[0].result.productList = draft.result[0].result.productList.map((p) => {\n if (p.id === productId) {\n p.isFavouriteAdded = status;\n }\n return p;\n });\n });\n\n queryClient.setQueryData(query.queryKey, newData);\n }\n }\n};\n\nexport const ProductInfo = () => {\n const { t } = useTranslation();\n const branch = useAppSelector(selectBranch);\n const product = useAppSelector(selectProductInfo);\n const navigation = useNavigation();\n const sessionId = useAppSelector(selectSessionId);\n const queryClient = useQueryClient();\n const { windowWidth } = useWindowSize();\n\n const onImagePressed = useCallback(() => {\n if (product === null) throw Error(\"product is null in \");\n if (!product.image) return;\n navigation.navigate(\"ImageDisplay\", { uris: [product.image, ...(product.productImageList ?? [])] });\n }, [product]);\n\n const addToFavoriteMutation = useMutation(\n () => http_post({ endpoint: endpoints.CUSTOMER_FAVORITE_PRODUCT__INSERT, params: { ref_product: product?.id, ref_branch: branch?.id } }),\n {\n onSuccess: () => {\n if (product && branch) {\n toggleProductFavoriteStatus(queryClient, product.id, branch.id, true);\n }\n queryClient.invalidateQueries([endpoints.CUSTOMER_PRODUCT_LIST_FAVORITES]);\n },\n }\n );\n\n const removeFromFavoriteMutation = useMutation(\n () => http_post({ endpoint: endpoints.CUSTOMER_FAVORITE_PRODUCT__DELETE, params: { ref_product: product?.id, ref_branch: branch?.id } }),\n {\n onSuccess: () => {\n if (product && branch) {\n toggleProductFavoriteStatus(queryClient, product.id, branch.id, false);\n }\n queryClient.invalidateQueries([endpoints.CUSTOMER_PRODUCT_LIST_FAVORITES]);\n },\n }\n );\n\n if (product === null) return null;\n\n return (\n \n {/* Name + Favorite */}\n \n {/* Dummy invisible view just to mirror the and have product.name centered */}\n \n {product.name}\n {sessionId ? (\n \n ) : null}\n \n \n {/* Image */}\n {product.image ? (\n \n \n {product.productImageList !== null ? : null}\n \n ) : null}\n {/* Price + oldPrice + contebt */}\n {product.content ? (\n \n \n {product.content}\n {product.content && product.customerOrderImageRequired ? \" \" : \"\"}\n {product.customerOrderImageRequired ? `(${t(\"PICTURE_WILL_BE_REQUIRED\")})` : \"\"}\n \n \n ) : null}\n \n {/* Controls */}\n \n );\n};\n\nfunction MultiImageIcon() {\n return (\n \n \n \n );\n}\n\nconst productInfoStyles = StyleSheet.create({\n container: {\n backgroundColor: \"white\",\n paddingVertical: 10,\n paddingHorizontal: 5,\n },\n productName: {\n fontSize: 18,\n textAlign: \"center\",\n fontWeight: \"bold\",\n color: \"#E7283B\",\n flex: 1,\n },\n productInfoContainer: {\n marginBottom: 5,\n justifyContent: \"space-around\",\n },\n productContentContainer: {\n flex: 1,\n marginLeft: 5,\n justifyContent: \"space-around\",\n },\n productContent: {\n color: colors.LIGHT_TEXT_COLOR,\n marginBottom: 5,\n },\n multiImageIconContainer: {\n position: \"absolute\",\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.6)\",\n padding: 4,\n borderRadius: 4,\n },\n});\n\ninterface ISectionItem {\n productItemComponentId: string;\n}\n\nexport const SectionItem = ({ productItemComponentId }: ISectionItem) => {\n const productItemComponent = useAppSelector((state) => selectProductItemComponentById(state, productItemComponentId));\n const productInfo = useAppSelector(selectProductInfo);\n const dispatch = useAppDispatch();\n\n if (productItemComponent === null || productInfo === null) {\n return null;\n }\n\n const onPressHandler = () => {\n dispatch(toggleProductItemComponent({ productItemId: productItemComponent.refProductItem, productItemComponentId: productItemComponent.id }));\n };\n\n return (\n \n \n {productItemComponent.name}\n \n \n );\n};\n\nconst Selection = ({ productItemComponentId }: ISectionItem) => {\n const isSelected = useAppSelector((state) => selectProductItemComponentSelectionById(state, productItemComponentId));\n\n if (isSelected === null) {\n return null;\n }\n\n return ;\n};\n\nconst sectionItemStyles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n backgroundColor: \"white\",\n alignItems: \"center\",\n paddingHorizontal: 10,\n paddingVertical: 5,\n },\n price: {\n color: \"gray\",\n },\n name: {\n flex: 1,\n paddingHorizontal: 5,\n },\n});\n\nexport interface ISectionHeader {\n section: ArrayElement;\n progress: SharedValue;\n unselectedProductItemId: SharedValue;\n}\n\nexport const SectionHeader = ({ section, progress, unselectedProductItemId }: ISectionHeader) => {\n const { t } = useTranslation();\n const { productItemId } = section;\n const productItem = useAppSelector((state) => selectProductItemById(state, productItemId));\n\n const rStyle = useAnimatedStyle(() => {\n return {\n textShadowRadius: unselectedProductItemId.value === Number(section.productItemId) ? interpolate(progress.value, [0, 1], [0, 10]) : 0,\n };\n }, []);\n\n if (productItem === null) {\n return null;\n }\n\n return (\n \n \n {productItem.name}\n {productItem.required ? RequiredComp : \"\"}\n \n {productItem.multipleSelectionCountMinimum || productItem.multipleSelectionCountMaximum ? (\n \n {productItem.multipleSelectionCountMinimum ? `${t(\"MIN\")}: ${productItem.multipleSelectionCountMinimum} ` : null}\n {productItem.multipleSelectionCountMaximum ? `${t(\"MAX\")}: ${productItem.multipleSelectionCountMaximum}` : null}\n \n ) : null}\n \n );\n};\n\nconst sectionHeaderStyles = StyleSheet.create({\n sectionContainer: {\n backgroundColor: colors.SECTION_HEADER,\n alignItems: \"center\",\n paddingVertical: 5,\n paddingHorizontal: 10,\n flexDirection: \"row\",\n },\n sectionTxt: {\n fontSize: 16,\n flex: 1,\n textShadowColor: \"red\",\n textShadowOffset: { height: 0, width: 0 },\n },\n requiredTxt: {\n fontSize: 18,\n color: \"red\",\n },\n minMaxTxt: {\n color: \"gray\",\n },\n});\n\nconst RequiredComp = *;\n","import React from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport { ListRenderItemInfo } from \"@shopify/flash-list\";\nimport { useNavigation } from \"@react-navigation/native\";\n\nimport { colors, globalStyles } from \"@/constants\";\nimport { SearchedProductsScreenProps } from \"@/routes\";\nimport { TBranchSummary, useCurrencyType } from \"@/network\";\nimport { Row, BodyText, RatingBox, Touchable } from \"@/components\";\n\nexport const BranchSummaryListItem = ({ item: branch }: ListRenderItemInfo) => {\n const currencyType = useCurrencyType();\n const navigation = useNavigation();\n\n const onPress = () => {\n navigation.navigate(\"Branch\", {\n refBranch: branch.id,\n });\n };\n return (\n \n \n \n \n {branch.name}\n \n \n \n {`min. ${branch.minimumOrderPriceAddress} ${currencyType}`}\n \n {!branch.canBeOrderedNow ? : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: colors.SECTION_HEADER,\n paddingVertical: 5,\n paddingHorizontal: 10,\n borderBottomColor: colors.SEPERATOR,\n borderBottomWidth: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n closedBranch: {\n backgroundColor: \"rgba(256,256,256, 0.6)\",\n },\n});\n","import React from \"react\";\nimport { Ionicons } from \"@expo/vector-icons\";\n\nimport { colors, HEADER_ICON_SIZE } from \"@/constants\";\nimport { BodyText, HeaderIconContainer } from \"@/components\";\nimport { useNumberOfActiveFilters } from \"../stores\";\nimport { StyleSheet, View } from \"react-native\";\n\nconst BADGE_SIZE = 20;\n\ninterface IBranchesHeaderButton {\n onPress: () => void;\n}\n\nexport const BranchesHeaderButton = ({ onPress }: IBranchesHeaderButton) => {\n return (\n \n \n \n \n );\n};\n\nconst Badge = () => {\n const numberOfActiveFilters = useNumberOfActiveFilters();\n\n if (numberOfActiveFilters === 0) return null;\n\n return (\n \n \n {numberOfActiveFilters}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n badgeContainer: {\n position: \"absolute\",\n left: \"-20%\",\n top: \"-10%\",\n width: BADGE_SIZE,\n height: BADGE_SIZE,\n borderRadius: 1000,\n backgroundColor: colors[\"LOGO_COLOR_DARK\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n badgeText: {\n color: \"white\",\n fontWeight: \"bold\",\n },\n});\n","import React from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { HEADER_ICON_SIZE } from \"@/constants\";\nimport { HeaderIconContainer } from \"@/components\";\n\ninterface BranchesProductsImagesHeaderButtonProps {\n onPress: () => void;\n}\nexport const BranchesProductsImagesHeaderButton = ({ onPress }: BranchesProductsImagesHeaderButtonProps) => {\n return (\n \n \n \n );\n};\n","import { ComponentRef, useRef } from \"react\";\nimport { FlashList } from \"@shopify/flash-list\";\n\nimport { SearchBar } from \"@/components\";\nimport { TBranchListItem } from \"@/network\";\n\nimport { BranchesList } from \"./BranchesView/components\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface BranchesViewProps {\n branchesList: TBranchListItem[];\n refetch: () => Promise;\n searchValue: string;\n setSearchValue: React.Dispatch>;\n}\n\nexport const BranchesView = ({ searchValue, setSearchValue, branchesList, refetch }: BranchesViewProps) => {\n const { t } = useTranslation();\n const branchesListRef = useRef> | null>(null);\n\n const onBranchesSearchTextChange = (currentSearch: string) => {\n if (searchValue.length === 0 && currentSearch.length === 1) {\n branchesListRef.current?.scrollToOffset({ offset: 0, animated: true });\n }\n setSearchValue(currentSearch);\n };\n\n return (\n <>\n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport React, { ComponentRef, useCallback, useState } from \"react\";\nimport { FlashList, ListRenderItemInfo } from \"@shopify/flash-list\";\nimport { NavigationProp, useNavigation } from \"@react-navigation/native\";\n\nimport { TRoutes } from \"@/routes\";\nimport { NoContent } from \"@/components\";\nimport type { TBranchListItem } from \"@/network\";\n\nimport { BranchesListItem } from \"./BranchesList/components\";\n\ninterface IBranchesList {\n refetch: () => Promise;\n data: TBranchListItem[];\n}\n\nexport const BranchesList = React.forwardRef>, IBranchesList>(({ refetch, data }, forwardedRef) => {\n const { t } = useTranslation();\n const navigation = useNavigation>();\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const onBranchPressedHandler = useCallback((branchId: number) => {\n navigation.navigate(\"Branch\", { refBranch: branchId });\n }, []);\n\n const renderItem = useCallback(\n (props: ListRenderItemInfo) => {\n return ;\n },\n [onBranchPressedHandler]\n );\n\n const onRefresh = useCallback(async () => {\n setIsRefreshing(true);\n await refetch();\n setIsRefreshing(false);\n }, []);\n\n if (data.length <= 0) {\n return ;\n }\n\n return (\n \n );\n});\n","import { Image } from \"expo-image\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { ListRenderItemInfo } from \"@shopify/flash-list\";\nimport { StyleSheet, TouchableOpacity, View, ViewProps } from \"react-native\";\n\nimport { colors } from \"@/constants\";\nimport { TBranchListItem } from \"@/network\";\n\nimport { Row, BodyText, ChevronRight, RatingBox, RATING_BOX_SIZE } from \"@/components\";\n\ninterface IBranchesListItem extends ListRenderItemInfo {\n onPress: (branchId: number) => void;\n}\n\nexport const BranchesListItem = ({ item, onPress }: IBranchesListItem) => {\n const mainContainerStyles = { opacity: item.canBeOrderedNow ? 1 : 0.5 };\n\n return (\n onPress(item.id)}>\n \n \n \n {item.imageCategory ? : null}\n {item.imageFirmDiscount ? : null}\n \n \n \n {item.name}\n \n {item.canBeOrderedNow ? (\n \n {item.firmServiceCategoryText}\n \n ) : (\n \n {item.canBeOrderedStatusDescription}\n \n )}\n \n \n \n {/* eslint-disable-next-line i18next/no-literal-string */}\n min.\n {item.minimumOrderPriceAddress} TL\n \n \n \n \n \n );\n};\n\ninterface IBranchRatingBox extends ViewProps {\n ratingAverage: number | null;\n isFavouriteAdded: boolean;\n}\n\nconst HEART_SIZE = RATING_BOX_SIZE / 2;\n\nconst BranchRatingBox = ({ ratingAverage, isFavouriteAdded, ...props }: IBranchRatingBox) => {\n return (\n \n \n {isFavouriteAdded ? (\n \n \n \n ) : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n mainContainer: {\n alignItems: \"center\",\n paddingHorizontal: 10,\n paddingVertical: 4,\n borderBottomWidth: 1,\n borderBottomColor: \"#ccc\",\n },\n leadingContainer: {\n alignItems: \"center\",\n },\n ratingContainer: {\n marginRight: 5,\n },\n middleContainer: {\n marginHorizontal: 5,\n padding: 5,\n flex: 1,\n },\n nameTxt: {\n fontWeight: \"bold\",\n },\n servicesTxt: {\n fontSize: 10,\n color: colors.TEXT_COLOR,\n },\n canBeOrderedStatusDescription: {\n fontSize: 10,\n color: \"red\",\n },\n trailingContainer: {\n alignItems: \"center\",\n },\n minOrderPriceContainer: {\n alignItems: \"center\",\n },\n minOrderPriceTxt: {\n color: \"#999\",\n },\n heartContainer: {\n position: \"absolute\",\n top: -HEART_SIZE / 2,\n right: -HEART_SIZE / 2,\n width: HEART_SIZE,\n aspectRatio: 1,\n },\n imageSm: {\n width: 32,\n height: 32,\n },\n});\n","export * from \"./BranchesListItem\";\n","export * from \"./BranchesList\";\n","import React, { useCallback } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { NavigationProp, useNavigation } from \"@react-navigation/native\";\n\nimport { TRoutes } from \"@/routes\";\nimport { colors } from \"@/constants\";\nimport { Row, BaseFab, BodyText } from \"@/components\";\nimport { TBranchListItem, useCurrencyType } from \"@/network\";\n\nimport { selectBranchBasketPrice, useBasketStore, selectBranchBasketTotalProductQuantity } from \"@/basket\";\nimport { Price } from \"./CartFAB/components\";\n\nconst BORDER_RADIUS = 10;\ninterface CartFABProps {\n branchId: TBranchListItem[\"id\"];\n}\n\nexport const CartFAB = ({ branchId }: CartFABProps) => {\n const navigation = useNavigation>();\n const onPressHandler = useCallback(() => {\n navigation.navigate(\"Basket\", { branchId });\n }, []);\n\n const currencyType = useCurrencyType();\n const basketPrice = useBasketStore((store) => selectBranchBasketPrice(store, branchId));\n const numberOfProductsInBasket = useBasketStore((store) => selectBranchBasketTotalProductQuantity(store, branchId));\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {numberOfProductsInBasket}\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n borderRadius: BORDER_RADIUS,\n width: 65,\n },\n innerContainer: {\n flex: 1,\n borderRadius: BORDER_RADIUS,\n overflow: \"hidden\",\n },\n cartContainer: {\n flex: 3,\n backgroundColor: \"green\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n priceContainer: {\n flex: 2,\n paddingHorizontal: 2,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: colors.LOGO_COLOR,\n },\n numOfProductsContainer: {\n backgroundColor: colors.LOGO_COLOR,\n position: \"absolute\",\n top: \"-20%\",\n right: \"-10%\",\n width: 30,\n aspectRatio: 1,\n borderRadius: 15,\n alignItems: \"center\",\n },\n});\n","import { BodyText } from \"@/components\";\nimport { Platform, StyleSheet } from \"react-native\";\n\ninterface PriceProps {\n value: number;\n currency: string;\n}\n\nconst BASE_FONT_SIZE = 14;\nconst MIN_TEXT_LENGTH = \"0.00 TL\".length;\n\nexport const Price = ({ value, currency }: PriceProps) => {\n const text = `${value.toFixed(2)} ${currency}`;\n const textLengthDiff = text.length - MIN_TEXT_LENGTH;\n\n const webStyles = Platform.OS === \"web\" ? { fontSize: BASE_FONT_SIZE - 1.2 * (textLengthDiff < 0 ? 0 : textLengthDiff) } : {};\n return (\n \n {text}\n \n );\n};\n\nconst styles = StyleSheet.create({\n text: {\n color: \"white\",\n paddingHorizontal: 2,\n },\n});\n","export * from \"./Price\";\n","import AnimatedLottieView from \"lottie-react-native\";\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { StyleSheet, TouchableOpacity } from \"react-native\";\n\nimport { useActionOnWakeUp } from \"@/hooks\";\nimport { useAppDispatch, setLoading, stopLoading } from \"@/state\";\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst LOTTIE_SOURCE = require(\"../assets/heart.json\");\nconst FRAME_1 = 15;\nconst FRAME_2 = 56;\nconst FRAME_3 = 80;\nconst FRAME_4 = 114;\n\ninterface IFavorite {\n isFavorited: boolean;\n onAddToFavorite: () => Promise;\n onRemoveFromFavorite: () => Promise;\n}\n\nexport const Favorite = ({ isFavorited: _isFavorited, onAddToFavorite, onRemoveFromFavorite }: IFavorite) => {\n const dispatch = useAppDispatch();\n const [isFavorited, setIsFavorited] = useState(_isFavorited);\n const isFirstRender = useRef(true);\n const lottieRef = useRef(null);\n\n useActionOnWakeUp(\n useCallback(() => {\n if (isFavorited) {\n lottieRef.current?.play(FRAME_2, FRAME_2);\n } else {\n lottieRef.current?.play(FRAME_1, FRAME_1);\n }\n }, [isFavorited])\n );\n\n useEffect(() => {\n if (isFirstRender.current) {\n if (isFavorited) {\n lottieRef.current?.play(FRAME_2, FRAME_2);\n } else {\n lottieRef.current?.play(FRAME_1, FRAME_1);\n }\n } else {\n if (isFavorited) {\n lottieRef.current?.play(FRAME_1, FRAME_2);\n } else {\n lottieRef.current?.play(FRAME_3, FRAME_4);\n }\n }\n isFirstRender.current = false;\n }, [isFavorited]);\n\n const onPressHandler = async () => {\n dispatch(setLoading());\n try {\n await (isFavorited ? onRemoveFromFavorite() : onAddToFavorite());\n setIsFavorited((prevValue) => !prevValue);\n } catch (error) {\n // do nothing\n }\n dispatch(stopLoading());\n };\n\n return (\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n height: 24,\n aspectRatio: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n lottie: {\n height: 50,\n aspectRatio: 1,\n },\n});\n","import React from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { ListRenderItemInfo } from \"@shopify/flash-list\";\nimport { Platform, Pressable, StyleSheet, View } from \"react-native\";\n\nimport { TProduct } from \"@/network\";\nimport { colors, globalStyles } from \"@/constants\";\nimport { BodyText, Row, Touchable } from \"@/components\";\n\ninterface ProductListItemProps extends ListRenderItemInfo {\n onPress: () => void;\n onPlusPress?: () => void;\n isActive?: boolean;\n}\n\nexport const ProductListItem = ({ item, onPress, onPlusPress, isActive }: ProductListItemProps) => {\n const contentStr = item.content ?? \"\";\n const oldPriceStr = item.priceOld !== null ? `${item.priceOld?.toFixed(2)} ${item.currencyType}` : \"\";\n const newPriceStr = `${item.price.toFixed(2)} ${item.currencyType}`;\n\n return (\n \n \n \n \n \n \n \n {item.name}\n \n \n {contentStr ? (\n \n \n {contentStr}\n \n \n ) : null}\n \n \n \n {item.isFavouriteAdded ? : null}\n {item.image ? : null}\n \n {newPriceStr}\n \n \n \n \n {oldPriceStr}\n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n paddingHorizontal: 10,\n paddingVertical: 5,\n backgroundColor: \"white\",\n borderBottomColor: \"#e1e1e1\",\n borderBottomWidth: 1,\n height: Platform.OS === \"ios\" ? 51 : 49.75,\n alignItems: \"center\",\n },\n productName: {\n fontSize: 15,\n fontWeight: \"bold\",\n },\n icon: {\n marginRight: 5,\n },\n price: {\n color: \"gray\",\n },\n bottomRow: {\n marginTop: 4,\n },\n});\n","/* eslint-disable react/prop-types */\nimport React from \"react\";\nimport { View } from \"react-native\";\nimport { NavigationProp, useNavigation } from \"@react-navigation/native\";\nimport { FlashList, FlashListProps, ListRenderItemInfo } from \"@shopify/flash-list\";\n\nimport { TRoutes } from \"@/routes\";\nimport { ArrayElement } from \"@/types\";\nimport { BodyText } from \"@/components\";\nimport { globalStyles } from \"@/constants\";\nimport { useGridFlashlistDimensions, useWindowSize } from \"@/hooks\";\nimport { TBranchListItem, TProduct, TProductCategory } from \"@/network\";\n\nimport { GRID_LIST_HORIZONTAL_PADDING, GRID_PRODUCT_MARGIN, MIN_ITEM_WIDTH } from \"./ProductsGridList/constants\";\nimport { GridProduct } from \"./ProductsGridList/components\";\nimport { ProductsGridListContext } from \"./ProductsGridList/helpers\";\n\ninterface ProductsGridListProps extends Omit, \"renderItem\" | \"data\"> {\n branchId: TBranchListItem[\"id\"];\n data: (TProduct | TProductCategory)[];\n}\nexport const ProductsGridList = React.forwardRef, ProductsGridListProps>(\n ({ data, branchId, ...props }, forwardRef) => {\n const navigation = useNavigation>();\n const { windowWidth } = useWindowSize();\n const { itemWidth, itemsPerRow } = useGridFlashlistDimensions(windowWidth - 2 * GRID_LIST_HORIZONTAL_PADDING, MIN_ITEM_WIDTH);\n const itemHeight = 2 * itemWidth;\n\n const onProductPressed = (product: TProduct) => {\n navigation.navigate(\"BranchProduct\", { product, branchId });\n };\n\n const renderItem: FlashListProps>[\"renderItem\"] = (props) => {\n if (props.item.renderType === \"product category\") {\n return ;\n } else if (props.item.renderType === \"product item\") {\n return )} />;\n }\n\n return null;\n };\n\n const overrideItemLayout: FlashListProps>[\"overrideItemLayout\"] = (layout, item) => {\n if (item.renderType === \"product category\") {\n layout.span = itemsPerRow;\n } else if (item.renderType === \"product item\") {\n layout.span = 1;\n layout.size = itemHeight;\n }\n };\n\n return (\n \n \n \n \n \n );\n }\n);\n\ninterface ProductCategoryProps {\n item: TProductCategory;\n}\n\nconst ProductCategory = ({ item }: ProductCategoryProps) => {\n return {item.name};\n};\n","import React from \"react\";\nimport { Pressable, StyleSheet, View } from \"react-native\";\nimport type { ListRenderItemInfo } from \"@shopify/flash-list\";\n\nimport type { TBranchListItem, TProduct } from \"@/network\";\nimport { colors, globalStyles } from \"@/constants\";\nimport { convertImageUrlToThumbnailUrl } from \"@/utils\";\nimport { BodyText, ExpandedImage, PriceAndPriceOld } from \"@/components\";\n\nimport { GRID_PRODUCT_MARGIN } from \"../constants\";\nimport { Stepper } from \"./Stepper\";\n\nconst BORDER_RADIUS = 10;\n\ninterface GridProductProps extends ListRenderItemInfo {\n branchId: TBranchListItem[\"id\"];\n onPressed: (product: TProduct) => void;\n}\n\nexport const GridProduct = ({ item, branchId, onPressed }: GridProductProps) => {\n return (\n \n onPressed(item)}>\n \n \n \n \n \n {item.name}\n \n {item.content ? (\n \n {item.content}\n \n ) : null}\n \n \n \n {!item.canBeOrderedNow ? : null}\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n cellContainer: {\n width: \"100%\",\n aspectRatio: 0.5,\n padding: GRID_PRODUCT_MARGIN,\n },\n productContainer: {\n flex: 1,\n backgroundColor: \"white\",\n borderRadius: BORDER_RADIUS,\n ...globalStyles.shadow,\n },\n img: {\n width: \"100%\",\n alignSelf: \"center\",\n aspectRatio: 1,\n borderTopRightRadius: BORDER_RADIUS,\n borderTopLeftRadius: BORDER_RADIUS,\n overflow: \"hidden\",\n },\n infoContainer: {\n marginBottom: 4,\n marginHorizontal: 4,\n flex: 1,\n justifyContent: \"space-around\",\n },\n name: {\n fontWeight: \"bold\",\n },\n content: {\n color: colors.LIGHT_TEXT_COLOR,\n fontSize: 12,\n },\n});\n","import React, { useMemo } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { Platform, StyleSheet, TouchableOpacity, View } from \"react-native\";\nimport Animated, { useAnimatedStyle, useDerivedValue, withTiming } from \"react-native-reanimated\";\n\nimport { colors } from \"@/constants\";\nimport { BodyText } from \"@/components\";\nimport { TBranchListItem, TProduct } from \"@/network\";\nimport { selectBasketActions, selectBranchBasketProductQuantity, useBasketStore } from \"@/basket\";\n\nimport { useProductsGridListContext } from \"../helpers\";\nimport { GRID_PRODUCT_MARGIN } from \"../constants\";\n\ninterface IStepper {\n branchId: TBranchListItem[\"id\"];\n item: TProduct;\n}\n\nconst ICON_SIZE = Platform.OS === \"ios\" ? 25 : 23;\n\nexport const Stepper = ({ item, branchId }: IStepper) => {\n const { itemWidth } = useProductsGridListContext();\n const controllerSize = itemWidth / 3;\n const quantitySize = itemWidth / 4;\n const padding = controllerSize / 5;\n const { incrementQuantity, decrementQuantity, addProductToBasket, removeFromBasket } = useBasketStore(selectBasketActions);\n const productQuantity = useBasketStore((store) => selectBranchBasketProductQuantity(store, branchId, item.id));\n\n const minimumOrderCount = useMemo(() => item.minimumOrderCount ?? 1, [item]);\n\n const onIncrementPressed = () => {\n if (productQuantity === 0) {\n addProductToBasket({ branchId: branchId, product: item, quantity: 1, opts: { showToast: false } });\n } else {\n incrementQuantity(branchId, item.id);\n }\n };\n\n const onDecrementPressed = () => {\n if (productQuantity > minimumOrderCount) {\n decrementQuantity(branchId, item.id);\n } else if (productQuantity === minimumOrderCount) {\n removeFromBasket(branchId, item.id);\n }\n };\n\n const _canIncrement = useMemo(\n () => canIncrement({ maximumOrderCount: item.maximumOrderCount, productQuantity: null, productQuantityInBasket: productQuantity }),\n [productQuantity]\n );\n\n const active = useDerivedValue(() => {\n return productQuantity === 0 ? 0 : 1;\n }, [productQuantity]);\n\n const rStyle = useAnimatedStyle(() => {\n return {\n width: controllerSize,\n height: withTiming(active.value === 1 ? 3 * controllerSize : controllerSize),\n borderWidth: withTiming(active.value),\n };\n }, []);\n\n return (\n \n \n \n \n \n {productQuantity}\n \n \n \n \n {!item.canBeOrderedNow ? : null}\n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n position: \"absolute\",\n top: -GRID_PRODUCT_MARGIN / 2,\n right: -GRID_PRODUCT_MARGIN / 2,\n backgroundColor: colors.LOGO_COLOR_OPACITY_0_2,\n borderRadius: 4,\n borderColor: colors.LOGO_COLOR_OPACITY_0_4,\n overflow: \"hidden\",\n },\n controllerContainer: {\n width: \"100%\",\n aspectRatio: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n quantityContainer: {\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n alignSelf: \"center\",\n aspectRatio: 1,\n borderRadius: 4,\n borderColor: colors.LOGO_COLOR_OPACITY_0_8,\n borderWidth: 1,\n },\n});\n\nconst canIncrement = ({\n productQuantity,\n productQuantityInBasket,\n maximumOrderCount,\n}: {\n productQuantity: number | null;\n productQuantityInBasket: number;\n maximumOrderCount: number | null;\n}) => ((productQuantity ?? 0) + productQuantityInBasket < (maximumOrderCount ?? 1000) && productQuantity !== 1000 ? true : false);\n","export * from \"./GridProduct\";\nexport * from \"./Stepper\";\n","export const MIN_ITEM_WIDTH = 110;\nexport const GRID_PRODUCT_MARGIN = 6;\nexport const GRID_LIST_HORIZONTAL_PADDING = 12;\n","import React, { useContext } from \"react\";\n\ntype TProductsGridListContext = {\n itemWidth: number;\n itemHeight: number;\n};\n\nexport const ProductsGridListContext = React.createContext(null as unknown as TProductsGridListContext);\n\nexport const useProductsGridListContext = () => useContext(ProductsGridListContext);\n","export * from \"./ProductsGridListContext\";\n","import { Platform } from \"react-native\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\n\nimport { colors, HEADER_ICON_SIZE } from \"@/constants\";\nimport { HeaderIconContainer, HeaderIconContainerProps } from \"@/components\";\n\ninterface IShareHeaderButton extends HeaderIconContainerProps {\n onShare: () => void;\n}\n\nexport const ShareHeaderButton = ({ onShare, ...props }: IShareHeaderButton) => {\n if (Platform.OS === \"web\") return null;\n return (\n \n \n \n );\n};\n","export * from \"./CartFAB\";\nexport * from \"./BranchInfo\";\nexport * from \"./ShareHeaderButton\";\nexport * from \"./Favorite\";\nexport * from \"./BranchProductDetails\";\nexport * from \"./BranchesHeaderButton\";\nexport * from \"./BranchesProductsImagesHeaderButton\";\nexport * from \"./BranchSummaryListItem\";\nexport * from \"./ProductListItem\";\nexport * from \"./BranchesView\";\nexport * from \"./ProductsGridList\";\n","export * from \"./useBranch\";\n","import { useQuery, UseQueryOptions } from \"@tanstack/react-query\";\n\nimport { endpoints, http_post, TBranchListItem, TBranchListResponse, useAddressId } from \"@/network\";\n\nexport const useBranch = (branchId: TBranchListItem[\"id\"], queryOptions?: Exclude, \"queryFn\" | \"queryKey\">) => {\n const userAddress = useAddressId();\n return useQuery({\n queryKey: [\"branch\", branchId, userAddress],\n queryFn: async () => {\n const response = await http_post({\n endpoint: endpoints.BRANCH_LIST,\n params: { ref_branch: branchId, ...userAddress },\n });\n\n return response.result.branchList[0] ?? null;\n },\n ...queryOptions,\n });\n};\n","export * from \"./screens\";\nexport * from \"./routes\";\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { createMaterialTopTabNavigator } from \"@react-navigation/material-top-tabs\";\n\nimport { useAppStore } from \"@/state\";\nimport { TBranchTabsRoutes } from \"@/routes\";\n\nimport { selectBranch } from \"../state\";\nimport { SCREEN_OPTIONS } from \"./constants\";\nimport { BranchProductsScreen } from \"../screens/BranchProductsScreen\";\nimport { BranchCategoriesScreen } from \"../screens/BranchCategoriesScreen\";\nimport { BranchReviewsScreen } from \"../screens/BranchReviewsScreen\";\nimport { useWindowSize } from \"@/hooks\";\n\nconst { Navigator, Screen } = createMaterialTopTabNavigator();\n\nexport const BranchTabs = () => {\n const store = useAppStore();\n const { t } = useTranslation();\n const branchReviewCount = selectBranch(store.getState())?.ratingCount ?? 0;\n const { windowWidth } = useWindowSize();\n return (\n \n \n \n {branchReviewCount > 0 ? (\n \n ) : null}\n \n );\n};\n","import React, { useEffect } from \"react\";\nimport { Keyboard } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport { createMaterialTopTabNavigator } from \"@react-navigation/material-top-tabs\";\n\nimport { globalStyles } from \"@/constants\";\nimport { BranchesTabsScreenProps, TBranchesTabsRoutes } from \"@/routes\";\n\nimport { BranchesScreen } from \"../screens/BranchesScreen\";\nimport { SCREEN_OPTIONS } from \"./constants\";\nimport { BranchesProductsImagesScreen } from \"../screens/BranchesProductsImagesScreen\";\nimport { BranchesHeaderButton, BranchesProductsImagesHeaderButton } from \"../components\";\nimport { getBranchesFilterStoreActions } from \"../stores\";\nimport { prefetchBranchesFilters } from \"../screens/FilterBranchesScreen/queries\";\nimport { useWindowSize } from \"@/hooks\";\n\nconst { Navigator, Screen } = createMaterialTopTabNavigator();\n\nexport const BranchesTabs = ({ navigation, route }: BranchesTabsScreenProps) => {\n const { t } = useTranslation();\n const { windowWidth } = useWindowSize();\n\n const onBranchesHeaderPressed = () => {\n navigation.navigate(\"FilterBranches\", { showDiscountedBranches: route.params.params?.showDiscountedBranches });\n };\n\n const branchesProductsHeaderPressed = () => {\n Keyboard.dismiss();\n navigation.navigate(\"ProductsSearchHistory\");\n };\n\n useEffect(() => {\n // Adds HeaderRight icon according to active tab\n const unsubscribe = navigation.addListener(\"state\", ({ data }) => {\n const route = data.state.routes[data.state.routes.length - 1];\n if (!route || route.name !== \"BranchesTabs\") return;\n const index = route.state?.index ?? 0;\n if (index === 0) {\n navigation.setOptions({\n headerRight: () => ,\n });\n } else if (index === 1) {\n navigation.setOptions({\n headerRight: () => ,\n });\n }\n });\n\n return unsubscribe;\n }, []);\n\n useEffect(() => {\n prefetchBranchesFilters();\n return () => {\n getBranchesFilterStoreActions().reset();\n };\n }, []);\n\n return (\n \n \n \n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { createMaterialTopTabNavigator } from \"@react-navigation/material-top-tabs\";\n\nimport { TFavoritesTabRoutes } from \"@/routes\";\n\nimport { SCREEN_OPTIONS } from \"./constants\";\nimport { FavoriteBranchesScreen } from \"../screens/FavoriteBranchesScreen\";\nimport { FavoriteProductsScreen } from \"../screens/FavoriteProductsScreen\";\nimport { useWindowSize } from \"@/hooks\";\n\nconst { Screen, Navigator } = createMaterialTopTabNavigator();\n\nexport const FavoritesTabs = () => {\n const { t } = useTranslation();\n const { windowWidth } = useWindowSize();\n return (\n \n \n \n \n );\n};\n","import { colors } from \"@/constants\";\n\nexport const SCREEN_OPTIONS = {\n tabBarIndicatorStyle: {\n backgroundColor: colors.LOGO_COLOR,\n },\n tabBarLabelStyle: {\n textTransform: \"none\",\n },\n lazy: true,\n} as const;\n","export * from \"./BranchesTabs\";\nexport * from \"./BranchTabs\";\nexport * from \"./FavoritesTabs\";\n","import { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { FlashList, ListRenderItemInfo } from \"@shopify/flash-list\";\n\nimport { TBranchListItem } from \"@/network\";\nimport { BasketsScreenProps } from \"@/routes\";\nimport { ErrorView, LoadingView, NoContent, Screen } from \"@/components\";\n\nimport { useBasketsQuery } from \"./BasketsScreen/hooks\";\nimport { BranchBasket, HeaderRight } from \"./BasketsScreen/components\";\nimport { useNewOrder } from \"@/hooks\";\n\nexport const BasketsScreen = ({ navigation }: BasketsScreenProps) => {\n const { t } = useTranslation();\n const { onNewOrder } = useNewOrder();\n const { data, error, refetch } = useBasketsQuery();\n\n useEffect(() => {\n navigation.setOptions({\n headerRight: () => ,\n });\n }, []);\n\n const renderItem = (props: ListRenderItemInfo) => {\n return ;\n };\n\n if (data) {\n if (data.length === 0) {\n return ;\n }\n return (\n \n \n \n );\n }\n if (error) {\n return ;\n }\n\n return ;\n};\n","import { ListRenderItemInfo } from \"@shopify/flash-list\";\nimport { useNavigation } from \"@react-navigation/native\";\n\nimport { TBranchListItem } from \"@/network\";\nimport { BasketsScreenProps } from \"@/routes\";\nimport { Touchable } from \"@/components\";\n\nimport { BasketSummary, BranchInfo } from \"./BranchBasket/components\";\n\ninterface BranchBasketProps extends ListRenderItemInfo {}\nexport const BranchBasket = ({ item: branch }: BranchBasketProps) => {\n const navigation = useNavigation();\n\n const onPress = () => {\n navigation.navigate(\"Branch\", { refBranch: branch.id });\n };\n\n return (\n \n \n \n \n );\n};\n","import { useTranslation } from \"react-i18next\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { globalStyles } from \"@/constants\";\nimport { BodyText, Row } from \"@/components\";\nimport { TBranchListItem, useCurrencyType } from \"@/network\";\nimport { getBasketProductExtraPrice, getBranchBasketPrice, getBranchBasketProducts, selectBranchBasket, useBasketStore } from \"@/basket\";\n\nconst MAX_PRODUCT_ROWS = 4;\n\ninterface BasketSummaryProps {\n branch: TBranchListItem;\n}\n\nexport const BasketSummary = ({ branch }: BasketSummaryProps) => {\n const { t } = useTranslation();\n const branchBasket = useBasketStore((store) => selectBranchBasket(store, branch.id));\n const basketPrice = getBranchBasketPrice(branchBasket);\n const basketProducts = getBranchBasketProducts(branchBasket);\n\n const visibleBasketProducts = basketProducts.length > MAX_PRODUCT_ROWS ? basketProducts.slice(0, MAX_PRODUCT_ROWS - 1) : basketProducts;\n const nonVisibleProducts = basketProducts.length > MAX_PRODUCT_ROWS ? basketProducts.slice(MAX_PRODUCT_ROWS - 1) : [];\n\n return (\n \n \n {visibleBasketProducts.map((basketProduct) => {\n const price = basketProduct.quantity * (basketProduct.info.price + getBasketProductExtraPrice(basketProduct).extraPrice);\n return ;\n })}\n {nonVisibleProducts.length > 0 ? (\n acc + p.quantity * (p.info.price + getBasketProductExtraPrice(p).extraPrice), 0)}\n />\n ) : null}\n \n \n {branch.deliveryCostAddress ? : null}\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: \"white\",\n paddingVertical: 8,\n paddingLeft: 50,\n paddingRight: 12,\n gap: 16,\n },\n innerContainer: {\n gap: 6,\n },\n row: {\n justifyContent: \"space-between\",\n gap: 12,\n },\n});\n\ninterface BasketRowProps {\n leadingText: string;\n price: number;\n bold?: boolean;\n}\nconst BasketRow = ({ leadingText, price, bold }: BasketRowProps) => {\n const currencyType = useCurrencyType();\n return (\n \n \n {leadingText}\n \n {`${price.toFixed(2)} ${currencyType}`}\n \n );\n};\n","import Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { BodyText, RatingBox, Row, Touchable } from \"@/components\";\nimport { TBranchListItem, useCurrencyType } from \"@/network\";\nimport { colors, globalStyles } from \"@/constants\";\nimport { selectBasketActions, useBasketStore } from \"@/basket\";\nimport { confirmAction } from \"@/utils\";\n\ninterface BranchInfoProps {\n branch: TBranchListItem;\n}\n\nexport const BranchInfo = ({ branch }: BranchInfoProps) => {\n const { t } = useTranslation();\n const currency = useCurrencyType();\n const { emptyBasket } = useBasketStore(selectBasketActions);\n\n const onRemovePress = () => {\n confirmAction({ action: () => emptyBasket(branch.id), prompt: t(\"BASKETS_SCREEN.CLEAR_BASKET_PROMPT\", { branchName: branch.name }) });\n };\n\n return (\n \n \n \n \n {branch.name}\n \n {branch.canBeOrderedNow ? null : (\n \n {branch.canBeOrderedStatusDescription ?? t(\"CLOSED\")}\n \n )}\n \n {`min. ${branch.minimumOrderPriceAddress} ${currency}`}\n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 8,\n gap: 12,\n backgroundColor: colors.SECTION_HEADER,\n alignItems: \"center\",\n borderBottomWidth: 1,\n borderBottomColor: colors.SEPERATOR,\n flexDirection: \"row\",\n },\n name: {\n fontWeight: \"bold\",\n fontSize: 16,\n },\n closed: {\n color: colors.ERROR,\n fontSize: 12,\n },\n});\n","export * from \"./BranchInfo\";\nexport * from \"./BasketSummary\";\n","import Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { selectBasketActions, useBasketStore } from \"@/basket\";\nimport { HeaderIconContainer } from \"@/components\";\nimport { colors, HEADER_ICON_SIZE } from \"@/constants\";\nimport { confirmAction } from \"@/utils\";\n\nexport const HeaderRight = () => {\n const { t } = useTranslation();\n const { resetState } = useBasketStore(selectBasketActions);\n const numberOfBaskets = useBasketStore((store) => Object.keys(store.state.baskets).length);\n\n if (numberOfBaskets === 0) return null;\n\n return (\n confirmAction({ action: () => resetState(), prompt: t(\"BASKETS_SCREEN.CLEAR_ALL_BASKETS_PROMPT\") })}>\n \n \n );\n};\n","export * from \"./BranchBasket\";\nexport * from \"./HeaderRight\";\n","export * from \"./useBasketsQuery\";\n","import { useTranslation } from \"react-i18next\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\n\nimport {\n endpoints,\n http_post,\n TBranchListItem,\n TBranchListResponse,\n TCompositeResponse,\n TParams,\n TProductListResponse,\n TRequestOperation,\n useAddressId,\n} from \"@/network\";\nimport { normalizeArray, normalizeArrayBy, warn } from \"@/utils\";\nimport { selectBasketActions, useBasketStore } from \"@/basket\";\n\nimport { selectBranchBasketsSummary } from \"./useBasketsQuery/utils\";\n\nexport const useBasketsQuery = () => {\n const { t } = useTranslation();\n const userAddressId = useAddressId();\n const queryClient = useQueryClient();\n const { updateBranchBasketFromBranchProducts } = useBasketStore(selectBasketActions);\n const branchBasketsSummary = useBasketStore((store) => selectBranchBasketsSummary(store.state));\n\n const fillBranchesCache = (branches: TBranchListItem[]) => {\n branches.forEach((branch) => queryClient.setQueryData([\"branch\", branch.id, userAddressId], branch));\n };\n\n const { data: branches, ...rest } = useQuery({\n keepPreviousData: true,\n queryKey: [\"baskets\", userAddressId, branchBasketsSummary.map((item) => item.branchId).sort()],\n queryFn: async () => {\n // return early if there are no branches to query for\n if (branchBasketsSummary.length === 0) return [];\n\n const branchesResponse = await http_post({\n endpoint: endpoints.BRANCH_LIST,\n params: { xml_branch: createXml(branchBasketsSummary.map((item) => item.branchId)), ...userAddressId },\n });\n\n const branches = branchesResponse.result.branchList;\n const normalizedBranches = normalizeArray(branches);\n const filteredBranchBasketsSummary = branchBasketsSummary.filter((item) => Boolean(normalizedBranches[item.branchId]));\n\n const requestParams: { operation: TRequestOperation; params: TParams }[] = [];\n\n filteredBranchBasketsSummary.forEach(({ branchId, productIds }) => {\n requestParams.push({\n operation: endpoints.PRODUCT_LIST,\n params: { ref_branch: branchId, ...userAddressId, xml_product: createXml(productIds) },\n });\n });\n\n const responses = await http_post>({\n endpoint: endpoints.COMPOSITE,\n params: { operations: JSON.stringify(requestParams) },\n });\n\n const productsResponses = responses.result;\n\n let unavailableProductsStr = \"\";\n fillBranchesCache(branches);\n productsResponses.forEach(({ result }) => {\n updateBranchBasketFromBranchProducts(result.refBranch, result.productList, (unavailableProducts) => {\n const branch = normalizedBranches[result.refBranch];\n if (unavailableProducts.length > 0 && branch) {\n unavailableProductsStr += `\\n\\n${branch.name}:`;\n unavailableProductsStr += unavailableProducts.reduce((acc, item) => acc + `\\n${item.quantity} x ${item.info.name}`, \"\");\n }\n });\n });\n\n if (unavailableProductsStr.length > 0) {\n warn(t(\"BASKET_CHANGED\") + unavailableProductsStr);\n }\n\n return branches;\n },\n });\n\n if (branches === undefined) {\n return { data: branches, ...rest };\n } else {\n const normalizedBranchesInfo = normalizeArrayBy(branchBasketsSummary, \"branchId\");\n const filteredBranches = branches.filter((branch) => normalizedBranchesInfo[branch.id]);\n const sortedBranches = filteredBranches.sort((b1, b2) => normalizedBranchesInfo[b2.id].lastUpdated - normalizedBranchesInfo[b1.id].lastUpdated);\n\n return { data: sortedBranches, ...rest };\n }\n};\n\nfunction createXml(ids: number[]) {\n let xml = \"\";\n ids.forEach((id) => (xml += ``));\n xml += \"\";\n\n return xml;\n}\n","export * from \"./selectBranchBasketsSummary\";\n","import { TBasketState } from \"@/basket\";\nimport { TProduct } from \"@/network\";\n\nexport const selectBranchBasketsSummary = (basketStore: TBasketState) => {\n return Object.values(basketStore.baskets).map((basket) => {\n const productsIdSet = new Set(Object.keys(basket.products) as unknown as Array);\n\n return {\n branchId: basket.branchId,\n productIds: Array.from(productsIdSet),\n lastUpdated: basket.lastUpdated,\n };\n });\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { StyleSheet, View } from \"react-native\";\nimport { FlashList, ListRenderItemInfo } from \"@shopify/flash-list\";\n\nimport { colors } from \"@/constants\";\nimport { useEvent } from \"@/contexts\";\nimport { useAppSelector } from \"@/state\";\nimport { Row, BodyText, Touchable } from \"@/components\";\nimport type { TProductCategory } from \"@/network\";\n\nimport { selectProductsAndProductsCategoryList } from \"../state\";\nimport { BranchCategoriesTabScreenProps } from \"@/routes\";\n\nconst CIRCLE_SIZE = 35;\n\ninterface ProductCategoryWithIndex extends TProductCategory {\n index: number;\n}\n\nexport const BranchCategoriesScreen = ({ navigation }: BranchCategoriesTabScreenProps) => {\n const event = useEvent();\n const branchItems = useAppSelector(selectProductsAndProductsCategoryList);\n\n const categories: ProductCategoryWithIndex[] = useMemo(() => {\n return branchItems.reduce((total: ProductCategoryWithIndex[], item, index) => {\n if (item.renderType === \"product category\") {\n total.push({ ...item, index: index });\n }\n return total;\n }, []);\n }, [branchItems]);\n\n const onCategoryPressed = useCallback((category: ProductCategoryWithIndex) => {\n event.emit(\"scrollToCategory_products\", category.index);\n navigation.jumpTo(\"BranchProductsTab\");\n }, []);\n\n const renderItem = useCallback((props: ListRenderItemInfo) => {\n return ;\n }, []);\n\n return ;\n};\n\ninterface ICategoryItem extends ListRenderItemInfo {\n onPress: (category: ProductCategoryWithIndex) => void;\n}\n\nconst CategoryItem = ({ item, onPress }: ICategoryItem) => {\n const { t } = useTranslation();\n\n return (\n onPress(item)}>\n \n \n {item.categoryClassName === t(\"STARS\") || item.categoryClassName === t(\"OTHERS\") ? item.name : `(${item.categoryClassName}) ${item.name}`}\n \n \n {item.numOfProducts}\n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n categoryContainer: {\n justifyContent: \"space-between\",\n alignItems: \"center\",\n backgroundColor: \"white\",\n padding: 8,\n borderBottomColor: \"#eee\",\n borderBottomWidth: 1,\n },\n numOfProducts: {\n borderColor: colors.LOGO_COLOR,\n borderWidth: 1,\n borderRadius: CIRCLE_SIZE / 2,\n height: CIRCLE_SIZE,\n width: CIRCLE_SIZE,\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n});\n","import { useTranslation } from \"react-i18next\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { ComponentProps, useEffect } from \"react\";\nimport Ionicons from \"@expo/vector-icons/Ionicons\";\nimport { Pressable, StyleSheet, View } from \"react-native\";\n\nimport { warn } from \"@/utils\";\nimport { colors } from \"@/constants\";\nimport { BodyText, LoadingView } from \"@/components\";\nimport { BranchOrderTimesScreenProps } from \"@/routes\";\nimport { selectUserCoordinates, useAppStore } from \"@/state\";\nimport { TBranchGeneralOrderTimesResponse, endpoints, getUserAddressId, http_post } from \"@/network\";\n\nexport function BranchOrderTimesScreen(props: BranchOrderTimesScreenProps) {\n const { t } = useTranslation();\n const { route, navigation } = props;\n const { branchId } = route.params;\n const store = useAppStore();\n const { data, error } = useQuery({\n staleTime: Infinity,\n queryKey: [endpoints.BRANCHORDERTIMES_GENERAL_LIST, branchId],\n queryFn: () => {\n const coords = selectUserCoordinates(store.getState());\n return http_post({\n endpoint: endpoints.BRANCHORDERTIMES_GENERAL_LIST,\n params: {\n ref_branch: branchId,\n ...getUserAddressId(),\n ...(coords ? { location_latitude: coords.gps_lat, location_longitude: coords.gps_lng } : undefined),\n },\n });\n },\n });\n\n useEffect(() => {\n if (error) {\n navigation.goBack();\n warn(error instanceof Error ? error.message : t(\"ERROR_OCCURED\"));\n }\n }, [error]);\n\n return (\n \n navigation.goBack()} />\n {data ? : }\n \n );\n}\n\ninterface BranchOrderTimesProps extends BranchOrderTimesScreenProps {\n orderTimes: TBranchGeneralOrderTimesResponse[\"result\"][\"branchOrderTimes\"];\n}\nfunction BranchOrderTimes({ navigation, orderTimes }: BranchOrderTimesProps) {\n const { t } = useTranslation();\n return (\n \n \n \n {t(\"BRANCH_ORDER_TIMES_SCREEN.BRANCH_ORDER_TIME\")}\n navigation.goBack()}>\n \n \n \n \n {orderTimes.map((orderTime) => (\n \n {orderTime.dayName}\n {`${orderTime.timeStart}-${orderTime.timeEnd}`}\n \n ))}\n \n \n );\n}\n\nfunction CloseIcon(props: Omit, \"name\" | \"color\" | \"size\">) {\n return ;\n}\n\nconst styles = StyleSheet.create({\n screen: {\n flex: 1,\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.3)\",\n },\n opacity_0: {\n opacity: 0,\n },\n container: {\n padding: 16,\n backgroundColor: \"white\",\n borderRadius: 4,\n marginHorizontal: 16,\n gap: 32,\n },\n headerText: {\n fontSize: 20,\n fontWeight: \"bold\",\n },\n header: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n listContainer: {\n gap: 12,\n },\n listItem: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n dayName: {\n fontSize: 16,\n },\n dayTime: {\n fontWeight: \"bold\",\n },\n});\n","import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Pressable, StyleSheet, View } from \"react-native\";\n\nimport { colors, globalStyles } from \"@/constants\";\nimport { BranchProductPreviewScreenProps } from \"@/routes\";\nimport { BodyText, BottomSheet, BranchRatings, ExpandedImage, RButton, Row } from \"@/components\";\n\nexport const BranchProductPreviewScreen = ({ route, navigation }: BranchProductPreviewScreenProps) => {\n const { branchProduct } = route.params;\n\n const { t } = useTranslation();\n\n const onPressGo = useCallback(() => {\n navigation.replace(\"Branch\", { refBranch: branchProduct.refBranch, refProduct: branchProduct.refProduct });\n }, []);\n\n const onImagePress = useCallback(() => {\n navigation.replace(\"ImageDisplay\", {\n uris: [branchProduct.image],\n });\n }, []);\n\n return (\n \n \n \n {branchProduct.branchName}\n \n \n \n \n \n \n {branchProduct.name}\n \n {branchProduct.showPrice ? (\n {`${branchProduct.price.toFixed(2)} ${branchProduct.currencyType}`}\n ) : null}\n \n {branchProduct.content ? (\n \n {branchProduct.content}\n \n ) : null}\n \n\n \n \n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n padding: 10,\n backgroundColor: \"#f6f6f6\",\n },\n mealContainer: {\n flex: 1,\n backgroundColor: \"#e8e8e8\",\n borderRadius: 20,\n marginBottom: 10,\n paddingTop: 5,\n // overflow: \"hidden\",\n },\n mealTitle: {\n fontSize: 18,\n textAlign: \"left\",\n fontWeight: \"bold\",\n flex: 1,\n },\n price: {\n textAlign: \"right\",\n color: colors.LIGHTEST_TEXT_COLOR,\n },\n content: {\n color: colors.LIGHT_TEXT_COLOR,\n },\n mealInfoContainer: {\n padding: 5,\n },\n branchContainer: {\n justifyContent: \"space-around\",\n backgroundColor: \"#e8e8e8\",\n borderRadius: 20,\n padding: 5,\n marginBottom: 10,\n },\n branchName: {\n fontSize: 16,\n textAlign: \"center\",\n fontWeight: \"bold\",\n },\n go: {\n marginBottom: 10,\n },\n});\n","import _ from \"lodash\";\nimport { useCallback } from \"react\";\nimport Animated, { withTiming, useAnimatedStyle, interpolate, runOnJS, useSharedValue } from \"react-native-reanimated\";\n\nimport { BaseFab, FAB_SIZE } from \"@/components\";\nimport { BranchProductScreenProps } from \"@/routes\";\nimport { useAppSelector, useAppStore } from \"@/state\";\nimport { selectBasketActions, useBasketStore } from \"@/basket\";\n\nimport { checkIfRequiredProductFieldsFilled } from \"../../state/product/checkIfRequiredProductFieldsFilled\";\nimport { selectProductInfo, selectProductItemsMap, selectProductQuantity } from \"../../state\";\n\ninterface IAddToCartFAB {\n route: BranchProductScreenProps[\"route\"];\n navigation: BranchProductScreenProps[\"navigation\"];\n onProductItemShouldbeChosen: (id: number) => void;\n}\n\nexport const AddToCartFAB = (props: IAddToCartFAB) => {\n const productInfo = useAppSelector(selectProductInfo);\n if (!productInfo) {\n return null;\n } else {\n return ;\n }\n};\n\nconst SIZE = FAB_SIZE;\nconst LINE_LENGTH = Math.sqrt(Math.pow(SIZE, 2) / 2) * 0.7;\nconst REDUCED_LENGTH = LINE_LENGTH / 3;\nconst LINE_WIDTH = 3;\nconst ANGLE = 50;\n\nconst AddToCartFAB_ = ({ route, onProductItemShouldbeChosen, navigation }: IAddToCartFAB) => {\n const store = useAppStore();\n const { product, branchId } = route.params;\n const progress = useSharedValue(0);\n const { addProductToBasket } = useBasketStore(selectBasketActions);\n const branchType = useAppSelector((store) => store.branch.branch?.type);\n\n const onProductAddedToCart = useCallback(() => {\n progress.value = withTiming(progress.value > 0 ? 0 : 1, undefined, () => runOnJS(navigation.goBack)());\n }, []);\n\n const onPressed = useCallback(() => {\n const appState = store.getState();\n\n const productQuantity = selectProductQuantity(appState);\n const productItemsMap = selectProductItemsMap(appState);\n\n if (productQuantity === null) return;\n\n const result = checkIfRequiredProductFieldsFilled();\n if (result.areAllRequiredFieldsFilled) {\n addProductToBasket({\n branchId,\n product,\n productItemsMap: _.cloneDeep(productItemsMap),\n quantity: productQuantity,\n opts: { onSuccess: onProductAddedToCart },\n });\n } else {\n onProductItemShouldbeChosen(result.unfilledProductItemId);\n }\n }, [branchType]);\n\n const rFirstLine = useAnimatedStyle(() => {\n const degrees = interpolate(progress.value, [0, 1], [0, ANGLE]);\n return {\n height: LINE_LENGTH,\n width: LINE_WIDTH,\n backgroundColor: \"white\",\n position: \"absolute\",\n top: SIZE / 2 - LINE_LENGTH / 2,\n left: SIZE / 2 - LINE_WIDTH / 2,\n transform: [{ rotate: `${degrees}deg` }],\n };\n }, []);\n\n const rSecondLine = useAnimatedStyle(() => {\n const degrees = interpolate(progress.value, [0, 1], [0, ANGLE]);\n const translateY = interpolate(progress.value, [0, 1], [0, LINE_LENGTH / 2 - LINE_WIDTH / 2]);\n const translateX = -interpolate(progress.value, [0, 1], [0, REDUCED_LENGTH / 2 - LINE_WIDTH / 2]);\n const reducedLength = interpolate(progress.value, [0, 1], [LINE_LENGTH, REDUCED_LENGTH]);\n return {\n height: LINE_WIDTH,\n width: reducedLength,\n backgroundColor: \"white\",\n position: \"absolute\",\n top: SIZE / 2 - LINE_WIDTH / 2,\n left: SIZE / 2 - reducedLength / 2,\n transform: [{ rotate: `${degrees}deg` }, { translateX }, { translateY }],\n };\n });\n\n return (\n \n \n \n \n );\n};\n","import { StyleSheet } from \"react-native\";\nimport { useRoute } from \"@react-navigation/native\";\nimport React, { useCallback, useEffect } from \"react\";\n\nimport { BranchProductScreenProps } from \"@/routes\";\nimport { useAppDispatch, useAppSelector } from \"@/state\";\nimport { selectBranchProductQuantityInBasket, useBasketStore } from \"@/basket\";\nimport { Row, Stepper as BaseStepper, PriceAndPriceOld } from \"@/components\";\n\nimport { decrementQuantity, incrementQuantity, setQuantity, selectProductPriceObject, selectProductQuantity } from \"../../state\";\n\nexport const Footer = () => {\n const { product, branchId } = useRoute().params;\n const productQuantityInBasket = useBasketStore((store) => selectBranchProductQuantityInBasket(store, branchId, product.id));\n const productQuantity = useAppSelector(selectProductQuantity);\n const dispatch = useAppDispatch();\n\n const canDecrement = (productQuantity ?? 0) + productQuantityInBasket > (product.minimumOrderCount ?? 1) && productQuantity !== 1 ? true : false;\n\n const canIncrement =\n (productQuantity ?? 0) + productQuantityInBasket < (product.maximumOrderCount ?? 1000) && productQuantity !== 1000 ? true : false;\n\n const onIncrementPressed = useCallback(() => {\n dispatch(incrementQuantity());\n }, [productQuantityInBasket]);\n\n const onDecrementPressed = useCallback(() => {\n dispatch(decrementQuantity());\n }, []);\n\n useEffect(() => {\n if ((productQuantity ?? 0) + productQuantityInBasket < (product.minimumOrderCount ?? 1)) {\n dispatch(setQuantity(product.minimumOrderCount ?? 1));\n }\n }, [productQuantityInBasket, productQuantity]);\n\n return (\n \n \n \n {productQuantity}\n \n \n );\n};\n\ninterface ProductPrice {\n currencyType: string | null;\n}\n\nconst ProductPrice: React.FC = ({ currencyType }) => {\n const productPriceObject = useAppSelector(selectProductPriceObject);\n\n if (productPriceObject === null) {\n return null;\n }\n const { price, priceOld, quantity } = productPriceObject;\n\n return (\n \n );\n};\n\nconst styles = StyleSheet.create({\n price: {\n fontSize: 18,\n },\n priceControl: {\n alignItems: \"center\",\n justifyContent: \"space-between\",\n backgroundColor: \"#e5e5e5\",\n padding: 10,\n borderTopColor: \"#ccc\",\n borderTopWidth: 2,\n },\n});\n","import { Share } from \"react-native\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { CONFIG } from \"@/constants\";\nimport { useAppSelector } from \"@/state\";\nimport { BranchProductScreenProps } from \"@/routes\";\n\nimport { selectBranch } from \"../../state\";\nimport { ShareHeaderButton } from \"../../components\";\n\ninterface HeaderRightProps {\n route: BranchProductScreenProps[\"route\"];\n}\n\nexport const HeaderRight = ({ route }: HeaderRightProps) => {\n const { t } = useTranslation();\n const { product } = route.params;\n const branch = useAppSelector(selectBranch);\n\n const onSharePressed = () => {\n Share.share({\n message: t(\"SHARE_PRODUCT\", {\n branchProductName: product.name,\n branchName: branch?.name,\n branchProductUrl: `${CONFIG._deepLinkingUrl}/branch/${branch?.id}/${product.id}`,\n }),\n });\n };\n\n if (branch === null) return null;\n\n return ;\n};\n","import { View } from \"react-native\";\nimport { SafeAreaView } from \"react-native-safe-area-context\";\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { useAppDispatch } from \"@/state\";\nimport { globalStyles } from \"@/constants\";\nimport { BranchProductScreenProps } from \"@/routes\";\nimport { selectBranchProductQuantityInBasket, useBasketStore } from \"@/basket\";\n\nimport { Footer } from \"./Footer\";\nimport { HeaderRight } from \"./HeaderRight\";\nimport { AddToCartFAB } from \"./AddToCartFAB\";\nimport { resetState, setState } from \"../../state\";\nimport { BranchProductDetails, BranchProductDetailsMethods } from \"../../components\";\n\nexport const BranchProductScreen = ({ navigation, route }: BranchProductScreenProps) => {\n const { product, branchId } = route.params;\n const dispatch = useAppDispatch();\n const productDetailRef = useRef(null);\n const productQuantityInBasket = useBasketStore((store) => selectBranchProductQuantityInBasket(store, branchId, product.id));\n\n const onProductItemShouldbeChosen = useCallback((id: number) => {\n productDetailRef.current?.highlightProductItemById(id);\n }, []);\n\n useEffect(() => {\n navigation.setOptions({ headerRight: () => });\n }, [navigation, route]);\n\n useEffect(() => {\n dispatch(setState({ product: product, productQuantityInBasket: productQuantityInBasket }));\n\n return () => {\n dispatch(resetState());\n };\n }, []);\n\n return (\n \n \n \n \n \n