Energy balance analysis was carried out during the operation process of a preheating catalytic oxidation device of coal mine ventilation air methane. The effects of space velocity, inlet gas temperature and methane volume concentration on each energy balance term were studied. The experimental results show that: the exothermic oxidation power and the surface heat dissipation power loss rise with the increase of methane volume concentration and the oxidation bed inlet temperature, and yet fall when space velocity achieves a high enough value; the exhaust heat power loss is enhanced significantly with the growth of the inlet temperature and space velocity, but the change of methane volume concentration has very little influence on the exhaust heat loss power; the fraction of the exhaust heat loss descends significantly with the increase of methane volume concentration and inlet temperature, and yet rises obviously with the improvement of space velocity. The above results provide a theoretical guidance on the stable self-heating maintenance operation of the preheating catalytic oxidation device.
Keyword: Catalytic oxidation, Energy balance, Parametric study, Ventilation air methane.
© Ming-Ming et al.; Licensee Bentham Open.
In order to improve the safety of coal mine production, the Ventilation Air Methane (VAM) is usually exhausted by a great deal of ventilation. Methane, the main component of VAM, is the second largest greenhouse gas after carbon dioxide. However, it is also a kind of clean gas energy. China is one of the largest coal producers and the annual emission of pure methane through VAM exceeds 150 billion cubic meters. It causes not only huge waste of the renewable energy resource but also serious pollution of the atmospheric environment [1I. Karakurt, G. Aydin, and K. Aydiner, "Mine ventilation air methane as a sustainable energy source", Renew. Sustain. Energy Rev., vol. 15, no. 2, pp. 1042-1049, 2011.
[http://dx.doi.org/10.1016/j.rser.2010.11.030] -5C.Ö. Karacan, F.A. Ruiz, M. Cotè, and S. Phipps, "Coal mine methane: A review of capture and utilization practices with benefits to mining safety and to greenhouse gas reduction", Int. J. Coal Geol., vol. 86, no. 2, pp. 121-156, 2011.
It is difficult to burn the VAM directly by the traditional burner for its low concentration (generally 0.1% ~ 0.75%) and large fluctuation of volume concentration and flow rate [6K. Warmuzinski, "Harnessing methane emissions from coal mining", Process Saf. Environ., vol. 86, no. 5, pp. 315-320, 2008.
[http://dx.doi.org/10.1016/j.psep.2008.04.003] -10K. Gosiewski, A. Pawlaczyk, and M. Jaschik, "Thermal combustion of lean methane–air mixtures: flow reversal research and demonstration reactor model and its validation", Chem. Eng. J., vol. 207-208, no. 5, pp. 76-84, 2012.
[http://dx.doi.org/10.1016/j.cej.2012.07.044] ]. According to the character of the VAM, Shandong University of Technology of China proposed a preheating catalytic oxidation technology, which could effectively oxidize the VAM by a honeycomb ceramic oxidation bed loaded by the noble metal Pd catalyst [11Y.Q. Liu, R.X. Liu, and Y.X. Wang, "A Preheating Catalytic Oxidation Reactor for Coal Mine Ventilation Air Methane", China Patent CN202113840U, 2012.-15B. Zheng, Y.Q. Liu, R.X. Liu, S. Chen, M.M. Mao, and J. Meng, "Starting characteristics of ventilation air methane preheating catalytic oxidation reactor", J. Chin. Coal Soc., vol. 39, no. 6, pp. 1084-1088, 2014.]. In addition, the heat of the exhaust can be recycled by a recuperative heat exchanger to achieve the thermal equilibrium state to maintain the self-heating maintenance operation. This technology brings a stable and reliable temperature field and high heat recovery efficiency with compact structure and small flow resistance, so it is very economical and feasible.
Because the methane content of the inlet stream is very low, the key to the successful operation of preheating catalytic oxidation device is whether a thermal equilibrium state during the catalytic oxidation reaction can be reached. The thermal equilibrium is a balance between the released heat by the catalytic oxidation reaction and the heat taken away by the exhaust and dissipated on the device surface.
In the operation of the device, the operating parameters have a great influence on the catalytic oxidation heat release, the exhaust heat loss and the surface heat dissipation loss. The influence plays an important role for the design guidance of the heat exchanger and the insulation layer. Previous studies about the VAM catalytic oxidation focused on methane conversion rate, stability of temperature field and heat extraction performance [16B. Zheng, Y.Q. Liu, R.X. Liu, and J. Meng, "Catalytic oxidation of coal mine ventilation air methane in a preheat catalytic reaction", Int. J. Hydrogen Energy, vol. 40, no. 8, pp. 3381-3387, 2015.
[http://dx.doi.org/10.1016/j.ijhydene.2015.01.020] -20Z.L. Gao, Y.Q. Liu, and Z.Q. Gao, "Heat extraction characteristic of embedded heat exchanger in honeycomb ceramic packed bed", Int. Commun. Heat Mass., vol. 39, no. 10, pp. 1526-1534, 2012.
[http://dx.doi.org/10.1016/j.icheatmasstransfer.2012.09.010] ], while the analysis on the device overall thermal equilibrium and the research of the effects of the operating parameters on the heat loss are very lacking. Thereby the thermal equilibrium is analyzed in the running process of a coal mine VAM preheating catalytic oxidation device, and the influence of several important operating parameters, including inlet stream methane volume concentration, space velocity and oxidation bed inlet temperature on the energy balance terms to maintain the thermal equilibrium is investigated. The above research can provide an important theoretical guidance for the optimal design and the stable self-heating maintenance operation of the oxidation device.
The coal mine VAM preheating catalytic oxidation device is shown in Fig. (1 ). The whole system mainly includes a reaction chamber, the gas supply system, the preheating system, the startup/auxiliary heating system, and the measurement and control system. The catalytic oxidation bed in the reaction chamber is the core part of the device, which is packed by the cordierite honeycomb ceramic blocks. The catalytic oxidation bed has a length of 1050mm and the cross section is 600mm × 600mm square. The honeycomb ceramic blocks have a large number of square channels with hole density of 17.3 PPI. The block size is 150mm×150mm×150mm and the honeycomb porosity is about 60%. The inner wall of the honeycomb ceramic hole is coated by the catalyst with the active ingredient of noble metal palladium. The air supply system, mainly including a fan, a fan inverter, a compressed natural gas cylinder and a pressure regulating box, can supply the methane-air mixture with a volume concentration of less than 1%. The preheating system uses a recuperative heat exchanger to recycle the exhaust gas to heat the inlet stream. There is a two-way corrugated plate for heat transfer enhancement inside of the recuperative heat exchanger. The startup/auxiliary heating system is composed by an electric heater and a control cabinet, which can heat the oxidation bed to the oxidation temperature of methane in the initial operation of the device. The measurement and control system mainly conducts the oxidation bed temperature measurement, the gas flow rate measurement, the pressure difference measurement and the gas composition analysis, and adjust the inlet flow rate and volume concentration.
Diagram of preheating catalytic oxidation reactor.
The total flow rate of the gas is measured by the orifice plate flow meter, whose measuring range is 0~1500Nm3/h, and the measurement accuracy is 1%. The temperature and pressure difference of the cold side and the hot side of the preheater are both measured by the KIMO TPS-08-500-T type pitot tube and the CP200 type micro differential pressure transmitter, and the measurement accuracy is 4%. Methane volume concentration at the inlet and outlet of the device is real-time monitored by the GJG10H(C) type pipeline infrared methane concentration sensor manufactured by Chongqing branch of China Coal Research Institute, with the measurement range 0 to 1%, error within ± 0.07%, and response time 20s. To acquire more accurate experimental data when the energy balance state is achieved, the methane volume concentration in the inlet and outlet of the device is measured by the J2KN type flue gas analyzer of German RBR company, and the accuracy is 1ppm.
The oxidation bed structure is shown in Fig. (2a ), which is composed of the first layer of the ceramic without catalyst and the back seven layers of the catalyst supported ceramic. The thickness of each layer is 150mm. The first ceramic layer has a K type thermocouple in the center to measure the inlet temperature of the oxidation bed and evens the inlet flow and temperature. In the catalytic oxidation bed, four temperature measurement cross sections are arranged, with five K type thermocouples at each section for temperature measurement. The arrangement of measuring points is shown in Fig. (2b ). The temperature measuring point is assigned respectively in the cold and hot side of the heat exchanger to obtain the inlet stream temperature and the exhaust temperature, which is shown in Fig. (2c ).
Temperature measurement points arrangement of the reactor.
The operation principle of the preheating catalytic oxidation device is shown in Fig. (1 ). Firstly, the electric heater turns on under a small flow rate to heat the oxidation bed rapidly until the fresh VAM oxidation temperature is achieved. Then the methane gas is mixed into the inlet stream. The methane-air mixture is catalytically oxidized in the oxidation bed and the oxidation heat is released and divided into two parts. One part is absorbed by the oxidation bed and the other part preheats the unreacted inlet stream through the heat exchanger. The cooled exhaust is finally discharged into the atmosphere. When the preheated inlet stream temperature rises high enough for the methane-air mixture catalytic oxidation in the oxidation bed, the electric heater is turned off and the device achieves self-heating maintenance operation relying on the exothermic oxidation heat and the heat feedback of the heat exchanger.
Because of the limited performance of the thermal insulation layer, the device has surface heat dissipation loss. In addition, the exhaust gas takes away a part of the methane exothermic oxidation heat which could not be recovered and the exhaust heat loss is produced. During the experimental process, in order to adjust the operation parameters conveniently, such as space velocity, inlet concentration and inlet temperature, and study the influence of each parameter on the heat loss, the electric heater stays turned on all the time. The condition for the preheating catalytic oxidation device to reach the thermal equilibrium state is that the sum of the heating power of the methane exothermic oxidation heat and the electric heater equals the sum of the surface heat dissipation loss power and the exhaust heat loss power. When the inlet stream parameter is changed, the temperature field of the oxidation bed varies subsequently and will achieve a new energy equilibrium state after a period of time. This is a slow process for the large thermal inertia of the oxidation bed. If the temperature field keeps essentially the same for at least twenty minutes, the energy equilibrium state is achieved and the measuring data will be collected.
Where, Φ1 is the methane exothermic oxidation power in kW, qv is the volume flow rate of methane-air mixture into the device per unit time in the standard condition in L·s-1, η is the methane conversion rate, xCH4,in is the methane volume concentration, and Vmol is the gas molar volume in the standard condition with the value of 22.4L·mol-1.
Where, Φ2 is the exhaust heat loss power in kW, ρ is the inlet stream density in the standard condition in kg·L-1, cpout is the specific heat at constant pressure of the exhaust gas, cpin is the specific heat at constant pressure of the inlet stream gas, both in J·kg-1·K-1, and Tin is the inlet stream temperature in K. Because the methane concentration of the inlet stream is very low (less than 1%), the specific heat capacity of the inlet stream and exhaust is calculated according to the air.
Where, Φ3 is the surface heat dissipation power, and Φ4 is the heating power of the starter, both in kW.
After the startup of the preheating catalytic oxidation device is completed, in order to study the effects of the operating parameters on the heat loss, firstly the space velocity is set as a fixed value through the frequency conversion fan, then the inlet gas temperature of the oxidation bed is determined by the heating power of the electric heater, finally the inlet gas concentration is adjusted by the ratio of the methane through the gas supply system, so the performance can be obtained under different operating parameters. Fig. (3 ) shows the transient variation of the average temperature of the oxidation bed under the space velocity of 6400h-1. From Fig. (3 ) it can be seen that the average temperature of the oxidation bed rises rapidly in the startup stage, and the methane is incorporated into the inlet gas after the methane catalytic oxidation temperature (about 420°C) is reached. In the catalytic oxidation stage, the inlet temperature is increased gradually from 450°C to 550°C, and the average temperature of the oxidation bed also rises and keeps very close to it. When the methane volume concentration is improved from 0.6% to 1.0%, the average temperature of the oxidation bed is almost unchanged. This is because the concentration of the inlet stream is very low, and the change of the oxidation heat release has no obvious effect on the average temperature of the oxidation bed.
Change of oxidation bed average temperature with time with space velocity of 6400 h-1.
Change of exhaust temperature with time with space velocity of 6400 h-1.
Figs. (4 and 5 ) are respectively the variation of the exhaust and preheated inlet gas temperature with time under the space velocity of 6400h-1. The temperature of the exhaust and the preheated inlet stream both have obvious delay compared with the average temperature of the oxidation bed, because the released oxidation heat is absorbed and stored firstly by the oxidation bed, and then the excessive heat is discharged with the exhaust gas and preheat the inlet stream through the recuperative exchanger. Fig. (4 ) shows that the exhaust maintains a high level temperature (about 130°C ~170°C) and increases significantly with the rise of the average temperature of the oxidation bed, so a great exhaust heat loss is generated due to the uncycled heat. Fig. (5 ) shows that although the preheated inlet stream temperature improves obviously with the inlet temperature of the oxidation bed, it still never reaches the ignition temperature (about 420°C) for the methane-air mixture catalytic oxidation in the oxidation bed. In addition, the temperature of the preheated inlet stream falls further due to the heat loss before the arrival at the entrance of the oxidation bed, so a secondary heating is necessary besides the preheating. With the increase of the inlet temperature of the oxidation bed, the preheated inlet stream temperature is obviously improved, which indicates that more exhaust heat is recycled, and it is beneficial for the device to achieve the self-heating maintenance state.
Change of preheated inlet gas temperature with time with space velocity of 6400 h-1.
The inlet stream methane concentration, space velocity and the inlet temperature of the oxidation bed are all important parameters during the running of the preheating catalytic oxidation device, and have significant influence on the heat loss in the process of the methane catalytic oxidation. In the study of the influence of the methane volume concentration, the inlet temperature of the oxidation bed is fixed to 600°C, the methane volume concentration ranges 0.6%~1.0%, and the inlet stream space velocity ranges 4000h-1~7200h-1. Fig. (6a -c ) show the influence of the methane volume concentration on the methane exothermic oxidation power, the exhaust heat loss power and the surface heat dissipation power, respectively. It can be seen from Fig. (6a ), the exothermic oxidation power all increases rapidly under three space velocities when the methane volume concentration is improved from 0.6% to 1.0%. The methane exothermic oxidation power gets a big jump when the space velocity grows from 4000 h-1to 6400 h-1, and however has a slight drop when the space velocity grows from 6400 h-1to 7200 h-1. This is due to the decreased methane conversion rate under the excessive space velocity. Fig. (6b ) shows that the methane volume concentration has small influence on the exhaust heat loss power because the inlet stream concentration is quite low and has little effect on the exhaust temperature. Fig. (6c ) shows that the surface heat dissipation power increases significantly with the rise of the concentration especially under higher space velocity because the methane oxidation releases more heat absorbed by the oxidation bed under higher methane volume concentration which enhances the heat exchange between the reaction chamber and the environment. When the space velocity is increased to 7200 h-1, the surface heat dissipation power begins to decline. This is because the methane conversion rate decreases under the high inlet space velocity for short residence time. Then the average temperature of the oxidation bed drops and the heat exchange between the oxidation bed and the environment weakens.
Fig. (7 ) shows the variation of the fraction of the total heat loss accounted by the exhaust heat loss with the methane volume concentration. This fraction obviously decreases with the increase of the methane volume concentration, which indicates that the heat exchange between the reaction chamber and the environment gets stronger and more heat is dissipated through the device surface when the catalytic oxidation becomes more intense. While the exhaust heat loss still accounts for far more than 50% of the total heat loss under each methane volume concentration, so it always occupies the dominant. With the rise of the space velocity, the fraction of the exhaust heat loss increases significantly, because the shorter residence time isn't enough for the heat exchange between the exhaust and the oxidation bed and thus much heat is taken away by the exhaust.
Effects of methane volume concentration on the energy balance terms under different space velocities.
The main method for the reduction of the exhaust heat loss is to increase the heat exchange area of the exchanger to improve the heat recovery efficiency and for the reduction of the surface heat dissipation loss is to increase the insulation layer thickness or replace it for other insulation materials with lower thermal conductivity. According to the character of the heat loss under various operating conditions, the exhaust heat loss should be controlled emphatically under condition with low inlet stream methane volume concentration and high space velocity, while the surface heat dissipation loss should be controlled emphatically under condition with high inlet stream methane volume concentration and low space velocity. In the whole range of the operating parameters of the preheating catalytic oxidation device, the heat exchanger and the insulation layer should be optimized according to the operating condition with high inlet space velocity and high inlet concentration.
Change of fraction of the exhaust heat loss with concentration under different space velocities.
During the study of the inlet temperature of the oxidation bed under different space velocities, the inlet stream methane volume concentration is fixed to 1%, the inlet temperature of the oxidation bed ranges 450°C~600°C and the inlet stream space velocity ranges 4000h-1~7200h-1 Fig. ( 8a -c ) show the effect of the inlet temperature of the oxidation bed on the methane exothermic oxidation power, the exhaust heat loss power and the surface heat dissipation power respectively, for different space velocities. Fig. (8a ) shows with the increase of the inlet temperature, the methane exothermic oxidation power evidently increases especially under high inlet stream space velocity, because the methane conversion rate is improved by the high inlet temperature particularly under high inlet stream space velocity. So the methane exothermic oxidation power under the space velocity of 6400 h-1 and 7200h-1 is much higher than that under the space velocity of 4000 h-1 when the inlet temperature is increased above 500°C. Thus as long as the inlet temperature of the oxidation bed exceeds 500°C, the methane mixture can be fully oxidized under the space velocity of 4000 h-1. Fig. (8b ) shows the exhaust heat loss power increases with the increase of the inlet temperature . The reason is that the higher inlet temperature leads to the higher exhaust gas temperature. For the high inlet space velocity, the methane conversion rate increases with higher inlet temperature, so the exhaust gas temperature rises rapidly. Fig. (8c ) shows that the surface heat dissipation power grows obviously with the increase of the inlet temperature for the two higher space velocities, while for the lower space velocity no striking changes are observed above 500 ºC. This is because the methane has been essentially oxidized and the oxidation heat has been fully released under the lower space velocity, however the methane conversion rate is still rising with the increased inlet temperature under the higher space velocity, so the further released heat enhances the heat exchange between the reaction chamber and the environment.
Fig. (9 ) shows the variation of the exhaust heat loss fraction of the total heat loss with the inlet temperature of the oxidation bed. It's clear that the fraction of the exhaust heat loss presents a general decreasing trend with the increase of the oxidation bed inlet temperature under the two higher space velocities, while much less affected under the low space velocity. This is owing to that the methane conversion rate is more easily affected by the inlet temperature under the higher space velocity, so the oxidation heat release obviously increases and the surface heat dissipation is strengthened, and thus the fraction of the surface heat dissipation rises. It's evident that the exhaust heat loss accounts for well over 50% of the total heat loss and occupies absolute dominance under the two higher space velocities, yet the fraction of the exhaust heat loss and surface heat dissipation are very close under the low space velocity. Thus the heat loss control should focus on the control of the exhaust heat loss under the condition with high space velocity and low inlet temperature and attaches equal importance to both heat losses under the condition with low space velocity. In the whole operating conditions the heat exchanger and insulation layer should be reasonably designed aiming at the condition with high space velocity and high inlet temperature of the oxidation bed.
Effects of oxidation bed inlet gas temperature on the energy balance terms under different space velocities.
Change of fraction of exhaust heat loss with oxidation bed inlet gas temperature under different space velocities.
1) The exothermic oxidation power grows with the increase of the inlet methane volume concentration and the oxidation bed inlet temperature, yet decreases slightly when the space velocity increases to a certain value. This is because the increase of the inlet concentration and temperature improves the methane conversion rate, while the excessive space velocity reduces the methane conversion rate, so the overall methane oxidation heat is affected.
2) The inlet stream temperature and space velocity have obviously more influence on the exhaust heat loss power than the inlet stream methane volume concentration. This is due to that the methane volume concentration is in a very low operating range and has small effects on the methane conversion rate. While the rise of the inlet stream temperature improves the methane conversion rate evidently and the increase of the space velocity enhances the heat exchange of the gas and the oxidation bed, thus the exhaust takes more heat away.
3) The surface heat dissipation loss power increases significantly with the increase of the inlet stream concentration and temperature, especially at high space velocity, and with the increase of the space velocity firstly increases and then decreases. This is because with the increase of the inlet concentration and temperature the methane oxidation heat release grows and the heat exchange between the reaction chamber and the outside is enhanced. However, the methane conversion rate decreases when the space velocity increases to a certain value, then the oxidation heat release decreases and the heat exchange between the reaction chamber and the external reduces.
4) The fraction of the total heat loss accounted by the exhaust heat loss significantly reduces with the improvement of the inlet stream concentration and temperature, and yet obviously increases with the increase of the space velocity. In the whole operating parameter range of the preheating catalytic oxidation device, the heat recovery efficiency of the heat exchanger and the insulation layer performance should be optimized according to the exhaust heat loss and the surface heat dissipation loss under the high inlet concentration, temperature and space velocity condition, so as to reduce the overall heat loss and achieve the self-heating maintenance state.
The authors gratefully acknowledge the financial supports for this research from the National High Technology Research and Development Program ("863" Program) of China (Grant No. 2009AA063202), Shandong Province Natural Science Foundation Programs of China (Grant No. ZR2011EL017, No.ZR2013EEQ005and No.ZR2013EEQ008), Shandong Province Science and Technology Development Plan Project of China (Grant No. 2012GGX10417) .
 I. Karakurt, G. Aydin, and K. Aydiner, "Mine ventilation air methane as a sustainable energy source", Renew. Sustain. Energy Rev., vol. 15, no. 2, pp. 1042-1049, 2011.
 F.Y. Sang, and G.Q. Zhao, "Comparison of vam utilization technology and equipments selection", Chin. Coalb. Meth, vol. 7, no. 2, pp. 44-46, 2010.
 Z.L. Gao, Z.Q. Gao, Y.Q. Liu, and Q.Q. Su, "Actuality and development of harness and utilization of coalmine ven.tilation air methane", Energy Metall. Ind., vol. 29, no. 5, pp. 43-46, 2010.
 I. Karakurt, and G. Aydin, "Sources and mitigation of methane emissions by sectors: A critical review", Renew. Energy, vol. 39, no. 1, pp. 40-48, 2012.
 C.Ö. Karacan, F.A. Ruiz, M. Cotè, and S. Phipps, "Coal mine methane: A review of capture and utilization practices with benefits to mining safety and to greenhouse gas reduction", Int. J. Coal Geol., vol. 86, no. 2, pp. 121-156, 2011.
 K. Warmuzinski, "Harnessing methane emissions from coal mining", Process Saf. Environ., vol. 86, no. 5, pp. 315-320, 2008.
 K. Gosiewski, and A. Pawlaczyk, "Catalytic or thermal reversed flow combustion of coal mine ventilation air methane: What is better choice and when?", Chem. Eng. J., vol. 238, no. 4, pp. 78-85, 2014.
 K. Gosiewski, A. Pawlaczyk, K. Warmuzinski, and M. Jaschik, "A study on thermal combustion of lean methane–air mixtures: Simplified reaction mechanism and kinetic equations", Chem. Eng. J., vol. 154, no. 1, pp. 9-16, 2009.
 K. Gosiewski, K. Warmuzinski, M. Jaschik, M. Tanczyk, and Y.S. Matros, "Homogeneous vs. catalytic combustion of lean methane-air mixtures in reverse-flow reactors", Chem. Eng. Sci., vol. 63, no. 20, pp. 5010-5019, 2008.
 K. Gosiewski, A. Pawlaczyk, and M. Jaschik, "Thermal combustion of lean methane–air mixtures: flow reversal research and demonstration reactor model and its validation", Chem. Eng. J., vol. 207-208, no. 5, pp. 76-84, 2012.
 Y.Q. Liu, R.X. Liu, and Y.X. Wang, "A Preheating Catalytic Oxidation Reactor for Coal Mine Ventilation Air Methane", China Patent CN202113840U, 2012.
 Y.Q. Liu, R.X. Liu, and Y.X. Wang, "A Preheating Catalytic Oxidation Reactor for Coal Mine Ventilation Air Methane with Multiple Reaction Chambers", China Patent CN102205207A, 2011.
 Y.Q. Liu, R.X. Liu, and Y.X. Wang, "A Preheating Catalytic Oxidation Reactor for Coal Mine Ventilation Air Methane with Burner Startup", China Patent CN102225321A, 2011.
 M.M. Mao, Y.Q. Liu, B. Zheng, R.X. Liu, and J. Meng, "Investigation of temperature distribution uniformity in a preheating catalytic oxidation bed", J. Chin. Coal Soc., vol. 40, no. 1, pp. 109-114, 2015.
 B. Zheng, Y.Q. Liu, R.X. Liu, S. Chen, M.M. Mao, and J. Meng, "Starting characteristics of ventilation air methane preheating catalytic oxidation reactor", J. Chin. Coal Soc., vol. 39, no. 6, pp. 1084-1088, 2014.
 B. Zheng, Y.Q. Liu, R.X. Liu, and J. Meng, "Catalytic oxidation of coal mine ventilation air methane in a preheat catalytic reaction", Int. J. Hydrogen Energy, vol. 40, no. 8, pp. 3381-3387, 2015.
 B. Zheng, Y.Q. Liu, R.X. Liu, J. Meng, and M.M. Mao, "Experimental investigation of flow resistance in a coal mine ventilation air methane preheated catalytic oxidation reactor", J. Chem., vol. 2015, no. 11, 2015.
 M.M. Mao, Y.Q. Liu, R.X. Liu, B. Zheng, and J. Meng, "Experimental investigations of cold flow mass distribution and pressure drop characteristics in a structured honeycomb monolith bed", Open Mech. Eng. J., vol. 9, pp. 302-311, 2015.
 Z.L. Gao, Y.Q. Liu, and Z.Q. Gao, "Influence of packed honeycomb ceramic on heat extraction rate of packed bed embedded heat exchanger and heat transfer modes in heat transfer process", Int. Commun. Heat Mass., vol. 65, no. 9, pp. 76-81, 2015.
 Z.L. Gao, Y.Q. Liu, and Z.Q. Gao, "Heat extraction characteristic of embedded heat exchanger in honeycomb ceramic packed bed", Int. Commun. Heat Mass., vol. 39, no. 10, pp. 1526-1534, 2012.


Travel trade association UKinbound has written to London mayor Sadiq Khan expressing concerns on the new requirements and proposals from Transport for London (TfL).
The proposal includes new requirements from the transport providers working in the capital, which will unfairly impact private hire operators, vehicles and drivers who provide a vital service for international tourists.
Due to the exemption removal of the congestion charge for private hire vehicles (from April 2019); a proposed substantial increase in operating licence fees; and the requirement to be Euro 6 compliant (from April 2019), incurring an additional daily charge of £12.50 per vehicle entering the Ultra Low Emission Zone (ULEZ).
It is proposed that licenced drivers will only be allowed to work within the geographic area for which they are licensed, which will be inconvenient and inefficient.
For example, if a client wanted a transfer from central London to a Southampton hotel, the London private hire driver would need to transfer them to the boundary of London and then transfer them and their luggage into a vehicle licensed for the adjacent area.
Small businesses and sole traders (such as valued Blue Badge Guides) will be adversely affected or may go out of business, as new requirements propose that operators need to have a manned phone line at a fixed address, the whole time any driver is on a job.
The letter also added that inbound tourism is the UK's fifth largest export industry, contributing an estimated GBP 13.5 billion to London's economy last year. London is the gateway to the rest of the UK for the majority of international tourists, with over 50% just visiting London alone.
Mark McVay, UKinbound chairman, said: "UKinbound, of course, supports the Mayor's plan to make London a healthier and more pleasant environment for all, however, some of the new transport requirements and proposals will have an adverse impact on the tourism industry when we should be ensuring that we make the experience for our international visitors as easy as possible.


Refining Catalysts - North America can be segmented by Ingredients, Applications and Companies. Ingredients of this market are Ethane, Propane and Butanes. Applications of this market are Construction Chemicals, Semiconductors & Ic Process Chemicals, Mining Chemicals, Pesticides, Plastic Additives, Printing Ink, Rubber chemicals, Ceramic Industry, Textiles, Specialty Polymers and Water Treatment & Management. Companies of this market are Reliance Industries Limited, DuPont Agriculture, Dow - Agriculture Sciences, Innospec Inc, Arysta LifeScience Corporation, BASF SE , Siegwerk group, NUFARM LIMITED, Syngenta AG, Sumitomo Corporation, Monsanto Company, Solvay S.A., Outotec Oyj, Bayer CropScience AG, Clariant Chemicals India Ltd, Sun Chemical, Nalco, Metso, Dow Chemical Company, Flint Group, Laffans Petrochemicals Ltd., Evonik Industries AG, ELANTAS Beck India Ltd., Kemira OYJ, SABIC Business Segments, Huntsman Corporation, Du Pont Others, Bayer AG, Rhodia S.A. (AQ by Solvay S.A. in 2011), Omnova Solutions Inc., Harima Chemicals Inc., W.R.Grace & Co., PCAS, AkzoNobel N.V., Hexion Specialty Chemicals, New Mountain Capital, LLC, Sika AG, Artek Surfin Chemicals Limited, KMG Chemicals, Inc., Hinduja Ventures Ltd., Dorf Ketal Chemicals, Sud-Chemie AG, DKSH Holding Ltd., Miteni SpA, Toyo Ink Mfg. Co., Ltd., Dow Microbial Control, Adeka India Pvt Ltd, Cytec Industries Inc., Camlin Fine Sciences Limited, Deepak Nitrite Ltd, Sensient Technologies Corp., Chemaphor Inc, Michael Huber München GmbH, Aarti Industries Ltd, Solaris Chemtech Industries Limited, Thor Group, Sensient Food Colors, Cargill Incorporated, Sakata Inx Corp., DSM, Azelis, Albemarle Corporation, Axens SA, BASF CATALYST LLC, CATALYTIC DISTILLATION TECHNOLOGIES, CHEVRON LUMMUS GLOBAL LLC, Exxon Mobil Corp, Haldor Topsøe Holding A/S, HEADWATERS TECHNOLOGY INNOVATION GROUP, Johnson Mathey Plc, UOP LLC, W.R. Grace & Co., zeolyst international, OM GrOup, Inc., Nippon Ketjen Company ltd., Merichem Company, Shell Global Solution International B.V, Sinopec Catalyst and JGC Corp..
What are market estimates and forecasts; which of Refining Catalysts - North America markets are doing well and which are not?
What is the competitive landscape; How companies like Reliance Industries Limited, DuPont Agriculture and Dow - Agriculture Sciences doing in Refining Catalysts - North America?
This report provides market sizing and forecast for the Refining Catalysts - North America market. It also provides market sizing and forecast along with the drivers/inhibitors/opportunity analysis for each of the micro markets.


Thus my friend Simon, speaking about his time reading English at Oxford and the death-by-theory thing which can so often happen during formal study. I know what he means. In my very first group supervision at Cambridge we were issued copies of a poem—I have repressed the knowledge of what it was, if I ever knew—and the Director of Studies' opening gambit was 'So, what do people make of the lacuna?'. That really opened things up, as you can imagine. Me-then was daunted into a silence full of the knowledge of my own inadequacy; me-now feels sad about the merely intellectual engagement with poetry. But these days I'm delighted to be in position to work with poetry and people in a way that I feel matters, and thing 30 is my celebration of this.
Every month I facilitate two different groups where we read together. At each, people bring poems they've thought of in relation to a particular topic (which we'll have chosen together); and at each, the emphasis is on responding to the poems in whatever ways come naturally to you. It's not that people who come aren't informed about matters poetical—some are, and some aren't so much—but that being informed isn't important or even, really, the point. Instead it's about enjoying, sharing, responding: having a relationship with the poems and with each other, and being emancipated from the tyranny of Having to Know. These are places to wonder.
Which isn't to say that that it's irrelevant that we're reading poetry (as opposed to fiction, newspapers or whatever). It does matter, because the rhythms and images and modes of poetry can bring Heineken moments in the way that prose might not. At one of the first What Are Words Worth? groups I was reading some of the classic poems people often come across when they are little—'the Highwayman', 'the Owl and the Pussycat', that sort of thing—and someone who rarely talks since he suffered a stroke suddenly sat forward in his chair and said, quite distinctly, 'I learned that one at school'. His spouse and carer was astonished. Given that the WAWW groups are funded by the Wordsworth Trust, with the remit of "reaching" members of the public, particularly those who might be marginalised or isolated in some way, that was definitely a case of the brief being met. It was an extraordinary and beautiful moment.
But as well as such miracles of connection, I want to give thanks for other gifts the groups have brought me. At early WAWW meetings I used to have the standard-issue ex-teacher's fear about [not] having enough material, so would toil into town under a rucksack distended by approx. one third of my entire collection of poetry books (and friends, that's quite a few). But I have learned that I can rely on the group: even if I'm the backstop, I'm not on my own with a responsibility. Learning to trust the group-members, and receive their trust without turning it into some kind of imperative, has been a precious experience. This is a co-creation. It works because we all want it to, and we do it together. So I carry fewer books.
Unlike WAWW, the 42 group was a lone venture, and felt altogether riskier. I remember the evening I tentatively explained the idea to Celia (whose en-couragement and enthusiasm were, from the first, more valuable than I can say). Recklessly swigging Pinot Grigio—I even had a second glass—I described what I imagined: a group where the exploration of poetry was a way into the exploration of our own lives and experience: a community of people who wanted to think, and talk, and feel, together. I had no idea if it would work. Would other people get that it wasn't poetry appreciation, or therapy, or a support group, but something a bit (only a bit) like all of those things?
We know each other, too: which former teacher can be deployed to create quiet amongst the noisy kickboxing children in the hall; who'll bring the Mary Oliver, who the Leonard Cohen; who will be in search of A Definitive Answer; who will challenge with such an absence of malice that no offence can possibly be taken, and who will be ready with the emollient and empathic word… What I'm saying is: it's a community. For me it feels like a heterogeneous found family where care and respect coexist with honesty. Thus while I often come away with new insights into poems, and having met new poets and texts, I also come away nourished by the sheer fact of people being there, being themselves. Someone who recently joined told me he felt like it was a place he'd feel safe enough to cry. That is a wonder-ful thing. I leave those Wednesday evenings feeling lifted, and extremely fortunate.
In 'The Peace of Wild Things' (read it here) Wendell Berry describes the (temporary) respite he finds when he lies down 'where the wood drake rests in his beauty in the water'. One 42 group member said, last month, 'But—we are the wood drake'. Others agreed. There followed a brief but (for me) joy-inducing discussion of how the 42 is a place to turn aside, to rest in beauty—of poems and feelings and connection—and feel replenished thereby. People really value this double accompaniment offered by peers and poetry. I feel simultaneously so proud of what I've done, and so humbled by what everyone else has done, too.
So in those moments when I doubt my own value in the world, and feel the ache of my childlessness, I remember that this is one of the things I have brought into being. The 42 group isn't me, or even mostly me, but in conceiving it and making it a reality I have done something which matters—which makes a difference in people's lives, on however small a scale. As I write I'm feeling all British and harrumph-y about "blowing my own trumpet", but I'm also feeling a lump in my throat. I do feel proud as well as grateful. Knowing I facilitate this reading together helps me feel better about myself and about the world.
'People have been through everything before us,' Libby Purves once said, 'and some, by great grace, have recorded it with undying power… [poetry offers us] handrails and lifelines and emergency lanterns… [reassuring] us that others walked this hard trail and lived to express it'. Yes, yes, yes. Though this is in danger of sounding like something even the Carpenters might have blue-pencilled for excess cheesiness, it's true: through these poetry groups we do share the laughter and the tears. We read, and know we are not alone.
And that's a hell of a lot more important than knowing what a lacuna is.
For more on poetry holding your hand in the dark places, have a look here.
I am not even going to google 'lacuna'! Useful words this week as I attempt to moderate the contents of my rucksack for the retreat!
Wonderful words Lucy and what a blessing your group must be to so many people. I have read your words over and over but taken my time because my eyesight is fading. Thank you for your blog. It gives me much thought and comfort.
Ah, Lucy, I am so grateful for that day when, laying the fire and scrumpling newspaper, I came across the article about your course about exploring grief at the Wordsworth Trust. And that led to the 42 Group which is so very special.
For many years I had entertained the idea of setting up a spiritual book group, but with what life has thrown in my path have never had the energy. I feel that the exploration of poetry says things without need to discuss them, and what discussion we have is the more succinct, because of the direct nature of the poem. And much is understood without words.


text:
Eryngium pulchellum är en flockblommig växtart som beskrevs av Rodolfo Amando Philippi. Eryngium pulchellum ingår i släktet martornar, och familjen flockblommiga växter. Inga underarter finns listade i Catalogue of Life.

Källor

Martornar
pulchellum

redpajama_set_name: RedPajamaWikipedia


text:
var xpath = require('xpath')
  , Dom = require('@xmldom/xmldom').DOMParser
  , utils = require('./utils')
  , c14n = require('./c14n-canonicalization')
  , execC14n = require('./exclusive-canonicalization')
  , EnvelopedSignature = require('./enveloped-signature').EnvelopedSignature
  , crypto = require('crypto')
  , fs = require('fs')

exports.SignedXml = SignedXml
exports.FileKeyInfo = FileKeyInfo

/**
 * A key info provider implementation
 *
 */
function FileKeyInfo(file) {
  this.file = file

  this.getKeyInfo = function(key, prefix) {
    prefix = prefix || ''
    prefix = prefix ? prefix + ':' : prefix
    return "<" + prefix + "X509Data></" + prefix + "X509Data>"
  }

  this.getKey = function(keyInfo) {
    return fs.readFileSync(this.file)
  }
}

/**
 * Hash algorithm implementation
 *
 */
function SHA1() {

  this.getHash = function(xml) {
    var shasum = crypto.createHash('sha1')
    shasum.update(xml, 'utf8')
    var res = shasum.digest('base64')
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2000/09/xmldsig#sha1"
  }
}

function SHA256() {

  this.getHash = function(xml) {
    var shasum = crypto.createHash('sha256')
    shasum.update(xml, 'utf8')
    var res = shasum.digest('base64')
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2001/04/xmlenc#sha256"
  }
}

function SHA512() {

  this.getHash = function(xml) {
    var shasum = crypto.createHash('sha512')
    shasum.update(xml, 'utf8')
    var res = shasum.digest('base64')
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2001/04/xmlenc#sha512"
  }
}

/**
 * Signature algorithm implementation
 *
 */
function RSASHA1() {

  /**
  * Sign the given string using the given key
  *
  */
  this.getSignature = function(signedInfo, signingKey, callback) {
    var signer = crypto.createSign("RSA-SHA1")
    signer.update(signedInfo)
    var res = signer.sign(signingKey, 'base64')
    if (callback) callback(null, res)
    return res
  }

  /**
  * Verify the given signature of the given string using key
  *
  */
  this.verifySignature = function(str, key, signatureValue, callback) {
    var verifier = crypto.createVerify("RSA-SHA1")
    verifier.update(str)
    var res = verifier.verify(key, signatureValue, 'base64')
    if (callback) callback(null, res)
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2000/09/xmldsig#rsa-sha1"
  }

}

/**
 * Signature algorithm implementation
 *
 */
function RSASHA256() {

  /**
  * Sign the given string using the given key
  *
  */
  this.getSignature = function(signedInfo, signingKey, callback) {
    var signer = crypto.createSign("RSA-SHA256")
    signer.update(signedInfo)
    var res = signer.sign(signingKey, 'base64')
    if (callback) callback(null, res)
    return res
  }

  /**
  * Verify the given signature of the given string using key
  *
  */
  this.verifySignature = function(str, key, signatureValue, callback) {
    var verifier = crypto.createVerify("RSA-SHA256")
    verifier.update(str)
    var res = verifier.verify(key, signatureValue, 'base64')
    if (callback) callback(null, res)
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
  }

}

/**
 * Signature algorithm implementation
 *
 */
function RSASHA512() {

  /**
  * Sign the given string using the given key
  *
  */
  this.getSignature = function(signedInfo, signingKey, callback) {
    var signer = crypto.createSign("RSA-SHA512")
    signer.update(signedInfo)
    var res = signer.sign(signingKey, 'base64')
    if (callback) callback(null, res)
    return res
  }

  /**
  * Verify the given signature of the given string using key
  *
  */
  this.verifySignature = function(str, key, signatureValue, callback) {
    var verifier = crypto.createVerify("RSA-SHA512")
    verifier.update(str)
    var res = verifier.verify(key, signatureValue, 'base64')
    if (callback) callback(null, res)
    return res
  }

  this.getAlgorithmName = function() {
    return "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"
  }
}

function HMACSHA1() {
    this.verifySignature = function(str, key, signatureValue) {
        var verifier = crypto.createHmac("SHA1", key);
        verifier.update(str);
        var res = verifier.digest('base64');
        return res === signatureValue;
    };

    this.getAlgorithmName = function() {
        return "http://www.w3.org/2000/09/xmldsig#hmac-sha1";
    };

    this.getSignature = function(signedInfo, signingKey) {
        var verifier = crypto.createHmac("SHA1", signingKey);
        verifier.update(signedInfo);
        var res = verifier.digest('base64');
        return res;
    };
}

/**
 * Extract ancestor namespaces in order to import it to root of document subset
 * which is being canonicalized for non-exclusive c14n.
 *
 * @param {object} doc - Usually a product from `new DOMParser().parseFromString()`
 * @param {string} docSubsetXpath - xpath query to get document subset being canonicalized
 * @param {object} namespaceResolver - xpath namespace resolver
 * @returns {Array} i.e. [{prefix: "saml", namespaceURI: "urn:oasis:names:tc:SAML:2.0:assertion"}]
 */
function findAncestorNs(doc, docSubsetXpath, namespaceResolver){
  var docSubset = xpath.selectWithResolver(docSubsetXpath, doc, namespaceResolver);

  if(!Array.isArray(docSubset) || docSubset.length < 1){
    return [];
  }

  // Remove duplicate on ancestor namespace
  var ancestorNs = collectAncestorNamespaces(docSubset[0]);
  var ancestorNsWithoutDuplicate = [];
  for(var i=0;i<ancestorNs.length;i++){
    var notOnTheList = true;
    for(var v in ancestorNsWithoutDuplicate){
      if(ancestorNsWithoutDuplicate[v].prefix === ancestorNs[i].prefix){
        notOnTheList = false;
        break;
      }
    }

    if(notOnTheList){
      ancestorNsWithoutDuplicate.push(ancestorNs[i]);
    }
  }

  // Remove namespaces which are already declared in the subset with the same prefix
  var returningNs = [];
  var subsetAttributes = docSubset[0].attributes;
  for(var j=0;j<ancestorNsWithoutDuplicate.length;j++){
    var isUnique = true;
    for(var k=0;k<subsetAttributes.length;k++){
      var nodeName = subsetAttributes[k].nodeName;
      if(nodeName.search(/^xmlns:/) === -1) continue;
      var prefix = nodeName.replace(/^xmlns:/, "");
      if(ancestorNsWithoutDuplicate[j].prefix === prefix){
        isUnique = false;
        break;
      }
    }

    if(isUnique){
      returningNs.push(ancestorNsWithoutDuplicate[j]);
    }
  }

  return returningNs;
}

function collectAncestorNamespaces(node, nsArray){
  if(!nsArray){
    nsArray = [];
  }

  var parent = node.parentNode;

  if(!parent){
    return nsArray;
  }

  if(parent.attributes && parent.attributes.length > 0){
    for(var i=0;i<parent.attributes.length;i++){
      var attr = parent.attributes[i];
      if(attr && attr.nodeName && attr.nodeName.search(/^xmlns:/) !== -1){
        nsArray.push({prefix: attr.nodeName.replace(/^xmlns:/, ""), namespaceURI: attr.nodeValue})
      }
    }
  }

  return collectAncestorNamespaces(parent, nsArray);
}

/**
* Xml signature implementation
*
* @param {string} idMode. Value of "wssecurity" will create/validate id's with the ws-security namespace
* @param {object} options. Initial configurations
*/
function SignedXml(idMode, options) {
  this.options = options || {};
  this.idMode = idMode
  this.references = []
  this.id = 0
  this.signingKey = null
  this.signatureAlgorithm = this.options.signatureAlgorithm || "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
  this.keyInfoProvider = null
  this.canonicalizationAlgorithm = this.options.canonicalizationAlgorithm || "http://www.w3.org/2001/10/xml-exc-c14n#"
  this.signedXml = ""
  this.signatureXml = ""
  this.signatureNode = null
  this.signatureValue = ""
  this.originalXmlWithIds = ""
  this.validationErrors = []
  this.keyInfo = null
  this.idAttributes = [ 'Id', 'ID', 'id' ];
  if (this.options.idAttribute) this.idAttributes.splice(0, 0, this.options.idAttribute);
  this.implicitTransforms = this.options.implicitTransforms || [];
}

SignedXml.CanonicalizationAlgorithms = {
  'http://www.w3.org/TR/2001/REC-xml-c14n-20010315': c14n.C14nCanonicalization,
  'http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments': c14n.C14nCanonicalizationWithComments,
  'http://www.w3.org/2001/10/xml-exc-c14n#': execC14n.ExclusiveCanonicalization,
  'http://www.w3.org/2001/10/xml-exc-c14n#WithComments': execC14n.ExclusiveCanonicalizationWithComments,
  'http://www.w3.org/2000/09/xmldsig#enveloped-signature': EnvelopedSignature
}

SignedXml.HashAlgorithms = {
  'http://www.w3.org/2000/09/xmldsig#sha1': SHA1,
  'http://www.w3.org/2001/04/xmlenc#sha256': SHA256,
  'http://www.w3.org/2001/04/xmlenc#sha512': SHA512
}

SignedXml.SignatureAlgorithms = {
  'http://www.w3.org/2000/09/xmldsig#rsa-sha1': RSASHA1,
  'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256': RSASHA256,
  'http://www.w3.org/2001/04/xmldsig-more#rsa-sha512': RSASHA512,
  // Disabled by default due to key confusion concerns.
  // 'http://www.w3.org/2000/09/xmldsig#hmac-sha1': HMACSHA1
}

/**
 * Due to key-confusion issues, its risky to have both hmac
 * and digital signature algos enabled at the same time.
 * This enables HMAC and disables other signing algos.
 */
SignedXml.enableHMAC = function () {
  SignedXml.SignatureAlgorithms = {
    'http://www.w3.org/2000/09/xmldsig#hmac-sha1': HMACSHA1
  }
}

SignedXml.defaultNsForPrefix = {
  ds: 'http://www.w3.org/2000/09/xmldsig#'
};

SignedXml.findAncestorNs = findAncestorNs;

SignedXml.prototype.checkSignature = function(xml, callback) {
  if (callback != null && typeof callback !== 'function') {
    throw new Error("Last paramater must be a callback function")
  }

  this.validationErrors = []
  this.signedXml = xml

  if (!this.keyInfoProvider) {
    var err = new Error("cannot validate signature since no key info resolver was provided")
    if (!callback) {
      throw err
    } else {
      callback(err)
      return
    }
  }

  this.signingKey = this.keyInfoProvider.getKey(this.keyInfo)
  if (!this.signingKey) {
    var err = new Error("key info provider could not resolve key info " + this.keyInfo)
    if (!callback) {
      throw err
    } else {
      callback(err)
      return
    }
  }

  var doc = new Dom().parseFromString(xml)

  if (!this.validateReferences(doc)) {
    if (!callback) {
      return false;
    } else {
      callback(new Error('Could not validate references'))
      return
    }
  }

  if (!callback) {
    //Syncronous flow
    if (!this.validateSignatureValue(doc)) {
      return false
    }
    return true
  } else {
    //Asyncronous flow
    this.validateSignatureValue(doc, function (err, isValidSignature) {
      if (err) {
        this.validationErrors.push("invalid signature: the signature value " +
                                        this.signatureValue + " is incorrect")
        callback(err)
      } else {
        callback(null, isValidSignature)
      }
    })
  }
}

SignedXml.prototype.getCanonSignedInfoXml = function(doc) {
  var signedInfo = utils.findChilds(this.signatureNode, "SignedInfo")
  if (signedInfo.length==0) throw new Error("could not find SignedInfo element in the message")

  if(this.canonicalizationAlgorithm === "http://www.w3.org/TR/2001/REC-xml-c14n-20010315"
  || this.canonicalizationAlgorithm === "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments")
  {
    if(!doc || typeof(doc) !== "object"){
      throw new Error(
        "When canonicalization method is non-exclusive, whole xml dom must be provided as an argument"
      );
    }
  }

  /**
   * Search for ancestor namespaces before canonicalization.
   */
  var ancestorNamespaces = [];
  ancestorNamespaces = findAncestorNs(doc, "//*[local-name()='SignedInfo']");

  var c14nOptions = {
    ancestorNamespaces: ancestorNamespaces
  };
  return this.getCanonXml([this.canonicalizationAlgorithm], signedInfo[0], c14nOptions)
}

SignedXml.prototype.getCanonReferenceXml = function(doc, ref, node) {
  /**
   * Search for ancestor namespaces before canonicalization.
   */
  if(Array.isArray(ref.transforms)){
    ref.ancestorNamespaces = findAncestorNs(doc, ref.xpath, this.namespaceResolver)
  }

  var c14nOptions = {
    inclusiveNamespacesPrefixList: ref.inclusiveNamespacesPrefixList,
    ancestorNamespaces: ref.ancestorNamespaces
  }

  return this.getCanonXml(ref.transforms, node, c14nOptions)
}

SignedXml.prototype.validateSignatureValue = function(doc, callback) {
  var signedInfoCanon = this.getCanonSignedInfoXml(doc)
  var signer = this.findSignatureAlgorithm(this.signatureAlgorithm)
  var res = signer.verifySignature(signedInfoCanon, this.signingKey, this.signatureValue, callback)
  if (!res && !callback) this.validationErrors.push("invalid signature: the signature value " +
                                        this.signatureValue + " is incorrect")
  return res
}

SignedXml.prototype.calculateSignatureValue = function(doc, callback) {
  var signedInfoCanon = this.getCanonSignedInfoXml(doc)
  var signer = this.findSignatureAlgorithm(this.signatureAlgorithm)
  this.signatureValue = signer.getSignature(signedInfoCanon, this.signingKey, callback)
}

SignedXml.prototype.findSignatureAlgorithm = function(name) {
  var algo = SignedXml.SignatureAlgorithms[name]
  if (algo) return new algo()
  else throw new Error("signature algorithm '" + name + "' is not supported");
}

SignedXml.prototype.findCanonicalizationAlgorithm = function(name) {
  var algo = SignedXml.CanonicalizationAlgorithms[name]
  if (algo) return new algo()
  else throw new Error("canonicalization algorithm '" + name + "' is not supported");
}

SignedXml.prototype.findHashAlgorithm = function(name) {
  var algo = SignedXml.HashAlgorithms[name]
  if (algo) return new algo()
  else throw new Error("hash algorithm '" + name + "' is not supported");
}

SignedXml.prototype.validateReferences = function(doc) {
  for (var r in this.references) {
    if (!this.references.hasOwnProperty(r)) continue;

    var ref = this.references[r]

    var uri = ref.uri[0]=="#" ? ref.uri.substring(1) : ref.uri
    var elem = [];

    if (uri=="") {
      elem = xpath.select("//*", doc)
    }
    else if (uri.indexOf("'") != -1) {
      // xpath injection
      throw new Error("Cannot validate a uri with quotes inside it");
    }
    else {
      var elemXpath;
      var num_elements_for_id = 0;
      for (var index in this.idAttributes) {
        if (!this.idAttributes.hasOwnProperty(index)) continue;
        var tmp_elemXpath = "//*[@*[local-name(.)='" + this.idAttributes[index] + "']='" + uri + "']";
        var tmp_elem = xpath.select(tmp_elemXpath, doc)
        num_elements_for_id += tmp_elem.length;
        if (tmp_elem.length > 0) {
          elem = tmp_elem;
          elemXpath = tmp_elemXpath;
        }
      }
      if (num_elements_for_id > 1) {
          throw new Error('Cannot validate a document which contains multiple elements with the ' +
          'same value for the ID / Id / Id attributes, in order to prevent ' +
          'signature wrapping attack.');
      }

      ref.xpath = elemXpath;
    }

    if (elem.length==0) {
      this.validationErrors.push("invalid signature: the signature refernces an element with uri "+
                        ref.uri + " but could not find such element in the xml")
      return false
    }

    var canonXml = this.getCanonReferenceXml(doc, ref, elem[0])

    var hash = this.findHashAlgorithm(ref.digestAlgorithm)
    var digest = hash.getHash(canonXml)

    if (!validateDigestValue(digest, ref.digestValue)) {
      this.validationErrors.push("invalid signature: for uri " + ref.uri +
                                " calculated digest is "  + digest +
                                " but the xml to validate supplies digest " + ref.digestValue)

      return false
    }
  }
  return true
}

function validateDigestValue(digest, expectedDigest) {
  var buffer, expectedBuffer;

  var majorVersion = /^v(\d+)/.exec(process.version)[1];

  if (+majorVersion >= 6) {
    buffer = Buffer.from(digest, 'base64');
    expectedBuffer = Buffer.from(expectedDigest, 'base64');
  } else {
    // Compatibility with Node < 5.10.0
    buffer = new Buffer(digest, 'base64');
    expectedBuffer = new Buffer(expectedDigest, 'base64');
  }

  if (typeof buffer.equals === 'function') {
    return buffer.equals(expectedBuffer);
  }

  // Compatibility with Node < 0.11.13
  if (buffer.length !== expectedBuffer.length) {
    return false;
  }

  for (var i = 0; i < buffer.length; i++) {
    if (buffer[i] !== expectedBuffer[i]) {
      return false;
    }
  }

  return true;
}

SignedXml.prototype.loadSignature = function(signatureNode) {
  if (typeof signatureNode === 'string') {
    this.signatureNode = signatureNode = new Dom().parseFromString(signatureNode);
  } else {
    this.signatureNode = signatureNode;
  }

  this.signatureXml = signatureNode.toString();

  var nodes = xpath.select(".//*[local-name(.)='CanonicalizationMethod']/@Algorithm", signatureNode)
  if (nodes.length==0) throw new Error("could not find CanonicalizationMethod/@Algorithm element")
  this.canonicalizationAlgorithm = nodes[0].value

  this.signatureAlgorithm =
    utils.findFirst(signatureNode, ".//*[local-name(.)='SignatureMethod']/@Algorithm").value

  this.references = []
  var references = xpath.select(".//*[local-name(.)='SignedInfo']/*[local-name(.)='Reference']", signatureNode)
  if (references.length == 0) throw new Error("could not find any Reference elements")

  for (var i in references) {
    if (!references.hasOwnProperty(i)) continue;

    this.loadReference(references[i])
  }

  this.signatureValue =
    utils.findFirst(signatureNode, ".//*[local-name(.)='SignatureValue']/text()").data.replace(/\r?\n/g, '')

  this.keyInfo = xpath.select(".//*[local-name(.)='KeyInfo']", signatureNode)
}

/**
 * Load the reference xml node to a model
 *
 */
SignedXml.prototype.loadReference = function(ref) {
  var nodes = utils.findChilds(ref, "DigestMethod")
  if (nodes.length==0) throw new Error("could not find DigestMethod in reference " + ref.toString())
  var digestAlgoNode = nodes[0]

  var attr = utils.findAttr(digestAlgoNode, "Algorithm")
  if (!attr) throw new Error("could not find Algorithm attribute in node " + digestAlgoNode.toString())
  var digestAlgo = attr.value

  nodes = utils.findChilds(ref, "DigestValue")
  if (nodes.length==0) throw new Error("could not find DigestValue node in reference " + ref.toString())
  if (nodes[0].childNodes.length==0 || !nodes[0].firstChild.data)
  {
    throw new Error("could not find the value of DigestValue in " + nodes[0].toString())
  }
  var digestValue = nodes[0].firstChild.data

  var transforms = []
  var inclusiveNamespacesPrefixList;
  nodes = utils.findChilds(ref, "Transforms")
  if (nodes.length!=0) {
    var transformsNode = nodes[0]
    var transformsAll = utils.findChilds(transformsNode, "Transform")
    for (var t in transformsAll) {
      if (!transformsAll.hasOwnProperty(t)) continue;

      var trans = transformsAll[t]
      transforms.push(utils.findAttr(trans, "Algorithm").value)
    }

    var inclusiveNamespaces = utils.findChilds(trans, "InclusiveNamespaces")
    if (inclusiveNamespaces.length > 0) {
      //Should really only be one prefix list, but maybe there's some circumstances where more than one to lets handle it
      for (var i = 0; i<inclusiveNamespaces.length; i++) {
        if (inclusiveNamespacesPrefixList) {
          inclusiveNamespacesPrefixList = inclusiveNamespacesPrefixList + " " + inclusiveNamespaces[i].getAttribute('PrefixList');
        } else {
          inclusiveNamespacesPrefixList = inclusiveNamespaces[i].getAttribute('PrefixList');
        }
      }
    }
  }

  var hasImplicitTransforms = (Array.isArray(this.implicitTransforms) && this.implicitTransforms.length > 0);
  if(hasImplicitTransforms){
    this.implicitTransforms.forEach(function(t){
      transforms.push(t);
    });
  }

/**
 * DigestMethods take an octet stream rather than a node set. If the output of the last transform is a node set, we
 * need to canonicalize the node set to an octet stream using non-exclusive canonicalization. If there are no
 * transforms, we need to canonicalize because URI dereferencing for a same-document reference will return a node-set.
 * See:
 * https://www.w3.org/TR/xmldsig-core1/#sec-DigestMethod
 * https://www.w3.org/TR/xmldsig-core1/#sec-ReferenceProcessingModel
 * https://www.w3.org/TR/xmldsig-core1/#sec-Same-Document
 */
  if (transforms.length === 0 || transforms[transforms.length - 1] === "http://www.w3.org/2000/09/xmldsig#enveloped-signature") {
      transforms.push("http://www.w3.org/TR/2001/REC-xml-c14n-20010315")
  }

  this.addReference(null, transforms, digestAlgo, utils.findAttr(ref, "URI").value, digestValue, inclusiveNamespacesPrefixList, false)
}

SignedXml.prototype.addReference = function(xpath, transforms, digestAlgorithm, uri, digestValue, inclusiveNamespacesPrefixList, isEmptyUri) {
  this.references.push({
    "xpath": xpath,
    "transforms": transforms ? transforms : ["http://www.w3.org/2001/10/xml-exc-c14n#"] ,
    "digestAlgorithm": digestAlgorithm ? digestAlgorithm : "http://www.w3.org/2000/09/xmldsig#sha1",
    "uri": uri,
    "digestValue": digestValue,
    "inclusiveNamespacesPrefixList": inclusiveNamespacesPrefixList,
    "isEmptyUri": isEmptyUri
  });
}

/**
 * Compute the signature of the given xml (usign the already defined settings)
 *
 * Options:
 *
 * - `prefix` {String} Adds a prefix for the generated signature tags
 * - `attrs` {Object} A hash of attributes and values `attrName: value` to add to the signature root node
 * - `location` {{ reference: String, action: String }}
 * - `existingPrefixes` {Object} A hash of prefixes and namespaces `prefix: namespace` already in the xml
 *   An object with a `reference` key which should
 *   contain a XPath expression, an `action` key which
 *   should contain one of the following values:
 *   `append`, `prepend`, `before`, `after`
 *
 */
SignedXml.prototype.computeSignature = function(xml, opts, callback) {
  if (typeof opts === 'function' && callback == null) {
    callback = opts
  }

  if (callback != null && typeof callback !== 'function') {
    throw new Error("Last paramater must be a callback function")
  }

  var doc = new Dom().parseFromString(xml),
      xmlNsAttr = "xmlns",
      signatureAttrs = [],
      location,
      attrs,
      prefix,
      currentPrefix;

  var validActions = ["append", "prepend", "before", "after"];

  opts = opts || {};
  prefix = opts.prefix;
  attrs = opts.attrs || {};
  location = opts.location || {};
  var existingPrefixes = opts.existingPrefixes || {};

  this.namespaceResolver = {
    lookupNamespaceURI: function(prefix) {
      return existingPrefixes[prefix];
    }
  }

  // defaults to the root node
  location.reference = location.reference || "/*";
  // defaults to append action
  location.action = location.action || "append";

  if (validActions.indexOf(location.action) === -1) {
    var err = new Error("location.action option has an invalid action: " + location.action +
      ", must be any of the following values: " + validActions.join(", "));
    if (!callback) {
      throw err;
    } else {
      callback(err, null)
      return
    }
  }

  // automatic insertion of `:`
  if (prefix) {
    xmlNsAttr += ":" + prefix;
    currentPrefix = prefix + ":";
  } else {
    currentPrefix = "";
  }

  Object.keys(attrs).forEach(function(name) {
    if (name !== "xmlns" && name !== xmlNsAttr) {
      signatureAttrs.push(name + "=\"" + attrs[name] + "\"");
    }
  });

  // add the xml namespace attribute
  signatureAttrs.push(xmlNsAttr + "=\"http://www.w3.org/2000/09/xmldsig#\"");

  var signatureXml = "<" + currentPrefix + "Signature " + signatureAttrs.join(" ") + ">"

  signatureXml += this.createSignedInfo(doc, prefix);
  signatureXml += this.getKeyInfo(prefix)
  signatureXml += "</" + currentPrefix + "Signature>"

  this.originalXmlWithIds = doc.toString()

  var existingPrefixesString = ""
  Object.keys(existingPrefixes).forEach(function(key) {
    existingPrefixesString += "xmlns:" + key + '="' + existingPrefixes[key] + '" '
  });

  // A trick to remove the namespaces that already exist in the xml
  // This only works if the prefix and namespace match with those in te xml
  var dummySignatureWrapper = "<Dummy " + existingPrefixesString + ">" + signatureXml + "</Dummy>"
  var xml = new Dom().parseFromString(dummySignatureWrapper)
  var signatureDoc = xml.documentElement.firstChild;

  var referenceNode = xpath.select(location.reference, doc);

  if (!referenceNode || referenceNode.length === 0) {
    var err = new Error("the following xpath cannot be used because it was not found: " + location.reference);
    if (!callback) {
      throw err
    } else {
      callback(err, null)
      return
    }
  }

  referenceNode = referenceNode[0];

  if (location.action === "append") {
    referenceNode.appendChild(signatureDoc);
  } else if (location.action === "prepend") {
    referenceNode.insertBefore(signatureDoc, referenceNode.firstChild);
  } else if (location.action === "before") {
    referenceNode.parentNode.insertBefore(signatureDoc, referenceNode);
  } else if (location.action === "after") {
    referenceNode.parentNode.insertBefore(signatureDoc, referenceNode.nextSibling);
  }

  this.signatureNode = signatureDoc
  var signedInfoNode = utils.findChilds(this.signatureNode, "SignedInfo")
  if (signedInfoNode.length == 0) {
    var err = new Error("could not find SignedInfo element in the message")
    if (!callback) {
      throw err
    } else {
      callback(err)
      return
    }
  }
  signedInfoNode = signedInfoNode[0];

  if (!callback) {
    //Synchronous flow
    this.calculateSignatureValue(doc)
    signatureDoc.insertBefore(this.createSignature(prefix), signedInfoNode.nextSibling)
    this.signatureXml = signatureDoc.toString()
    this.signedXml = doc.toString()
  } else {
    var self = this
    //Asynchronous flow
    this.calculateSignatureValue(doc, function(err, signature) {
      if (err) {
        callback(err)
      } else {
        self.signatureValue = signature
        signatureDoc.insertBefore(self.createSignature(prefix), signedInfoNode.nextSibling)
        self.signatureXml = signatureDoc.toString()
        self.signedXml = doc.toString()
        callback(null, self)
      }
    })
  }
}

SignedXml.prototype.getKeyInfo = function(prefix) {
  var res = ""
  var currentPrefix

  currentPrefix = prefix || ''
  currentPrefix = currentPrefix ? currentPrefix + ':' : currentPrefix

  if (this.keyInfoProvider) {
    res += "<" + currentPrefix + "KeyInfo>"
    res += this.keyInfoProvider.getKeyInfo(this.signingKey, prefix)
    res += "</" + currentPrefix + "KeyInfo>"
  }
  return res
}

/**
 * Generate the Reference nodes (as part of the signature process)
 *
 */
SignedXml.prototype.createReferences = function(doc, prefix) {

  var res = ""

  prefix = prefix || ''
  prefix = prefix ? prefix + ':' : prefix

  for (var n in this.references) {
    if (!this.references.hasOwnProperty(n)) continue;

    var ref = this.references[n]
      , nodes = xpath.selectWithResolver(ref.xpath, doc, this.namespaceResolver)

    if (nodes.length==0) {
      throw new Error('the following xpath cannot be signed because it was not found: ' + ref.xpath)
    }

    for (var h in nodes) {
      if (!nodes.hasOwnProperty(h)) continue;

      var node = nodes[h]
      if (ref.isEmptyUri) {
        res += "<" + prefix + "Reference URI=\"\">"
      }
      else {
        var id = this.ensureHasId(node);
        ref.uri = id
        res += "<" + prefix + "Reference URI=\"#" + id + "\">"
      }
      res += "<" + prefix + "Transforms>"
      for (var t in ref.transforms) {
        if (!ref.transforms.hasOwnProperty(t)) continue;

        var trans = ref.transforms[t]
        var transform = this.findCanonicalizationAlgorithm(trans)
        res += "<" + prefix + "Transform Algorithm=\"" + transform.getAlgorithmName() + "\" />"
      }

      var canonXml = this.getCanonReferenceXml(doc, ref, node)

      var digestAlgorithm = this.findHashAlgorithm(ref.digestAlgorithm)
      res += "</" + prefix + "Transforms>"+
             "<" + prefix + "DigestMethod Algorithm=\"" + digestAlgorithm.getAlgorithmName() + "\" />"+
              "<" + prefix + "DigestValue>" + digestAlgorithm.getHash(canonXml) + "</" + prefix + "DigestValue>"+
              "</" + prefix + "Reference>"
    }
  }

  return res
}

SignedXml.prototype.getCanonXml = function(transforms, node, options) {
  options = options || {};
  options.defaultNsForPrefix = options.defaultNsForPrefix || SignedXml.defaultNsForPrefix;
  options.signatureNode = this.signatureNode;

  var canonXml = node.cloneNode(true) // Deep clone

  for (var t in transforms) {
    if (!transforms.hasOwnProperty(t)) continue;

    var transform = this.findCanonicalizationAlgorithm(transforms[t])
    canonXml = transform.process(canonXml, options);
    //TODO: currently transform.process may return either Node or String value (enveloped transformation returns Node, exclusive-canonicalization returns String).
    //This eitehr needs to be more explicit in the API, or all should return the same.
    //exclusive-canonicalization returns String since it builds the Xml by hand. If it had used xmldom it would inccorectly minimize empty tags
    //to <x/> instead of <x></x> and also incorrectly handle some delicate line break issues.
    //enveloped transformation returns Node since if it would return String consider this case:
    //<x xmlns:p='ns'><p:y/></x>
    //if only y is the node to sign then a string would be <p:y/> without the definition of the p namespace. probably xmldom toString() should have added it.
  }
  return canonXml.toString()
}

/**
 * Ensure an element has Id attribute. If not create it with unique value.
 * Work with both normal and wssecurity Id flavour
 */
SignedXml.prototype.ensureHasId = function(node) {
  var attr

  if (this.idMode=="wssecurity") {
    attr = utils.findAttr(node,
      "Id",
      "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
  }
  else {
    for (var index in this.idAttributes) {
      if (!this.idAttributes.hasOwnProperty(index)) continue;

      attr = utils.findAttr(node, this.idAttributes[index], null);
      if (attr) break;
    }
  }

  if (attr) return attr.value

  //add the attribute
  var id = "_" + this.id++

  if (this.idMode=="wssecurity") {
    node.setAttributeNS("http://www.w3.org/2000/xmlns/",
      "xmlns:wsu",
      "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")
    node.setAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
      "wsu:Id",
      id)
  }
  else {
   node.setAttribute("Id", id)
  }

  return id
}

/**
 * Create the SignedInfo element
 *
 */
SignedXml.prototype.createSignedInfo = function(doc, prefix) {
  var transform = this.findCanonicalizationAlgorithm(this.canonicalizationAlgorithm)
  var algo = this.findSignatureAlgorithm(this.signatureAlgorithm)
  var currentPrefix

  currentPrefix = prefix || ''
  currentPrefix = currentPrefix ? currentPrefix + ':' : currentPrefix

  var res = "<" + currentPrefix + "SignedInfo>"
  res += "<" + currentPrefix + "CanonicalizationMethod Algorithm=\"" + transform.getAlgorithmName() + "\" />" +
          "<" + currentPrefix + "SignatureMethod Algorithm=\"" + algo.getAlgorithmName() + "\" />"

  res += this.createReferences(doc, prefix)
  res += "</" + currentPrefix + "SignedInfo>"
  return res
}

/**
 * Create the Signature element
 *
 */
SignedXml.prototype.createSignature = function(prefix) {
  var xmlNsAttr = 'xmlns'

  if (prefix) {
    xmlNsAttr += ':' + prefix;
    prefix += ':';
  } else {
    prefix = '';
  }

  var signatureValueXml = "<" + prefix + "SignatureValue>" + this.signatureValue + "</" + prefix + "SignatureValue>"
  //the canonicalization requires to get a valid xml node.
  //we need to wrap the info in a dummy signature since it contains the default namespace.
  var dummySignatureWrapper = "<" + prefix + "Signature " + xmlNsAttr + "=\"http://www.w3.org/2000/09/xmldsig#\">" +
                              signatureValueXml +
                              "</" + prefix + "Signature>"

  var doc = new Dom().parseFromString(dummySignatureWrapper)
  return doc.documentElement.firstChild;
}

SignedXml.prototype.getSignatureXml = function() {
  return this.signatureXml
}

SignedXml.prototype.getOriginalXmlWithIds = function() {
  return this.originalXmlWithIds
}

SignedXml.prototype.getSignedXml = function() {
  return this.signedXml
}

redpajama_set_name: RedPajamaGithub


She's been a part of an endless amount of fan-favorite projects, and she's played roles in some of the most magnificent shows ever, she is the one and only, terrific Kara Royster! The lovely Kara Royster has exhibited her talent in so many shows that we all are guilty of binge-watching and movies that we can watch over and over again. This marvelous actress has gotten close to A in the highly-acclaimed, award-winning show, Pretty Little Liars, she's showed off her epic stunts and had a blast being a part of some action-packed episodes of Disney Channel's K.C. Undercover, and she's also done a sensational job in MTV's Faking It, amongst many other extraordinary projects. One thing is for sure, Kara Royster is truly such a gifted actress who does a remarkable job in each and every one of the roles she takes on!
I, Alexisjoyvipaccess had a great time covering the "Little Miss Perfect" premiere and had a fantastic time interviewing the wonderful Kara Royster at the event. Kara Royster dished exclusively to Alexisjoyvipaccess all about what the atmosphere was like working on set of Pretty Little Liars, what it is like for her doing her own stunts on K.C. Undercover, and so much more only in our VIPAccessEXCLUSIVE interview. Kara Royster even spills on the one character from Pretty Little Liars that she'd like to swap lives with for a day – hear what she had to say in our VIPAccessEXCLUSIVE interview below. Thanks for the fun interview, Kara!
Check out my VIPAccessEXCLUSIVE interview with the spectacular Kara Royster at the "Little Miss Perfect" premiere below!
Previous Article: Catch Larsen Thompson And Taylor Hatala In The Inspiring #WhatIReallyReallyWant Video!
Next Article: Lilimar's All New Project Mermaids Photo-shoot Gives Us The Greatest 50's Vibes! See Pics Here!


Greer Dworman's essay is in their own words "not a response on work. It is a reflective writing on practice. It is in itself a result of a practice." This is not a manual, the list offers no clear routes. Perhaps a performance practice will look more like a crumbled set of intentions. An action plan on how to welcome our daily stumblings, big and small. Like when we don't let the tea brew for enough minutes in the morning and still we drink it and still it wakes us up.
-You're blonde now. Doesn't that mean anything to you?!
-Life is suffering and you can always be more specific and charming about it.
-Maybe don't worry so much about what a writing practice is "supposed" to be.
-Where has the air quote hand gesture gone to?
-Sometimes growing means feeling stupid.
-Don't just put the dried-out pens back in the cup. Throw them away because of the metaphor in that.
-Genuinely care more about the internet content your dad shares with you. He cares about your interests more than anyone. Maybe even more than you.
-Track shorts were never a part of the plan.
-The Gym was never a part of the plan.
-Watch that monk Chef's Table episode again.
-I was surprised by Anthony Bourdain's gun politics. Or was I?
-Yoga was never a part of the plan.
-Savor the satisfaction of people thinking you look like Aaron Carter without you having to tell them to think that.
-You don't have to explain to anyone why you keep taking Instagram off your phone.
-Find out if dish soap is flammable.
-Technically every day is a new day to restart the "New year, new You" mantra.
I recognize that I stay in things despite deeper feelings of discord about them. All to avoid (prolong) the falling off the cliff while white-knuckling the edge of it.
Why do I stay with things like this?
There's something about stability and instability as co-managers. Refuge in the known even though it's sucking (vacuuming) your essential life energies.
What is supporting me? Am I supporting myself? Give yourself some relief from your own desperation/deprivation. Do the work to make it easier. That work is not easy.
There's an attachment thing happening. Attachment whether it's hurting, helping or both. What's with the both? What is serving you in the disservice?
Cliché and simple: the relationship you need right now is with your practice. A reevaluation of what your practice is and what it means in your life.
When you moved to NY it was just about practical survival; house, job, companionship. These things are not in danger anymore but you maybe never redirected your energy to balance with passion, desire, fulfillment. Suddenly, ironically, these three things are now the things that are about your practical survival. It feels more simple for you to do your taxes than it does to go to the doctor.
Unlike the first time you found yourself alone with yourself like this, the current urgency (currgency?) isn't cultured in you uncovering new spaces of your identity; sudden urgency (surgency?), a haircut, body dysphoria. Those were hot and loud.
The room where your present things dwell is darker, quieter, harder to get to. And you don't know everything about its lay out. But you are, in a sense, responsible for where things have landed. And you're shushing yourself so that you may see better.


Guernsey is an independent Channel Island renowned as a highly regulated International Finance Centre. Protected by the British Government as a Crown Dependency, Guernsey has flourished through an influx of High Net Worth Individuals and large corporate businesses eager to take advantage of the island's desire to be open for business. The island has its own Stock Exchange, a well-developed, reliable and modern legal system and a reputation for the very highest standards in corporate governance.
NWH Global's office, in the heart of St Peter Port, holds a full fiduciary licence and specialises in providing Fiduciary and Corporate Services, assisting HNWIs, family offices and corporate clients.
All contact forms submitted through this website are processed through NWH's Guernsey office (regardless of which jurisdiction the enquiry relates to), and any personal data included in such forms will be processed in accordance with the Data Protection (Bailiwick of Guernsey) Law, 2017, which has been recognised by the European Commission as equivalent to the European Union's General Data Protection Regulation (GDPR). The Guernsey office's privacy notice is available here.


text:
26 Sep OINP- Ontario Immigrant Nominee Program, invited candidates under the French-Speaking Skilled Worker Stream
OINP- Ontario Immigrant Nominee Program, invited candidates under the French-Speaking Skilled Worker StreamOn September 23, 2022, the Ontario Immigrant Nominee Program (OINP) held the 5th round of invitations in Ontario's Express Entry French-Speaking Skilled Worker stream. In this round, OINP issued 363 Invitations to Apply...
23 Sep Canada's immigration rate is skyrocketing, with around 275,000 new permanent residents this year.
Canada's immigration rate is skyrocketing, with around 275,000 new permanent residentsThis year, Canada's rate of immigration is growing at an unprecedented rate, far exceeding expectations. The data from Immigration, Refugees and Citizenship Canada (IRCC) shows that the country has welcomed 274,980 new permanent residents in...
21 Sep Quebec held the largest Arrima draw of 2022
Quebec held the largest Arrima draw of 2022On September 20, 2022, the Quebec Ministry of Immigration (MIFI) published the results of the 36th invitation round in Quebec's online system Arrima. On September 8, 2022, MIFI invited 1,202 candidates to apply for a Quebec Selection Certificate...
20 Sep Activists are urging Trudeau to expand his plan for undocumented migrants
Activists are urging Trudeau to expand his plan for undocumented migrantsAs the House of Commons resumes operations after the summer break, immigration advocates are pushing for Prime Minister Justin Trudeau to establish a path to permanent residency for as many as 500,000 undocumented immigrants in...
19 Sep Manitoba issued invitations to 436 candidates in draw #156
Manitoba issued invitations to 436 candidates in draw #156On September 15, 2022, Manitoba held a new invitation round in the Manitoba Provincial Nominee Program (MPNP). In round #156, MPNP issued 388 Letters of Advice to Apply (LAA) in the Skilled Workers in Manitoba stream. The...
16 Sep Saskatchewan invited 326 skilled candidates under the SINP
Saskatchewan invited 326 skilled candidates under the SINPOn September 15, 2022, Saskatchewan conducted new rounds of invitations in the Saskatchewan Immigrant Nominee Program (SINP). In the Express Entry category, Saskatchewan issued 53 ITAs. Another 273 invitations were issued to the Occupations In-Demand category candidates. The...
14 Sep Ottawa introduced a new refugee claim portal
Ottawa introduced a new refugee claim portalOn September 13, 2022, the Government of Canada introduced a new online asylum application portal. The new portal will replace the Canadian Refugee Protection Portal and become the main way for asylum seekers to make a refugee claim in...
08 Sep Ontario invited more than 1,500 skilled trades candidates
Ontario invited more than 1,500 skilled trades candidatesOn September 7, 2022, Ontario invited 1,521 candidates under the Skilled Trades Stream of the Ontario Immigration Nominee Program (OINP). The minimum CRS score of the invited candidates was 320. All invitees have their profiles created in the...
07 Sep Ontario proposed regulatory amendments for the OINP
Ontario proposed regulatory amendments for the OINPOn September 6, 2022, the Ministry of Labour, Immigration, Training and Skills Development of Ontario proposed amendments to Ontario Regulation 422/17 (General) that impacted the Ontario Immigrant Nominee Program (OINP), bringing it in line with the new National Occupational...
02 Sep Canada will switch to 100% online applications for permanent residence
Canada will switch to 100% online applications for permanent residenceOn September 1, 2022, the Government of Canada announced that starting on September 23, 2022, Immigration, Refugees and Citizenship Canada (IRCC) will start transitioning to 100% digital applications for most permanent residence programs. The Permanent Residence...

redpajama_set_name: RedPajamaCommonCrawl


text:
Will Ferrell returns to dangerous—and R-rated—waters in a comedy about family that's hardly a family comedy.
Josh Hurst July 25, 2008
(not rated yet)ADD YOURS
R (for crude and sexual content, and pervasive language)
Will Ferrell, John C. Reilly, Mary Steenburgen, Richard Jenkins
Theatre Release
July 25, 2008 by Apatow Productions
Is Step Brothers critic-proof? Just about. While it's fairly unlikely that it will enjoy the same kind of record-shattering, blockbusting success Step Brothers is enjoying, it's fair to say that a significant section of the population is likely to escape the heat with this big, dumb, outlandish summer comedy, largely because of the movie's biggest star: Will Ferrell, arguably the reigning king of big, dumb, outlandish summer comedies. And, of course, there will also be a good chunk of people who avoid it at all costs, choosing instead to enjoy a second or third screening of WALL•E or the Batman movie, and for largely the same reason: Will Ferrell.
In other words, it's more or less what you'd expect, and, if you've seen the teaser trailers or the goofy movie posters, you know what all the critical pieces are already: Ferrell. His TalledegaNights co-star John C. Reilly. Producer Judd Apatow (Knocked Up, Superbad). Director Adam McKay (Anchorman). And the plot: two middle-aged men—still living at home—who are forced to live together when their single parents get married to one another. That's pretty much all you need to know to figure out which of the two camps you fall into. And one more: it's rated R.
If you like Apatow's brand of bawdy comedies, Ferrell's inspired silliness (particularly when paired with his perfect on-screen foil, Reilly), and humor that's raw and R-rated, then Step Brothers might be the most riotously funny flick this side of Knocked Up or Wedding Crashers. It's an edgy and unhinged piece of big-screen absurdity that's shocking and surprising, filled with all the Apatow and/or Ferrell hallmarks—stoner humor, ridiculous antics, non-stop vulgarity, and, of course, a bit of male nudity. ...
Browse All Movie Reviews By:
Movie TitleABCDEFGHIJKLMNOPQRSTUVWXYZ Star Rating4 stars3 1/2 stars3 stars2 1/2 stars2 stars1 1/2 stars1 star1/2 starzero stars Movie Release Year20192018201720162015201420132012201120102009200820072006200520042003200220012000
Josh Hurst
This slideshow is only available for subscribers.
Please log in or subscribe to view the slideshow.
Subscribe to Christianity Today to continue reading this article from CT's digital archives.


The Heather's Ride Planning Committee is so excited to announce some big changes with Heather's Ride for 2015. Weve updated our logo and added this website (yay!) that includes online registration and payment. The registration fee for 2015 is $35 if paid online through 7/31. Any registrations after 7/31 will be accepted the day of the ride, August 16, 2015. Our awesome t-shirts can be purchased for $10.


Almost twenty years after forbidding him to contact her, Vita receives a letter from a man who has long stalked her from a distance. Once, Royce was her benefactor and she was one of his brightest protegees. Now Royce is ailing and Vita's career as a filmmaker has stalled, and both have reasons for wanting to settle accounts. They enter into an intimate game of words, played according to shifting rules of engagement.Beyond their murky shared history, they are both aware they can use each other to free themselves from deeper pasts. Vita is processing the shameful inheritance of her birthplace, and making sense of the disappearance of her beloved. Royce is haunted by memories of the untimely death of his first love, an archaeologist who worked in the Garden of the Fugitives in Pompeii. Between what's been repressed and what has been disguised are disturbances that reach back through decades, even centuries. But not everything from the past is precious: each gorgeous age is built around a core of rottenness.Profoundly addictive and unsettling, In the Garden of the Fugitives is a masterful novel of duplicity and counterplay, as brilliantly illuminating as it is surprising - about the obscure workings of guilt in the human psyche, the compulsion to create and control, and the dangerous morphing of desire into obsession.
Ceridwen Dovey was born in South Africa and raised between South Africa and Australia. She studied social anthropology at Harvard as an undergraduate and received her Masters in social anthropology from New York University. Her debut novel, Blood Kin, was published in fifteen countries, shortlisted for the Dylan Thomas Prize, and selected for the US National Book Foundation's prestigious '5 Under 35' honours list. The Wall Street Journal has named her as one of their 'artists to watch.' Her second book of fiction, Only the Animals, was described by The Guardian as a 'dazzling, imagined history of humans' relationship with animals.' Ceridwen lives in Sydney.


If you have previously completed an application with the Duplin County School System and are still interested in employment opportunities, you will need to complete an application in PeopleAdmin to be considered for employment. Applications completed in the old application system will not be migrated over and cannot be used for employment.
Please click on the Licensed or Non-Licensed link below for additional instructions.
If you do not see a posting for the job(s) you are interested in, please consider applying to the Generic Posting in the category for which you are interested (Generic – Licensed, Classified, Substitute, and, Bus Driver). By doing this, you make your application visible to our district. Please continue to check the Duplin County Schools Job Board for future employment opportunities.
The links below provide additional help.
Please continue to check the Duplin County School System vacancy list as it is updated daily. If you have questions regarding vacancies, the application process, and/or licensure, please feel free to contact the Human Resources Department at 910-296-6626.
Thank you for your interest in our district, and we wish you all the luck in your job search.
Descriptions are available for some licensed and non-licensed positions in the link above. However, please note that not all employment opportunities are listed under Vacancy Descriptions.


Beautifully blended peppers, onions and tomatoes make this authentic curry a hit for all the family. A truly tasty experience whenever you use this mouth watering recipe.
onions, tomatoes, water, rapeseed oil, ginger, garlic, spices (coriander, chilli red, cumin, turmeric, salt, musk melon, mustard, fenugreek leaves, dried ginger, black pepper, dried onion, cardamom, cinnamon, fennel, cloves, nutmeg, mace, cardamom green, asafoetida), water, starch, salt, fresh green chilli, peppers, citric acid, cumin seeds.