@openreplay/tracker 11.0.0 → 11.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/cjs/app/index.d.ts +3 -0
- package/cjs/app/index.js +27 -4
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +7 -1
- package/cjs/modules/Network/fetchProxy.js +4 -2
- package/cjs/modules/userTesting/SignalManager.d.ts +29 -0
- package/cjs/modules/userTesting/SignalManager.js +83 -0
- package/cjs/modules/userTesting/index.d.ts +5 -5
- package/cjs/modules/userTesting/index.js +156 -189
- package/cjs/modules/userTesting/styles.d.ts +28 -11
- package/cjs/modules/userTesting/styles.js +51 -29
- package/cjs/modules/userTesting/utils.d.ts +9 -0
- package/cjs/modules/userTesting/utils.js +87 -0
- package/coverage/clover.xml +1331 -562
- package/coverage/coverage-final.json +13 -6
- package/coverage/lcov-report/index.html +49 -34
- package/coverage/lcov-report/main/app/canvas.ts.html +1 -1
- package/coverage/lcov-report/main/app/guards.ts.html +42 -42
- package/coverage/lcov-report/main/app/index.html +24 -24
- package/coverage/lcov-report/main/app/index.ts.html +1046 -56
- package/coverage/lcov-report/main/app/logger.ts.html +1 -1
- package/coverage/lcov-report/main/app/messages.gen.ts.html +1 -1
- package/coverage/lcov-report/main/app/nodes.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/iframe_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/iframe_offsets.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/index.html +1 -1
- package/coverage/lcov-report/main/app/observer/shadow_root_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/observer/top_observer.ts.html +1 -1
- package/coverage/lcov-report/main/app/sanitizer.ts.html +1 -1
- package/coverage/lcov-report/main/app/session.ts.html +1 -1
- package/coverage/lcov-report/main/app/ticker.ts.html +1 -1
- package/coverage/lcov-report/main/index.html +11 -11
- package/coverage/lcov-report/main/index.ts.html +274 -100
- package/coverage/lcov-report/main/modules/Network/beaconProxy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/Network/fetchProxy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/Network/index.html +1 -1
- package/coverage/lcov-report/main/modules/Network/index.ts.html +1 -1
- package/coverage/lcov-report/main/modules/Network/networkMessage.ts.html +1 -1
- package/coverage/lcov-report/main/modules/Network/utils.ts.html +1 -1
- package/coverage/lcov-report/main/modules/Network/xhrProxy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/attributeSender.ts.html +1 -1
- package/coverage/lcov-report/main/modules/axiosSpy.ts.html +1 -1
- package/coverage/lcov-report/main/modules/conditionsManager.ts.html +799 -0
- package/coverage/lcov-report/main/modules/connection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/console.ts.html +1 -1
- package/coverage/lcov-report/main/modules/constructedStyleSheets.ts.html +1 -1
- package/coverage/lcov-report/main/modules/cssrules.ts.html +1 -1
- package/coverage/lcov-report/main/modules/exception.ts.html +1 -1
- package/coverage/lcov-report/main/modules/featureFlags.ts.html +10 -7
- package/coverage/lcov-report/main/modules/focus.ts.html +1 -1
- package/coverage/lcov-report/main/modules/fonts.ts.html +1 -1
- package/coverage/lcov-report/main/modules/img.ts.html +1 -1
- package/coverage/lcov-report/main/modules/index.html +27 -12
- package/coverage/lcov-report/main/modules/input.ts.html +1 -1
- package/coverage/lcov-report/main/modules/mouse.ts.html +1 -1
- package/coverage/lcov-report/main/modules/network.ts.html +1 -1
- package/coverage/lcov-report/main/modules/performance.ts.html +1 -1
- package/coverage/lcov-report/main/modules/scroll.ts.html +1 -1
- package/coverage/lcov-report/main/modules/selection.ts.html +1 -1
- package/coverage/lcov-report/main/modules/tabs.ts.html +1 -1
- package/coverage/lcov-report/main/modules/timing.ts.html +1 -1
- package/coverage/lcov-report/main/modules/userTesting/SignalManager.ts.html +370 -0
- package/coverage/lcov-report/main/modules/userTesting/dnd.ts.html +10 -22
- package/coverage/lcov-report/main/modules/userTesting/index.html +57 -27
- package/coverage/lcov-report/main/modules/userTesting/index.ts.html +814 -115
- package/coverage/lcov-report/main/modules/userTesting/recorder.ts.html +136 -67
- package/coverage/lcov-report/main/modules/userTesting/styles.ts.html +111 -39
- package/coverage/lcov-report/main/modules/userTesting/utils.ts.html +364 -0
- package/coverage/lcov-report/main/modules/viewport.ts.html +1 -1
- package/coverage/lcov-report/main/utils.ts.html +48 -6
- package/coverage/lcov-report/webworker/BatchWriter.ts.html +1 -1
- package/coverage/lcov-report/webworker/MessageEncoder.gen.ts.html +1 -1
- package/coverage/lcov-report/webworker/PrimitiveEncoder.ts.html +1 -1
- package/coverage/lcov-report/webworker/QueueSender.ts.html +1 -1
- package/coverage/lcov-report/webworker/index.html +5 -5
- package/coverage/lcov-report/webworker/index.ts.html +15 -9
- package/coverage/lcov.info +2306 -900
- package/lib/app/index.d.ts +3 -0
- package/lib/app/index.js +27 -4
- package/lib/index.d.ts +1 -0
- package/lib/index.js +7 -1
- package/lib/modules/Network/fetchProxy.js +4 -2
- package/lib/modules/userTesting/SignalManager.d.ts +29 -0
- package/lib/modules/userTesting/SignalManager.js +80 -0
- package/lib/modules/userTesting/index.d.ts +5 -5
- package/lib/modules/userTesting/index.js +128 -161
- package/lib/modules/userTesting/styles.d.ts +28 -11
- package/lib/modules/userTesting/styles.js +50 -28
- package/lib/modules/userTesting/utils.d.ts +9 -0
- package/lib/modules/userTesting/utils.js +79 -0
- package/package.json +1 -1
|
@@ -25,28 +25,28 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/
|
|
28
|
+
<span class='fraction'>0/452</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">0% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>0/
|
|
35
|
+
<span class='fraction'>0/240</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">0% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>0/
|
|
42
|
+
<span class='fraction'>0/75</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/
|
|
49
|
+
<span class='fraction'>0/441</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -840,7 +840,339 @@
|
|
|
840
840
|
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
841
|
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
842
|
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
-
<a name='L778'></a><a href='#L778'>778</a
|
|
843
|
+
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
+
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
+
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
+
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
+
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
+
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
+
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
+
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
+
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
+
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
+
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
+
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
+
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
+
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
+
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
+
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
+
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
+
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
+
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
+
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
+
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
+
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
+
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
+
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
+
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
+
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
+
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
+
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
+
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
+
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
+
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
+
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
+
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
+
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
+
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
+
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
+
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
+
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
+
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
+
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
+
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
+
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
+
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
+
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
+
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
+
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
+
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
+
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
+
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
+
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
+
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
+
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
+
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
+
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
+
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
+
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
+
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
+
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
+
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
+
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
+
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
+
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
+
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
+
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
+
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
+
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
+
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
+
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
+
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
+
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
+
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
+
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
+
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
+
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
+
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
+
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
+
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
+
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
+
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
+
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
+
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
+
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
+
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
+
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
+
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
+
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
+
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
+
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
+
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
+
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
+
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
+
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
+
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
+
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
+
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
+
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
+
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
+
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
+
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
+
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
+
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
+
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
+
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
+
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
+
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
+
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
+
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
+
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
+
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
+
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
+
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
+
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
+
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
+
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
+
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
+
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
+
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
+
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
+
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
+
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
+
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
+
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
+
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
+
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
+
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
+
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
+
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
+
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
+
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
+
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
+
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
+
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
+
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
+
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
+
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
+
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
+
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
+
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
+
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
+
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
+
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
+
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
+
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
+
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
+
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
+
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
+
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
+
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
+
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
+
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
+
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
+
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
+
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
+
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
+
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
+
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
+
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
+
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
+
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
+
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
+
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
+
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
+
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
+
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
+
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
+
<a name='L943'></a><a href='#L943'>943</a>
|
|
1009
|
+
<a name='L944'></a><a href='#L944'>944</a>
|
|
1010
|
+
<a name='L945'></a><a href='#L945'>945</a>
|
|
1011
|
+
<a name='L946'></a><a href='#L946'>946</a>
|
|
1012
|
+
<a name='L947'></a><a href='#L947'>947</a>
|
|
1013
|
+
<a name='L948'></a><a href='#L948'>948</a>
|
|
1014
|
+
<a name='L949'></a><a href='#L949'>949</a>
|
|
1015
|
+
<a name='L950'></a><a href='#L950'>950</a>
|
|
1016
|
+
<a name='L951'></a><a href='#L951'>951</a>
|
|
1017
|
+
<a name='L952'></a><a href='#L952'>952</a>
|
|
1018
|
+
<a name='L953'></a><a href='#L953'>953</a>
|
|
1019
|
+
<a name='L954'></a><a href='#L954'>954</a>
|
|
1020
|
+
<a name='L955'></a><a href='#L955'>955</a>
|
|
1021
|
+
<a name='L956'></a><a href='#L956'>956</a>
|
|
1022
|
+
<a name='L957'></a><a href='#L957'>957</a>
|
|
1023
|
+
<a name='L958'></a><a href='#L958'>958</a>
|
|
1024
|
+
<a name='L959'></a><a href='#L959'>959</a>
|
|
1025
|
+
<a name='L960'></a><a href='#L960'>960</a>
|
|
1026
|
+
<a name='L961'></a><a href='#L961'>961</a>
|
|
1027
|
+
<a name='L962'></a><a href='#L962'>962</a>
|
|
1028
|
+
<a name='L963'></a><a href='#L963'>963</a>
|
|
1029
|
+
<a name='L964'></a><a href='#L964'>964</a>
|
|
1030
|
+
<a name='L965'></a><a href='#L965'>965</a>
|
|
1031
|
+
<a name='L966'></a><a href='#L966'>966</a>
|
|
1032
|
+
<a name='L967'></a><a href='#L967'>967</a>
|
|
1033
|
+
<a name='L968'></a><a href='#L968'>968</a>
|
|
1034
|
+
<a name='L969'></a><a href='#L969'>969</a>
|
|
1035
|
+
<a name='L970'></a><a href='#L970'>970</a>
|
|
1036
|
+
<a name='L971'></a><a href='#L971'>971</a>
|
|
1037
|
+
<a name='L972'></a><a href='#L972'>972</a>
|
|
1038
|
+
<a name='L973'></a><a href='#L973'>973</a>
|
|
1039
|
+
<a name='L974'></a><a href='#L974'>974</a>
|
|
1040
|
+
<a name='L975'></a><a href='#L975'>975</a>
|
|
1041
|
+
<a name='L976'></a><a href='#L976'>976</a>
|
|
1042
|
+
<a name='L977'></a><a href='#L977'>977</a>
|
|
1043
|
+
<a name='L978'></a><a href='#L978'>978</a>
|
|
1044
|
+
<a name='L979'></a><a href='#L979'>979</a>
|
|
1045
|
+
<a name='L980'></a><a href='#L980'>980</a>
|
|
1046
|
+
<a name='L981'></a><a href='#L981'>981</a>
|
|
1047
|
+
<a name='L982'></a><a href='#L982'>982</a>
|
|
1048
|
+
<a name='L983'></a><a href='#L983'>983</a>
|
|
1049
|
+
<a name='L984'></a><a href='#L984'>984</a>
|
|
1050
|
+
<a name='L985'></a><a href='#L985'>985</a>
|
|
1051
|
+
<a name='L986'></a><a href='#L986'>986</a>
|
|
1052
|
+
<a name='L987'></a><a href='#L987'>987</a>
|
|
1053
|
+
<a name='L988'></a><a href='#L988'>988</a>
|
|
1054
|
+
<a name='L989'></a><a href='#L989'>989</a>
|
|
1055
|
+
<a name='L990'></a><a href='#L990'>990</a>
|
|
1056
|
+
<a name='L991'></a><a href='#L991'>991</a>
|
|
1057
|
+
<a name='L992'></a><a href='#L992'>992</a>
|
|
1058
|
+
<a name='L993'></a><a href='#L993'>993</a>
|
|
1059
|
+
<a name='L994'></a><a href='#L994'>994</a>
|
|
1060
|
+
<a name='L995'></a><a href='#L995'>995</a>
|
|
1061
|
+
<a name='L996'></a><a href='#L996'>996</a>
|
|
1062
|
+
<a name='L997'></a><a href='#L997'>997</a>
|
|
1063
|
+
<a name='L998'></a><a href='#L998'>998</a>
|
|
1064
|
+
<a name='L999'></a><a href='#L999'>999</a>
|
|
1065
|
+
<a name='L1000'></a><a href='#L1000'>1000</a>
|
|
1066
|
+
<a name='L1001'></a><a href='#L1001'>1001</a>
|
|
1067
|
+
<a name='L1002'></a><a href='#L1002'>1002</a>
|
|
1068
|
+
<a name='L1003'></a><a href='#L1003'>1003</a>
|
|
1069
|
+
<a name='L1004'></a><a href='#L1004'>1004</a>
|
|
1070
|
+
<a name='L1005'></a><a href='#L1005'>1005</a>
|
|
1071
|
+
<a name='L1006'></a><a href='#L1006'>1006</a>
|
|
1072
|
+
<a name='L1007'></a><a href='#L1007'>1007</a>
|
|
1073
|
+
<a name='L1008'></a><a href='#L1008'>1008</a>
|
|
1074
|
+
<a name='L1009'></a><a href='#L1009'>1009</a>
|
|
1075
|
+
<a name='L1010'></a><a href='#L1010'>1010</a>
|
|
1076
|
+
<a name='L1011'></a><a href='#L1011'>1011</a>
|
|
1077
|
+
<a name='L1012'></a><a href='#L1012'>1012</a>
|
|
1078
|
+
<a name='L1013'></a><a href='#L1013'>1013</a>
|
|
1079
|
+
<a name='L1014'></a><a href='#L1014'>1014</a>
|
|
1080
|
+
<a name='L1015'></a><a href='#L1015'>1015</a>
|
|
1081
|
+
<a name='L1016'></a><a href='#L1016'>1016</a>
|
|
1082
|
+
<a name='L1017'></a><a href='#L1017'>1017</a>
|
|
1083
|
+
<a name='L1018'></a><a href='#L1018'>1018</a>
|
|
1084
|
+
<a name='L1019'></a><a href='#L1019'>1019</a>
|
|
1085
|
+
<a name='L1020'></a><a href='#L1020'>1020</a>
|
|
1086
|
+
<a name='L1021'></a><a href='#L1021'>1021</a>
|
|
1087
|
+
<a name='L1022'></a><a href='#L1022'>1022</a>
|
|
1088
|
+
<a name='L1023'></a><a href='#L1023'>1023</a>
|
|
1089
|
+
<a name='L1024'></a><a href='#L1024'>1024</a>
|
|
1090
|
+
<a name='L1025'></a><a href='#L1025'>1025</a>
|
|
1091
|
+
<a name='L1026'></a><a href='#L1026'>1026</a>
|
|
1092
|
+
<a name='L1027'></a><a href='#L1027'>1027</a>
|
|
1093
|
+
<a name='L1028'></a><a href='#L1028'>1028</a>
|
|
1094
|
+
<a name='L1029'></a><a href='#L1029'>1029</a>
|
|
1095
|
+
<a name='L1030'></a><a href='#L1030'>1030</a>
|
|
1096
|
+
<a name='L1031'></a><a href='#L1031'>1031</a>
|
|
1097
|
+
<a name='L1032'></a><a href='#L1032'>1032</a>
|
|
1098
|
+
<a name='L1033'></a><a href='#L1033'>1033</a>
|
|
1099
|
+
<a name='L1034'></a><a href='#L1034'>1034</a>
|
|
1100
|
+
<a name='L1035'></a><a href='#L1035'>1035</a>
|
|
1101
|
+
<a name='L1036'></a><a href='#L1036'>1036</a>
|
|
1102
|
+
<a name='L1037'></a><a href='#L1037'>1037</a>
|
|
1103
|
+
<a name='L1038'></a><a href='#L1038'>1038</a>
|
|
1104
|
+
<a name='L1039'></a><a href='#L1039'>1039</a>
|
|
1105
|
+
<a name='L1040'></a><a href='#L1040'>1040</a>
|
|
1106
|
+
<a name='L1041'></a><a href='#L1041'>1041</a>
|
|
1107
|
+
<a name='L1042'></a><a href='#L1042'>1042</a>
|
|
1108
|
+
<a name='L1043'></a><a href='#L1043'>1043</a>
|
|
1109
|
+
<a name='L1044'></a><a href='#L1044'>1044</a>
|
|
1110
|
+
<a name='L1045'></a><a href='#L1045'>1045</a>
|
|
1111
|
+
<a name='L1046'></a><a href='#L1046'>1046</a>
|
|
1112
|
+
<a name='L1047'></a><a href='#L1047'>1047</a>
|
|
1113
|
+
<a name='L1048'></a><a href='#L1048'>1048</a>
|
|
1114
|
+
<a name='L1049'></a><a href='#L1049'>1049</a>
|
|
1115
|
+
<a name='L1050'></a><a href='#L1050'>1050</a>
|
|
1116
|
+
<a name='L1051'></a><a href='#L1051'>1051</a>
|
|
1117
|
+
<a name='L1052'></a><a href='#L1052'>1052</a>
|
|
1118
|
+
<a name='L1053'></a><a href='#L1053'>1053</a>
|
|
1119
|
+
<a name='L1054'></a><a href='#L1054'>1054</a>
|
|
1120
|
+
<a name='L1055'></a><a href='#L1055'>1055</a>
|
|
1121
|
+
<a name='L1056'></a><a href='#L1056'>1056</a>
|
|
1122
|
+
<a name='L1057'></a><a href='#L1057'>1057</a>
|
|
1123
|
+
<a name='L1058'></a><a href='#L1058'>1058</a>
|
|
1124
|
+
<a name='L1059'></a><a href='#L1059'>1059</a>
|
|
1125
|
+
<a name='L1060'></a><a href='#L1060'>1060</a>
|
|
1126
|
+
<a name='L1061'></a><a href='#L1061'>1061</a>
|
|
1127
|
+
<a name='L1062'></a><a href='#L1062'>1062</a>
|
|
1128
|
+
<a name='L1063'></a><a href='#L1063'>1063</a>
|
|
1129
|
+
<a name='L1064'></a><a href='#L1064'>1064</a>
|
|
1130
|
+
<a name='L1065'></a><a href='#L1065'>1065</a>
|
|
1131
|
+
<a name='L1066'></a><a href='#L1066'>1066</a>
|
|
1132
|
+
<a name='L1067'></a><a href='#L1067'>1067</a>
|
|
1133
|
+
<a name='L1068'></a><a href='#L1068'>1068</a>
|
|
1134
|
+
<a name='L1069'></a><a href='#L1069'>1069</a>
|
|
1135
|
+
<a name='L1070'></a><a href='#L1070'>1070</a>
|
|
1136
|
+
<a name='L1071'></a><a href='#L1071'>1071</a>
|
|
1137
|
+
<a name='L1072'></a><a href='#L1072'>1072</a>
|
|
1138
|
+
<a name='L1073'></a><a href='#L1073'>1073</a>
|
|
1139
|
+
<a name='L1074'></a><a href='#L1074'>1074</a>
|
|
1140
|
+
<a name='L1075'></a><a href='#L1075'>1075</a>
|
|
1141
|
+
<a name='L1076'></a><a href='#L1076'>1076</a>
|
|
1142
|
+
<a name='L1077'></a><a href='#L1077'>1077</a>
|
|
1143
|
+
<a name='L1078'></a><a href='#L1078'>1078</a>
|
|
1144
|
+
<a name='L1079'></a><a href='#L1079'>1079</a>
|
|
1145
|
+
<a name='L1080'></a><a href='#L1080'>1080</a>
|
|
1146
|
+
<a name='L1081'></a><a href='#L1081'>1081</a>
|
|
1147
|
+
<a name='L1082'></a><a href='#L1082'>1082</a>
|
|
1148
|
+
<a name='L1083'></a><a href='#L1083'>1083</a>
|
|
1149
|
+
<a name='L1084'></a><a href='#L1084'>1084</a>
|
|
1150
|
+
<a name='L1085'></a><a href='#L1085'>1085</a>
|
|
1151
|
+
<a name='L1086'></a><a href='#L1086'>1086</a>
|
|
1152
|
+
<a name='L1087'></a><a href='#L1087'>1087</a>
|
|
1153
|
+
<a name='L1088'></a><a href='#L1088'>1088</a>
|
|
1154
|
+
<a name='L1089'></a><a href='#L1089'>1089</a>
|
|
1155
|
+
<a name='L1090'></a><a href='#L1090'>1090</a>
|
|
1156
|
+
<a name='L1091'></a><a href='#L1091'>1091</a>
|
|
1157
|
+
<a name='L1092'></a><a href='#L1092'>1092</a>
|
|
1158
|
+
<a name='L1093'></a><a href='#L1093'>1093</a>
|
|
1159
|
+
<a name='L1094'></a><a href='#L1094'>1094</a>
|
|
1160
|
+
<a name='L1095'></a><a href='#L1095'>1095</a>
|
|
1161
|
+
<a name='L1096'></a><a href='#L1096'>1096</a>
|
|
1162
|
+
<a name='L1097'></a><a href='#L1097'>1097</a>
|
|
1163
|
+
<a name='L1098'></a><a href='#L1098'>1098</a>
|
|
1164
|
+
<a name='L1099'></a><a href='#L1099'>1099</a>
|
|
1165
|
+
<a name='L1100'></a><a href='#L1100'>1100</a>
|
|
1166
|
+
<a name='L1101'></a><a href='#L1101'>1101</a>
|
|
1167
|
+
<a name='L1102'></a><a href='#L1102'>1102</a>
|
|
1168
|
+
<a name='L1103'></a><a href='#L1103'>1103</a>
|
|
1169
|
+
<a name='L1104'></a><a href='#L1104'>1104</a>
|
|
1170
|
+
<a name='L1105'></a><a href='#L1105'>1105</a>
|
|
1171
|
+
<a name='L1106'></a><a href='#L1106'>1106</a>
|
|
1172
|
+
<a name='L1107'></a><a href='#L1107'>1107</a>
|
|
1173
|
+
<a name='L1108'></a><a href='#L1108'>1108</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
1174
|
+
<span class="cline-any cline-no"> </span>
|
|
1175
|
+
<span class="cline-any cline-neutral"> </span>
|
|
844
1176
|
<span class="cline-any cline-no"> </span>
|
|
845
1177
|
<span class="cline-any cline-no"> </span>
|
|
846
1178
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -866,6 +1198,7 @@
|
|
|
866
1198
|
<span class="cline-any cline-neutral"> </span>
|
|
867
1199
|
<span class="cline-any cline-neutral"> </span>
|
|
868
1200
|
<span class="cline-any cline-no"> </span>
|
|
1201
|
+
<span class="cline-any cline-no"> </span>
|
|
869
1202
|
<span class="cline-any cline-neutral"> </span>
|
|
870
1203
|
<span class="cline-any cline-neutral"> </span>
|
|
871
1204
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -893,6 +1226,21 @@
|
|
|
893
1226
|
<span class="cline-any cline-neutral"> </span>
|
|
894
1227
|
<span class="cline-any cline-no"> </span>
|
|
895
1228
|
<span class="cline-any cline-no"> </span>
|
|
1229
|
+
<span class="cline-any cline-no"> </span>
|
|
1230
|
+
<span class="cline-any cline-no"> </span>
|
|
1231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1236
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1242
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1243
|
+
<span class="cline-any cline-neutral"> </span>
|
|
896
1244
|
<span class="cline-any cline-neutral"> </span>
|
|
897
1245
|
<span class="cline-any cline-neutral"> </span>
|
|
898
1246
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -916,6 +1264,8 @@
|
|
|
916
1264
|
<span class="cline-any cline-no"> </span>
|
|
917
1265
|
<span class="cline-any cline-no"> </span>
|
|
918
1266
|
<span class="cline-any cline-no"> </span>
|
|
1267
|
+
<span class="cline-any cline-no"> </span>
|
|
1268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
919
1269
|
<span class="cline-any cline-neutral"> </span>
|
|
920
1270
|
<span class="cline-any cline-neutral"> </span>
|
|
921
1271
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -970,6 +1320,12 @@
|
|
|
970
1320
|
<span class="cline-any cline-no"> </span>
|
|
971
1321
|
<span class="cline-any cline-neutral"> </span>
|
|
972
1322
|
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
+
<span class="cline-any cline-no"> </span>
|
|
1326
|
+
<span class="cline-any cline-no"> </span>
|
|
1327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
973
1329
|
<span class="cline-any cline-no"> </span>
|
|
974
1330
|
<span class="cline-any cline-no"> </span>
|
|
975
1331
|
<span class="cline-any cline-no"> </span>
|
|
@@ -986,15 +1342,15 @@
|
|
|
986
1342
|
<span class="cline-any cline-neutral"> </span>
|
|
987
1343
|
<span class="cline-any cline-neutral"> </span>
|
|
988
1344
|
<span class="cline-any cline-no"> </span>
|
|
989
|
-
<span class="cline-any cline-no"> </span>
|
|
990
|
-
<span class="cline-any cline-neutral"> </span>
|
|
991
1345
|
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
+
<span class="cline-any cline-no"> </span>
|
|
992
1347
|
<span class="cline-any cline-neutral"> </span>
|
|
993
1348
|
<span class="cline-any cline-neutral"> </span>
|
|
994
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
995
1350
|
<span class="cline-any cline-neutral"> </span>
|
|
996
1351
|
<span class="cline-any cline-neutral"> </span>
|
|
997
1352
|
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
+
<span class="cline-any cline-no"> </span>
|
|
998
1354
|
<span class="cline-any cline-neutral"> </span>
|
|
999
1355
|
<span class="cline-any cline-no"> </span>
|
|
1000
1356
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1021,6 +1377,8 @@
|
|
|
1021
1377
|
<span class="cline-any cline-neutral"> </span>
|
|
1022
1378
|
<span class="cline-any cline-neutral"> </span>
|
|
1023
1379
|
<span class="cline-any cline-neutral"> </span>
|
|
1380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1381
|
+
<span class="cline-any cline-no"> </span>
|
|
1024
1382
|
<span class="cline-any cline-no"> </span>
|
|
1025
1383
|
<span class="cline-any cline-no"> </span>
|
|
1026
1384
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1039,6 +1397,7 @@
|
|
|
1039
1397
|
<span class="cline-any cline-no"> </span>
|
|
1040
1398
|
<span class="cline-any cline-no"> </span>
|
|
1041
1399
|
<span class="cline-any cline-no"> </span>
|
|
1400
|
+
<span class="cline-any cline-no"> </span>
|
|
1042
1401
|
<span class="cline-any cline-neutral"> </span>
|
|
1043
1402
|
<span class="cline-any cline-no"> </span>
|
|
1044
1403
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1184,11 +1543,35 @@
|
|
|
1184
1543
|
<span class="cline-any cline-neutral"> </span>
|
|
1185
1544
|
<span class="cline-any cline-neutral"> </span>
|
|
1186
1545
|
<span class="cline-any cline-no"> </span>
|
|
1546
|
+
<span class="cline-any cline-no"> </span>
|
|
1547
|
+
<span class="cline-any cline-no"> </span>
|
|
1548
|
+
<span class="cline-any cline-no"> </span>
|
|
1549
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1550
|
+
<span class="cline-any cline-no"> </span>
|
|
1551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1552
|
+
<span class="cline-any cline-no"> </span>
|
|
1553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1559
|
+
<span class="cline-any cline-no"> </span>
|
|
1560
|
+
<span class="cline-any cline-no"> </span>
|
|
1561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1187
1563
|
<span class="cline-any cline-neutral"> </span>
|
|
1188
1564
|
<span class="cline-any cline-neutral"> </span>
|
|
1189
1565
|
<span class="cline-any cline-neutral"> </span>
|
|
1190
1566
|
<span class="cline-any cline-neutral"> </span>
|
|
1191
1567
|
<span class="cline-any cline-neutral"> </span>
|
|
1568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1569
|
+
<span class="cline-any cline-no"> </span>
|
|
1570
|
+
<span class="cline-any cline-no"> </span>
|
|
1571
|
+
<span class="cline-any cline-no"> </span>
|
|
1572
|
+
<span class="cline-any cline-no"> </span>
|
|
1573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1574
|
+
<span class="cline-any cline-no"> </span>
|
|
1192
1575
|
<span class="cline-any cline-no"> </span>
|
|
1193
1576
|
<span class="cline-any cline-no"> </span>
|
|
1194
1577
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1196,18 +1579,39 @@
|
|
|
1196
1579
|
<span class="cline-any cline-neutral"> </span>
|
|
1197
1580
|
<span class="cline-any cline-neutral"> </span>
|
|
1198
1581
|
<span class="cline-any cline-no"> </span>
|
|
1582
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1584
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1585
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1199
1590
|
<span class="cline-any cline-no"> </span>
|
|
1200
1591
|
<span class="cline-any cline-no"> </span>
|
|
1201
1592
|
<span class="cline-any cline-no"> </span>
|
|
1593
|
+
<span class="cline-any cline-no"> </span>
|
|
1594
|
+
<span class="cline-any cline-no"> </span>
|
|
1595
|
+
<span class="cline-any cline-no"> </span>
|
|
1596
|
+
<span class="cline-any cline-no"> </span>
|
|
1597
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1598
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1599
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1202
1600
|
<span class="cline-any cline-neutral"> </span>
|
|
1203
1601
|
<span class="cline-any cline-no"> </span>
|
|
1204
1602
|
<span class="cline-any cline-no"> </span>
|
|
1603
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1205
1604
|
<span class="cline-any cline-no"> </span>
|
|
1206
1605
|
<span class="cline-any cline-neutral"> </span>
|
|
1207
1606
|
<span class="cline-any cline-neutral"> </span>
|
|
1208
1607
|
<span class="cline-any cline-neutral"> </span>
|
|
1209
1608
|
<span class="cline-any cline-neutral"> </span>
|
|
1210
1609
|
<span class="cline-any cline-no"> </span>
|
|
1610
|
+
<span class="cline-any cline-no"> </span>
|
|
1611
|
+
<span class="cline-any cline-no"> </span>
|
|
1612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1614
|
+
<span class="cline-any cline-no"> </span>
|
|
1211
1615
|
<span class="cline-any cline-neutral"> </span>
|
|
1212
1616
|
<span class="cline-any cline-neutral"> </span>
|
|
1213
1617
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1378,12 +1782,54 @@
|
|
|
1378
1782
|
<span class="cline-any cline-neutral"> </span>
|
|
1379
1783
|
<span class="cline-any cline-neutral"> </span>
|
|
1380
1784
|
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
+
<span class="cline-any cline-no"> </span>
|
|
1786
|
+
<span class="cline-any cline-no"> </span>
|
|
1787
|
+
<span class="cline-any cline-no"> </span>
|
|
1788
|
+
<span class="cline-any cline-no"> </span>
|
|
1789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1381
1790
|
<span class="cline-any cline-neutral"> </span>
|
|
1382
1791
|
<span class="cline-any cline-no"> </span>
|
|
1383
1792
|
<span class="cline-any cline-no"> </span>
|
|
1793
|
+
<span class="cline-any cline-no"> </span>
|
|
1384
1794
|
<span class="cline-any cline-neutral"> </span>
|
|
1385
1795
|
<span class="cline-any cline-no"> </span>
|
|
1796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1802
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1803
|
+
<span class="cline-any cline-no"> </span>
|
|
1804
|
+
<span class="cline-any cline-no"> </span>
|
|
1386
1805
|
<span class="cline-any cline-no"> </span>
|
|
1806
|
+
<span class="cline-any cline-no"> </span>
|
|
1807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1808
|
+
<span class="cline-any cline-no"> </span>
|
|
1809
|
+
<span class="cline-any cline-no"> </span>
|
|
1810
|
+
<span class="cline-any cline-no"> </span>
|
|
1811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1831
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1387
1833
|
<span class="cline-any cline-neutral"> </span>
|
|
1388
1834
|
<span class="cline-any cline-neutral"> </span>
|
|
1389
1835
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1391,33 +1837,119 @@
|
|
|
1391
1837
|
<span class="cline-any cline-neutral"> </span>
|
|
1392
1838
|
<span class="cline-any cline-no"> </span>
|
|
1393
1839
|
<span class="cline-any cline-no"> </span>
|
|
1840
|
+
<span class="cline-any cline-no"> </span>
|
|
1841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1394
1842
|
<span class="cline-any cline-neutral"> </span>
|
|
1843
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1848
|
+
<span class="cline-any cline-no"> </span>
|
|
1395
1849
|
<span class="cline-any cline-no"> </span>
|
|
1396
1850
|
<span class="cline-any cline-no"> </span>
|
|
1397
1851
|
<span class="cline-any cline-neutral"> </span>
|
|
1398
1852
|
<span class="cline-any cline-no"> </span>
|
|
1853
|
+
<span class="cline-any cline-no"> </span>
|
|
1854
|
+
<span class="cline-any cline-no"> </span>
|
|
1855
|
+
<span class="cline-any cline-no"> </span>
|
|
1856
|
+
<span class="cline-any cline-no"> </span>
|
|
1857
|
+
<span class="cline-any cline-no"> </span>
|
|
1858
|
+
<span class="cline-any cline-no"> </span>
|
|
1859
|
+
<span class="cline-any cline-no"> </span>
|
|
1399
1860
|
<span class="cline-any cline-neutral"> </span>
|
|
1400
1861
|
<span class="cline-any cline-no"> </span>
|
|
1862
|
+
<span class="cline-any cline-no"> </span>
|
|
1863
|
+
<span class="cline-any cline-no"> </span>
|
|
1401
1864
|
<span class="cline-any cline-neutral"> </span>
|
|
1402
1865
|
<span class="cline-any cline-no"> </span>
|
|
1866
|
+
<span class="cline-any cline-no"> </span>
|
|
1867
|
+
<span class="cline-any cline-no"> </span>
|
|
1868
|
+
<span class="cline-any cline-no"> </span>
|
|
1403
1869
|
<span class="cline-any cline-neutral"> </span>
|
|
1870
|
+
<span class="cline-any cline-no"> </span>
|
|
1871
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1872
|
+
<span class="cline-any cline-no"> </span>
|
|
1873
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1874
|
+
<span class="cline-any cline-no"> </span>
|
|
1404
1875
|
<span class="cline-any cline-neutral"> </span>
|
|
1405
1876
|
<span class="cline-any cline-neutral"> </span>
|
|
1406
1877
|
<span class="cline-any cline-neutral"> </span>
|
|
1407
1878
|
<span class="cline-any cline-neutral"> </span>
|
|
1408
1879
|
<span class="cline-any cline-no"> </span>
|
|
1880
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1409
1881
|
<span class="cline-any cline-no"> </span>
|
|
1410
1882
|
<span class="cline-any cline-neutral"> </span>
|
|
1883
|
+
<span class="cline-any cline-no"> </span>
|
|
1884
|
+
<span class="cline-any cline-no"> </span>
|
|
1411
1885
|
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
+
<span class="cline-any cline-no"> </span>
|
|
1887
|
+
<span class="cline-any cline-no"> </span>
|
|
1412
1888
|
<span class="cline-any cline-neutral"> </span>
|
|
1889
|
+
<span class="cline-any cline-no"> </span>
|
|
1413
1890
|
<span class="cline-any cline-neutral"> </span>
|
|
1414
1891
|
<span class="cline-any cline-neutral"> </span>
|
|
1415
1892
|
<span class="cline-any cline-neutral"> </span>
|
|
1893
|
+
<span class="cline-any cline-no"> </span>
|
|
1894
|
+
<span class="cline-any cline-no"> </span>
|
|
1895
|
+
<span class="cline-any cline-no"> </span>
|
|
1896
|
+
<span class="cline-any cline-no"> </span>
|
|
1897
|
+
<span class="cline-any cline-no"> </span>
|
|
1898
|
+
<span class="cline-any cline-no"> </span>
|
|
1899
|
+
<span class="cline-any cline-no"> </span>
|
|
1900
|
+
<span class="cline-any cline-no"> </span>
|
|
1901
|
+
<span class="cline-any cline-no"> </span>
|
|
1902
|
+
<span class="cline-any cline-no"> </span>
|
|
1416
1903
|
<span class="cline-any cline-neutral"> </span>
|
|
1904
|
+
<span class="cline-any cline-no"> </span>
|
|
1905
|
+
<span class="cline-any cline-no"> </span>
|
|
1906
|
+
<span class="cline-any cline-no"> </span>
|
|
1907
|
+
<span class="cline-any cline-no"> </span>
|
|
1908
|
+
<span class="cline-any cline-no"> </span>
|
|
1417
1909
|
<span class="cline-any cline-neutral"> </span>
|
|
1910
|
+
<span class="cline-any cline-no"> </span>
|
|
1418
1911
|
<span class="cline-any cline-neutral"> </span>
|
|
1912
|
+
<span class="cline-any cline-no"> </span>
|
|
1419
1913
|
<span class="cline-any cline-neutral"> </span>
|
|
1420
1914
|
<span class="cline-any cline-no"> </span>
|
|
1915
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1919
|
+
<span class="cline-any cline-no"> </span>
|
|
1920
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1921
|
+
<span class="cline-any cline-no"> </span>
|
|
1922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1923
|
+
<span class="cline-any cline-no"> </span>
|
|
1924
|
+
<span class="cline-any cline-no"> </span>
|
|
1925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1926
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1927
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1930
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1932
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1933
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1935
|
+
<span class="cline-any cline-no"> </span>
|
|
1936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1937
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1938
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1940
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1941
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1942
|
+
<span class="cline-any cline-no"> </span>
|
|
1943
|
+
<span class="cline-any cline-no"> </span>
|
|
1944
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1945
|
+
<span class="cline-any cline-no"> </span>
|
|
1946
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1947
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1948
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1949
|
+
<span class="cline-any cline-no"> </span>
|
|
1950
|
+
<span class="cline-any cline-no"> </span>
|
|
1951
|
+
<span class="cline-any cline-no"> </span>
|
|
1952
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1421
1953
|
<span class="cline-any cline-no"> </span>
|
|
1422
1954
|
<span class="cline-any cline-no"> </span>
|
|
1423
1955
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1428,14 +1960,30 @@
|
|
|
1428
1960
|
<span class="cline-any cline-neutral"> </span>
|
|
1429
1961
|
<span class="cline-any cline-neutral"> </span>
|
|
1430
1962
|
<span class="cline-any cline-neutral"> </span>
|
|
1963
|
+
<span class="cline-any cline-no"> </span>
|
|
1964
|
+
<span class="cline-any cline-no"> </span>
|
|
1965
|
+
<span class="cline-any cline-no"> </span>
|
|
1966
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1967
|
+
<span class="cline-any cline-no"> </span>
|
|
1968
|
+
<span class="cline-any cline-no"> </span>
|
|
1969
|
+
<span class="cline-any cline-no"> </span>
|
|
1970
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1971
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1972
|
+
<span class="cline-any cline-no"> </span>
|
|
1973
|
+
<span class="cline-any cline-no"> </span>
|
|
1974
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1975
|
+
<span class="cline-any cline-no"> </span>
|
|
1431
1976
|
<span class="cline-any cline-neutral"> </span>
|
|
1432
1977
|
<span class="cline-any cline-no"> </span>
|
|
1433
1978
|
<span class="cline-any cline-neutral"> </span>
|
|
1979
|
+
<span class="cline-any cline-no"> </span>
|
|
1434
1980
|
<span class="cline-any cline-neutral"> </span>
|
|
1435
1981
|
<span class="cline-any cline-neutral"> </span>
|
|
1436
1982
|
<span class="cline-any cline-neutral"> </span>
|
|
1437
1983
|
<span class="cline-any cline-neutral"> </span>
|
|
1438
1984
|
<span class="cline-any cline-neutral"> </span>
|
|
1985
|
+
<span class="cline-any cline-no"> </span>
|
|
1986
|
+
<span class="cline-any cline-no"> </span>
|
|
1439
1987
|
<span class="cline-any cline-neutral"> </span>
|
|
1440
1988
|
<span class="cline-any cline-neutral"> </span>
|
|
1441
1989
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1448,10 +1996,14 @@
|
|
|
1448
1996
|
<span class="cline-any cline-neutral"> </span>
|
|
1449
1997
|
<span class="cline-any cline-no"> </span>
|
|
1450
1998
|
<span class="cline-any cline-no"> </span>
|
|
1999
|
+
<span class="cline-any cline-no"> </span>
|
|
1451
2000
|
<span class="cline-any cline-neutral"> </span>
|
|
1452
2001
|
<span class="cline-any cline-no"> </span>
|
|
1453
2002
|
<span class="cline-any cline-neutral"> </span>
|
|
1454
2003
|
<span class="cline-any cline-neutral"> </span>
|
|
2004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2005
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2006
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1455
2007
|
<span class="cline-any cline-no"> </span>
|
|
1456
2008
|
<span class="cline-any cline-neutral"> </span>
|
|
1457
2009
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1459,10 +2011,39 @@
|
|
|
1459
2011
|
<span class="cline-any cline-neutral"> </span>
|
|
1460
2012
|
<span class="cline-any cline-neutral"> </span>
|
|
1461
2013
|
<span class="cline-any cline-neutral"> </span>
|
|
2014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2017
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2018
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2019
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2020
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2022
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2024
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1462
2026
|
<span class="cline-any cline-no"> </span>
|
|
1463
2027
|
<span class="cline-any cline-no"> </span>
|
|
1464
2028
|
<span class="cline-any cline-neutral"> </span>
|
|
1465
2029
|
<span class="cline-any cline-no"> </span>
|
|
2030
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2032
|
+
<span class="cline-any cline-no"> </span>
|
|
2033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2034
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2035
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2036
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2037
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2038
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2039
|
+
<span class="cline-any cline-no"> </span>
|
|
2040
|
+
<span class="cline-any cline-no"> </span>
|
|
2041
|
+
<span class="cline-any cline-no"> </span>
|
|
2042
|
+
<span class="cline-any cline-no"> </span>
|
|
2043
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2044
|
+
<span class="cline-any cline-no"> </span>
|
|
2045
|
+
<span class="cline-any cline-no"> </span>
|
|
2046
|
+
<span class="cline-any cline-no"> </span>
|
|
1466
2047
|
<span class="cline-any cline-no"> </span>
|
|
1467
2048
|
<span class="cline-any cline-neutral"> </span>
|
|
1468
2049
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1493,6 +2074,8 @@
|
|
|
1493
2074
|
<span class="cline-any cline-neutral"> </span>
|
|
1494
2075
|
<span class="cline-any cline-neutral"> </span>
|
|
1495
2076
|
<span class="cline-any cline-no"> </span>
|
|
2077
|
+
<span class="cline-any cline-no"> </span>
|
|
2078
|
+
<span class="cline-any cline-no"> </span>
|
|
1496
2079
|
<span class="cline-any cline-neutral"> </span>
|
|
1497
2080
|
<span class="cline-any cline-no"> </span>
|
|
1498
2081
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1527,41 +2110,113 @@
|
|
|
1527
2110
|
<span class="cline-any cline-neutral"> </span>
|
|
1528
2111
|
<span class="cline-any cline-neutral"> </span>
|
|
1529
2112
|
<span class="cline-any cline-no"> </span>
|
|
2113
|
+
<span class="cline-any cline-no"> </span>
|
|
2114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2115
|
+
<span class="cline-any cline-no"> </span>
|
|
2116
|
+
<span class="cline-any cline-no"> </span>
|
|
2117
|
+
<span class="cline-any cline-no"> </span>
|
|
2118
|
+
<span class="cline-any cline-no"> </span>
|
|
2119
|
+
<span class="cline-any cline-no"> </span>
|
|
2120
|
+
<span class="cline-any cline-no"> </span>
|
|
2121
|
+
<span class="cline-any cline-no"> </span>
|
|
1530
2122
|
<span class="cline-any cline-neutral"> </span>
|
|
1531
2123
|
<span class="cline-any cline-no"> </span>
|
|
1532
2124
|
<span class="cline-any cline-neutral"> </span>
|
|
1533
2125
|
<span class="cline-any cline-neutral"> </span>
|
|
1534
2126
|
<span class="cline-any cline-no"> </span>
|
|
1535
2127
|
<span class="cline-any cline-neutral"> </span>
|
|
2128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1536
2129
|
<span class="cline-any cline-no"> </span>
|
|
1537
2130
|
<span class="cline-any cline-no"> </span>
|
|
2131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1538
2132
|
<span class="cline-any cline-no"> </span>
|
|
1539
2133
|
<span class="cline-any cline-no"> </span>
|
|
1540
2134
|
<span class="cline-any cline-neutral"> </span>
|
|
2135
|
+
<span class="cline-any cline-no"> </span>
|
|
1541
2136
|
<span class="cline-any cline-neutral"> </span>
|
|
1542
2137
|
<span class="cline-any cline-neutral"> </span>
|
|
1543
2138
|
<span class="cline-any cline-no"> </span>
|
|
2139
|
+
<span class="cline-any cline-no"> </span>
|
|
1544
2140
|
<span class="cline-any cline-neutral"> </span>
|
|
1545
2141
|
<span class="cline-any cline-no"> </span>
|
|
2142
|
+
<span class="cline-any cline-no"> </span>
|
|
2143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1546
2144
|
<span class="cline-any cline-neutral"> </span>
|
|
1547
2145
|
<span class="cline-any cline-no"> </span>
|
|
1548
2146
|
<span class="cline-any cline-no"> </span>
|
|
1549
2147
|
<span class="cline-any cline-neutral"> </span>
|
|
2148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1550
2149
|
<span class="cline-any cline-no"> </span>
|
|
1551
2150
|
<span class="cline-any cline-no"> </span>
|
|
1552
2151
|
<span class="cline-any cline-neutral"> </span>
|
|
1553
2152
|
<span class="cline-any cline-neutral"> </span>
|
|
1554
2153
|
<span class="cline-any cline-no"> </span>
|
|
2154
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2156
|
+
<span class="cline-any cline-no"> </span>
|
|
2157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2158
|
+
<span class="cline-any cline-no"> </span>
|
|
1555
2159
|
<span class="cline-any cline-no"> </span>
|
|
2160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1556
2161
|
<span class="cline-any cline-no"> </span>
|
|
2162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1557
2163
|
<span class="cline-any cline-no"> </span>
|
|
1558
2164
|
<span class="cline-any cline-neutral"> </span>
|
|
1559
2165
|
<span class="cline-any cline-neutral"> </span>
|
|
2166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2167
|
+
<span class="cline-any cline-no"> </span>
|
|
2168
|
+
<span class="cline-any cline-no"> </span>
|
|
2169
|
+
<span class="cline-any cline-no"> </span>
|
|
2170
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2171
|
+
<span class="cline-any cline-no"> </span>
|
|
2172
|
+
<span class="cline-any cline-no"> </span>
|
|
2173
|
+
<span class="cline-any cline-no"> </span>
|
|
2174
|
+
<span class="cline-any cline-no"> </span>
|
|
2175
|
+
<span class="cline-any cline-no"> </span>
|
|
2176
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2177
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2178
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2179
|
+
<span class="cline-any cline-no"> </span>
|
|
2180
|
+
<span class="cline-any cline-no"> </span>
|
|
2181
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2182
|
+
<span class="cline-any cline-no"> </span>
|
|
2183
|
+
<span class="cline-any cline-no"> </span>
|
|
2184
|
+
<span class="cline-any cline-no"> </span>
|
|
2185
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2186
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2188
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2189
|
+
<span class="cline-any cline-no"> </span>
|
|
2190
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2193
|
+
<span class="cline-any cline-no"> </span>
|
|
2194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2196
|
+
<span class="cline-any cline-no"> </span>
|
|
2197
|
+
<span class="cline-any cline-no"> </span>
|
|
1560
2198
|
<span class="cline-any cline-no"> </span>
|
|
1561
2199
|
<span class="cline-any cline-no"> </span>
|
|
1562
2200
|
<span class="cline-any cline-no"> </span>
|
|
1563
2201
|
<span class="cline-any cline-neutral"> </span>
|
|
1564
2202
|
<span class="cline-any cline-neutral"> </span>
|
|
2203
|
+
<span class="cline-any cline-no"> </span>
|
|
2204
|
+
<span class="cline-any cline-no"> </span>
|
|
2205
|
+
<span class="cline-any cline-no"> </span>
|
|
2206
|
+
<span class="cline-any cline-no"> </span>
|
|
2207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2208
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2209
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2210
|
+
<span class="cline-any cline-no"> </span>
|
|
2211
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2212
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2213
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2214
|
+
<span class="cline-any cline-no"> </span>
|
|
2215
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2216
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2217
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2218
|
+
<span class="cline-any cline-no"> </span>
|
|
2219
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1565
2220
|
<span class="cline-any cline-neutral"> </span>
|
|
1566
2221
|
<span class="cline-any cline-neutral"> </span>
|
|
1567
2222
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1600,6 +2255,11 @@
|
|
|
1600
2255
|
<span class="cline-any cline-neutral"> </span>
|
|
1601
2256
|
<span class="cline-any cline-no"> </span>
|
|
1602
2257
|
<span class="cline-any cline-no"> </span>
|
|
2258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2261
|
+
<span class="cline-any cline-no"> </span>
|
|
2262
|
+
<span class="cline-any cline-no"> </span>
|
|
1603
2263
|
<span class="cline-any cline-no"> </span>
|
|
1604
2264
|
<span class="cline-any cline-no"> </span>
|
|
1605
2265
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1617,7 +2277,9 @@
|
|
|
1617
2277
|
<span class="cline-any cline-neutral"> </span>
|
|
1618
2278
|
<span class="cline-any cline-neutral"> </span>
|
|
1619
2279
|
<span class="cline-any cline-neutral"> </span>
|
|
1620
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import
|
|
2280
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import ConditionsManager from '../modules/conditionsManager.js'</span>
|
|
2281
|
+
<span class="cstat-no" title="statement not covered" >import FeatureFlags from '../modules/featureFlags.js'</span>
|
|
2282
|
+
import type Message from './messages.gen.js'
|
|
1621
2283
|
<span class="cstat-no" title="statement not covered" >import { Timestamp, Metadata, UserID, Type as MType, TabChange, TabData } from './messages.gen.js'</span>
|
|
1622
2284
|
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1623
2285
|
now,
|
|
@@ -1643,6 +2305,7 @@ import type { Options as LoggerOptions } from './logger.js'
|
|
|
1643
2305
|
import type { Options as SessOptions } from './session.js'
|
|
1644
2306
|
import type { Options as NetworkOptions } from '../modules/network.js'
|
|
1645
2307
|
<span class="cstat-no" title="statement not covered" >import CanvasRecorder from './canvas.js'</span>
|
|
2308
|
+
<span class="cstat-no" title="statement not covered" >import UserTestManager from '../modules/userTesting/index.js'</span>
|
|
1646
2309
|
|
|
1647
2310
|
import type {
|
|
1648
2311
|
Options as WebworkerOptions,
|
|
@@ -1669,17 +2332,32 @@ interface OnStartInfo {
|
|
|
1669
2332
|
}
|
|
1670
2333
|
|
|
1671
2334
|
const CANCELED = <span class="cstat-no" title="statement not covered" >'canceled' as const</span>
|
|
2335
|
+
const uxtStorageKey = <span class="cstat-no" title="statement not covered" >'or_uxt_active'</span>
|
|
2336
|
+
const bufferStorageKey = <span class="cstat-no" title="statement not covered" >'or_buffer_1'</span>
|
|
1672
2337
|
const START_ERROR = <span class="cstat-no" title="statement not covered" >':(' as const</span>
|
|
1673
|
-
type SuccessfulStart = OnStartInfo & {
|
|
2338
|
+
type SuccessfulStart = OnStartInfo & {
|
|
2339
|
+
success: true
|
|
2340
|
+
}
|
|
1674
2341
|
type UnsuccessfulStart = {
|
|
1675
2342
|
reason: typeof CANCELED | string
|
|
1676
2343
|
success: false
|
|
1677
2344
|
}
|
|
1678
2345
|
|
|
1679
|
-
type RickRoll = {
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
2346
|
+
type RickRoll = {
|
|
2347
|
+
source: string
|
|
2348
|
+
context: string
|
|
2349
|
+
} & (
|
|
2350
|
+
| {
|
|
2351
|
+
line: 'never-gonna-give-you-up'
|
|
2352
|
+
}
|
|
2353
|
+
| {
|
|
2354
|
+
line: 'never-gonna-let-you-down'
|
|
2355
|
+
token: string
|
|
2356
|
+
}
|
|
2357
|
+
| {
|
|
2358
|
+
line: 'never-gonna-run-around-and-desert-you'
|
|
2359
|
+
token: string
|
|
2360
|
+
}
|
|
1683
2361
|
)
|
|
1684
2362
|
|
|
1685
2363
|
const UnsuccessfulStart = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>eason: string): UnsuccessfulStart => (<span class="cstat-no" title="statement not covered" >{ reason, success: false })</span></span>
|
|
@@ -1693,6 +2371,7 @@ type CommitCallback = (messages: Array<Message>) => void
|
|
|
1693
2371
|
<span class="cstat-no" title="statement not covered" > NotActive,</span>
|
|
1694
2372
|
<span class="cstat-no" title="statement not covered" > Starting,</span>
|
|
1695
2373
|
<span class="cstat-no" title="statement not covered" > Active,</span>
|
|
2374
|
+
<span class="cstat-no" title="statement not covered" > ColdStart,</span>
|
|
1696
2375
|
}
|
|
1697
2376
|
|
|
1698
2377
|
type AppOptions = {
|
|
@@ -1714,6 +2393,7 @@ type AppOptions = {
|
|
|
1714
2393
|
sessionStorage: Storage | null
|
|
1715
2394
|
forceSingleTab?: boolean
|
|
1716
2395
|
disableStringDict?: boolean
|
|
2396
|
+
assistSocketHost?: string
|
|
1717
2397
|
|
|
1718
2398
|
// @deprecated
|
|
1719
2399
|
onStart?: StartCallback
|
|
@@ -1745,8 +2425,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1745
2425
|
readonly localStorage: Storage
|
|
1746
2426
|
readonly sessionStorage: Storage
|
|
1747
2427
|
private readonly <span class="cstat-no" title="statement not covered" >messages: Array<Message> = []</span>
|
|
2428
|
+
/**
|
|
2429
|
+
* we need 2 buffers so we don't lose anything
|
|
2430
|
+
* @read coldStart implementation
|
|
2431
|
+
* */
|
|
2432
|
+
private <span class="cstat-no" title="statement not covered" >bufferedMessages1: Array<Message> = []</span>
|
|
2433
|
+
private <span class="cstat-no" title="statement not covered" >bufferedMessages2: Array<Message> = []</span>
|
|
1748
2434
|
/* private */
|
|
1749
|
-
readonly observer: Observer // non-
|
|
2435
|
+
readonly observer: Observer // non-private for attachContextCallback
|
|
1750
2436
|
private readonly <span class="cstat-no" title="statement not covered" >startCallbacks: Array<StartCallback> = []</span>
|
|
1751
2437
|
private readonly <span class="cstat-no" title="statement not covered" >stopCallbacks: Array<() => any> = []</span>
|
|
1752
2438
|
private readonly <span class="cstat-no" title="statement not covered" >commitCallbacks: Array<CommitCallback> = []</span>
|
|
@@ -1763,16 +2449,16 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1763
2449
|
private readonly contextId
|
|
1764
2450
|
public attributeSender: AttributeSender
|
|
1765
2451
|
private <span class="cstat-no" title="statement not covered" >canvasRecorder: CanvasRecorder | null = null</span>
|
|
1766
|
-
private
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
2452
|
+
private uxtManager: UserTestManager
|
|
2453
|
+
private <span class="cstat-no" title="statement not covered" >conditionsManager: ConditionsManager | null = null</span>
|
|
2454
|
+
public featureFlags: FeatureFlags
|
|
2455
|
+
|
|
2456
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
2457
|
+
projectKey: string,
|
|
2458
|
+
sessionToken: string | undefined,
|
|
2459
|
+
options: Partial<Options>,
|
|
2460
|
+
private readonly <span class="cstat-no" title="statement not covered" >signalError: (error: string, apis: string[]) => void,</span>
|
|
2461
|
+
) {
|
|
1776
2462
|
<span class="cstat-no" title="statement not covered" > this.contextId = Math.random().toString(36).slice(2)</span>
|
|
1777
2463
|
<span class="cstat-no" title="statement not covered" > this.projectKey = projectKey</span>
|
|
1778
2464
|
<span class="cstat-no" title="statement not covered" > this.networkOptions = options.network</span>
|
|
@@ -1794,12 +2480,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1794
2480
|
sessionStorage: null,
|
|
1795
2481
|
disableStringDict: false,
|
|
1796
2482
|
forceSingleTab: false,
|
|
2483
|
+
assistSocketHost: '',
|
|
1797
2484
|
},
|
|
1798
2485
|
options,
|
|
1799
2486
|
)
|
|
1800
2487
|
|
|
1801
2488
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.forceSingleTab && globalThis && 'BroadcastChannel' in globalThis) {</span>
|
|
1802
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2489
|
+
const host = <span class="cstat-no" title="statement not covered" >location.hostname.split('.').slice(-2).join('_')</span>
|
|
2490
|
+
<span class="cstat-no" title="statement not covered" > this.bc = inIframe() ? null : new BroadcastChannel(`rick_${host}`)</span>
|
|
1803
2491
|
}
|
|
1804
2492
|
|
|
1805
2493
|
<span class="cstat-no" title="statement not covered" > this.revID = this.options.revID</span>
|
|
@@ -1814,6 +2502,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1814
2502
|
<span class="cstat-no" title="statement not covered" > this.notify = new Logger(this.options.verbose ? LogLevel.Warnings : LogLevel.Silent)</span>
|
|
1815
2503
|
<span class="cstat-no" title="statement not covered" > this.session = new Session(this, this.options)</span>
|
|
1816
2504
|
<span class="cstat-no" title="statement not covered" > this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict))</span>
|
|
2505
|
+
<span class="cstat-no" title="statement not covered" > this.featureFlags = new FeatureFlags(this)</span>
|
|
1817
2506
|
<span class="cstat-no" title="statement not covered" > this.session.attachUpdateCallback(<span class="fstat-no" title="function not covered" >({</span> userID, metadata }) => {</span>
|
|
1818
2507
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (userID != null) {</span>
|
|
1819
2508
|
// TODO: nullable userID
|
|
@@ -1958,9 +2647,17 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1958
2647
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._usingOldFetchPlugin && message[0] === MType.NetworkRequest) {</span>
|
|
1959
2648
|
<span class="cstat-no" title="statement not covered" > return</span>
|
|
1960
2649
|
}
|
|
1961
|
-
// ====================================================
|
|
1962
2650
|
|
|
1963
|
-
|
|
2651
|
+
// ====================================================
|
|
2652
|
+
<span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
|
|
2653
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(message)</span>
|
|
2654
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.singleBuffer) {</span>
|
|
2655
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(message)</span>
|
|
2656
|
+
}
|
|
2657
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager?.processMessage(message)</span>
|
|
2658
|
+
} else {
|
|
2659
|
+
<span class="cstat-no" title="statement not covered" > this.messages.push(message)</span>
|
|
2660
|
+
}
|
|
1964
2661
|
// TODO: commit on start if there were `urgent` sends;
|
|
1965
2662
|
// Clarify where urgent can be used for;
|
|
1966
2663
|
// Clarify workflow for each type of message in case it was sent before start
|
|
@@ -1971,7 +2668,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1971
2668
|
}
|
|
1972
2669
|
}
|
|
1973
2670
|
|
|
1974
|
-
|
|
2671
|
+
/**
|
|
2672
|
+
* Normal workflow: add timestamp and tab data to batch, then commit it
|
|
2673
|
+
* every ~30ms
|
|
2674
|
+
* */
|
|
2675
|
+
private <span class="fstat-no" title="function not covered" >_nCommit(</span>): void {
|
|
1975
2676
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.worker !== undefined && this.messages.length) {</span>
|
|
1976
2677
|
<span class="cstat-no" title="statement not covered" > requestIdleCb(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
1977
2678
|
<span class="cstat-no" title="statement not covered" > this.messages.unshift(TabData(this.session.getTabId()))</span>
|
|
@@ -1983,6 +2684,39 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
1983
2684
|
})
|
|
1984
2685
|
}
|
|
1985
2686
|
}
|
|
2687
|
+
|
|
2688
|
+
<span class="cstat-no" title="statement not covered" > coldStartCommitN = 0</span>
|
|
2689
|
+
|
|
2690
|
+
/**
|
|
2691
|
+
* Cold start: add timestamp and tab data to both batches
|
|
2692
|
+
* every 2nd tick, ~60ms
|
|
2693
|
+
* this will make batches a bit larger and replay will work with bigger jumps every frame
|
|
2694
|
+
* but in turn we don't overload batch writer on session start with 1000 batches
|
|
2695
|
+
* */
|
|
2696
|
+
private <span class="fstat-no" title="function not covered" >_cStartCommit(</span>): void {
|
|
2697
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartCommitN += 1</span>
|
|
2698
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.coldStartCommitN === 2) {</span>
|
|
2699
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
2700
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
2701
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
|
|
2702
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
|
|
2703
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartCommitN = 0</span>
|
|
2704
|
+
}
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
private <span class="fstat-no" title="function not covered" >commit(</span>): void {
|
|
2708
|
+
<span class="cstat-no" title="statement not covered" > if (this.activityState === ActivityState.ColdStart) {</span>
|
|
2709
|
+
<span class="cstat-no" title="statement not covered" > this._cStartCommit()</span>
|
|
2710
|
+
} else {
|
|
2711
|
+
<span class="cstat-no" title="statement not covered" > this._nCommit()</span>
|
|
2712
|
+
}
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
private <span class="fstat-no" title="function not covered" >postToWorker(</span>messages: Array<Message>) {
|
|
2716
|
+
<span class="cstat-no" title="statement not covered" > this.worker?.postMessage(messages)</span>
|
|
2717
|
+
<span class="cstat-no" title="statement not covered" > this.commitCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) => <span class="cstat-no" title="statement not covered" >cb(messages))</span></span>
|
|
2718
|
+
<span class="cstat-no" title="statement not covered" > messages.length = 0</span>
|
|
2719
|
+
}
|
|
1986
2720
|
|
|
1987
2721
|
private <span class="cstat-no" title="statement not covered" >delay = 0</span>
|
|
1988
2722
|
|
|
@@ -2154,20 +2888,193 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2154
2888
|
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2155
2889
|
}
|
|
2156
2890
|
}
|
|
2891
|
+
|
|
2892
|
+
<span class="cstat-no" title="statement not covered" > coldInterval: ReturnType<typeof setInterval> | null = null</span>
|
|
2893
|
+
<span class="cstat-no" title="statement not covered" > orderNumber = 0</span>
|
|
2894
|
+
<span class="cstat-no" title="statement not covered" > coldStartTs = 0</span>
|
|
2895
|
+
<span class="cstat-no" title="statement not covered" > singleBuffer = false</span>
|
|
2896
|
+
|
|
2897
|
+
private <span class="fstat-no" title="function not covered" >checkSessionToken(</span>forceNew?: boolean) {
|
|
2898
|
+
const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
|
|
2899
|
+
const needNewSessionID = <span class="cstat-no" title="statement not covered" >forceNew || lsReset</span>
|
|
2900
|
+
const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
|
|
2901
|
+
|
|
2902
|
+
<span class="cstat-no" title="statement not covered" > return needNewSessionID || !sessionToken</span>
|
|
2903
|
+
}
|
|
2904
|
+
/**
|
|
2905
|
+
* start buffering messages without starting the actual session, which gives
|
|
2906
|
+
* user 30 seconds to "activate" and record session by calling `start()` on conditional trigger
|
|
2907
|
+
* and we will then send buffered batch, so it won't get lost
|
|
2908
|
+
* */
|
|
2909
|
+
public async <span class="fstat-no" title="function not covered" >coldStart(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> conditional?: boolean) {
|
|
2910
|
+
<span class="cstat-no" title="statement not covered" > this.singleBuffer = false</span>
|
|
2911
|
+
const second = <span class="cstat-no" title="statement not covered" >1000</span>
|
|
2912
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
|
|
2913
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager = new ConditionsManager(this, startOpts)</span>
|
|
2914
|
+
}
|
|
2915
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
2916
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (conditional) {</span>
|
|
2917
|
+
const r = <span class="cstat-no" title="statement not covered" >await fetch(this.options.ingestPoint + '/v1/web/start', {</span>
|
|
2918
|
+
method: 'POST',
|
|
2919
|
+
headers: {
|
|
2920
|
+
'Content-Type': 'application/json',
|
|
2921
|
+
},
|
|
2922
|
+
body: JSON.stringify({
|
|
2923
|
+
...this.getTrackerInfo(),
|
|
2924
|
+
timestamp: now(),
|
|
2925
|
+
doNotRecord: true,
|
|
2926
|
+
bufferDiff: 0,
|
|
2927
|
+
userID: this.session.getInfo().userID,
|
|
2928
|
+
token: undefined,
|
|
2929
|
+
deviceMemory,
|
|
2930
|
+
jsHeapSizeLimit,
|
|
2931
|
+
timezone: getTimezone(),
|
|
2932
|
+
}),
|
|
2933
|
+
})
|
|
2934
|
+
// this token is needed to fetch conditions and flags,
|
|
2935
|
+
// but it can't be used to record a session
|
|
2936
|
+
const {
|
|
2937
|
+
token,
|
|
2938
|
+
userBrowser,
|
|
2939
|
+
userCity,
|
|
2940
|
+
userCountry,
|
|
2941
|
+
userDevice,
|
|
2942
|
+
userOS,
|
|
2943
|
+
userState,
|
|
2944
|
+
projectID,
|
|
2945
|
+
} = <span class="cstat-no" title="statement not covered" >await r.json()</span>
|
|
2946
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({ projectID })</span>
|
|
2947
|
+
<span class="cstat-no" title="statement not covered" > this.session.setUserInfo({</span>
|
|
2948
|
+
userBrowser,
|
|
2949
|
+
userCity,
|
|
2950
|
+
userCountry,
|
|
2951
|
+
userDevice,
|
|
2952
|
+
userOS,
|
|
2953
|
+
userState,
|
|
2954
|
+
})
|
|
2955
|
+
<span class="cstat-no" title="statement not covered" > await this.conditionsManager?.fetchConditions(token as string)</span>
|
|
2956
|
+
<span class="cstat-no" title="statement not covered" > await this.featureFlags.reloadFlags(token as string)</span>
|
|
2957
|
+
<span class="cstat-no" title="statement not covered" > this.conditionsManager?.processFlags(this.featureFlags.flags)</span>
|
|
2958
|
+
}
|
|
2959
|
+
const cycle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2960
|
+
<span class="cstat-no" title="statement not covered" > this.orderNumber += 1</span>
|
|
2961
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
2962
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
|
|
2963
|
+
<span class="cstat-no" title="statement not covered" > if (this.orderNumber % 2 === 0) {</span>
|
|
2964
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
|
|
2965
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
2966
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
2967
|
+
} else {
|
|
2968
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
|
|
2969
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(Timestamp(this.timestamp()))</span>
|
|
2970
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.push(TabData(this.session.getTabId()))</span>
|
|
2971
|
+
}
|
|
2972
|
+
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
2973
|
+
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
|
|
2974
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
|
|
2975
|
+
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
2976
|
+
}
|
|
2977
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
|
|
2978
|
+
// Reset session metadata only if requested directly
|
|
2979
|
+
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
2980
|
+
}
|
|
2981
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({</span>
|
|
2982
|
+
// MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
|
|
2983
|
+
userID: startOpts.userID,
|
|
2984
|
+
metadata: startOpts.metadata,
|
|
2985
|
+
})
|
|
2986
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
|
|
2987
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
2988
|
+
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
2989
|
+
}
|
|
2990
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
2991
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
2992
|
+
}
|
|
2993
|
+
<span class="cstat-no" title="statement not covered" > this.coldInterval = setInterval(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2994
|
+
<span class="cstat-no" title="statement not covered" > cycle()</span>
|
|
2995
|
+
}, 30 * second)
|
|
2996
|
+
<span class="cstat-no" title="statement not covered" > cycle()</span>
|
|
2997
|
+
}
|
|
2998
|
+
|
|
2999
|
+
public <span class="fstat-no" title="function not covered" >offlineRecording(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
3000
|
+
<span class="cstat-no" title="statement not covered" > this.singleBuffer = true</span>
|
|
3001
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
3002
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
3003
|
+
<span class="cstat-no" title="statement not covered" > this.coldStartTs = now()</span>
|
|
3004
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
|
|
3005
|
+
const saverBuffer = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(bufferStorageKey)</span>
|
|
3006
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (saverBuffer) {</span>
|
|
3007
|
+
const data = <span class="cstat-no" title="statement not covered" >JSON.parse(saverBuffer)</span>
|
|
3008
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1 = Array.isArray(data) ? data : []</span>
|
|
3009
|
+
<span class="cstat-no" title="statement not covered" > this.localStorage.removeItem(bufferStorageKey)</span>
|
|
3010
|
+
}
|
|
3011
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(Timestamp(this.timestamp()))</span>
|
|
3012
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.push(TabData(this.session.getTabId()))</span>
|
|
3013
|
+
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.ColdStart</span>
|
|
3014
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
|
|
3015
|
+
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
3016
|
+
}
|
|
3017
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.forceNew) {</span>
|
|
3018
|
+
// Reset session metadata only if requested directly
|
|
3019
|
+
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
3020
|
+
}
|
|
3021
|
+
<span class="cstat-no" title="statement not covered" > this.session.assign({</span>
|
|
3022
|
+
// MBTODO: maybe it would make sense to `forceNew` if the `userID` was changed
|
|
3023
|
+
userID: startOpts.userID,
|
|
3024
|
+
metadata: startOpts.metadata,
|
|
3025
|
+
})
|
|
3026
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession) {</span>
|
|
3027
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
3028
|
+
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
3029
|
+
}
|
|
3030
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
3031
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
3032
|
+
}
|
|
3033
|
+
|
|
3034
|
+
/**
|
|
3035
|
+
* Saves the captured messages in localStorage (or whatever is used in its place)
|
|
3036
|
+
*
|
|
3037
|
+
* Then when this.offlineRecording is called, it will preload this messages and clear the storage item
|
|
3038
|
+
*
|
|
3039
|
+
* Keeping the size of local storage reasonable is up to the end users of this library
|
|
3040
|
+
* */
|
|
3041
|
+
public <span class="fstat-no" title="function not covered" >saveBuffer(</span>) {
|
|
3042
|
+
<span class="cstat-no" title="statement not covered" > this.localStorage.setItem(bufferStorageKey, JSON.stringify(this.bufferedMessages1))</span>
|
|
3043
|
+
}
|
|
3044
|
+
|
|
3045
|
+
/**
|
|
3046
|
+
* Uploads the stored buffer to create session
|
|
3047
|
+
* */
|
|
3048
|
+
public <span class="fstat-no" title="function not covered" >uploadOfflineRecording(</span>) {
|
|
3049
|
+
const buffer = <span class="cstat-no" title="statement not covered" >this.bufferedMessages1</span>
|
|
3050
|
+
<span class="cstat-no" title="statement not covered" > this.stop(false)</span>
|
|
3051
|
+
// then fetch it
|
|
3052
|
+
<span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
|
|
3053
|
+
}
|
|
2157
3054
|
|
|
2158
3055
|
private <span class="fstat-no" title="function not covered" >_start(</span>startOpts: StartOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span> resetByWorker = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: Promise<StartPromiseReturn> {
|
|
3056
|
+
const isColdStart = <span class="cstat-no" title="statement not covered" >this.activityState === ActivityState.ColdStart</span>
|
|
3057
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isColdStart && this.coldInterval) {</span>
|
|
3058
|
+
<span class="cstat-no" title="statement not covered" > clearInterval(this.coldInterval)</span>
|
|
3059
|
+
}
|
|
2159
3060
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
|
|
2160
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3061
|
+
const reason = <span class="cstat-no" title="statement not covered" >'No worker found: perhaps, CSP is not set.'</span>
|
|
3062
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3063
|
+
<span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
|
|
2161
3064
|
}
|
|
2162
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
3065
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
3066
|
+
this.activityState === ActivityState.Active ||
|
|
3067
|
+
this.activityState === ActivityState.Starting
|
|
3068
|
+
) {
|
|
3069
|
+
const reason =
|
|
3070
|
+
<span class="cstat-no" title="statement not covered" > 'OpenReplay: trying to call `start()` on the instance that has been started already.'</span>
|
|
3071
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3072
|
+
<span class="cstat-no" title="statement not covered" > return Promise.resolve(UnsuccessfulStart(reason))</span>
|
|
2168
3073
|
}
|
|
2169
3074
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Starting</span>
|
|
2170
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3075
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isColdStart) {</span>
|
|
3076
|
+
<span class="cstat-no" title="statement not covered" > adjustTimeOrigin()</span>
|
|
3077
|
+
}
|
|
2171
3078
|
|
|
2172
3079
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startOpts.sessionHash) {</span>
|
|
2173
3080
|
<span class="cstat-no" title="statement not covered" > this.session.applySessionHash(startOpts.sessionHash)</span>
|
|
@@ -2194,15 +3101,13 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2194
3101
|
tabId: this.session.getTabId(),
|
|
2195
3102
|
})
|
|
2196
3103
|
|
|
2197
|
-
const lsReset = <span class="cstat-no" title="statement not covered" >this.sessionStorage.getItem(this.options.session_reset_key) !== null</span>
|
|
2198
|
-
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2199
|
-
const needNewSessionID = <span class="cstat-no" title="statement not covered" >startOpts.forceNew || lsReset || resetByWorker</span>
|
|
2200
3104
|
const sessionToken = <span class="cstat-no" title="statement not covered" >this.session.getSessionToken()</span>
|
|
2201
|
-
const isNewSession = <span class="cstat-no" title="statement not covered" >
|
|
3105
|
+
const isNewSession = <span class="cstat-no" title="statement not covered" >this.checkSessionToken(startOpts.forceNew)</span>
|
|
3106
|
+
<span class="cstat-no" title="statement not covered" > this.sessionStorage.removeItem(this.options.session_reset_key)</span>
|
|
2202
3107
|
|
|
2203
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3108
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log(</span>
|
|
2204
3109
|
'OpenReplay: starting session; need new session id?',
|
|
2205
|
-
|
|
3110
|
+
isNewSession,
|
|
2206
3111
|
'session token: ',
|
|
2207
3112
|
sessionToken,
|
|
2208
3113
|
)
|
|
@@ -2215,6 +3120,8 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2215
3120
|
body: JSON.stringify({
|
|
2216
3121
|
...this.getTrackerInfo(),
|
|
2217
3122
|
timestamp,
|
|
3123
|
+
doNotRecord: false,
|
|
3124
|
+
bufferDiff: timestamp - this.coldStartTs,
|
|
2218
3125
|
userID: this.session.getInfo().userID,
|
|
2219
3126
|
token: isNewSession ? undefined : sessionToken,
|
|
2220
3127
|
deviceMemory,
|
|
@@ -2237,10 +3144,14 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2237
3144
|
})
|
|
2238
3145
|
.then(<span class="fstat-no" title="function not covered" >(r</span>) => {
|
|
2239
3146
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.worker) {</span>
|
|
2240
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3147
|
+
const reason = <span class="cstat-no" title="statement not covered" >'no worker found after start request (this might not happen)'</span>
|
|
3148
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3149
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2241
3150
|
}
|
|
2242
3151
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState === ActivityState.NotActive) {</span>
|
|
2243
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3152
|
+
const reason = <span class="cstat-no" title="statement not covered" >'Tracker stopped during authorization'</span>
|
|
3153
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3154
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2244
3155
|
}
|
|
2245
3156
|
const {
|
|
2246
3157
|
token,
|
|
@@ -2269,7 +3180,9 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2269
3180
|
typeof delay !== 'number' ||
|
|
2270
3181
|
(typeof beaconSizeLimit !== 'number' && typeof beaconSizeLimit !== 'undefined')
|
|
2271
3182
|
) {
|
|
2272
|
-
<span class="cstat-no" title="statement not covered"
|
|
3183
|
+
const reason = <span class="cstat-no" title="statement not covered" >`Incorrect server response: ${JSON.stringify(r)}`</span>
|
|
3184
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(reason, [])</span>
|
|
3185
|
+
<span class="cstat-no" title="statement not covered" > return Promise.reject(reason)</span>
|
|
2273
3186
|
}
|
|
2274
3187
|
<span class="cstat-no" title="statement not covered" > this.delay = delay</span>
|
|
2275
3188
|
<span class="cstat-no" title="statement not covered" > this.session.setSessionToken(token)</span>
|
|
@@ -2287,7 +3200,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2287
3200
|
projectID,
|
|
2288
3201
|
})
|
|
2289
3202
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNewSession && token === sessionToken) {</span>
|
|
2290
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3203
|
+
<span class="cstat-no" title="statement not covered" > this.debug.log('continuing session on new tab', this.session.getTabId())</span>
|
|
2291
3204
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
2292
3205
|
<span class="cstat-no" title="statement not covered" > this.send(TabChange(this.session.getTabId()))</span>
|
|
2293
3206
|
}
|
|
@@ -2304,20 +3217,48 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2304
3217
|
})
|
|
2305
3218
|
|
|
2306
3219
|
<span class="cstat-no" title="statement not covered" > this.compressionThreshold = compressionThreshold</span>
|
|
2307
|
-
|
|
2308
3220
|
const onStartInfo = <span class="cstat-no" title="statement not covered" >{ sessionToken: token, userUUID, sessionID }</span>
|
|
2309
3221
|
|
|
3222
|
+
const flushBuffer = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(b</span>uffer: Message[]) => {</span>
|
|
3223
|
+
let ended = <span class="cstat-no" title="statement not covered" >false</span>
|
|
3224
|
+
const messagesBatch: Message[] = <span class="cstat-no" title="statement not covered" >[buffer.shift() as unknown as Message]</span>
|
|
3225
|
+
<span class="cstat-no" title="statement not covered" > while (!ended) {</span>
|
|
3226
|
+
const nextMsg = <span class="cstat-no" title="statement not covered" >buffer[0]</span>
|
|
3227
|
+
<span class="cstat-no" title="statement not covered" > if (!nextMsg || nextMsg[0] === MType.Timestamp) {</span>
|
|
3228
|
+
<span class="cstat-no" title="statement not covered" > ended = true</span>
|
|
3229
|
+
} else {
|
|
3230
|
+
<span class="cstat-no" title="statement not covered" > messagesBatch.push(buffer.shift() as unknown as Message)</span>
|
|
3231
|
+
}
|
|
3232
|
+
}
|
|
3233
|
+
<span class="cstat-no" title="statement not covered" > this.postToWorker(messagesBatch)</span>
|
|
3234
|
+
}
|
|
2310
3235
|
// TODO: start as early as possible (before receiving the token)
|
|
2311
|
-
<span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
|
|
2312
|
-
this.canvasRecorder ?? new CanvasRecorder(this, { fps: 2, quality: 'high' })
|
|
2313
|
-
<span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
|
|
2314
3236
|
<span class="cstat-no" title="statement not covered" > this.startCallbacks.forEach(<span class="fstat-no" title="function not covered" >(c</span>b) => <span class="cstat-no" title="statement not covered" >cb(onStartInfo))</span> /</span>/ MBTODO: callbacks after DOM "mounted" (observed)
|
|
2315
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
2316
|
-
|
|
2317
|
-
// if (canvasEnabled) {
|
|
2318
|
-
// canvasRecorder(this, { fps: canvasFPS, quality: canvasQuality })
|
|
2319
|
-
// }
|
|
3237
|
+
<span class="cstat-no" title="statement not covered" > void this.featureFlags.reloadFlags()</span>
|
|
3238
|
+
/** --------------- COLD START BUFFER ------------------*/
|
|
2320
3239
|
<span class="cstat-no" title="statement not covered" > this.activityState = ActivityState.Active</span>
|
|
3240
|
+
<span class="cstat-no" title="statement not covered" > if (isColdStart) {</span>
|
|
3241
|
+
const biggestBurger =
|
|
3242
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length > this.bufferedMessages2.length</span>
|
|
3243
|
+
? this.bufferedMessages1
|
|
3244
|
+
: this.bufferedMessages2
|
|
3245
|
+
<span class="cstat-no" title="statement not covered" > while (biggestBurger.length > 0) {</span>
|
|
3246
|
+
<span class="cstat-no" title="statement not covered" > flushBuffer(biggestBurger)</span>
|
|
3247
|
+
}
|
|
3248
|
+
<span class="cstat-no" title="statement not covered" > this.clearBuffers()</span>
|
|
3249
|
+
<span class="cstat-no" title="statement not covered" > this.commit()</span>
|
|
3250
|
+
/** --------------- COLD START BUFFER ------------------*/
|
|
3251
|
+
} else {
|
|
3252
|
+
<span class="cstat-no" title="statement not covered" > this.observer.observe()</span>
|
|
3253
|
+
<span class="cstat-no" title="statement not covered" > this.ticker.start()</span>
|
|
3254
|
+
}
|
|
3255
|
+
|
|
3256
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (canvasEnabled) {</span>
|
|
3257
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder =</span>
|
|
3258
|
+
this.canvasRecorder ??
|
|
3259
|
+
new CanvasRecorder(this, { fps: canvasFPS, quality: canvasQuality })
|
|
3260
|
+
<span class="cstat-no" title="statement not covered" > this.canvasRecorder.startTracking()</span>
|
|
3261
|
+
}
|
|
2321
3262
|
|
|
2322
3263
|
<span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay tracking started.')</span>
|
|
2323
3264
|
// get rid of onStart ?
|
|
@@ -2325,20 +3266,64 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2325
3266
|
<span class="cstat-no" title="statement not covered" > this.options.onStart(onStartInfo)</span>
|
|
2326
3267
|
}
|
|
2327
3268
|
<span class="cstat-no" title="statement not covered" > this.restartAttempts = 0</span>
|
|
3269
|
+
|
|
3270
|
+
<span class="cstat-no" title="statement not covered" > this.uxtManager = this.uxtManager</span>
|
|
3271
|
+
? this.uxtManager
|
|
3272
|
+
: new UserTestManager(this, uxtStorageKey)
|
|
3273
|
+
let uxtId: number | undefined
|
|
3274
|
+
const savedUxtTag = <span class="cstat-no" title="statement not covered" >this.localStorage.getItem(uxtStorageKey)</span>
|
|
3275
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (savedUxtTag) {</span>
|
|
3276
|
+
<span class="cstat-no" title="statement not covered" > uxtId = parseInt(savedUxtTag, 10)</span>
|
|
3277
|
+
}
|
|
3278
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (location?.search) {</span>
|
|
3279
|
+
const query = <span class="cstat-no" title="statement not covered" >new URLSearchParams(location.search)</span>
|
|
3280
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (query.has('oruxt')) {</span>
|
|
3281
|
+
const qId = <span class="cstat-no" title="statement not covered" >query.get('oruxt')</span>
|
|
3282
|
+
<span class="cstat-no" title="statement not covered" > uxtId = qId ? parseInt(qId, 10) : undefined</span>
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3285
|
+
|
|
3286
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uxtId) {</span>
|
|
3287
|
+
<span class="cstat-no" title="statement not covered" > if (!this.uxtManager.isActive) {</span>
|
|
3288
|
+
// eslint-disable-next-line
|
|
3289
|
+
<span class="cstat-no" title="statement not covered" > this.uxtManager.getTest(uxtId, token, Boolean(savedUxtTag)).then(<span class="fstat-no" title="function not covered" >(i</span>d) => {</span>
|
|
3290
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {</span>
|
|
3291
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) => void) => <span class="cstat-no" title="statement not covered" >cb(id))</span></span>
|
|
3292
|
+
}
|
|
3293
|
+
})
|
|
3294
|
+
} else {
|
|
3295
|
+
// @ts-ignore
|
|
3296
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.forEach(<span class="fstat-no" title="function not covered" >(c</span>b: (id: number) => void) => <span class="cstat-no" title="statement not covered" >cb(uxtId))</span></span>
|
|
3297
|
+
}
|
|
3298
|
+
}
|
|
3299
|
+
|
|
2328
3300
|
<span class="cstat-no" title="statement not covered" > return SuccessfulStart(onStartInfo)</span>
|
|
2329
3301
|
})
|
|
2330
3302
|
.catch(<span class="fstat-no" title="function not covered" >(r</span>eason) => {
|
|
2331
3303
|
<span class="cstat-no" title="statement not covered" > this.stop()</span>
|
|
2332
3304
|
<span class="cstat-no" title="statement not covered" > this.session.reset()</span>
|
|
2333
3305
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reason === CANCELED) {</span>
|
|
3306
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(CANCELED, [])</span>
|
|
2334
3307
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(CANCELED)</span>
|
|
2335
3308
|
}
|
|
2336
3309
|
|
|
2337
3310
|
<span class="cstat-no" title="statement not covered" > this.notify.log('OpenReplay was unable to start. ', reason)</span>
|
|
2338
3311
|
<span class="cstat-no" title="statement not covered" > this._debug('session_start', reason)</span>
|
|
3312
|
+
<span class="cstat-no" title="statement not covered" > this.signalError(START_ERROR, [])</span>
|
|
2339
3313
|
<span class="cstat-no" title="statement not covered" > return UnsuccessfulStart(START_ERROR)</span>
|
|
2340
3314
|
})
|
|
2341
3315
|
}
|
|
3316
|
+
|
|
3317
|
+
<span class="cstat-no" title="statement not covered" > onUxtCb = []</span>
|
|
3318
|
+
|
|
3319
|
+
<span class="fstat-no" title="function not covered" > addOnUxtCb(</span>cb: (id: number) => void) {
|
|
3320
|
+
// @ts-ignore
|
|
3321
|
+
<span class="cstat-no" title="statement not covered" > this.onUxtCb.push(cb)</span>
|
|
3322
|
+
}
|
|
3323
|
+
|
|
3324
|
+
<span class="fstat-no" title="function not covered" > getUxtId(</span>): number | null {
|
|
3325
|
+
<span class="cstat-no" title="statement not covered" > return this.uxtManager?.getTestId()</span>
|
|
3326
|
+
}
|
|
2342
3327
|
|
|
2343
3328
|
/**
|
|
2344
3329
|
* basically we ask other tabs during constructor
|
|
@@ -2374,6 +3359,11 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2374
3359
|
<span class="cstat-no" title="statement not covered" > return this.session.getTabId()</span>
|
|
2375
3360
|
}
|
|
2376
3361
|
|
|
3362
|
+
<span class="fstat-no" title="function not covered" > clearBuffers(</span>) {
|
|
3363
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages1.length = 0</span>
|
|
3364
|
+
<span class="cstat-no" title="statement not covered" > this.bufferedMessages2.length = 0</span>
|
|
3365
|
+
}
|
|
3366
|
+
|
|
2377
3367
|
<span class="fstat-no" title="function not covered" > stop(</span>stopWorker = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span>: void {
|
|
2378
3368
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activityState !== ActivityState.NotActive) {</span>
|
|
2379
3369
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -2401,7 +3391,7 @@ function <span class="fstat-no" title="function not covered" >getTimezone(</span
|
|
|
2401
3391
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2402
3392
|
Code coverage generated by
|
|
2403
3393
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2404
|
-
at 2023-
|
|
3394
|
+
at 2023-12-15T15:55:44.965Z
|
|
2405
3395
|
</div>
|
|
2406
3396
|
<script src="../../prettify.js"></script>
|
|
2407
3397
|
<script>
|